Seleziona dati nella tabella dati
Questa istruzione FP ordina i valori (con il segno +/-) di una tabella dati in ordine crescente o decrescente.
Questa istruzione seleziona solo gli array di dati a 1 dimensione. Non funziona con gli array di dati a 2 o 3 dimensioni.
Ingresso
Area iniziale della tabella dati da ordinare
Area finale della tabella dati da ordinare
Specifica l'ordinamento:
0 = crescente
1 = decrescente
I dati vengono ordinati tramite ordinamento a bolle nell'ordine specificato sulla base del valore inserito all'ingresso s3_Control. Poiché il numero di confronti di word aumenta in proporzione al quadrato del numero di word, il processo di ordinamento può richiedere del tempo in presenza di un numero di word elevato. Quando l'indirizzo della variabile all'ingresso s1_Start = s2_End, non avviene alcun ordinamento.
se l'area specificata utilizzando il registro indice eccede il limite.
se l'indirizzo della variabile all'ingresso s1_Start > s2_End.
se s1_Start e s2_End appartengono ad aree dati diverse
se l'area specificata utilizzando il registro indice eccede il limite.
se l'indirizzo della variabile all'ingresso s1_Start > s2_End.
se s1_Start e s2_End appartengono ad aree dati diverse
Istruzioni F corrispondenti: F277_SORT, F278_DSORT, F353_FSORT
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU.La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
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
Quando la variabile bStart è impostata su TRUE, la funzione viene eseguita.
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
If (bStart) then
FP_DATA_SORT(s1_Start := adiDataField[0],
s2_End := adiDataField[4],
s3_Control := iOrder);
End_if;