Vergleichen bis der Arzt kommt....

Vorweg, mir fehlt heute Abend der Hirnschmalz, um mir jetzt noch einen Code auszudenken, aber vielleicht hab ich grad ne Idee, wie man das einfacher machen könnte, quasi einen Denkanstoss... ;)

Wie wäre es, wenn du dir einen parametrierten FB schreibst, in dem du dir einen Pointer schreibst, welcher den DB durchläuft (Schleife bis DB Ende) und immer Strings mit dem eingescannten Code vergleichst. Eigentlich bräuchte dieser FB dann nur 3 Variablen. 1. eingescannte Variable, Länge des DBs (wenn alle gleich lang sind noch nichtmal das.) und Doppelt vorhanden.
Wenn du diesen FB geschrieben hast, schreibst du dir einen weiteren parametrierten FB, in dem du dann den 1. FB einmal aufrufst und mit Variablen fütterst. Z.B. 1. eingescannter Code, Doppelt vorhanden und (ganz wichtig) einer Variable die dir sagt, welcher DB als nächstes durchlaufen werden soll. Sprich, du setzt dir ne Variable am Anfang des Bausteins auf 1, danach wird der 1. parametrierte FB durchlaufen. Wenn die SPS den 1. FB durchlaufen hat, zählst du die Variable um 1 hoch und springst wieder zurück zu dem Aufruf des 1. FBs. Das machst du so oft, bis alle 30 Stellplätze abgearbeitet sind. Wenn irgendwann die Variable doppelt vorhanden kommt, kannste ja den Vergleich abbrechen, ganz wie du willst.

Eigentlich müsstest du dann nur 2 FBs machen... Haut nur wahrscheinlich ziemlich in die Zykluszeit rein, aber vielleicht ist das ja kein Problem? Oder wie, oder was, oder wo? Ich muss ins Bett... ;)

MfG
Borsti
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

@ug / volker
Ist richtig, dass der FC 10 String-Format benötigt. Lässt sich aber mit dem SFC 20 umgehen.

Code:
// Vergleichsstring 1 umladen
      CALL  SFC   20
       SRCBLK :=#quelle1    << Pointer (Temp)
       RET_VAL:=#sfcret
       DSTBLK :=#string1    << String (Temp)
 
 
// Vergleichsstring 2 umladen
      CALL  SFC   20
       SRCBLK :=#quelle2
       RET_VAL:=#sfcret
       DSTBLK :=#string2
 
 
// Strings vergleichen
      CALL  FC    10           << AUS IEC-Biblio "EQ_STRING"
       S1     :=#string1
       S2     :=#string2
       RET_VAL:=#gleich


Hab jetzt keine Ahnung ob die 30 Palettennummern jede mit jeder oder ob der neu eingelesene Barcode mit den 30 bereits bestehenden Nummern verglichen werden soll.

Bei der Variante die 30 Palettennummern untereinander zu vergleichen würde ich wie ug vorgehen und die ganzen Nummern irgendwo sortiert ablegen. Anschließend den String-Vergleich in einer Schleife ausführen. Zwei leere Palettenplätze ergeben beim String-Vergleich halt auch ein "GLEICH". Muss irgendwie noch abgefangen werden (evtl. Leerer Palettenplatz beinhaltet irgendein Sonderzeichen).
Es wurde von jemandem erwähnt, dass die SPS-Zykluszeit ziemlich in die Höhe geht. Stimmt! Kann man aber umgehen, wenn man nach ein paar String-Vergleichen (5 oder 10 oder keine Ahnung) den Baustein verlässt und beim nächsten Bausteinaufruf dort weitermacht wo man aufgehört hat. So ähnlich wird's vielleicht beim Sortieren auch sein.
Hat halt zur Folge, dass die ganze Sortiererei und Vergleicherei auf mehrere SPS-Zyklen aufgeteilt wird.

Wenn jetzt nur beim Barcodescannen verglichen werden soll ob die gescannte Palettennummer schon in einem DB vorhanden ist kann man sich das Sortieren schenken und einfach die gescannte Palettennummer mit den Palettennummern im DB vergleichen. (Wie schon in Beiträgen weiter oben erwähnt)


Gruß,

Harald
 
Es muss natürlich ;-) jeder Platz mit jeden verglichen werden da die Bediener die Daten auch händisch eingeben können

Mit ist da noch eine Idee gekommen. Der Barcode ( nur Zahlen ) wird in INT gewandet und in einem DB geschrieben . Anschliessend von Zottel seinem Bubblesortroutine sortiert. Jetzt stehen 2 gleiche Zahlen untereinander und der Vergleich fällt viel einfacher.
Hab ich da irgendetwas übersehen ?????
 
Scanner

haengen alle scanner an der sps oder gehen die auf pc's oder ???
kann das nicht einfacher mit nem pc ausgewertet werden um die steuerung zu entlasten? nicht das ich jetzt genau wuesste wie das geht...
nur so als nen anderen blickwinkel auf die sache... :???:
 
Zurück
Oben