Calcola la somma e la media dei numeri nella tabella dati dei numeri REALI
Questa istruzione FP calcola la somma e la media aritmetica dei numeri REAL positivi e negativi nella tabella dati specificata da s1_Start e s2_End. La somma di tutti gli elementi nella tabella dati viene restituita all'uscita d1_Sum, mentre la media aritmetica di tutti gli elementi nella tabella dati viene restituita all'uscita d2_Mean. Se non è un numero intero, la media aritmetica viene arrotondata.
Ingresso
Inizio della tabella dati
Fine 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
se l'area specificata utilizzando il registro indice eccede il limite.
se 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 s1_Start>s2_End
se s1_Start e s2_End appartengono ad aree dati diverse
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*)
arDataField: ARRAY [0..4] OF REAL:=[2.102,3.33,6.61,2.02,-4.14];
rSum: REAL:=0;
(*the sum of all elements of
data_array; here: 9,922*)
rMean: REAL:=0;
(*the arithmetic mean of all
elements of data_array;
here: 1,984*)
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 := 6 ;
NETWORK_BODY
B(B_CONTACT,,bStart,6,2,8,4,);
B(B_VARIN,,arDataField[0],9,3,11,5,);
B(B_VARIN,,arDataField[4],9,4,11,6,);
B(B_VAROUT,,rSum,25,3,27,5,);
B(B_VAROUT,,rMean,25,4,27,6,);
B(B_F,FP_DATA_MEAN_SUM_REAL!,,11,1,25,6,,?DEN?Ds1_Start?Ds2_End?AENO?Cd1_Sum?Cd2_Mean);
L(1,3,6,3);
L(8,3,11,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF bStart then
FP_DATA_MEAN_SUM_REAL(s1_Start := arDataField[0],
s2_End := arDataField[4],
d1_Sum => rSum,
d2_Mean => rMean);
END_IF;