From 2d565861b5ea6f9359ee9fb42a3c303591c96548 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Wed, 30 Sep 2020 17:08:11 +0200 Subject: [PATCH] Aggiunta classe gestione tempiciclo --- IOB-UT/IOB-UT.csproj | 1 + IOB-UT/TCMan.cs | 141 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 IOB-UT/TCMan.cs diff --git a/IOB-UT/IOB-UT.csproj b/IOB-UT/IOB-UT.csproj index d9666530..54c5d7aa 100644 --- a/IOB-UT/IOB-UT.csproj +++ b/IOB-UT/IOB-UT.csproj @@ -99,6 +99,7 @@ + Component diff --git a/IOB-UT/TCMan.cs b/IOB-UT/TCMan.cs new file mode 100644 index 00000000..3c570ebf --- /dev/null +++ b/IOB-UT/TCMan.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IOB_UT +{ + /// + /// TCiclo management class + /// + public class TCMan + { + #region private obj + + /// + /// Ultimo TCiclo osservato + /// + protected double _lastTC { get; set; } = 0; + + /// + /// Contapezzi CNC + /// + protected int _pzCountCNC { get; set; } = 0; + + /// + /// Contapezzi IOB + /// + protected int _pzCountIOB { get; set; } = 0; + + /// + /// Fattore lambda (innovazione) per calcolo EWMA valore TCiclo corrente + /// + protected double lambda { get; set; } = 0.4; + + /// + /// Fattore massimo ammesso di delay x il TCiclo + /// + protected double maxDelayFactor { get; set; } = 1.5; + + /// + /// Incremento amssimo pezzi per cui fare calcolo del tempociclo attuale + /// + protected double maxIncrPz { get; set; } = 2; + + #endregion private obj + + #region contapezzi e TCiclo + + /// + /// Classe gestione TCiclo + /// + /// Fattore lambda x EWMA smooth + /// Massimo fattore ritardo TC x errore + /// Massimo incremento numPz x considerare calcolo TCiclo + public TCMan(double lambdaWeight, double maxDelayTcFact, double maxIncrPzCount) + { + lambda = lambdaWeight; + maxDelayFactor = maxDelayTcFact; + maxIncrPz = maxIncrPzCount; + } + + /// + /// Indica se sia attivo allarme per TCiclo sopra soglia + /// + public bool alarmDelayTC + { + get + { + return lastTC >= limitTC; + } + } + + /// + /// Valore TCiclo medio attuale (EWMA) + /// + public double avgTC { get; set; } = 0; + + /// + /// Ultimo dato (incremento PzCount) registrato + /// + public DateTime lastObservedData { get; set; } = DateTime.Now.AddHours(-1); + + /// + /// Ultimo TCiclo osservato + /// + public double lastTC + { + get + { + return _lastTC; + } + } + + /// + /// Limite allarme per il TCiclo (come media TCiclo * maxDelayFactor) + /// + /// + public double limitTC + { + get + { + return avgTC * maxDelayFactor; + } + } + + /// + /// Contapezzi CNC + /// + public int pzCountCNC + { + get + { + return _pzCountCNC; + } + set + { + DateTime adesso = DateTime.Now; + int incrPz = value - _pzCountCNC; + if (incrPz > 0) + { + // calcolo lastTC... + _lastTC = adesso.Subtract(lastObservedData).TotalSeconds / incrPz; + // eseguo verifica x ricalcolo soglie... + bool validData = (incrPz) < maxIncrPz; + if (validData) + { + avgTC = lambda * lastTC + (1 - lambda) * avgTC; + } + } + _pzCountCNC = value; + } + } + + /// + /// Contapezzi IOB + /// + public int pzCountIOB { get; set; } = 0; + + #endregion contapezzi e TCiclo + } +} \ No newline at end of file