using System; using System.Collections.Generic; namespace IOB_UT_NEXT { /// /// Rappresentazione dello stato corrente dell'IOB /// public class IobWinStatus { #region Public Properties /// /// ID univoco /// public string CodIob { get; set; } = "0"; /// /// Contatore IOB /// public float counterIOB { get; set; } = 0; /// /// Contatore Macchina /// public float counterMAC { get; set; } = 0; /// /// Ultimo stato noto dei parametri in memoria letti dalla macchina /// public Dictionary currParams { get; set; } = new Dictionary(); /// /// Note (libere) da child a controller /// public string freeNotes { get; set; } = ""; /// /// Tipo IOB /// public string IobType { get; set; } = ""; /// /// DataOra ultima comunicazione IN (con PLC) /// public DateTime lastDataIn { get; set; } = DateTime.Now.AddMinutes(-1); /// /// DataOra ultima comunicazione OUT (con MP Server) /// public DateTime lastDataOut { get; set; } = DateTime.Now.AddDays(-1); /// /// DataOra ultima comunicazione OUT (con MP Server) /// public DateTime lastUpdate { get; set; } = DateTime.Now.AddDays(-1); /// /// Status del SINGOLO IOB /// public bool online { get; set; } = false; /// /// Lungh coda ALLARMI in uscita /// public int queueAlLen { get; set; } = 0; /// /// Lunghezza coda EVENTI in uscita /// public int queueEvLen { get; set; } = 0; /// /// Lunghezza coda FluxLog in uscita /// public int queueFlLen { get; set; } = 0; /// /// Lungh coda MESSAGGI in uscita /// public int queueMsLen { get; set; } = 0; /// /// Lungh coda UserLog in uscita /// public int queueRawTransfLen { get; set; } = 0; /// /// Lungh coda UserLog in uscita /// public int queueUlLen { get; set; } = 0; /// /// Semaforo IN (IOB-Macchina) /// public string semIn { get; set; } = "ND"; /// /// Semaforo OUT (IOB-MPServer) /// public string semOut { get; set; } = "ND"; /// /// Parametri configurazione (es IP target, porta, ...) /// public Dictionary setupParams { get; set; } = new Dictionary(); /// /// Valore minimo da considerare come delta secondi x indicare variazione sui dati temporali /// public int minDeltaSec { get; set; } = 5; #endregion Public Properties #region Public Methods /// /// Override metodo di equality /// /// /// public override bool Equals(object obj) { if (!(obj is IobWinStatus item)) return false; if (online != item.online) return false; // controllo se sia ALMENO 10 sec... if (lastUpdate != item.lastUpdate) { if (lastUpdate.Subtract(item.lastUpdate).TotalSeconds > minDeltaSec) return false; } // controllo se sia ALMENO 3 sec... if (lastDataIn != item.lastDataIn) { if (lastDataIn.Subtract(item.lastDataIn).TotalSeconds > minDeltaSec) return false; } // controllo se sia ALMENO 5 sec... if (lastDataOut != item.lastDataOut) { if (lastDataOut.Subtract(item.lastDataOut).TotalSeconds > minDeltaSec) return false; } if (semIn != item.semIn) return false; if (semOut != item.semOut) return false; //if (!currParams.Equals(item.currParams)) // return false; if (counterIOB != item.counterIOB) return false; if (counterMAC != item.counterMAC) return false; if (queueAlLen != item.queueAlLen) return false; if (queueEvLen != item.queueEvLen) return false; if (queueFlLen != item.queueFlLen) return false; if (queueMsLen != item.queueMsLen) return false; if (queueRawTransfLen != item.queueRawTransfLen) return false; if (queueUlLen != item.queueUlLen) return false; if (freeNotes != item.freeNotes) return false; //if (setupParams != item.setupParams) // return false; if (IobType != item.IobType) return false; if (CodIob != item.CodIob) return false; return true; } public override int GetHashCode() { return base.GetHashCode(); } #endregion Public Methods } }