Vai al contenuto
Vai all indice del manuale di programmazione
Tipo: Blocco Funzione
Libreria LogicLab: eLLabUtyLib
Libreria Codesys: Non disponibile

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.

Immagine FB Average

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.

Screenshot ST_Average
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]
Was this article helpful?