162 lines
3.6 KiB
C#
162 lines
3.6 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
|
|
namespace IOB_MAN
|
|
{
|
|
public class iobAdapt
|
|
{
|
|
/// <summary>
|
|
/// Scadenza status IOB
|
|
/// </summary>
|
|
protected DateTime scadIobStatus = DateTime.Now;
|
|
/// <summary>
|
|
/// Ultimo status IOB letto
|
|
/// </summary>
|
|
protected IobWinStatus lastIobStatus { get; set; }
|
|
/// <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;
|
|
}
|
|
}
|
|
protected DateTime lastSeen { get; set; } = DateTime.Now;
|
|
/// <summary>
|
|
/// Codice univoco macchina
|
|
/// </summary>
|
|
[DisplayName("IOB")]
|
|
public string CodIOB { get; set; }
|
|
/// <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>
|
|
/// Gestore processi redis
|
|
/// </summary>
|
|
public RedisIobCache redisMan;
|
|
/// <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>
|
|
/// 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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|