F278_DSORT

Sortieren von Werten einer 32-Bit-Datentabelle

Die Funktion sortiert Werte (mit Vorzeichen) einer Datentabelle in auf- oder absteigender Reihenfolge.

Parameter

Eingang

s1_Start (DINT)

Anfang der zu sortierenden Datentabelle

s2_End (DINT)

Ende der zu sortierenden Datentabelle

s3_Descending (INT)

Spezifiziert Sortierreihenfolge:

  • 0 = aufsteigend

  • 1 = absteigend

Anmerkungen

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

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

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

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;
			(*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.

POE-Rumpf

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.

KOP-Rumpf

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

ST-Rumpf

IF start then
    F278_DSORT( s1_Start:= data_field[0],
         s2_End:= data_field[4],
         s3_Descending:= sort_order);
END_IF;

AWL-Rumpf

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