Files
MoonPro.net/MapoSDK/Objects.cs
T
2020-01-02 17:41:26 +01:00

735 lines
19 KiB
C#

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
namespace MapoSDK
{
#region oggetti per scambio dati IO - IOB
public class fileEmbed
{
/// <summary>
/// Array di file da inviare
/// </summary>
public List<smallFile> fileList { get; set; } = new List<smallFile>();
}
/// <summary>
/// Classe x definire un file (corto) inviato come Json tramite httpost
/// </summary>
public class smallFile
{
public string fileName { get; set; } = "";
public string content { get; set; } = "";
}
/// <summary>
/// Array elementi tipo KeyValuePair inviati come JSon che indicano lo stato LIVE dell'IOB
/// </summary>
public class liveIOB
{
public List<KeyValuePair<string, string>> dataList { get; set; }
}
/// <summary>
/// Array valori tipo flogData inviati come JSon
/// </summary>
public class flogJsonPayload
{
public List<flogData> fluxData { get; set; }
}
/// <summary>
/// Tracciato FluxLog in formato JSON valido
/// </summary>
public class flogData : evData
{
/// <summary>
/// nome del flusso
/// </summary>
public string flux { get; set; } = "ND";
}
/// <summary>
/// Array valori tipo evData inviati come JSon
/// </summary>
public class evJsonPayload
{
public List<evData> eventList { get; set; }
}
/// <summary>
/// Tracciato InputEvents in formato JSON valido
/// Derivato da input realtime valore=3&dtEve=20181206180600000&dtCurr=20181206180600000&cnt=999
/// </summary>
public class evData
{
/// <summary>
/// Valore del dato di flusso registrato
/// </summary>
public string valore { get; set; } = "-";
/// <summary>
/// DataOra evento
/// </summary>
public DateTime dtEve { get; set; } = DateTime.Now;
/// <summary>
/// DataOra corrente della trasmissione
/// </summary>
public DateTime dtCurr { get; set; } = DateTime.Now;
/// <summary>
/// Contatore incrementale x riordino invio (opzionale)
/// </summary>
public int cnt { get; set; } = 0;
}
/// <summary>
/// Dati resoconto IOB
/// </summary>
public class IOB_data
{
public string name;
public string IP;
public IobType iType;
public string typeCss;
public bool CNC_Counter;
}
/// <summary>
/// Struttura conf tipo dati
/// </summary>
public class dataConf
{
/// <summary>
/// NOME parametro
/// </summary>
public string name { get; set; } = "none";
/// <summary>
/// DESCRIZIONE parametro
/// </summary>
public string description { get; set; } = "";
/// <summary>
/// Tipo di dato
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public plcDataType tipoMem { get; set; } = plcDataType.Int;
/// <summary>
/// Indice nell'area di memoria (da valore iniziale = 0)
/// </summary>
public int index { get; set; } = 0;
/// <summary>
/// Nome "assoluto" della posizione nell'area di memoria (anche diverso da indice)
/// </summary>
public string memAddr { get; set; } = "";
/// <summary>
/// Size in byte
/// </summary>
public int size { get; set; } = 0;
/// <summary>
/// Fattore per eventuale divisione (es leggo 1234 --> 12,34 con factor=100)
/// </summary>
public int factor { get; set; } = 1;
/// <summary>
/// Valore parametro (come stringa, decimali con ",", default VUOTO), poi LETTO da PLC (o appena scritto)
/// </summary>
public string value { get; set; } = "";
/// <summary>
/// Valore minimo ammesso (ove usato, es simulazione)
/// </summary>
public int minVal { get; set; } = 0;
/// <summary>
/// Valore massimo ammesso (ove usato, es simulazione)
/// </summary>
public int maxVal { get; set; } = 9999;
}
/// <summary>
/// Classe gestione ITEM di un OBJ (machine) generico (read/write)
/// </summary>
public class objItem
{
/// <summary>
/// UID univoco
/// </summary>
public string uid { get; set; } = "";
/// <summary>
/// NOME item
/// </summary>
public string name { get; set; } = "";
/// <summary>
/// Valore parametro (come stringa, decimali con ",", default VUOTO), sul CNC/PLC
/// </summary>
public string value { get; set; } = "";
/// <summary>
/// DataOra ultima lettura
/// </summary>
public DateTime lastRead { get; set; } = DateTime.Now.AddHours(-1);
/// <summary>
/// Indica se sia abilitato in scrittura (WRITE)
/// </summary>
public bool writable { get; set; } = false;
/// <summary>
/// Indica il NUOVO valore richiesto x l'item
/// </summary>
public string reqValue { get; set; } = "";
/// <summary>
/// DataOra ultima richiesta scrittura
/// </summary>
public DateTime lastRequest { get; set; } = DateTime.Now.AddDays(-1);
/// <summary>
/// Ultimo messaggio associato (conferma scrittura, errore, ...)
/// </summary>
public string lastMessage { get; set; } = "";
#if false
/// <summary>
/// Indica se il parametro sia stato salvato (value = newValue) oppure newValue NON impostato
/// </summary>
public bool saved
{
get
{
bool hasData = !string.IsNullOrWhiteSpace(value);
bool areEqual = value == newValue;
bool noWriteReq = string.IsNullOrWhiteSpace(newValue);
return (areEqual || (hasData && noWriteReq));
}
}
#endif
}
/// <summary>
/// Struttura conf tipo dati
/// </summary>
public class dataConfTSVC : dataConf
{
/// <summary>
/// Tipo di funzione da applicare al dato
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public VC_func func { get; set; } = VC_func.MAX;
/// <summary>
/// Periodo campionamento
/// </summary>
public int period { get; set; } = 60;
}
/// <summary>
/// Struttura conf memorie PLC (inizialmente SIEMENS)
/// </summary>
public class plcMemMap
{
/// <summary>
/// Parametri ammessi per IOB x scrittura
/// </summary>
public Dictionary<string, dataConf> mMapWrite = new Dictionary<string, dataConf>();
/// <summary>
/// Parametri ammessi per IOB x lettura
/// </summary>
public Dictionary<string, dataConfTSVC> mMapRead = new Dictionary<string, dataConfTSVC>();
}
/// <summary>
/// Classe oggetto base TimeSeries
/// </summary>
public class tsData
{
/// <summary>
/// Nome Macchina
/// </summary>
public string vcMachine { get; set; } = "";
/// <summary>
/// Nome della Var Casuale
/// </summary>
public string vcName { get; set; } = "";
/// <summary>
/// Data-Ora riferimento campione
/// </summary>
public DateTime timeStamp { get; set; } = DateTime.Now;
/// <summary>
/// Tipo di valore gestito
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public plcDataType vcType { get; set; } = plcDataType.Int;
/// <summary>
/// Valore in formato stringa (che può venire customizzato)
/// </summary>
public string strValue { get; set; } = "";
/// <summary>
/// In base al tipo di oggetto restituisce il valore cona deguata conversione......
/// </summary>
public object actValue
{
get
{
object answ = null;
bool currBool = false;
int currInt = 0;
double currDouble = 0;
switch (vcType)
{
case plcDataType.Boolean:
bool.TryParse(strValue, out currBool);
answ = currBool;
break;
case plcDataType.Int:
case plcDataType.DInt:
int.TryParse(strValue, out currInt);
answ = currInt;
break;
case plcDataType.Real:
double.TryParse(strValue, out currDouble);
answ = currDouble;
break;
case plcDataType.String:
default:
answ = strValue;
break;
}
return answ;
}
}
/// <summary>
/// Valore intero
/// </summary>
public int intVal { get; set; } = 0;
/// <summary>
/// Valore float
/// </summary>
public float floatVal { get; set; } = 0;
}
/// <summary>
/// Aggregazione dati VC
/// </summary>
public class tsGrouped
{
/// <summary>
/// Nome Macchina
/// </summary>
public string vcMachine { get; set; } = "";
/// <summary>
/// Nome della Var Casuale
/// </summary>
public string vcName { get; set; } = "";
/// <summary>
/// Unità di Misura
/// </summary>
public string UM { get; set; } = "#";
/// <summary>
/// Data-Ora riferimento campione
/// </summary>
public DateTime timeStamp { get; set; } = DateTime.Now;
/// <summary>
/// Valore medio (NON definito)
/// </summary>
public object avgValue { get; set; }
/// <summary>
/// Periodo di aggregazione di riferimento
/// </summary>
public timeWindow period { get; set; } = timeWindow.hour;
/// <summary>
/// Campioni effettivi nel periodo
/// </summary>
public List<tsData> samples { get; set; }
}
#region gestione dati FluxLog
/// <summary>
/// Classe oggetto statistiche sui dati
/// </summary>
public class varStats
{
/// <summary>
/// Nome della Variabile tracciata
/// </summary>
public string varName { get; set; } = "";
/// <summary>
/// Num record
/// </summary>
public int numRec { get; set; } = 0;
/// <summary>
/// Valore medio/mediano
/// </summary>
public float avg { get; set; } = 0;
/// <summary>
/// Valore max
/// </summary>
public float max { get; set; } = 0;
/// <summary>
/// Valore min
/// </summary>
public float min { get; set; } = 0;
}
/// <summary>
/// Classe oggetto base TimeSeries
/// </summary>
public class rawSample
{
/// <summary>
/// Data-Ora riferimento campione
/// </summary>
public DateTime timeStamp { get; set; } = DateTime.Now;
/// <summary>
/// Valore in formato stringa
/// </summary>
public string value { get; set; } = "";
}
/// <summary>
/// Raccolta dati di storici sintetici per Macchina e Variabile
/// </summary>
public class histData
{
/// <summary>
/// Macchina
/// </summary>
public string macName { get; set; } = "";
/// <summary>
/// Tipo di valore registrato (internamente è string)
/// </summary>
//[JsonConverter(typeof(StringEnumConverter))]
public plcDataType varType { get; set; } = plcDataType.Int;
/// <summary>
/// Data riferimento campione in formato YMD = yyyyMMdd
/// </summary>
public int dateYMD { get; set; } = 0;
/// <summary>
/// Periodo di aggregazione di riferimento
/// </summary>
//[JsonConverter(typeof(StringEnumConverter))]
public timeWindow period { get; set; } = timeWindow.day;
/// <summary>
/// Statistiche raccolte nel periodo
/// </summary>
public List<varStats> stats { get; set; } = null;
}
/// <summary>
/// Raccolta dati di storici raw per Macchina e Variabile
/// </summary>
public class rawData
{
/// <summary>
/// Macchina
/// </summary>
public string macName { get; set; } = "";
/// <summary>
/// Nome della Variabile tracciata
/// </summary>
public string varName { get; set; } = "";
/// <summary>
/// Tipo di valore registrato (internamente è string)
/// </summary>
//[JsonConverter(typeof(StringEnumConverter))]
public plcDataType varType { get; set; } = plcDataType.Int;
/// <summary>
/// Data riferimento campione in formato YMD = yyyyMMdd
/// </summary>
public int dateYMD { get; set; } = 0;
/// <summary>
/// Periodo di aggregazione di riferimento
/// </summary>
//[JsonConverter(typeof(StringEnumConverter))]
public timeWindow period { get; set; } = timeWindow.day;
/// <summary>
/// Dati raw registrati nel periodo
/// </summary>
public List<rawSample> samples { get; set; } = null;
}
/// <summary>
/// Classe x inviare messaggi di tipo esecuzione di una generica esecuzione
/// </summary>
public class exeResult
{
/// <summary>
/// Esito del risultato
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public esitoExec esito { get; set; } = esitoExec.undone;
/// <summary>
/// Messaggio associato
/// </summary>
public string message { get; set; } = "";
}
#endregion
#region gestione ALARMS / CONDITIONS
/// <summary>
/// Definizione classe evento allarme
/// </summary>
public class alarmEvent
{
/// <summary>
/// Anno di riferimento allarme (per chiave yyyy.n)
/// </summary>
public int yCurr { get; set; } = 0;
/// <summary>
/// Contatore incrementale univoco annuale (per chiave yyyy.n)
/// </summary>
public int yCounter { get; set; } = 0;
/// <summary>
/// Data riferimento campione in formato YMD = yyyyMMdd
/// </summary>
public int dateYMD { get; set; } = 0;
/// <summary>
/// Data-Ora inizio evento
/// </summary>
public DateTime started { get; set; } = DateTime.Now;
/// <summary>
/// Data-Ora inizio evento
/// </summary>
public DateTime ended { get; set; } = DateTime.Now;
/// <summary>
/// Lista delle condizioni di allarme attive ad inizio evento
/// </summary>
public List<alarmData> activeConditions { get; set; } = null;
/// <summary>
/// Elenco dei dati di tipo FluxLog nei minuti antecedenti l'evento
/// </summary>
public List<rawData> blackBoxData { get; set; } = null;
}
/// <summary>
/// Definizione classe evento allarme
/// </summary>
public class alarmStats
{
/// <summary>
/// Anno riferimento
/// </summary>
public int year { get; set; } = 0;
/// <summary>
/// Valore Contatore univoco annuale raggiunto yyyy.n
/// </summary>
public int yCounter { get; set; } = 1;
/// <summary>
/// Valore cumulato complessivo degli allarmi registrati
/// </summary>
public double totalDuration { get; set; } = 0;
/// <summary>
/// Durata media annuale allarmi
/// </summary>
public double avgDuration
{
get
{
double answ = 0;
try
{
answ = totalDuration / yCounter;
}
catch
{ }
return answ;
}
}
}
/// <summary>
/// Definizione allarme
/// </summary>
public class alarmData
{
/// <summary>
/// Codice univoco
/// </summary>
public string code { get; set; } = "";
/// <summary>
/// Descrizione
/// </summary>
public string description { get; set; } = "";
/// <summary>
/// Severity (0....1000, minimo...massimo)
/// </summary>
public int severity { get; set; } = 0;
}
#endregion
#region gestione oggetti conf MTConnect
/// <summary>
/// Configurazione delle macchine MTC
/// </summary>
public class MtcSetup
{
/// <summary>
/// IdxMacchina cui ci riferiamo
/// </summary>
public string idxMacchina { get; set; } = "";
/// <summary>
/// Setup della macchina
/// </summary>
public List<machDataItem> dataItems { get; set; }
}
/// <summary>
/// Descrittore oggetto DataItem generico
/// </summary>
public class machDataItem
{
public machDataItem()
{ }
/// <summary>
/// ID generico
/// </summary>
public string uuid { get; set; }
/// <summary>
/// Categoria oggetto
/// </summary>
public DataItemCategory Category { get; set; }
/// <summary>
/// Nome / descrizione
/// </summary>
public string Name { get; set; }
/// <summary>
/// Tipologia principale
/// </summary>
public string Type { get; set; }
/// <summary>
/// Tipologia specifica
/// </summary>
public string SubType { get; set; }
/// <summary>
/// Unità di misura
/// </summary>
public string Units { get; set; }
}
#endregion
#region gestione oggetti stato IOB scambiati tra IOB-MAN e IOB-WIN
/// <summary>
/// Rappresentazione dello stato corrente dell'IOB
/// </summary>
public class IobWinCurrentState
{
/// <summary>
/// Semaforo IN (IOB-PLC)
/// </summary>
public Semaforo SemIn { get; set; } = Semaforo.ND;
/// <summary>
/// Semaforo OUT (IOB-MPserver)
/// </summary>
public Semaforo SemOut { get; set; } = Semaforo.ND;
/// <summary>
/// Contatore IOB
/// </summary>
public float counterIOB { get; set; } = 0;
/// <summary>
/// Contatore Macchina
/// </summary>
public float counterMAC { get; set; } = 0;
/// <summary>
/// Lunghezza coda EVENTI in uscita
/// </summary>
public int queueEvLen { get; set; } = 0;
/// <summary>
/// Lunghezza coda FluxLog in uscita
/// </summary>
public int queueFLogLen { get; set; } = 0;
/// <summary>
/// DataOra ultima comunicazione IN (con PLC)
/// </summary>
public DateTime lastDataIn { get; set; } = DateTime.Now.AddYears(-1);
/// <summary>
/// DataOra ultima comunicazione OUT (con MP Server)
/// </summary>
public DateTime lastDataOut { get; set; } = DateTime.Now.AddYears(-1);
/// <summary>
/// Ultimo stato noto dei parametri in memoria letti da PLC
/// </summary>
public Dictionary<string, string> currParams { get; set; } = null;
}
#if false
/// <summary>
/// Calendario eventi
/// </summary>
public class EventsCalendar
{
/// <summary>
/// Lista di eventi
/// </summary>
public List<EventDetail> EventsList { get; set; }
}
#endif
/// <summary>
/// Singolo dettaglio evento
/// </summary>
public class EventDetail
{
/// <summary>
/// Data di riferimento
/// </summary>
public DateTime when { get; set; }
/// <summary>
/// Nome evento
/// </summary>
public string what { get; set; } = "";
}
#endregion
#endregion
#if false
/// <summary>
/// Classe definizione parametri singolo ordine produzione
/// </summary>
public class OrdineProdArt
{
/// <summary>
/// Codice univoco ordine
/// </summary>
public string OrdNum;
/// <summary>
/// Articolo associato ad ordine
/// </summary>
public Articolo ArtOrd;
/// <summary>
/// Quantità Articolo
/// </summary>
public int Qta;
}
/// <summary>
/// Oggetto generico articolo
/// </summary>
public class Articolo
{
/// <summary>
/// Codice articolo
/// </summary>
public string Codice;
/// <summary>
/// Descrizione Articolo
/// </summary>
public string Descrizione;
}
/// <summary>
/// Classe definizione parametri ordine x KIT di articoli
/// </summary>
public class OrdineProdKit
{
/// <summary>
/// Codice univoco ordine
/// </summary>
public string OrdNum;
/// <summary>
/// Codice KIT
/// </summary>
public string Codice;
/// <summary>
/// Vettore ordini articolo associati a KIT
/// </summary>
public List<OrdineProdArt> OrdiniArt;
/// <summary>
/// Quantità KIT
/// </summary>
public int Qta;
}
#endif
}