Calcolo di somma e media nella tabella dati a 32 bit
Questa funzione calcola la somma e la media aritmetica dei numeri (con segno +/-) 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. Se non è un numero intero, la media aritmetica viene arrotondata.
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
se l'intervallo del valore totale eccede l'intervallo a 32 bit (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 DINT:=[4,7,-32,13,5];
sum: ARRAY [0..1] OF DINT:=[2(0)];
(*the sum of all elements of
data_array; here: -3
[16#FFFFFFFF,FFFFFFFD]*)
mean: DINT:=0;
(*the arithmetic mean of all
elements of data_array;
here: 0*)
END_VAR
Quando la variabile start è impostata su TRUE, la funzione viene eseguita.
La funzione calcola la somma di tutti gli elementi dell'ARRAY data_field (somma = 2 + 3 + 222222 + (-333333) + 1 = -111105) e trasferisce result nella variabile sum. Inoltre, la funzione calcola la media (media = somma/5 = -111105/5 = -22221) e trasferisce result nella variabile mean.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,6,1,8,3,);
B(B_VARIN,,data_field[0],6,2,8,4,);
B(B_VARIN,,data_field[4],6,3,8,5,);
B(B_F,F276_DMEAN,,8,0,17,5,,?DEN?D@'s1'?Ds2?AENO?Csum?Cmean);
B(B_VAROUT,,sum,17,2,19,4,);
B(B_VAROUT,,mean,17,3,19,5,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F276_DMEAN( s1_Start:= data_field[0],
s2_End:= data_field[4],
Sum=> sum,
Mean=> mean);
END_IF;