using System; using System.ComponentModel; namespace IOB_MAN { // // This is here so CodeMaid doesn't reorganize this document // public class iobAdapt { #region Protected Fields /// /// Scadenza status IOB /// protected DateTime scadIobStatus = DateTime.Now; #endregion Protected Fields #region Public Fields /// /// Gestore processi redis /// public RedisIobCache redisMan; #endregion Public Fields #region Protected Properties /// /// Status iob corrente da RAM (se entro 1 sec) o da redis (se scaduto) /// protected IobWinStatus currIobStatus { get { IobWinStatus answ = new IobWinStatus(); if (scadIobStatus > DateTime.Now && lastIobStatus != null) { answ = lastIobStatus; } else { answ = redisMan.iobStatus; lastIobStatus = answ; scadIobStatus = DateTime.Now.AddSeconds(1); } return answ; } } /// /// Ultimo status IOB letto /// protected IobWinStatus lastIobStatus { get; set; } protected DateTime lastSeen { get; set; } = DateTime.Now; #endregion Protected Properties #region Public Properties /// /// Codice univoco macchina /// [DisplayName("IOB")] public string CodIOB { get; set; } /// /// Tipo macchina/CNC/PLC /// [DisplayName("Tipo")] public string IobType { get { return currIobStatus.IobType; } } /// /// Identificativo univoco processo /// [DisplayName("pid")] public int pID { get; set; } /// /// DataOra avvio dell'IOB /// [DisplayName("Started")] public DateTime startTime { get; set; } = DateTime.Now; /// /// Calcola uptime processo... /// [DisplayName("Uptime Total")] public string uptime { get { // in primis cerco SE sia running --> aggiorno lastSeen if (isRunning) { lastSeen = DateTime.Now; } TimeSpan uptime = lastSeen.Subtract(startTime); return utils.FormatTimeSpan(uptime); } } /// /// Verifica se il processo sia in RUN /// [DisplayName("Run")] public bool isRunning { get; set; } /// /// Determina se sia OK la comunicazione con il PLC, cioè non sia FERMO nella comunicazione per > 5 minuti /// [DisplayName("PlcOk")] public bool plcOk { get { DateTime adesso = DateTime.Now; bool plcOnline = Math.Abs(adesso.Subtract(currIobStatus.lastDataIn).TotalSeconds) < 300; return plcOnline; } } /// /// Stato online dell'IOB (rispetto server MP-IO) /// [DisplayName("Online")] public bool iobOnline { get { return currIobStatus.online; } } /// /// Counter dell'IOB /// [DisplayName("pz.IOB")] public int iobCounter { get { return (int)currIobStatus.counterIOB; } } /// /// Counter del CNC /// [DisplayName("pz.CNC")] public int cncCounter { get { return (int)currIobStatus.counterMAC; } } /// /// lunghezza coda EVENTI /// [DisplayName("# EV")] public int queueElLen { get { return currIobStatus.queueEvLen; } } /// /// lunghezza coda FLog /// [DisplayName("# FL")] public int queueFlLen { get { return currIobStatus.queueFlLen; } } /// /// Ultima data-ora di comunicazione calida con PLC /// [DisplayName("Last PLC read")] public DateTime lastPlcRead { get { return currIobStatus.lastDataIn; } } #endregion Public Properties } }