Files
mapo-iob-man/IOB-MAN/iobAdapt.cs
T
2024-12-23 15:16:48 +01:00

235 lines
5.9 KiB
C#

using System;
using System.ComponentModel;
namespace IOB_MAN
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
public class iobAdapt
{
/// <summary>
/// Costruttore base senza init speciali
/// </summary>
public iobAdapt() { }
/// <summary>
/// Costruttore con init redis
/// </summary>
/// <param name="codServer">Cod server con cui comunica</param>
/// <param name="codIob">Cod IOB gestito</param>
/// <param name="appNameExt">Nome app gestita (es IOB-WIN-NEXT)</param>
public iobAdapt(string codServer, string codIob, string appNameExt)
{
redisMan = new RedisIobCache(codServer, codIob, appNameExt);
}
#region Protected Fields
/// <summary>
/// Scadenza status IOB
/// </summary>
protected DateTime scadIobStatus = DateTime.Now;
#endregion Protected Fields
#region Public Fields
/// <summary>
/// Gestore processi redis
/// </summary>
public RedisIobCache redisMan;
#endregion Public Fields
#region Protected Properties
/// <summary>
/// Status iob corrente da RAM (se entro 1 sec) o da redis (se scaduto)
/// </summary>
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;
}
}
/// <summary>
/// Ultimo status IOB letto
/// </summary>
protected IobWinStatus lastIobStatus { get; set; }
protected DateTime lastSeen { get; set; } = DateTime.Now;
#endregion Protected Properties
#region Public Properties
/// <summary>
/// Codice univoco macchina
/// </summary>
[DisplayName("IOB")]
public string CodIOB { get; set; }
/// <summary>
/// Nome del target obj avviato
/// </summary>
[DisplayName("Prog")]
public string TgtName { get; set; }
/// <summary>
/// Tipo macchina/CNC/PLC
/// </summary>
[DisplayName("Tipo")]
public string IobType
{
get
{
return currIobStatus.IobType;
}
}
/// <summary>
/// Identificativo univoco processo
/// </summary>
[DisplayName("pid")]
public int pID { get; set; }
/// <summary>
/// DataOra avvio dell'IOB
/// </summary>
[DisplayName("Started")]
public DateTime startTime { get; set; } = DateTime.Now;
/// <summary>
/// Calcola uptime processo...
/// </summary>
[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);
}
}
/// <summary>
/// Verifica se il processo sia in RUN
/// </summary>
[DisplayName("Run")]
public bool isRunning { get; set; }
/// <summary>
/// Determina se sia OK la comunicazione con il PLC, cioè non sia FERMO nella comunicazione per > 5 minuti
/// </summary>
[DisplayName("PlcOk")]
public bool plcOk
{
get
{
DateTime adesso = DateTime.Now;
bool plcOnline = Math.Abs(adesso.Subtract(currIobStatus.lastDataIn).TotalSeconds) < 300;
return plcOnline;
}
}
/// <summary>
/// Stato online dell'IOB (rispetto server MP-IO)
/// </summary>
[DisplayName("Online")]
public bool iobOnline
{
get
{
return currIobStatus.online;
}
}
/// <summary>
/// Counter dell'IOB
/// </summary>
[DisplayName("pz.IOB")]
public int iobCounter
{
get
{
return (int)currIobStatus.counterIOB;
}
}
/// <summary>
/// Counter del CNC
/// </summary>
[DisplayName("pz.CNC")]
public int cncCounter
{
get
{
return (int)currIobStatus.counterMAC;
}
}
/// <summary>
/// lunghezza coda EVENTI
/// </summary>
[DisplayName("# EV")]
public int queueElLen
{
get
{
return currIobStatus.queueEvLen;
}
}
/// <summary>
/// lunghezza coda FLog
/// </summary>
[DisplayName("# FL")]
public int queueFlLen
{
get
{
return currIobStatus.queueFlLen;
}
}
/// <summary>
/// Ultima data-ora di comunicazione calida con PLC
/// </summary>
[DisplayName("Last PLC read")]
public DateTime lastPlcRead
{
get
{
return currIobStatus.lastDataIn;
}
}
/// <summary>
/// Nome dell'EXE avviato
/// </summary>
[DisplayName("Exe")]
public string ExeName { get; set; }
#endregion Public Properties
}
}