F353_FSORT

Sortieren von Werten einer Fließkomma-Datentabelle

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

Parameter

Eingang

s1_Start (REAL)

Anfang der zu sotierrenden Datentabelle

s2_End (REAL)

Ende der zu sotierenden 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

  • Der Anfang der Datentabelle wird dem Eingang s1_Start und das Ende dem Eingang s2_End übergeben. Die Sortierreihenfolge legen Sie mit dem Wert am Eingang s3_Descending fest.

  • Am Eingang s3_Descending können Sie folgende Werte eingeben:

    0

    aufsteigende Sortierreihenfolge, d.h. mit dem kleinsten Wert beginnend

    1

    absteigende Sortierreihenfolge, d.h. mit dem größten Wert beginnend

  • Die Daten werden mit dem am Eingang s1 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.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn die Adresse der Variable an dem Eingang von s1_Start > s2_End ist.

  • wenn die Adressbereiche der Werte an den Eingängen s1_Start und s2_End verschieden sind.

  • wenn die Fließkommawerte ihren möglichen Bereich überschreiten.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn die Adresse der Variable an dem Eingang von s1_Start > s2_End ist.

  • wenn die Adressbereiche der Werte an den Eingängen s1_Start und s2_End verschieden sind.

  • wenn die Fließkommawerte ihren möglichen Bereich überschreiten.

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
		CalculateY: BOOL:=FALSE;
		xValue: REAL:=4.0;
		yValue: REAL:=0.0;
		xyValues: XY_DUT;
	END_VAR
	VAR
		CalculateY: BOOL:=FALSE;
		xValue: REAL:=4.0;
		yValue: REAL:=0.0;
		xyValues: XY_DUT;
	END_VAR

In diesem Beispiel wird die Eingangsvariable sort_order deklariert. Statt dessen können Sie im Rumpf auch eine Konstante (z.B.1 für absteigende Sortierreihenfolge) direkt an den Eingang der Funktion schreiben.

POE-Rumpf

Der Wert 1 wird der Variablen sort_order zugeordnet.

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

Sie sortiert die Elemente von dem ARRAY data_field in absteigender Reihenfolge.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_VAROUT,,sort_order,9,0,11,2,);
B(B_VARIN,,1,7,0,9,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_VARIN,,output,8,1,10,3,);
B(B_F,F353_FSORT,,10,0,19,6,,?DEN?D@'s1'?Ds2?Ds3?AENO);
B(B_VARIN,,sort_order,8,4,10,6,);
B(B_VARIN,,data field[0],8,2,10,4,);
B(B_VARIN,,data field[4],8,3,10,5,);
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

ST-Rumpf

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

AWL-Rumpf

Letzte Änderung am: 2021-07-28Feedback zu dieser SeitePanasonic Hotline