F97_DSRC

32-Bit-Suchen

Die Funktion 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

Parameter

Eingang

s1 (DWORD, DINT, UDINT, DATE, TOD, DT)

32-Bit-Register oder Konstante zum Speichern des gesuchten Wertes

s2_Start (DWORD, DINT, UDINT, DATE, TOD, DT)

Anfangsadresse

s3_End (DWORD, DINT, UDINT, DATE, TOD, DT)

Endadresse

Anmerkungen

  1.  (1) Gesuchter Wert
  2.  (2) 32-Bit-Tabellendaten
  • Die Anzahl der Datenelemente, die mit s1 übereinstimmen, wird in das Sonderdatenregister DT90037 (sys_iNumberOfFoundMatches) geschrieben.

  • Der relative Abstand vom Anfang des Suchbereichs am Eingang s2_Start bis zur ersten gefundenen Übereinstimmung mit dem gesuchten Wert wird in das Sonderdatenregister DT90038 (sys_iPositionOfFirstMatch) geschrieben.

  • Die Adressen der Variablen an den Eingängen s2_Start und s3_End müssen vom gleichen Adresstyp sein.

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

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

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
		start: BOOL:=FALSE;
		data_table: ARRAY [0..3] OF DINT:=[-44,222222,-44,12345];
		number_matches: INT:=0;
		position_1match: INT:=0;
	END_VAR

POE-Rumpf

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

Statt einer Eingangsvariablen wurde in diesem Beispiel eine Konstante (-44) an den Eingang s1 der Funktion geschrieben. Das Funktionsergebnis (result) wird in die Sonderdatenregister DT90037 und DT90038 geschrieben. Die beiden Funktionen E_MOVE kopieren das Ergebnis in zwei Variablen number_matches und position_1match.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F97_DSRC!,Instance,8,0,15,6,,?DEN?Ds1?Ds2_Start?Ds3_End?AENO);
B(B_VARIN,,start,6,1,8,3,);
B(B_VARIN,,-44,6,2,8,4,);
B(B_VARIN,,data_table[0],6,3,8,5,);
B(B_VARIN,,data_table[3],6,4,8,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,number_matches,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90037,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,8,1,14,5,,?DEN?D?AENO?C);
B(B_VAROUT,,position_1match,14,3,16,5,);
B(B_VARIN,,start,6,2,8,4,);
B(B_VARIN,,DT90038,6,3,8,5,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF start then
    F97_DSRC( s1:= -44 ,
         s2_Start:= data_table[0] ,
         s3_End:= data_table[3] );
    number_matches:=DT90037;
    position1_match:=DT90038;
END_IF;

AWL-Rumpf

Letzte Änderung: 2024-12-18Feedback zu dieser SeitePanasonic Hotline