Aggiunta classe gestione tempiciclo
This commit is contained in:
@@ -99,6 +99,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="TCMan.cs" />
|
||||
<Compile Include="ToMapo.cs" />
|
||||
<Compile Include="baseUtils.cs">
|
||||
<SubType>Component</SubType>
|
||||
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace IOB_UT
|
||||
{
|
||||
/// <summary>
|
||||
/// TCiclo management class
|
||||
/// </summary>
|
||||
public class TCMan
|
||||
{
|
||||
#region private obj
|
||||
|
||||
/// <summary>
|
||||
/// Ultimo TCiclo osservato
|
||||
/// </summary>
|
||||
protected double _lastTC { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Contapezzi CNC
|
||||
/// </summary>
|
||||
protected int _pzCountCNC { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Contapezzi IOB
|
||||
/// </summary>
|
||||
protected int _pzCountIOB { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Fattore lambda (innovazione) per calcolo EWMA valore TCiclo corrente
|
||||
/// </summary>
|
||||
protected double lambda { get; set; } = 0.4;
|
||||
|
||||
/// <summary>
|
||||
/// Fattore massimo ammesso di delay x il TCiclo
|
||||
/// </summary>
|
||||
protected double maxDelayFactor { get; set; } = 1.5;
|
||||
|
||||
/// <summary>
|
||||
/// Incremento amssimo pezzi per cui fare calcolo del tempociclo attuale
|
||||
/// </summary>
|
||||
protected double maxIncrPz { get; set; } = 2;
|
||||
|
||||
#endregion private obj
|
||||
|
||||
#region contapezzi e TCiclo
|
||||
|
||||
/// <summary>
|
||||
/// Classe gestione TCiclo
|
||||
/// </summary>
|
||||
/// <param name="lambdaWeight">Fattore lambda x EWMA smooth</param>
|
||||
/// <param name="maxDelayTcFact">Massimo fattore ritardo TC x errore</param>
|
||||
/// <param name="maxIncrPzCount">Massimo incremento numPz x considerare calcolo TCiclo</param>
|
||||
public TCMan(double lambdaWeight, double maxDelayTcFact, double maxIncrPzCount)
|
||||
{
|
||||
lambda = lambdaWeight;
|
||||
maxDelayFactor = maxDelayTcFact;
|
||||
maxIncrPz = maxIncrPzCount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indica se sia attivo allarme per TCiclo sopra soglia
|
||||
/// </summary>
|
||||
public bool alarmDelayTC
|
||||
{
|
||||
get
|
||||
{
|
||||
return lastTC >= limitTC;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Valore TCiclo medio attuale (EWMA)
|
||||
/// </summary>
|
||||
public double avgTC { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Ultimo dato (incremento PzCount) registrato
|
||||
/// </summary>
|
||||
public DateTime lastObservedData { get; set; } = DateTime.Now.AddHours(-1);
|
||||
|
||||
/// <summary>
|
||||
/// Ultimo TCiclo osservato
|
||||
/// </summary>
|
||||
public double lastTC
|
||||
{
|
||||
get
|
||||
{
|
||||
return _lastTC;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Limite allarme per il TCiclo (come media TCiclo * maxDelayFactor)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public double limitTC
|
||||
{
|
||||
get
|
||||
{
|
||||
return avgTC * maxDelayFactor;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Contapezzi CNC
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Contapezzi IOB
|
||||
/// </summary>
|
||||
public int pzCountIOB { get; set; } = 0;
|
||||
|
||||
#endregion contapezzi e TCiclo
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user