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;