diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.ini b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.ini index 7bc10477..d7dc786b 100644 --- a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.ini +++ b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.ini @@ -4,7 +4,7 @@ CNCTYPE=MODBUS_TCP_FIMAT PING_MS_TIMEOUT=1000 MinDeltaSec=5 -IOB_NAME=Tend_Fimat +;IOB_NAME=Tend_Fimat DIS_EXE_TASK=FALSE DIS_STATE_CH=FALSE @@ -33,6 +33,7 @@ SIZE_READ=10 SIZE_WRITE=0 HR_BASE_ADDR=40000 DELTA_BASE=0 +INDEX_LUT_CORR=-1 MODBUS_EXT_REG=0 diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json index f87f0c8f..8b027e14 100644 --- a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json +++ b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json @@ -1,14 +1,5 @@ { - "mMapWrite": { - "setProg": { - "name": "setProg", - "description": "Qty", - "memAddr": "406202", - "tipoMem": "Int", - "index": 6202, - "size": 1 - } - }, + "mMapWrite": { }, "mMapRead": { "StatoMacchina": { "name": "StatoMacchina", @@ -309,6 +300,25 @@ "AlarmIntCond": "40002|0=2", "ManualBitCond": "40003.1=1", "EStopBitCond": "40003.0=1", - "WorkIntCond": "40002|0=3" + "WorkIntCond": "40002|0=3", + "VarInt2Translate": "40002,40008", + "VarBit2Translate": "40004" + }, + "itemTranslation": { + "40002_0": "Stato non aggiornato per mancanza comunicazione da computer", + "40002_1": "Stato non aggiornato per mancanza comunicazione da PLC", + "40002_2": "Presenza di anomalie od attivit� che limitano il funzionamento", + "40002_3": "Macchina impegnata per attivit� normale in corso", + "40002_4": "Macchina libera e pronta al funzionamento", + "40004.0": "Posizione di dosaggio impegnata", + "40004.1": "Bidone con ricetta terminata od annullata da rimuovere da posizione di dosaggio", + "40004.2": "Ricetta in preparazione", + "40004.3": "Lavaggio valvole in corso", + "40004.4": "Avvio caricamento nuova ricetta in corso", + "40008_0": "Nessuno", + "40008_1": "Singola ricetta", + "40008_2": "Coda (modo non ancora avviato)", + "40008_3": "Coda (modo avviato)", + "40008_4": "Correzione" } } \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01__bck.json b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01__bck.json new file mode 100644 index 00000000..e2db329f --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01__bck.json @@ -0,0 +1,324 @@ +{ + "mMapWrite": { }, + "mMapRead": { + "StatoMacchina": { + "name": "StatoMacchina", + "description": "Stato della Macchina", + "memAddr": "40001", + "tipoMem": "Int", + "index": 1, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "ElencoAnomalie": { + "name": "ElencoAnomalie", + "description": "Elenco Anomalie", + "memAddr": "40002", + "tipoMem": "Int", + "index": 2, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "ElencoAttivita": { + "name": "ElencoAttivita", + "description": "Elenco Attivita", + "memAddr": "40003", + "tipoMem": "Int", + "index": 3, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "StatoRicircolo": { + "name": "StatoRicircolo", + "description": "Stato Ricircolo Serbatoi", + "memAddr": "40004", + "tipoMem": "Int", + "index": 4, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "NumAllarmi": { + "name": "NumAllarmi", + "description": "NUmero Allarmi Presenti", + "memAddr": "40005", + "tipoMem": "Int", + "index": 5, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "NumAllarmiNR": { + "name": "NumAllarmiNR", + "description": "NUmero Allarmi Non Riconosciuti", + "memAddr": "40006", + "tipoMem": "Int", + "index": 6, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "ModoPreparazione": { + "name": "ModoPreparazione", + "description": "Modo Preparazione Ricetta", + "memAddr": "40007", + "tipoMem": "Int", + "index": 7, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "NumRicette": { + "name": "NumRicette", + "description": "Numero Ricette in coda", + "memAddr": "40008", + "tipoMem": "Int", + "index": 8, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "StatoImport": { + "name": "StatoImport", + "description": "Stato Importazione file ricette XML da esterno", + "memAddr": "40009", + "tipoMem": "Int", + "index": 9, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 10, + "unit": "#" + }, + "LivSerb01": { + "name": "LivSerb01", + "description": "Livello Servatoio 01", + "memAddr": "40020", + "tipoMem": "Int", + "index": 20, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb02": { + "name": "LivSerb02", + "description": "Livello Servatoio 02", + "memAddr": "40021", + "tipoMem": "Int", + "index": 21, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb03": { + "name": "LivSerb03", + "description": "Livello Servatoio 03", + "memAddr": "40022", + "tipoMem": "Int", + "index": 22, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb04": { + "name": "LivSerb04", + "description": "Livello Servatoio 04", + "memAddr": "40023", + "tipoMem": "Int", + "index": 23, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb05": { + "name": "LivSerb05", + "description": "Livello Servatoio 05", + "memAddr": "40024", + "tipoMem": "Int", + "index": 24, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb06": { + "name": "LivSerb06", + "description": "Livello Servatoio 06", + "memAddr": "40025", + "tipoMem": "Int", + "index": 25, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb07": { + "name": "LivSerb07", + "description": "Livello Servatoio 07", + "memAddr": "40026", + "tipoMem": "Int", + "index": 26, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb08": { + "name": "LivSerb08", + "description": "Livello Servatoio 08", + "memAddr": "40027", + "tipoMem": "Int", + "index": 27, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb09": { + "name": "LivSerb09", + "description": "Livello Servatoio 09", + "memAddr": "40028", + "tipoMem": "Int", + "index": 28, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb10": { + "name": "LivSerb10", + "description": "Livello Servatoio 10", + "memAddr": "40029", + "tipoMem": "Int", + "index": 29, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb11": { + "name": "LivSerb11", + "description": "Livello Servatoio 11", + "memAddr": "40030", + "tipoMem": "Int", + "index": 30, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + }, + "LivSerb12": { + "name": "LivSerb12", + "description": "Livello Servatoio 12", + "memAddr": "40031", + "tipoMem": "Int", + "index": 31, + "size": 1, + "func": "MAX", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 1000, + "unit": "#" + } + }, + "optMemPar": { + "AlarmIntCond": "40000|1=2", + "ManualBitCond": "40002.1=1", + "EStopBitCond": "40002.0=1", + "WorkIntCond": "40000|1=3", + "VarInt2Translate": "40001,40007", + "VarBit2Translate": "40003" + }, + "itemTranslation": { + "40001_0": "Stato non aggiornato per mancanza comunicazione da computer", + "40001_1": "Stato non aggiornato per mancanza comunicazione da PLC", + "40001_2": "Presenza di anomalie od attività che limitano il funzionamento", + "40001_3": "Macchina impegnata per attività normale in corso", + "40001_4": "Macchina libera e pronta al funzionamento", + "40003.0": "Posizione di dosaggio impegnata", + "40003.1": "Bidone con ricetta terminata od annullata da rimuovere da posizione di dosaggio", + "40003.2": "Ricetta in preparazione", + "40003.3": "Lavaggio valvole in corso", + "40003.4": "Avvio caricamento nuova ricetta in corso", + "40007_0": "Nessuno", + "40007_1": "Singola ricetta", + "40007_2": "Coda (modo non ancora avviato)", + "40007_3": "Coda (modo avviato)", + "40007_4": "Correzione" + } +} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01_alarm.json b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01_alarm.json index 7dd02384..08460831 100644 --- a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01_alarm.json +++ b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01_alarm.json @@ -1,51 +1,18 @@ [ { - "description": "Allarmi Impianto", - "tipoMem": "DInt", - "memAddr": "40000", - "index": 0, - "size": 2, + "description": "Anomalie Macchina", + "tipoMem": "Int", + "memAddr": "40003", + "index": 3, + "size": 1, "messages": [ - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##", - "##EMERGENZA GENERALE", - "##TERMICO SCATTATO", - "##FAULT INVERTER", - "##FAULT STEPPER", - "##CARTER APERTI", - "##PORTA SX APERTA", - "##PORTA DX APERTA", - "##CARTER APERTI" - ] - }, - { - "description": "Allarmi Impianto", - "tipoMem": "DInt", - "memAddr": "40002", - "index": 2, - "size": 2, - "messages": [ - "##TOUT BF NASTRO 1", - "##TOUT BF NASTRO 2", - "##TOUT BF NASTRO 3", - "##TOUT BF NASTRO 4", - "##TOUT BF NASTRO 5", - "##TOUT BF NASTRO 6", - "##ALL MOTORULLO 1", - "##ALL MOTORULLO 2", - "##ALL MOTORULLO 3", - "##ALL MOTORULLO 4", - "##ALL MOTORULLO 5", - "##ALL MOTORULLO 6", - "##", - "##", - "##", + "Emergenza Premuta", + "##Macchina in Manuale", + "Azzeramento asse non ancora eseguito o anomalia al posizionamento valvole", + "Anomalia alla bilancia (errore, mancanza comunicazione o fuori scala)", + "Anomalia ad elemento di dosaggio", + "##Richiesta Sospensione attività", + "##Azzeramento peso in corso", "##" ] } diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index 5dbfadf0..4a483ef5 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -327,6 +327,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/IOB-WIN-NEXT/IobConfiguration.cs b/IOB-WIN-NEXT/IobConfiguration.cs index be5e8276..e4f5e401 100644 --- a/IOB-WIN-NEXT/IobConfiguration.cs +++ b/IOB-WIN-NEXT/IobConfiguration.cs @@ -70,6 +70,11 @@ namespace IOB_WIN_NEXT /// public string iniFileName { get; set; } = ""; + /// + /// Array degli elementi di traduzione item + /// + public Dictionary itemTranslation { get; set; } = new Dictionary(); + /// /// Valore MAX per countdown segnali blinking /// diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index a0eda48d..75decd9b 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -270,7 +270,6 @@ namespace IOB_WIN_NEXT /// public DateTime vetoDataSync = DateTime.Now; - /// /// Imposta veto chiamata split (durante chiamata, per 60 sec) /// @@ -1138,26 +1137,6 @@ namespace IOB_WIN_NEXT } } - /// - /// URL per chiusura PODL --> ODL corrente (metodo GET)... - /// - public string urlPODLClose - { - get - { - string answ = ""; - try - { - answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/closePODL/{cIobConf.codIOB}?idxPOdl="; - } - catch (Exception exc) - { - lgError(exc, "Errore in composizione urlPODLClose"); - } - return answ; - } - } - /// /// URL per AVVIO PODL corrente (metodo GET)... /// @@ -1178,6 +1157,26 @@ namespace IOB_WIN_NEXT } } + /// + /// URL per chiusura PODL --> ODL corrente (metodo GET)... + /// + public string urlPODLClose + { + get + { + string answ = ""; + try + { + answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/closePODL/{cIobConf.codIOB}?idxPOdl="; + } + catch (Exception exc) + { + lgError(exc, "Errore in composizione urlPODLClose"); + } + return answ; + } + } + /// /// URL per segnalazione reboot... /// @@ -4544,6 +4543,17 @@ namespace IOB_WIN_NEXT /// protected Dictionary OptCheckCondInt { get; set; } = new Dictionary(); + /// + /// Elenco di valori da tradurre da valori BIT (es ModBus TCP FIMAT) + /// NB: potrebbero essere contemporaneamente attivi + valori e + traduzioni + /// + protected Dictionary OptVar2TranslBit { get; set; } = new Dictionary(); + + /// + /// Elenco di valori da tradurre da valori INT esclusivi (es ModBus TCP FIMAT) + /// + protected Dictionary OptVar2TranslInt { get; set; } = new Dictionary(); + /// /// Indica se sia stato resettato un contapezzi /// @@ -4566,20 +4576,6 @@ namespace IOB_WIN_NEXT return answ; } } - /// - /// Fornisce formato valido x messa in coda nel formato dtEve#value#cont - /// - protected string getEncodSigLog(DateTime DtEvent, int val2log, int counter) - { - string answ = ""; - try - { - answ = $"{DtEvent:yyyyMMddHHmmssfff}#{val2log:X2}#{counter}"; - } - catch - { } - return answ; - } /// /// Indica se vada inviata la key richiesta con lo split/autoODL @@ -4733,6 +4729,27 @@ namespace IOB_WIN_NEXT return answ; } + /// + /// Classe di base implementazione traduzione di una LUT da memoria come valore BIT a valore + /// esplicito x FLog + /// + protected virtual void checkTranslateBit() + { + // verifico se devo processare decodifica di qualche valore... + if (OptVar2TranslBit != null && OptVar2TranslBit.Count > 0) + { } + } + + /// + /// Classe di base implementazione traduzione di una LUT da memoria come valore INT a valore + /// esplicito x FLog + /// + protected virtual void checkTranslateInt() + { + if (OptVar2TranslInt != null && OptVar2TranslInt.Count > 0) + { } + } + /// /// Restituisce stato allarmi in formato byte[] /// @@ -4820,6 +4837,21 @@ namespace IOB_WIN_NEXT return answ; } + /// + /// Fornisce formato valido x messa in coda nel formato dtEve#value#cont + /// + protected string getEncodSigLog(DateTime DtEvent, int val2log, int counter) + { + string answ = ""; + try + { + answ = $"{DtEvent:yyyyMMddHHmmssfff}#{val2log:X2}#{counter}"; + } + catch + { } + return answ; + } + /// /// Recupero dati da FluxLog /// @@ -5134,6 +5166,37 @@ namespace IOB_WIN_NEXT return answ; } + /// + /// Effettua traduzione ITEM da LUT parametrica (key: tipo+id) del file di conf, se non + /// trovo uso key + /// + /// + /// + /// + protected virtual string itemTranslation(string tipo, string id) + { + string answ = ""; + if (cIobConf.itemTranslation != null) + { + string lemma = id; + if (!string.IsNullOrEmpty(tipo)) + { + lemma = $"{tipo}_{id}"; + } + // cerco nel dizionario delle traduzioni SE esiste un valore e prendo quello, + // altrimenti uso il lemma... + if (cIobConf.itemTranslation.ContainsKey(lemma)) + { + answ = cIobConf.itemTranslation[lemma]; + } + else + { + answ = lemma; + } + } + return answ; + } + /// /// Effettua logging DEBUG corretto impostanto anche la variabile IOB prima di scrivere... /// @@ -6114,6 +6177,29 @@ namespace IOB_WIN_NEXT addCheckConditionInt(item.Key, item.Value); } } + // cerco valori *2Translate + var listVal2Translate = memMap.optMemPar.Where(x => x.Key.Contains("2Translate")).ToList(); + if (listVal2Translate != null && listVal2Translate.Count > 0) + { + // cerco solo valori BIT... + var listValBit = listVal2Translate.Where(x => x.Key.StartsWith("VarBit2Translate")).ToList(); + if (listValBit != null && listValBit.Count > 0) + { + foreach (var item in listValBit) + { + addVal2TranslBit(item.Value); + } + } + // ...e poi valori INT... + var listValInt = listVal2Translate.Where(x => x.Key.StartsWith("VarInt2Translate")).ToList(); + if (listValInt != null && listValInt.Count > 0) + { + foreach (var item in listValInt) + { + addVal2TranslInt(item.Value); + } + } + } } } @@ -6190,7 +6276,7 @@ namespace IOB_WIN_NEXT } /// - /// Effettua chiamata MP-IO per tentare chiusura PODL --> ODL specifico + /// Effettua chiamata MP-IO per tentare chiusura PODL --> ODL specifico /// /// /// @@ -6554,6 +6640,42 @@ namespace IOB_WIN_NEXT } } + /// + /// Aggiunge in setup memoria l'oggetto tipo valore BIT (NON mutuamente esclusivo) da tradurre + /// + /// Elenco valori da aggiungere formato csv (es "a,b,c") + private void addVal2TranslBit(string csvList) + { + var list2add = csvList.Split(','); + foreach (var memKey in list2add) + { + // cerco x aggiungere... + if (!OptVar2TranslBit.ContainsKey(memKey)) + { + // init traduzione vuota + OptVar2TranslBit.Add(memKey,""); + } + } + } + + /// + /// Aggiunge in setup memoria l'oggetto tipo valore INT (mutuamente esclusivo) da tradurre + /// + /// Elenco valori da aggiungere formato csv (es "a,b,c") + private void addVal2TranslInt(string csvList) + { + var list2add = csvList.Split(','); + foreach (var memKey in list2add) + { + // cerco x aggiungere... + if (!OptVar2TranslInt.ContainsKey(memKey)) + { + // init traduzione vuota + OptVar2TranslInt.Add(memKey,""); + } + } + } + /// /// Verifica se ci sia veto log attivo e gestisce casistiche /// diff --git a/IOB-WIN-NEXT/IobMTC.cs b/IOB-WIN-NEXT/IobMTC.cs index c7590dff..d7df36f6 100644 --- a/IOB-WIN-NEXT/IobMTC.cs +++ b/IOB-WIN-NEXT/IobMTC.cs @@ -659,7 +659,7 @@ namespace IOB_WIN_NEXT /// /// /// - protected string itemTranslation(string tipo, string id) + protected override string itemTranslation(string tipo, string id) { string answ = ""; string lemma = $"{tipo}_{id}"; diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index c987b75a..82e5159b 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -696,6 +696,79 @@ namespace IOB_WIN_NEXT #region Protected Methods + /// + /// Classe di base implementazione traduzione di una LUT da memoria come valore BIT (multipli) a valore + /// esplicito x FLog + /// + protected override void checkTranslateBit() + { + // verifico se devo processare decodifica di qualche valore... + if (OptVar2TranslBit != null && OptVar2TranslBit.Count > 0) + { + // ciclo x ogni valore da tradurre + + // cerco valore nella LUT... se è pari cerco "direttamente" altrimenti dal pari inferiore e 2° INT[] + + // eseguo trduzione da conf + + // se è variato rispetto precedente --> accodo in FLog e salvo... + } + } + + /// + /// Classe di base implementazione traduzione di una LUT da memoria come valore INT a valore + /// esplicito x FLog + /// + protected override void checkTranslateInt() + { + if (OptVar2TranslInt != null && OptVar2TranslInt.Count > 0) + { + // ciclo x ogni valore da tradurre + foreach (var item in OptVar2TranslInt) + { + int reqAddr = 0; + // traduco in int... + int.TryParse(item.Key, out reqAddr); + int lutAddr = reqAddr + indexLutCorr; + int valInt = 0; + // cerco valore nella LUT... se è pari cerco "direttamente" altrimenti dal pari inferiore e 2° INT[] + if (lutAddr % 2 == 0) + { + } + else + { + lutAddr--; + } +#if false + listInt = HoldingRegisterLUT[OptCheckCondInt[cKey].BaseAddr]; + + int lutAddress = parametri.holdRegBaseAddr + item.Value.index + deltaBase + indexLutCorr; + // se size = 1 --> devo cambiare modo recupero + if (item.Value.size == 1) + { + //if (item.Value.index % 2 == 0) + if (lutAddress % 2 == 0) + { + Array.Copy(HoldingRegisterLUT[lutAddress], 0, listInt, 0, 1); + } + else + { + lutAddress--; + Array.Copy(HoldingRegisterLUT[lutAddress], 1, listInt, 0, 1); + } + } + +#endif + + + + // eseguo trduzione da conf + + // se è variato rispetto precedente --> accodo in FLog e salvo... + } + } + } + /// /// Decodifica il resto dell'area x i dati accessori (allarmi, ...) /// @@ -1173,6 +1246,7 @@ namespace IOB_WIN_NEXT // provo anche come stringa intera lgTrace($"{currMemType} | {baseAddr:000} | Val string: {ModbusClient.ConvertRegistersToString(readTestInt, 0, readTestInt.Length)}"); break; + case modbusMemType.NotDefined: default: lgTrace($"Errore: tipo memoria non definitito per {baseAddr} / {numVals}"); diff --git a/IOB-WIN-NEXT/IobModbusTCPFimat.cs b/IOB-WIN-NEXT/IobModbusTCPFimat.cs index 1a0b192e..ec88c4de 100644 --- a/IOB-WIN-NEXT/IobModbusTCPFimat.cs +++ b/IOB-WIN-NEXT/IobModbusTCPFimat.cs @@ -66,7 +66,7 @@ namespace IOB_WIN_NEXT { get { - return testDisInBitCondition("EStopBitCond"); + return testBitCondition("EStopBitCond"); } } @@ -140,8 +140,7 @@ namespace IOB_WIN_NEXT if (HoldingRegisterLUT != null && HoldingRegisterLUT.Count > 0) { // se emergenza NON premuta (triggered) indico OK (armata...) FARE !!! togliere true - //if (!EStopTriggered) - if (true) + if (!EStopTriggered) { byteSignals += (1 << 7); } @@ -159,6 +158,9 @@ namespace IOB_WIN_NEXT { byteSignals += (1 << 1); } + + checkTranslateBit(); + checkTranslateInt(); } else { diff --git a/IOB-WIN-NEXT/IobOpcUa.cs b/IOB-WIN-NEXT/IobOpcUa.cs index e763d266..e6d9d136 100644 --- a/IOB-WIN-NEXT/IobOpcUa.cs +++ b/IOB-WIN-NEXT/IobOpcUa.cs @@ -1124,7 +1124,7 @@ namespace IOB_WIN_NEXT /// /// /// - protected string itemTranslation(string tipo, string id) + protected override string itemTranslation(string tipo, string id) { string answ = ""; string lemma = id;