Calcolo di somma e media nella tabella dati a virgola mobile
Questa funzione calcola la somma e la media aritmetica (con segno +/-) dei valori a virgola mobile nella tabella dati a 32 bit specificata.
Ingresso
area iniziale della tabella dati
area finale della tabella dati
Uscita
somma di tutti gli elementi nell'area della tabella dati specificata
media di tutti gli elementi nell'area della tabella dati specificata
L'ingresso s1_Start specifica l'area iniziale della tabella dati, mentre s2_End specifica la fine. La somma di tutti gli elementi nella tabella dati viene restituita all'uscita Sum, mentre la media aritmetica di tutti gli elementi nella tabella dati viene restituita all'uscita Mean.
Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente:
FP_DATA_MEAN_SUM_UINT Calcola la somma e la media dei numeri nella tabella dati di numeri UINT
FP_DATA_MEAN_SUM_UDINT0 Calcola la somma e la media dei numeri nella tabella dati di numeri UDINT
FP_DATA_MEAN_SUM_REAL Calcola la somma e la media dei numeri nella tabella dati dei numeri REALI
FP_DATA_MEAN_SUM_INT Calcola la somma e la media dei numeri nella tabella dati dei numeri INT
FP_DATA_MEAN_SUM_DINT0 Calcola la somma e la media dei numeri nella tabella dati dei numeri DINT
se l'indirizzo della variabile all'ingresso s1_Start > s2_End.
se le aree indirizzi sono diverse.
se i valori a virgola mobile eccedono l'intervallo di elaborazione di programma.
se l'indirizzo della variabile all'ingresso s1_Start > s2_End.
se le aree indirizzi sono diverse.
se i valori a virgola mobile eccedono l'intervallo di elaborazione di programma.
se l'intervallo del valore totale eccede l'intervallo (overflow o underflow).
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 REAL:=[4.0,7.0,-32.0,13.0,5.0];
(*result after a 0->1 leading
edge from start:
[-32.0,4.0,5.0,7.0,13.0]*)
asc_order: INT:=0;
(*which way to sort:
0 means ascending order
1 means descending order*)
END_VAR
Quando la variabile start è impostata su TRUE, la funzione viene eseguita.
Calcola il valore sum = 2.0 + 3.45 + (-6.91) + 5.44 + 1.3 = 5.28
e il valore mean = somma/5 = 5.28/5 = 1.056
degli elementi di data_field.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
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_VAROUT,,sum,19,2,21,4,);
B(B_F,F352_FMEAN,,10,0,19,5,,?DEN?D@'s1'?Ds2?AENO?Csum?Cmean);
B(B_VAROUT,,mean,19,3,21,5,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F352_FMEAN( s1_Start:= data_field[0] ,
s2_End:= data_field[4] ,
Sum=> sum ,
Mean=> mean );
END_IF;