Beschreibung
Mit der Anweisung können Sie nach Mustern im Speicher suchen. Die Anweisung "TBL_FIND" führt einen Vergleich (Parameter CMD) zwischen dem Quellmuster (Parameter PATRN) und den Einträgen der Quelltabelle (Parameter SRC) aus. Gesucht wird der nächste Eintrag (ab dem Eintrag, der von dem Parameter INDX angegeben wird) in der Tabelle, der den Vergleichskriterien entspricht. Die Nummer des Eintrags wird im Parameter INDX abgelegt. Wird keine Entsprechung gefunden, dann zeigt der Parameter INDX über das Ende der Tabelle hinaus und der Ausgang von der Anweisung "TBL_FIND" wird ausgeschaltet.
-
Wenn CMD = 1 ist, dann sucht die Anweisung "TBL_FIND" nach dem ersten Wert, der dem Wert am Parameter PATRN entspricht.
-
Wenn CMD = 2 ist, dann sucht die Anweisung "TBL_FIND" nach dem ersten Wert, der dem Wert am Parameter PATRN nicht entspricht.
-
Der erste Eintrag in der Tabelle gibt die maximale Länge der Tabelle an.
-
Der zweite Eintrag der Tabelle enthält den ersten Wert in der Tabelle.
Hinweis
Sie müssen den ersten Eintrag (Tabellenlänge) in der Tabelle initialisieren.
Parameter
Die folgende Tabelle zeigt die Parameter der Anweisung "TBL_FIND":
|
Parameter |
Deklaration |
Datentyp |
Speicherbereich |
Beschreibung |
|---|---|---|---|---|
|
SRC |
Input |
*Pointer |
E, A, M, D |
Zeigt auf die Anfangsadresse der Tabelle. |
|
PATRN |
Input |
*Pointer |
E, A, M, D |
Zeigt auf das Muster, das gesucht werden soll. |
|
CMD |
Input |
BYTE |
E, A, M, D, L, P |
Gibt den Befehl an:
|
|
E_TYPE |
Input |
BYTE |
E, A, M, D, L, P |
Gibt den Datentyp der Tabelleneinträge an: B#16#02 = BYTE B#16#04= WORD B#16#05=INT B#16#06=DWORD B#16#07=DINT B#16#08=REAL |
|
RET_VAL |
Return |
WORD |
E, A, M, D, L, P |
Gibt den Wert W#16#0000 aus, wenn die Operation fehlerfrei ausgeführt wird. |
|
INDX |
InOut |
WORD |
E, A, M, D, L |
Index der Tabelle, der folgende Informationen angibt:
|
|
* Pointer im Doppelwortformat bei der bereichsübergreifenden, registerindirekten Adressierung |
||||
Weitere Informationen zu den gültigen Datentypen finden Sie unter "Übersicht über die gültigen Datentypen".
Parameter RET_VAL
Wenn eine der folgenden Bedingungen auftritt, dann werden die Tabellenwerte nicht verändert. Der Signalzustand von "BIE / ENO" wird auf "0" und der Rücksprungwert entsprechend gesetzt:
|
RET_VAL |
Erläuterung |
|---|---|
|
W#16#0007 |
Der Wert des Parameters INDX ist höher als der Wert für die Tabellenlänge. |
|
W#16#0008 |
Es wurde keine Entsprechung gefunden. |
|
W#16#0009 |
Der Parameter E_TYPE und/oder CMD ist/sind ungültig. |
Beispiel (KOP)
Wenn der Signalzustand am Eingang E 0.0 = 1 ist (aktiviert), dann wird die Anweisung "TBL_FIND" ausgeführt. In diesem Beispiel werden die Daten in der Tabelle in Wörtern gespeichert, die an der Adresse beginnen, auf die der Parameter SRC zeigt, weil der Parameter E_TYPE "4" ist. Diese Wörter werden mit dem Muster "5555" verglichen, das in der Adresse gespeichert wird, die von dem Parameter PATRN angegeben wird. Weil CMD = 1 ist, wird der erste Wert in dem Parameter SRC gesucht, der mit dem Muster übereinstimmt. Der Parameter INDX zeigt auf die Adresse, an der die Suche beginnen soll. Nach der Bearbeitung der Operation gibt der Parameter INDX die Nummer des Eintrags in der Tabelle an, in dem eine Entsprechung für das Muster gefunden wurde.
Wenn die Anweisung "TBL_FIND" fehlerfrei ausgeführt wird, dann werden die Signalzustände von ENO und A 0.0 auf "1" gesetzt, und RET_VAL wird auf den Wert W#16#0000 gesetzt.
Die Anweisung "MOVE" dient lediglich dazu, den Wert von "MW2" in jedem Zyklus zurückzusetzen.
Vor der Bearbeitung:
|
SRC (Tabellenlänge) |
DBW0 = W#16#0004 DBW2 = W#16#1111 DBW4 = W#16#3333 DBW6 = W#16#5555 DBW8 = W#16#7777 |
Der erste Tabelleneintrag gibt die Länge der Suchoperation an. Der Wert 0004 gibt an, dass die nächsten vier Einträge durchsucht werden. |
|
INDX |
MW2 = W#16#0000 |
INDX wird von DW0 (vor der Bearbeitung) nach DW6 (nach der Bearbeitung) übertragen, weil das Muster von DW6 gleich dem Muster von 5555 von PATRN ist. |
|
PATRN |
DBW10 = W#16#5555 |
Nach der Bearbeitung:
|
INDX |
MW2 = W#16#0003 |