Fix simulazione NUOVO DoppioPallet

This commit is contained in:
Samuele E. Locatelli
2020-10-01 12:08:21 +02:00
parent 4228452fda
commit 75ffa237d3
2 changed files with 747 additions and 711 deletions
+143 -143
View File
@@ -5,157 +5,157 @@ using System.Text;
namespace IOB_UT
{
/// <summary>
/// TCiclo management class
/// </summary>
public class TCMan
{
#region private obj
/// <summary>
/// Ultimo TCiclo osservato
/// TCiclo management class
/// </summary>
protected double _lastTC { get; set; } = 0;
/// <summary>
/// Contapezzi IOB
/// </summary>
protected int _pzCountIOB { get; set; } = 0;
/// <summary>
/// Contapezzi PLC
/// </summary>
protected int _pzCountPLC { 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.2;
/// <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)
public class TCMan
{
lambda = lambdaWeight;
maxDelayFactor = maxDelayTcFact;
maxIncrPz = maxIncrPzCount;
}
#region private obj
/// <summary>
/// Indica se sia attivo allarme per TCiclo sopra soglia
/// </summary>
public bool alarmDelayTC
{
get
{
bool answ = false;
// solo se ho dei pezzi rilevati...
if (pzCountPLC > 0 && pzCountIOB > 0)
/// <summary>
/// Fattore lambda (innovazione) per calcolo EWMA valore TCiclo corrente
/// </summary>
protected double _lambda { get; set; } = 0.4;
/// <summary>
/// Ultimo TCiclo osservato
/// </summary>
protected double _lastTC { get; set; } = 0;
/// <summary>
/// Fattore massimo ammesso di delay x il TCiclo
/// </summary>
protected double _maxDelayFactor { get; set; } = 1.2;
/// <summary>
/// Incremento amssimo pezzi per cui fare calcolo del tempociclo attuale
/// </summary>
protected double _maxIncrPz { get; set; } = 2;
/// <summary>
/// Contapezzi IOB
/// </summary>
protected int _pzCountIOB { get; set; } = 0;
/// <summary>
/// Contapezzi PLC
/// </summary>
protected int _pzCountPLC { get; set; } = 0;
#endregion private obj
#region contapezzi e TCiclo
/// <summary>
/// Classe gestione TCiclo
/// </summary>
/// <param name="lambda">Fattore lambda x EWMA smooth</param>
/// <param name="maxDelayFactor">Massimo fattore ritardo TC x errore</param>
/// <param name="maxIncrPz">Massimo incremento numPz x considerare calcolo TCiclo</param>
public TCMan(double lambda, double maxDelayFactor, double maxIncrPz)
{
answ = (currTC >= limitTC);
_lambda = lambda;
_maxDelayFactor = maxDelayFactor;
_maxIncrPz = maxIncrPz;
}
return answ;
}
}
/// <summary>
/// Valore TCiclo medio attuale (EWMA)
/// </summary>
public double avgTC { get; set; } = 0;
/// <summary>
/// TCiclo corrente
/// </summary>
public double currTC
{
get
{
DateTime adesso = DateTime.Now;
return adesso.Subtract(lastObservedData).TotalSeconds;
}
}
/// <summary>
/// Ultimo dato (incremento PzCount) registrato
/// </summary>
public DateTime lastObservedData { get; set; } = DateTime.Now.AddMinutes(-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 IOB
/// </summary>
public int pzCountIOB { get; set; } = 0;
/// <summary>
/// Contapezzi PLC
/// </summary>
public int pzCountPLC
{
get
{
return _pzCountPLC;
}
set
{
DateTime adesso = DateTime.Now;
int incrPz = value - _pzCountPLC;
if (incrPz > 0)
/// <summary>
/// Indica se sia attivo allarme per TCiclo sopra soglia
/// </summary>
public bool alarmDelayTC
{
// 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;
}
get
{
bool answ = false;
// solo se ho dei pezzi rilevati...
if (pzCountPLC > 0 && pzCountIOB > 0)
{
answ = (currTC >= limitTC);
}
return answ;
}
}
_pzCountPLC = value;
// aggiorno dato osservazione...
lastObservedData = adesso;
}
}
#endregion contapezzi e TCiclo
}
/// <summary>
/// Valore TCiclo medio attuale (EWMA)
/// </summary>
public double avgTC { get; set; } = 0;
/// <summary>
/// TCiclo corrente
/// </summary>
public double currTC
{
get
{
DateTime adesso = DateTime.Now;
return adesso.Subtract(lastObservedData).TotalSeconds;
}
}
/// <summary>
/// Ultimo dato (incremento PzCount) registrato
/// </summary>
public DateTime lastObservedData { get; set; } = DateTime.Now.AddMinutes(-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 IOB
/// </summary>
public int pzCountIOB { get; set; } = 0;
/// <summary>
/// Contapezzi PLC
/// </summary>
public int pzCountPLC
{
get
{
return _pzCountPLC;
}
set
{
DateTime adesso = DateTime.Now;
int incrPz = value - _pzCountPLC;
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;
}
}
_pzCountPLC = value;
// aggiorno dato osservazione...
lastObservedData = adesso;
}
}
#endregion contapezzi e TCiclo
}
}
+604 -568
View File
File diff suppressed because it is too large Load Diff