Suchen
Dieser FP-Befehl sucht in einem Speicherbereich, dessen Anfang und Ende dem Eingang s2_Start und dem Eingang s3_End übergeben werden, nach einem Wert, der am Eingang s1 anliegt, wenn der Trigger EN auf TRUE gesetzt wird.
Eingang
Zu suchende Werte
Beginn des Suchbereichs
Ende des Suchbereichs
Ausgang
Anzahl Übereinstimmungen
Relativer Abstand bis zur ersten Übereinstimmung (erste Position ist 0)
Achten Sie darauf, dass s2_Start£s3_End
Die Variablen s1, s2_Start und s3_End müssen vom gleichen Datentyp sein.
Es können maximal 30000 Werte gesucht werden.
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn s2_Start>s3_End
wenn s2_Start und s3_End zu verschiedenen Datenbereichen gehören
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn s2_Start>s3_End
wenn s2_Start und s3_End zu verschiedenen Datenbereichen gehören
Verwandte F-Befehle: F96_SRC
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bStart: BOOL:=FALSE;
(*activates the fuction*)
diSearch_value: DINT:=16#20;
(*specifies the value to
search for*)
adiDataField: ARRAY [0..3] OF DINT:=[16#101,16#20,16#2A04,16#20];
(*2 matches for 16#20
data_array[2] = 1st match*)
diNumber_matches: DINT:=0;
diPosition1_match: DINT:=0;
END_VAR
Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,bStart,6,2,8,4,);
B(B_VARIN,,diSearch_value,11,3,13,5,);
B(B_VARIN,,adiDataField[0],11,4,13,6,);
B(B_VARIN,,adiDataField[3],11,5,13,7,);
B(B_F,FP_DATA_SEARCH!,,13,1,23,7,,?DEN?D@'s1'?Ds2_Start?Ds3_End?AENO?Cd1_Count?Cd2_Pos);
B(B_VAROUT,,diNumber_matches,23,3,25,5,);
B(B_VAROUT,,diPosition1_match,23,4,25,6,);
L(8,3,13,3);
L(1,3,6,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF bStart then
FP_DATA_SEARCH(s1 := diSearch_value,
s2_Start := adiDataField[0],
s3_End := adiDataField[3],
d1_Count => diNumber_matches,
d2_Pos => diPosition1_match);
END_IF;