Sortieren von Werten einer 32-Bit-Datentabelle
Eingang
Anfang der zu sortierenden Datentabelle
Ende der zu sortierenden Datentabelle
Spezifiziert Sortierreihenfolge:
0 = aufsteigend
1 = absteigend
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_DATA_SORT
Die Daten werden mit dem am Eingang s3_Descending liegenden Wert beginnend in der festgelegten Reihenfolge durch Vertauschen (bubble sort) sortiert. Da die Anzahl der erforderlichen Wortvergleiche der quadratischen Wortanzahl entspricht, kann das Sortieren bei vielen Wörtern einige Zeit dauern. Wenn der Wert an den Eingängen von s1_Start=s2_End ist, wird nicht sortiert.
Die Schrittanzahl dieses 32-Bit-Befehls entspricht der des 16-Bit-Befehls.
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die Adresse der Variablen an den Eingängen von s1_Start > s2_End ist.
wenn s1_Start und s2_End zu verschiedenen Datenbereichen gehören
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die Adresse der Variablen an den Eingängen von s1_Start > s2_End ist.
wenn s1_Start und s2_End zu verschiedenen Datenbereichen gehören
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;
(*activates the function*)
data_array: ARRAY [0..4] OF DINT:=[4,7,-32,13,5];
(*result after a 0->1 leading
edge from start: [-32,4,5,7,13]*)
asc_order: INT:=0;
(*which way to sort:
0 means ascending order
1 means descending order*)
END_VAR
In diesem Beispiel wird die Eingangsvariable sort_order deklariert. Stattdessen können Sie im Rumpf eine Konstante auch direkt an den Eingang der Funktion schreiben.
Wenn die Variable start auf TRUE gesetzt wird, wird die Funktion ausgeführt.
Da die Variable sort_order auf den Wert 1 gesetzt ist, wird das anliegende Datenfeld absteigend sortiert.BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,output,7,1,9,3,);
B(B_VARIN,,data field[0],7,2,9,4,);
B(B_VARIN,,data field[4],7,3,9,5,);
B(B_F,F278_DSORT,,9,0,18,6,,?DEN?D@'s1'?Ds2?Ds3?AENO);
B(B_VARIN,,sort_order,7,4,9,6,);
B(B_COMMENT,,sorting order:ø^s3 = 0:ascending~ 1:descending,10,6,25,8,);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F278_DSORT( s1_Start:= data_field[0],
s2_End:= data_field[4],
s3_Descending:= sort_order);
END_IF;