diff --git a/EgwConf.Iob/EgwConf.Iob.csproj b/EgwConf.Iob/EgwConf.Iob.csproj
index e58c7fe..ae42469 100644
--- a/EgwConf.Iob/EgwConf.Iob.csproj
+++ b/EgwConf.Iob/EgwConf.Iob.csproj
@@ -61,8 +61,6 @@
-
-
@@ -72,6 +70,8 @@
-
+
+
+
\ No newline at end of file
diff --git a/EgwConf.Iob/Mem/ToMapo.cs b/EgwConf.Iob/Mem/ToMapo.cs
deleted file mode 100644
index 558d60c..0000000
--- a/EgwConf.Iob/Mem/ToMapo.cs
+++ /dev/null
@@ -1,923 +0,0 @@
-using MapoSDK;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using System.Collections.Generic;
-
-namespace EgwConf.Iob.Mem
-{
- ///
- /// Classe gestione configurazione parametri di base x allarmi
- ///
- public class BaseAlarmConf
- {
- #region Public Properties
-
- ///
- /// Elenco dei contatori blink x gestione caso fronte salita/discesa segnale che blinka
- ///
- public int[] alarmsBlinkCounter { get; set; }
-
- ///
- /// BitMask 16bit (1 = valido, 0 = filtro) degli allarmi silenziati/disabilitati (se
- /// iniziano per ##) come valore da sottrarre x check
- ///
- public uint[] alarmsMask { get; set; }
-
- ///
- /// Array dei valori allarme correnti
- ///
- public uint[] alarmsState { get; set; }
-
- ///
- /// valore di partenza x un segnale di blink in caso di fine variazione (fronte discesa)
- ///
- public int blinkDownVal { get; set; } = 4;
-
- ///
- /// valore di partenza x un segnale di blink in caso di inizio variazione (fronte salita)
- ///
- public int blinkUpVal { get; set; } = 3;
-
- ///
- /// Descrizione area allarmi
- ///
- public string description { get; set; } = "";
-
- ///
- /// Indice nell'area di memoria (da valore iniziale = 0)
- ///
- public int index { get; set; } = 0;
-
- ///
- /// Nome "assoluto" della posizione nell'area di memoria (anche diverso da indice)
- ///
- public string memAddr { get; set; } = "";
-
- ///
- /// Elenco allarmi configurati x la bitmap
- ///
- public List messages { get; set; } = new List();
-
- ///
- /// Size in byte
- ///
- public int size { get; set; } = 0;
-
- ///
- /// Tipo di dato
- ///
- [JsonConverter(typeof(StringEnumConverter))]
- public plcDataType tipoMem { get; set; } = plcDataType.Boolean;
-
-
- ///
- /// Tipo del blocco allarmi configurato
- ///
- [JsonConverter(typeof(StringEnumConverter))]
- public AlarmBlockType blockType { get; set; } = AlarmBlockType.Bitmap;
-
- ///
- /// Livello del blocco memoria
- ///
- [JsonConverter(typeof(StringEnumConverter))]
- public AlarmLevel blockLevel { get; set; } = AlarmLevel.Alarm;
-
- ///
- /// Elenco KEY codici allarme attivabili
- ///
- public List activeKeys { get; set; } = new List();
-
- ///
- /// Elenco VALUE codici allarme attivabili
- ///
- public List activeValues { get; set; } = new List();
-
-
- #endregion Public Properties
-
- #region Public Methods
-
- ///
- /// Calcola il filtro da condizione blink (ovvero maschera per valori indicati blinking)
- ///
- ///
- ///
- public uint blinkFilter(int num)
- {
- uint answ = 0;
- int idx = 16 * num;
- for (int i = 0; i < 16; i++)
- {
- if (alarmsBlinkCounter[idx + i] > 0)
- {
- answ += (uint)1 << i;
- }
- }
- return answ;
- }
-
- ///
- /// Effettua update dei contatori blink per gestire i segnali alternati sul fronte di salita/discesa
- ///
- ///
- ///
- public void checkBlinkCounter(int num, uint newStatus)
- {
- // calcola la maschera di variazione da valore precedente
- var variations = newStatus ^ alarmsState[num];
- // ciclo sui 16 bit...
- for (int i = 0; i < 16; i++)
- {
- // controllo se è variato
- if ((variations & (1 << i)) == (1 << i))
- {
- // se il valore nuovo è 1 --> è in fronte salita
- if ((newStatus & (1 << i)) == (1 << i))
- {
- // cambio SOLO SE il valore blink è zero...
- if (alarmsBlinkCounter[num * 16 + i] == 0)
- {
- alarmsBlinkCounter[num * 16 + i] = blinkUpVal;
- }
- }
- // altrimenti se è fronte discesa
- else
- {
- // cambio SOLO SE il valore blink è zero...
- if (alarmsBlinkCounter[num * 16 + i] == 0)
- {
- alarmsBlinkCounter[num * 16 + i] = blinkDownVal;
- }
- }
- }
- }
- // decremento contatori blink
- int idx = 0;
- foreach (var item in alarmsBlinkCounter)
- {
- alarmsBlinkCounter[idx] = item > 0 ? item - 1 : item;
- idx++;
- }
- }
-
- ///
- /// Confronta un valore di stato allarme con lo stato precedentemente salvato considerando blink/veto
- ///
- /// Numero/indice del banco di allarme (uint16)
- /// Valore (bitmap) allarmi come uint16
- ///
- public bool isChanged(int num, uint newValue)
- {
- // per prima cosa controllo valori RAW
- bool answ = !alarmsState[num].Equals(newValue);
- if (answ)
- {
- // controllo valori filtrati con ## (sottraendo BITMASK dai valori di filtro)
- answ = ((alarmsState[num] & alarmsMask[num]) != (newValue & alarmsMask[num]));
- // se fossero ancora differenti controllo ulteriore mask dato il counter dei blink:
- if (answ)
- {
- var blinkFilt = blinkFilter(num);
- answ = ((alarmsState[num] & (alarmsMask[num] & ~blinkFilt)) != (newValue & (alarmsMask[num] & ~blinkFilt)));
- //answ = ((alarmsState[num] & (alarmsMask[num] | blinkFilt)) != (newValue & (alarmsMask[num] | blinkFilt)));
- }
- }
- return answ;
- }
-
- ///
- /// Inizializzazione classe con valori calcolati: attenzione si aspetta banchi da 32 bit...
- /// ATTENZIONE: eseguita solo se blockType == bitmap
- ///
- public void setupData()
- {
- // verifico si tratti di un tipo allarmi a bitmap... altrimenti salto
- if (blockType == AlarmBlockType.Bitmap)
- {
- // inizializzo vettore valore allarmi x banco int8 x iniziare
- alarmsState = new uint[size];
- alarmsMask = new uint[size];
- int bitSize = 8;
-
- // 16/32 bit
- if (size > 1)
- {
- // inizializzo vettore valore allarmi x banco int16
- alarmsState = new uint[size / 2];
- alarmsMask = new uint[size / 2];
- bitSize = 16;
- }
-
- // una volta inizializzata la classe di base sistemo vettori allarmi disabilitati ed il
- // contatore blink dei fronti di discesa
- alarmsBlinkCounter = new int[messages.Count];
- //verifico i contatori di blink da eventuale conf...
-
- int idx = 0;
- int bank = 0;
- foreach (var item in messages)
- {
- if (item.StartsWith("##"))
- {
- alarmsBlinkCounter[idx] = -999;
- }
- else
- {
- alarmsBlinkCounter[idx] = 1;
- alarmsMask[bank] += (uint)1 << idx;
- }
- idx++;
- // sistemo bank/indice
- if (idx > bitSize - 1)
- {
- bank++;
- idx = 0;
- }
- }
- }
- }
-
- ///
- /// Effettua il caricamento dello status da un valore precedente (es da cache REDIS)
- /// ATTENZIONE: eseguita solo se blockType == bitmap e size corrisponde a quella della mem allarmi
- ///
- ///
- public void loadPrev(uint[] lastState)
- {
- // verifico si tratti di un tipo allarmi a bitmap... altrimenti salto
- if (blockType == AlarmBlockType.Bitmap)
- {
- if (lastState.Length == alarmsState.Length)
- {
- alarmsState = lastState;
- }
- }
- }
-
- ///
- /// Imposta il valore dello status attuale allarme impostando eventuale valore blink x le variazioni
- ///
- ///
- ///
- public void updStatusVal(int num, uint newStatus)
- {
- // salvo nuovo valore
- alarmsState[num] = newStatus;
- }
-
- ///
- /// Tipologia del blocco allarmi configurato
- ///
- public enum AlarmBlockType
- {
- ///
- /// Modalità standard a bitmap
- ///
- Bitmap,
-
- ///
- /// Modalità elenco dei valori attivi (es OPC-UA BLM/Adige)
- ///
- ActiveList
- }
-
- ///
- /// Livello Allarme
- ///
- public enum AlarmLevel
- {
- ///
- /// Messaggio (non bloccante)
- ///
- Message = 0,
-
- ///
- /// Avviso (non bloccante)
- ///
- Warning = 100,
-
- ///
- /// Allarme (bloccante)
- ///
- Alarm = 200,
-
- ///
- /// Allarme di massimo livello
- ///
- Emergency = 300
- }
-
-
- #endregion Public Methods
- }
-
- ///
- /// Classe gestione configurazione parametri di base x configurazione estesa (es MTConnect,
- /// OPC-UA, ...)
- ///
- public class BaseParamConf
- {
- #region Public Properties
-
- ///
- /// Struttura dati x check condizione LAVORA / Green
- ///
- public List condWork { get; set; } = new List();
-
-
- ///
- /// Struttura dati x check condizione EXTRA di controllo x singoli BIT
- ///
- public Dictionary bitSpecCond { get; set; } = new Dictionary();
-
- ///
- /// Indica se l'emergenza armata va riportata verso Mapo come bit a TRUE True --> armata
- /// = 1 / triggered = 0 False --> triggered = 1 / armata = 0
- ///
- public bool emergencyArmedTrue { get; set; } = true;
-
- ///
- /// Elenco items FILTRATI da invio come dynData --> FluxLog (events o samples), ricerca SECCA
- ///
- public List fluxLogVeto { get; set; } = new List();
-
- ///
- /// Elenco items FILTRATI da invio come dynData --> FluxLog (events o samples), ricerca testo come contains in displayName
- ///
- public List fluxLogVetoContains { get; set; } = new List();
-
- ///
- /// Indica se il controllo di ping sia OK (x controllo prima della connessione)
- ///
- public bool forcePingOk { get; set; } = false;
-
- ///
- /// Array degli elementi di traduzione item
- ///
- public Dictionary itemTranslation { get; set; } = new Dictionary();
-
-
- ///
- /// Indica se decodificare valori dall'area mMapRead da valori byte[] delle variabili sottoscritte
- ///
- public bool mMapReadFromRawByte { get; set; } = false;
- ///
- /// Indica se decodificare valori dall'area mMapWrite da valori byte[] delle variabili sottoscritte
- ///
- public bool mMapWriteFromRawByte { get; set; } = false;
-
- ///
- /// Indica se inviare i dati sottoscritti che sono "raw" o meno...
- ///
- public bool sendSubscribItemsRaw { get; set; } = true;
-
- ///
- /// Separatore configurazione area OPC e subObj in caso di memorie struct speciali
- ///
- public char kvDelim { get; set; } = '#';
-
- ///
- /// Separatore definizione aree memoria speciali
- ///
- public char memDelim { get; set; } = '.';
-
-
- ///
- /// Nome variabile x EmergencyStop
- ///
- public string keyEStop { get; set; } = "";
-
- ///
- /// Nome variabile x ExeMode
- ///
- public string keyExeMode { get; set; } = "";
-
- ///
- /// Nome variabile x pezzi FATTI
- ///
- public string keyPartCount { get; set; } = "";
-
- ///
- /// Nome variabile x Codice Articolo
- ///
- public string keyPartId { get; set; } = "";
-
- ///
- /// Nome variabile x pezzi RICHIESTI
- ///
- public string keyPartReq { get; set; } = "";
-
- ///
- /// Nome variabile x NOME PROGRAMMA
- ///
- public string keyProgName { get; set; } = "";
-
- ///
- /// Nome variabile x RunMode
- ///
- public string keyRunMode { get; set; } = "";
-
- ///
- /// Aree di memoria lettura
- ///
- public Dictionary mMapRead { get; set; } = new Dictionary();
-
- ///
- /// Aree di memoria scrittura
- ///
- public Dictionary mMapWrite { get; set; } = new Dictionary();
-
- ///
- /// Dictionary dei nomi da cercare come "endsWith" a cui applicare la soglia indicata
- ///
- public Dictionary paramsEndThresh { get; set; } = new Dictionary();
-
- ///
- /// Dictionary dei nomi da cercare come "contains" a cui applicare la soglia indicata
- ///
- public Dictionary paramsContainsThresh { get; set; } = new Dictionary();
-
- ///
- /// Indica se il ping sia un criterio valido x determinare powerON impianto
- ///
- public bool pingAsPowerOn { get; set; } = true;
-
- ///
- /// Indica se venga richiesta invio del run mode
- ///
- public bool runModeSend { get; set; } = false;
-
- ///
- /// Indica se venga richiesta traduzione del run mode
- ///
- public bool runModeTrad { get; set; } = false;
-
- ///
- /// Lista ulteriori configurazioni KeyValuePair
- ///
- public Dictionary optKVP { get; set; } = new Dictionary();
-
- #endregion Public Properties
- }
-
- ///
- /// Oggetto x processing valori (elenco valori e modalità)
- ///
- public class calcConf
- {
- #region Public Properties
-
- public calcMode calcMode { get; set; } = calcMode.None;
- public List listVal { get; set; } = new List();
-
- #endregion Public Properties
- }
-
- ///
- /// Classe per rappresentare oggetti chiave/valore target x controlo condizioni multiple
- ///
- public class diCheckCondition
- {
- #region Public Properties
-
- ///
- /// Nome variabile
- ///
- public string keyName { get; set; } = "";
-
- ///
- /// Se >=0 indica ordine bit x decodifica di byte[] raw
- ///
- public int bitNum { get; set; } = -1;
-
- ///
- /// valore target per esito richiesto
- ///
- public string targetValue { get; set; } = "";
-
- #endregion Public Properties
- }
-
- ///
- /// Classe per rappresentare una lista di oggetti chiave/valore target x controlo condizioni
- /// multiple + indicazione modalità di controllo (AND/OR/...)
- ///
- public class diCheckCondSetup
- {
- #region Public Properties
-
- ///
- /// Elenco condizioni
- ///
- public List checkList { get; set; } = new List();
-
- ///
- /// Modalità verifica condizioni
- ///
- public boolCheckMode checkMode { get; set; } = boolCheckMode.AND;
-
- ///
- /// indica se il check vada NEGATO (esempio se cerco la condizione opposta, esempio num
- /// allarmi 0 --> se true NEGO la condizione HO ALLARMI)
- ///
- public bool negateValue { get; set; } = false;
-
- #endregion Public Properties
- }
-
- ///
- /// Classe x definizione delle azioni in fase di setup macchina
- ///
- public class MachineSetupAction
- {
- #region Public Properties
-
- ///
- /// Indica se vada disabilitato il contapezzi quando la condizione NotEqual sia soddisfatta
- ///
- public bool DisablePzCountNotEqual { get; set; } = false;
-
- ///
- /// Parametro target dell'azione
- ///
- public string TargetParam { get; set; } = "";
-
- ///
- /// parametro da impostare SE il check da esito EQUAL
- ///
- public int TargetValEqual { get; set; } = 0;
-
- ///
- /// parametro da impostare SE il check da esito NOT EQUAL
- ///
- public int TargetValNotEqual { get; set; } = 1;
-
- #endregion Public Properties
- }
-
- ///
- /// Definizione parametri di setup incrociato...
- ///
- public class MachineSetupConf
- {
- #region Public Properties
-
- ///
- /// Dizionario dei parametri di corrispondenza tra variabili MES e variabili Macchina MES =
- /// scritte dal MES Macchina = scritte da macchina
- ///
- public Dictionary checkParList { get; set; } = new Dictionary();
-
- ///
- /// Abilitazione gestione Setup Avanzato (= scrittura)
- ///
- public bool EnableAdvSetup { get; set; } = false;
-
- ///
- /// Modalità gestione setup
- ///
- public MachineSetupMode SetupMode { get; set; } = MachineSetupMode.ND;
-
- ///
- /// Dizionario dei parametri da scrivere quando si rilevano differenze tra i parametri MES/Macchina
- ///
- public List writeParAction { get; set; } = new List();
-
- #endregion Public Properties
- }
-
- ///
- /// COnfigurazione blocchi x accesso memoria ottimizzato
- ///
- public class MemBlockConf
- {
- #region Public Properties
-
- public Dictionary ReadBlocks { get; set; } = new Dictionary();
-
- #endregion Public Properties
- }
-
- ///
- /// Classe gestione configurazione parametri specifici MTC da BaseParamConf
- ///
- public class MtcParamConf : BaseParamConf
- {
- #region Public Properties
-
- ///
- /// Struttura dati x check condizione PowerOn
- ///
- public diCheckCondition condPowerOn { get; set; } = new diCheckCondition();
-
- ///
- /// Intervallo standard x SAMPLE data in ms
- ///
- public int clientSampleIntMs { get; set; } = 500;
-
- ///
- /// Timeout standard x richieste in ms
- ///
- public int reqTOutMs { get; set; } = 1500;
-
- ///
- /// Intervallo riconnessione standard in caso di mancanza risposta in ms
- ///
- public int reconnectIntMs { get; set; } = 1500;
-
- ///
- /// Indica se usare il metodo di sottoscrizione alle variazioni in modalità observations
- ///
- public bool doSubsObserv { get; set; } = false;
-
- ///
- /// Indica se usare il metodo di sottoscrizione alle variazioni sample
- ///
- public bool doSubsSample { get; set; } = true;
-
-
- #endregion Public Properties
- }
-
- ///
- /// Classe gestione configurazione parametri specifici OPC-UA da BaseParamConf
- ///
- public class OpcUaParamConf : BaseParamConf
- {
- #region Public Properties
-
- ///
- /// Elenco Variabili (e valori da impostare) x indicare di resettare contatore lotto e
- /// quindi riavviare produzione (es: impostando valore a 1...)
- ///
- public Dictionary actResetCounter { get; set; } = new Dictionary();
-
- ///
- /// Elenco Variabili (e valori da impostare) x indicare di effettuare impostazione nuovo
- /// programma/ricetta (es: impostando valore a 1...)
- ///
- public Dictionary actSetRecipe { get; set; } = new Dictionary();
-
- ///
- /// Elenco Variabili (e valori da impostare) x indicare di fermare la produzione (es:
- /// impostando valore a 1...)
- ///
- public Dictionary actStopProd { get; set; } = new Dictionary();
-
- ///
- /// Identificativo nodo iniziale
- ///
- public string BrowseFullVal { get; set; } = "ns=2;s=Scalar_Static";
-
- ///
- /// Elenco di nodi da sottoscrivere direttamente al posto dell'albero derivante dal BrowseFullVal
- ///
- public List BrowseNodeList { get; set; } = new List();
-
- ///
- /// Indice NS da cui fare il browse dei file
- ///
- public ushort BrowseNSIndex { get; set; } = 4;
-
- ///
- /// ID del nodo da cui partire x il browse di identificazione nodi iniziale
- ///
- public uint BrowseValue { get; set; } = 5001;
-
- ///
- /// Lista valori calcolati/derivati da processare
- ///
- public Dictionary calcValues { get; set; } = new Dictionary();
-
- ///
- /// Numero minimo di secondi di durata di uno status
- ///
- public int minSecStatusDuration { get; set; } = 1;
-
- ///
- /// Numero minimo di secondi di attesa finale (es prima di chiedere chiusura ODL)
- ///
- public int minSecFinalWait { get; set; } = 30;
-
- ///
- /// Struttura dati x check condizione Contapezzi Abilitato (se vuoto = sempre abilitato)
- ///
- public diCheckCondSetup condCountEnabled { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Errore
- ///
- public diCheckCondSetup condError { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Emergenza
- ///
- public diCheckCondSetup condEStop { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Manual
- ///
- public diCheckCondSetup condManual { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione PowerOn
- ///
- public diCheckCondSetup condPowerOn { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione READY
- ///
- public diCheckCondSetup condReady { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Setup
- ///
- public diCheckCondSetup condSetup { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione WarmUp - CoolDown
- ///
- public diCheckCondSetup condWarmUpCoolDown { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Warning
- ///
- public diCheckCondSetup condWarning { get; set; } = new diCheckCondSetup();
-
- ///
- /// Struttura dati x check condizione Errore
- ///
- public diCheckCondSetup condWorkOpc { get; set; } = new diCheckCondSetup();
-
- ///
- /// Elenco dei NodeId da ignorare intesi come interi rami (se vuoto NON filtro)
- ///
- public List filterItemsNodeId { get; set; } = new List();
-
- ///
- /// Elenco item flux da FILTRARE per chiave tradotta/VALORE
- /// es: Cimolai / Baglietto, RunModeVal NON VOGLIO inviare quando il valore è 0
- ///
- public Dictionary> fluxLogKeyValVeto { get; set; } = new Dictionary>();
-
- public UserIdent Identity { get; set; } = new UserIdent();
-
- ///
- /// Aree di memoria lettura
- ///
- public new Dictionary mMapRead { get; set; } = new Dictionary();
-
- ///
- /// Aree di memoria scrittura
- ///
- public new Dictionary mMapWrite { get; set; } = new Dictionary();
-
- ///
- /// Elenco item RAW sottoscritti e relative configurazioni di decodifica da byte[]
- ///
- public Dictionary rawSubscribedItemsConf { get; set; } = new Dictionary();
-
- ///
- /// Conf gestione setup macchina
- ///
- public MachineSetupConf SetupConf { get; set; } = new MachineSetupConf();
-
- ///
- /// Elenco dei SOLI item sottoscritti (se vuoto TUTTI)
- ///
- public List subscribedItems { get; set; } = new List();
-
- ///
- /// Conf Gestione WatchDog
- ///
- public WatchDogConf WatchDog { get; set; } = new WatchDogConf();
-
- ///
- /// Indica che si utilizza (per LUT e gestione conf) il NodeId completo, default false (solo il DisplayName)
- ///
- public bool UseFullId { get; set; } = false;
-
- ///
- /// Numero massimo di letture null prima di disconnettere il client
- ///
- public int maxNullRead { get; set; } = 1000;
-
- ///
- /// Base del namespace da mascherare in invio OPC
- ///
- public string BaseIdMask { get; set; } = "";
-
- public Dictionary DictOpcNameReplace { get; set; } = new Dictionary();
-
- #endregion Public Properties
- }
-
- ///
- /// Classe gestione configurazione parametri specifici Rest Client da BaseParamConf
- ///
- public class RestParamConf : BaseParamConf
- {
- ///
- /// Timeout chiamate REST
- ///
- public int timeOutSec { get; set; } = 60;
-
- ///
- /// API di base x chiamate REST, eventuali variabili van indicate come [[nomevar]]
- ///
- public string apiUrl { get; set; } = "";
-
- ///
- /// Periodo minimo di campionamento in ms x lettura dati frequenti stato/semafori...
- ///
- public int samplePeriod { get; set; } = 1000;
-
- ///
- /// Numero di errori dopo cui fare una vera disconnesisone con report poweroff della macchina
- ///
- public int connErrorMax { get; set; } = 5;
-
- ///
- /// Elenco delle chiamate x ID / struttura
- ///
- public Dictionary CallList { get; set; } = new Dictionary();
-
- public class CallStruc
- {
- ///
- /// ID univoco chiamata per poterla recuperare
- ///
- public int Idx { get; set; } = 0;
-
- ///
- /// Metodo chiamata
- ///
- public RestSharp.Method Method { get; set; } = RestSharp.Method.Get;
-
- ///
- /// Url chiamata
- ///
- public string Url { get; set; } = "";
-
- ///
- /// Nome x invio a MES
- ///
- public string Name { get; set; } = "";
-
- ///
- /// Nome x salvataggio valore output in ProdData da poter richiamare
- ///
- public string OutVarName { get; set; } = "";
-
- ///
- /// Intervallo di campionamento (minimo) da rispettare x evitare flood chiamate
- ///
- public int SamplePeriod { get; set; } = 5000;
-
- ///
- /// Elenco chiamate richieste se non fosse trovata/valida una variabile
- ///
- public List ListPrevCall { get; set; } = new List();
- }
- }
-
- public class UserIdent
- {
- #region Public Properties
-
- public string Passwd { get; set; } = "";
- public string UserName { get; set; } = "";
-
- #endregion Public Properties
- }
-
- ///
- /// Definizione parametri watchdog
- ///
- public class WatchDogConf
- {
- #region Public Properties
-
- ///
- /// Abilitazione WatchDog
- ///
- public bool IsEnabled { get; set; } = false;
-
- ///
- /// Valore max contatore prima di resettare
- ///
- public int MaxVal { get; set; } = 9999;
-
- ///
- /// Conf memoria x lettura WatchDog (ToMes), se !="" è gestito
- ///
- public string MemConfRead { get; set; } = "";
-
- ///
- /// Conf memoria x scrittura WatchDog (FromMes), se !="" è gestito
- ///
- public string MemConfWrite { get; set; } = "";
-
- #endregion Public Properties
- }
-}
\ No newline at end of file
diff --git a/EgwConf.Iob/Mem/plcMemMapExt.cs b/EgwConf.Iob/Mem/plcMemMapExt.cs
deleted file mode 100644
index 21f0a58..0000000
--- a/EgwConf.Iob/Mem/plcMemMapExt.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using MapoSDK;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace EgwConf.Iob.Mem
-{
- public class plcMemMapExt : plcMemMap
- {
- ///
- /// Dizionario parametri opzionali
- ///
- public Dictionary optMemPar { get; set; } = new Dictionary();
-
- ///
- /// Dizionario x decodifica file
- ///
- public Dictionary fileDecod { get; set; } = new Dictionary();
-
- ///
- /// Lista ulteriori configurazioni KeyValuePair
- ///
- public Dictionary optKVP { get; set; } = new Dictionary();
-
-
- ///
- /// Dizionario opzionale di configurazione memorie WRITE con "alias",
- /// impiegato tipicamente per poter gestire scritture valori INT su CNC/PLC che non accettano stringhe (es FANUC)
- ///
- public Dictionary mMapWriteLink { get; set; } = new Dictionary();
-
- ///
- /// Dizionario di dizionari di decodifica, chiave è nome/tipo dizionario e poi dizionario da impiegare
- /// Usato ad esempio x decodifica stati da valore intero o degli step di esecuzione di un ciclo (es Fape v2+)
- ///
- public Dictionary> DataDecodMap { get; set; } = new Dictionary>();
-
-#if false
- ///
- /// Base del NameSpace usato per le funzionalità di translate (parametri ACT-SET), da inserire come PRE
- ///
- public string BaseKeyTranslate { get; set; } = "";
-
- ///
- /// Dizionario per la traduzione delle ricette (se gestite) tra valori acquisiti in dossier e impostazioni da inviare (ACTual, SETup)
- ///
- public Dictionary RecipeKeyTranslate { get; set; } = new Dictionary();
-#endif
- }
-}
\ No newline at end of file
diff --git a/EgwProxy.Shelly/index.md b/EgwProxy.Shelly/index.md
index 63cb151..3844385 100644
--- a/EgwProxy.Shelly/index.md
+++ b/EgwProxy.Shelly/index.md
@@ -8,7 +8,28 @@ https://nexus.steamware.net/#browse/browse:nuget-hosted
Vedere la sezione Articles per maggiori informazioni sulle definizioni, l'impiego ed esempi.
-L'oggetot id base è **EgwProxy.Shelly.Clients.* **
+L'oggetto id base è **EgwProxy.Shelly.Clients.* **
+
+Si sono provati apcchetti nuget ma non essendo soddisfacenti si è sviluppato custom da zero (partendod a esempi di chiamate nuget...)
+
+Riferimenti documentazione per Shelly:
+- https://shelly-api-docs.shelly.cloud/gen2/#status
+- https://shelly-api-docs.shelly.cloud/gen2/Devices/Gen3/Shelly1PMG3/
+- https://shelly-api-docs.shelly.cloud/gen2/General/ComponentConcept/
+- https://www.codeproject.com/Articles/5373077/Smart-Home-Controlling-Shelly-Devices-Part-1
+- https://www.codeproject.com/Articles/5374102/Smart-Home-Controlling-Shelly-Devices-Part-3
+- https://www.codeproject.com/Articles/5375803/Smart-Home-Controlling-Shelly-Devices-Part-4-Prope
+- https://github.com/nrjohnstone/shelly.net/blob/master/src/Shelly.Net/Clients/ShellyClientBase.cs
+
+Link dispositivi interni
+- http://10.74.81.71/
+- http://10.74.81.72/
+
+Valutazioni standard x Flur vs RestSharp:
+- https://flurl.dev/
+- https://jeremylindsayni.wordpress.com/2018/12/27/comparing-restsharp-and-flurl-http-while-consuming-a-web-service-in-net-core/
+- https://stackoverflow.com/questions/26996489/when-consuming-restful-apis-when-do-you-recommend-using-restsharp-and-when-http
+- https://medium.com/@sudipdevdev/choosing-the-best-api-request-library-for-c-a-comparison-of-refit-flurl-and-restsharp-ff339c407c38
## Articles