FP_DATA_SORT

Daten in Datentabelle sortieren

Der FP-Befehl sortiert Werte (mit Vorzeichen) einer Datentabelle in auf- oder absteigender Reihenfolge.

Anmerkung

Der Befehl sortiert nur eindimensionale Arrays. Er funktioniert nicht bei zweidimensionalen oder dreidimensionalen Arrays.

Parameter

Eingang

s1_Start (INT, DINT, UINT, UDINT, REAL, LREAL)

Anfang der zu sortierenden Datentabelle

s2_End (INT, DINT, UINT, UDINT, REAL, LREAL)

Ende der zu sortierenden Datentabelle

s3_Control (INT, DINT, UINT, UDINT, REAL, LREAL)

Spezifiziert Sortierreihenfolge:

  • 0 = aufsteigend

  • 1 = absteigend

Anmerkungen

  • Die Daten werden mit dem am Eingang s3_Control liegenden Wert beginnend in der festgelegten Reihenfolge durch Vertauschen (bubble sort) sortiert. Da die Zahl der erforderlichen Wortvergleiche der quadratischen Wortanzahl entspricht, kann das Sortieren bei vielen Wörtern einige Zeit dauern. Wenn die Adresse der Variablen an den Eingängen von s1_Start = s2_End ist, wird nicht sortiert.

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
		bStart: BOOL:=FALSE;
			(*activates the function*)
		adiDataField: ARRAY [0..4] OF DINT:=[4,7,-32,13,5];
			(*result after a 0->1 leading
edge from start: [-32,4,5,7,13]*)
		iOrder: INT:=0;
			(*which way to sort:
0 means ascending order
1 means descending order*)
	END_VAR

POE-Rumpf

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

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_F,FP_DATA_SORT!,,11,1,20,7,,?DEN?Ds1_Start?Ds2_End?Ds3_Control?AENO);
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,adiDataField[0],9,3,11,5,);
B(B_VARIN,,adiDataField[4],9,4,11,6,);
B(B_VARIN,,iOrder,9,5,11,7,);
L(1,3,5,3);
L(7,3,11,3);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

If (bStart) then
    FP_DATA_SORT(s1_Start := adiDataField[0], 
                 s2_End := adiDataField[4], 
                 s3_Control := iOrder);
End_if;

Letzte Änderung: 2024-04-02Feedback zu dieser SeitePanasonic Hotline