Questo blocco funzione esegue la media esponenziale (EMA) con coefficiente su un valore di ingresso. L’azione di media è regolata dal parametro Coefficient: maggiore è il suo valore, maggiore sarà l’effetto di filtraggio e quindi più lenta sarà la risposta dell’uscita Average alle variazioni del segnale Value. La logica di aggiornamento implementa un filtro a risposta esponenziale che attenua le variazioni improvvise del segnale, rendendo l’uscita più stabile e adatta ad applicazioni di controllo e monitoraggio in sistemi real-time.
Impostando il parametro Coefficient a valore 1 o inferiore, il filtro viene di fatto disattivato: il valore accumulato della media viene azzerato e l’uscita Average assume direttamente il valore di Value, senza alcun processo di filtraggio.
Inoltre, nel caso in cui Value assuma valori non validi, come NaN (Not a Number) o infinito, il blocco funzione esegue una procedura di protezione: il valore interno della media viene azzerato e l’uscita Average viene impostata direttamente al valore di ingresso. Questo comportamento garantisce la robustezza del filtro in presenza di condizioni numeriche anomale, evitando la propagazione di errori all’interno del sistema di controllo.
Approfondimenti
- In questo topic un esempio di utilizzo del FB.
- In questo articolo si è utilizzato il FB per il calcolo della media sui tempi nel calcolo dei benchmark.
Descrizione
Value (REAL) Valore su cui effettuare l’azione di media.
Coefficent (REAL) Valore del coefficiente di media.
Average (REAL) Valore mediato in uscita.

Esempi
Come utilizzare gli esempi.
Viene eseguita una acquisizione analogica da un ingresso di un modulo CPU con range da 0 a 10 volts. Il valore acquisito è appoggiato nella variabile IValue, il valore viene poi passato al FB VAverage che ne esegue la media con un coefficente di 50. Il valore in uscita dopo la media è appoggiato nella variabile RValue. Come si vede nella foto a lato i due valori sono stati trascinati nella finestra oscillosopio di LogicLab.
LogicLab (Ptp114)
PROGRAM ST_Average
VAR
AInp : SysGetAnInp; (* Analog input acquisition *)
VAverage : Average; (* Voltage average *)
IValue : REAL; (* Input value *)
RValue : REAL; (* Result value *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_Average"
// *****************************************************************************
// Acquires a voltage from A/D converter and average the acquired value.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Configure the analog input acquisition.
IF (SysFirstLoop) THEN
AInp.Address:=255; //Module address
AInp.Channel:=0; //Module channel
AInp.Mode:=AD_VOLT_0_10_COMMON; //Acquisition mode
VAverage.Coefficient:=50.0; //Average coefficent
END_IF;
// -------------------------------------------------------------------------
// VOLTAGE ACQUISITION
// -------------------------------------------------------------------------
// Acquires the voltage and calculates average on it.
AInp(); //Analog input acquisition
VAverage(Value:=AInp.Value); //Voltage average
IValue:=AInp.Value; //Input value
RValue:=VAverage.Average; //Result value
// [End of file]
