FP_DATA_SEARCH

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.

Parameter

Eingang

s1 (INT, DINT, UINT, UDINT, REAL, LREAL)

Zu suchende Werte

s2_Start (INT, DINT, UINT, UDINT, REAL, LREAL)

Beginn des Suchbereichs

s3_End (INT, DINT, UINT, UDINT, REAL, LREAL)

Ende des Suchbereichs

Ausgang

d1_Count (DINT)

Anzahl Übereinstimmungen

d2_Pos (DINT)

Relativer Abstand bis zur ersten Übereinstimmung (erste Position ist 0)

Anmerkungen

  • 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.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • 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

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • 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 Themen

Beispiel:

POE-Kopf

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

POE-Rumpf

Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

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

ST-Rumpf

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;

Letzte Änderung am: 2022-11-11Feedback zu dieser SeitePanasonic Hotline