16-Bit-Datentabelle sortieren
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 am Eingang s1_Start=s2_End ist, wird nicht sortiert.
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 INT:=[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
Wenn die Variable start auf TRUE gesetzt wird, wird die Funktion ausgeführt.
Am Eingang s3 steht die Konstante 0, die die Sortierreihenfolge in aufsteigender Richtung festlegt. Statt dessen können Sie auch eine Variable im POE-Kopf deklarieren und im Rumpf an den Eingang s3 der Funktion schreiben.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,8,1,10,3,);
B(B_VARIN,,data field[0],8,2,10,4,);
B(B_VARIN,,data field[4],8,3,10,5,);
B(B_F,F277_SORT,,10,0,19,6,,?DEN?D@'s1'?Ds2?Ds3?AENO);
B(B_VARIN,,0,8,4,10,6,);
B(B_COMMENT,,sorting order:ø^s3 = 0:ascending~ 1:descending,11,6,26,8,);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F277_SORT( s1_Start:= data_field[0],
s2_End:= data_field[4],
s3_Descending:= 0);
END_IF;