F277_SORT

Seleziona dati nella tabella da 16 bit

La funzione ordina i valori (con il segno +/-) di una tabella dati in ordine crescente o decrescente.

Parametri

Ingresso

s1_Start (INT)

Area iniziale della tabella dati da ordinare

s2_End (INT)

Area finale della tabella dati da ordinare

s3_Descending (INT)

Specifica l'ordinamento:

  • 0 = crescente

  • 1 = decrescente

Note

  • Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente: FP_DATA_SORT

  • I dati vengono ordinati tramite ordinamento a bolle nell'ordine specificato sulla base del valore inserito all'ingresso s3_Descending. 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 il valore agli ingressi s1_Start=s2_End, non avviene alcun ordinamento.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • 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

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • 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

Esempio

Intestazione del POU

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

Corpo del POU

Quando la variabile start è impostata su TRUE, la funzione viene eseguita.

La costante 0 viene specificata all'ingresso s3, il che significa che l'ordinamento viene eseguito in ordine crescente. Potete tuttavia dichiarare una variabile nell'intestazione del POU e scriverla nella funzione nel corpo, all'ingresso s3.

Corpo LD

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

Corpo ST

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

Corpo IL

L'ultima revisione: 2022-11-14Feedback su questa paginaPanasonic hotline