Files
Mapo-IOB-WIN/IOB-WIN-NEXT/Iob/BaseObj.cs
T
2023-09-18 15:09:09 +02:00

286 lines
8.8 KiB
C#

using IOB_UT_NEXT;
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace IOB_WIN_NEXT.Iob
{
/// <summary>
/// Classe di base per IOB
/// </summary>
public class BaseObj
{
#region Public Fields
/// <summary>
/// valore booleano di check se sia stato AVVIATO l'adapter (Running)
/// </summary>
public bool adpRunning = false;
/// <summary>
/// valore booleano di check se l'adapter STIA SALVANDO
/// </summary>
public bool adpSaving = false;
/// <summary>
/// valore booleano (richiesta di riavvio automatico)
/// </summary>
public bool adpTryRestart;
/// <summary>
/// Struttura allarmi mappati
/// </summary>
public List<BaseAlarmConf> alarmMaps = new List<BaseAlarmConf>();
/// <summary>
/// Conf adapter corrente
/// </summary>
public IobConfiguration cIobConf;
/// <summary>
/// Conteggio ATTUALE ore macchina IN LAVORO
/// </summary>
public double contOreMaccLav;
/// <summary>
/// Conteggio ATTUALE ore macchina ON
/// </summary>
public double contOreMaccOn;
/// <summary>
/// contatore x simulazione valori input
/// </summary>
public int countSim = 0;
/// <summary>
/// ODL attualmente sulla macchina
/// </summary>
public Int32 currIdxODL = 0;
/// <summary>
/// Modo corrente (da classe ENUM)
/// </summary>
public CNC_MODE currMode;
/// <summary>
/// ODL corrente caricato sulla macchina (stringa, da chiamata MP/IO)
/// </summary>
public string currODL = "";
/// <summary>
/// Indica se sia richiesto campionamento memoria PERIODICO
/// </summary>
public bool doSampleMemory;
/// <summary>
/// Indica se si debba leggere e fare DUMP delle aree di memoria (1 volta solo all'avvio x debug...)
/// </summary>
public bool doStartMemDump;
/// <summary>
/// Data/ora ultimo avvio adapter
/// </summary>
public DateTime dtAvvioAdp = DateTime.Now;
/// <summary>
/// Data/ora ultimo spegnimento adapter
/// </summary>
public DateTime dtStopAdp = DateTime.Now;
/// <summary>
/// Indicazione VETO check status IOB x evitare loop troppo stretti...
/// </summary>
public DateTime dtVetoCheckIOB = DateTime.Now.AddDays(-1);
/// <summary>
/// Indicazione VETO check sync ricette x evitare loop troppo stretti...
/// </summary>
public DateTime dtVetoCheckSyncRecipe = DateTime.Now.AddHours(-1);
/// <summary>
/// Abilitazione lettura PrgName
/// </summary>
public bool enablePrgName = true;
/// <summary>
/// Abilitazione invio pezzi "in blocco" per recupero contapezzi
/// </summary>
public bool enableSendPzCountBlock = false;
/// <summary>
/// Determina se sia encessario convertire valori little/big endian (SIEMENS=true, OSAI=FALSE)
/// </summary>
public bool hasBigEndian = false;
/// <summary>
/// dataOra ultima verifica CNC disconnesso...
/// </summary>
public DateTime lastDisconnCheck;
/// <summary>
/// Data/ora ultima volta che IOB è stato dichiarato online
/// </summary>
public DateTime lastIobOnline = DateTime.Now.AddHours(-1);
/// <summary>
/// dataOra ultimo log periodico...
/// </summary>
public DateTime lastPeriodicLog;
/// <summary>
/// dataOra ultimo PING inviato verso il PLC...
/// </summary>
public DateTime lastPING = DateTime.Now.AddHours(-1);
/// <summary>
/// DataOra ultima lettura da PLC
/// </summary>
public DateTime lastReadPLC;
/// <summary>
/// ULtimo valore inviato (in caso di disconnessione lo reinvia x garantire watchdog...)
/// </summary>
public string lastSignInVal = "";
/// <summary>
/// DateTime Ultimo valore simulazione generato
/// </summary>
public DateTime lastSim;
/// <summary>
/// dataOra ultimo segnale inviato al SERVER...
/// </summary>
public DateTime lastWatchDog;
/// <summary>
/// dataOra ultimo segnale inviato a macchina/PLC...
/// </summary>
public DateTime lastWatchDogPLC = DateTime.Now;
/// <summary>
/// Massimo numero di px da inviare in blocco
/// </summary>
public int maxSendPzCountBlock = 10;
/// <summary>
/// Struttura memoria PLC x lettura/scrittura da JSON file
/// </summary>
public plcMemMapExt memMap;
/// <summary>
/// Minimo numero di px da inviare in blocco
/// </summary>
public int minSendPzCountBlock = 5;
/// <summary>
/// Variabile booleana che indica se sia necessario fare refresh del contapezzi
/// </summary>
public bool needRefreshPzCount = true;
/// <summary>
/// Dizionario di persistenza per i valori da salvare da/su file
/// </summary>
public Dictionary<string, string> persistenceLayer;
/// <summary>
/// Determina se utilizzare blocchi di memoria IOT contigui (e quindi processing
/// "monoblocco" semplificato"=
/// </summary>
public bool procIotMem = false;
/// <summary>
/// Coda valori ALLARMI ove gestiti...
/// </summary>
public DataQueue QueueAlarm = new DataQueue("000", "QueueAlarm", false);
//public ConcurrentQueue<string> QueueAlarm = new ConcurrentQueue<string>();
/// <summary>
/// Oggetto della coda degli elementi letti di tipo FluxLog (e non ancora trasmessi)
/// </summary>
public DataQueue QueueFLog = new DataQueue("000", "QueueFLog", false);
//public ConcurrentQueue<string> QueueFLog = new ConcurrentQueue<string>();
/// <summary>
/// Oggetto della coda degli elementi letti (e non ancora trasmessi)
/// </summary>
public DataQueue QueueIN = new DataQueue("000", "QueueIN", false);
//public ConcurrentQueue<string> QueueIN = new ConcurrentQueue<string>();
/// <summary>
/// Coda valori MESSAGGI/EVENTI (da non sottocampionare come samples)...
/// </summary>
public DataQueue QueueMessages = new DataQueue("000", "QueueMessages", false);
//public ConcurrentQueue<string> QueueMessages = new ConcurrentQueue<string>();
/// <summary>
/// Oggetto della coda degli elementi di tipo RawTransf (e non ancora trasmessi)
/// NB: sono salvati serializzati come stringhe
/// </summary>
public DataQueue QueueRawTransf = new DataQueue("000", "QueueRawTransf", false);
//public ConcurrentQueue<string> QueueRawTransf = new ConcurrentQueue<string>();
/// <summary>
/// Coda valori LOG UTENTE (da non sottocampionare come samples)...
/// </summary>
public DataQueue QueueULog = new DataQueue("000", "QueueULog", false);
//public ConcurrentQueue<string> QueueULog = new ConcurrentQueue<string>();
/// <summary>
/// alias booleano false = R
/// </summary>
public bool R = false;
/// <summary>
/// 32 byte input base (es strobe, 8 word da 32 bit di flags...)
/// </summary>
public byte[] RawInput = new byte[32];
/// <summary>
/// 32 byte output base (es ack, 8 word da 32 bit di flags...)
/// </summary>
public byte[] RawOutput = new byte[32];
/// <summary>
/// Oggetto connessione REDIS
/// </summary>
public RedisIobCache redisMan;
/// <summary>
/// Oggetto cronometro x campionamento durate chiamate
/// </summary>
public Stopwatch stopwatch = new Stopwatch();
/// <summary>
/// Oggetto gestione TempiCiclo e contapezzi
/// </summary>
public TCMan tcMan = new TCMan(0.5, 1.3, 5);
/// <summary>
/// Imposta veto lettura dati (es per DB a 2 sec)
/// </summary>
public DateTime vetoDataRead = DateTime.Now;
/// <summary>
/// Imposta veto SYNC dati (es per DB 2 DB a 10 sec)
/// </summary>
public DateTime vetoDataSync = DateTime.Now;
/// <summary>
/// Imposta veto chiamata split (durante chiamata, per 60 sec)
/// </summary>
public DateTime vetoSplit = DateTime.Now.AddMinutes(1);
/// <summary>
/// alias booleano true = W
/// </summary>
public bool W = true;
#endregion Public Fields
}
}