diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_RAMA_100_47.json b/IOB-WIN-NEXT/DATA/CONF/Tend_RAMA_100_47.json
index c0934eae..a4ff689b 100644
--- a/IOB-WIN-NEXT/DATA/CONF/Tend_RAMA_100_47.json
+++ b/IOB-WIN-NEXT/DATA/CONF/Tend_RAMA_100_47.json
@@ -4,7 +4,7 @@
"BrowseValue": 0,
"kvDelim": "#",
"memDelim": ".",
- "keyPartCount": "Production#GEN.Float.0",
+ "keyPartCount": "PV_Exchange_DB_R.Production#GEN.Float.0",
"keyPartReq": "",
"keyPartId": "",
"keyProgName": "",
@@ -14,22 +14,22 @@
"maxNullRead": 500,
"condWork": [
{
- "keyName": "Fabric Run",
+ "keyName": "PV_Exchange_DB_R.Fabric Run",
"bitNum": 0,
"targetValue": "1"
},
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 0,
"targetValue": "1"
},
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 4,
"targetValue": "1"
},
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 5,
"targetValue": "1"
}
@@ -38,12 +38,12 @@
"checkMode": "OR",
"checkList": [
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 4,
"targetValue": "1"
},
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 5,
"targetValue": "1"
}
@@ -53,7 +53,7 @@
"checkMode": "AND",
"checkList": [
{
- "keyName": "Enabled",
+ "keyName": "PV_Exchange_DB_R.Enabled",
"bitNum": 5,
"targetValue": "1"
}
@@ -63,7 +63,7 @@
"checkMode": "OR",
"checkList": [
{
- "keyName": "Fabric Run",
+ "keyName": "PV_Exchange_DB_R.Fabric Run",
"bitNum": 0,
"targetValue": "0"
}
@@ -77,7 +77,7 @@
"checkMode": "AND",
"checkList": [
{
- "keyName": "\"Alarms\"",
+ "keyName": "PV_Exchange_DB_R.Alarms",
"bitNum": 0,
"targetValue": "1"
}
@@ -96,7 +96,10 @@
"ns=3;s=\"PV_Exchange_DB_R\".\"Enabled\"",
"ns=3;s=\"PV_Exchange_DB_R\".\"Fabric Run\"",
"ns=3;s=\"PV_Exchange_DB_R\".\"Production\"",
- "ns=3;s=\"PV_Exchange_DB_R\".\"Alarms\""
+ "ns=3;s=\"PV_Exchange_DB_R\".\"Alarms\"",
+ "ns=3;s=\"SP_Exchange_DB_R\".\"Enabling\"",
+ "ns=3;s=\"SP_Exchange_DB_R\".\"Fabric Enabling\"",
+ "ns=3;s=\"SP_Exchange_DB_R\".\"Fabric Speed\""
],
"filterItemsNodeId": [
"ns=2;s=RamosaETN21.RamosaCJ2._Hints",
@@ -226,7 +229,7 @@
"OPC_Prod_PartMetCount": {
"name": "OPC_Prod_PartMetCount",
"description": "Contatore Metri Parziale",
- "memAddr": "\"Production\"#GEN.Float.0",
+ "memAddr": "PV_Exchange_DB_R.Production#GEN.Float.0",
"tipoMem": "FloatABCD",
"index": 1,
"size": 1,
@@ -240,7 +243,7 @@
"OPC_Prod_TotMetCount": {
"name": "OPC_Prod_TotMetCount",
"description": "Contatore Metri Totale",
- "memAddr": "\"Production\"#GEN.Float.4",
+ "memAddr": "PV_Exchange_DB_R.Production#GEN.Float.4",
"tipoMem": "FloatABCD",
"index": 1,
"size": 1,
@@ -254,7 +257,7 @@
"OPC_Prod_TotHourCount": {
"name": "OPC_Prod_TotHourCount",
"description": "Contatore Ore Totale",
- "memAddr": "\"Production\"#GEN.Float.8",
+ "memAddr": "PV_Exchange_DB_R.Production#GEN.Float.8",
"tipoMem": "FloatABCD",
"index": 1,
"size": 1,
@@ -274,7 +277,7 @@
"MemConfWrite": "",
"MaxVal": 9999
},
- "BaseIdMask": "\"PV_Exchange_DB_R\".",
+ "BaseIdMask": "",
"DictOpcNameReplace": {
"\"": ""
}
diff --git a/IOB-WIN-NEXT/IobOpc/OpcUa.cs b/IOB-WIN-NEXT/IobOpc/OpcUa.cs
index 4b30a141..d73a7009 100644
--- a/IOB-WIN-NEXT/IobOpc/OpcUa.cs
+++ b/IOB-WIN-NEXT/IobOpc/OpcUa.cs
@@ -891,6 +891,40 @@ namespace IOB_WIN_NEXT.IobOpc
return changed;
}
+ ///
+ /// Fix stringa da versione "raw " a "bonificata"
+ ///
+ ///
+ ///
+ internal string stringFixOpcUaName(string origName)
+ {
+ string answ = origName;
+ // se ho dizionari di sostituzione caratteri sistemo!
+ if (opcUaParams.DictOpcNameReplace.Count > 0)
+ {
+ // cerco nel dizionario LUT di traduzione
+ if (DictOpcFixKeys.ContainsKey(origName))
+ {
+ answ = DictOpcFixKeys[origName];
+ }
+ else
+ {
+ // altrimenti sitemo e metto in dizionario
+ foreach (var item in opcUaParams.DictOpcNameReplace)
+ {
+ answ = answ.Replace(item.Key, item.Value);
+ }
+ DictOpcFixKeys.Add(origName, answ);
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Dizionario chiavi OpcUa bonificate da char non standard
+ ///
+ internal Dictionary DictOpcFixKeys { get; set; } = new Dictionary();
+
///
/// Verifica ed invia variazioni DAL FORMATO RAW data (byte[])
///
@@ -923,7 +957,10 @@ namespace IOB_WIN_NEXT.IobOpc
string descr = "";
DateTime locTStamp = DateTime.Now;
descr = itemTranslation("OPC", uuid);
- sVal = $"Change 02: {locTStamp.ToString()} | descr: {descr} | Id: {MonIt.StartNodeId} | Val: {currVal}";
+ // calcolo nomi "bonificati"
+ string startNodeId = stringFixOpcUaName($"{MonIt.StartNodeId}");
+ string displayName = stringFixOpcUaName($"{MonIt.DisplayName}");
+ sVal = $"Change 02: {locTStamp.ToString()} | descr: {descr} | Id: {startNodeId} | Val: {currVal}";
lgDebug(sVal);
// verifico se salvare
@@ -933,7 +970,7 @@ namespace IOB_WIN_NEXT.IobOpc
// cerco filtro ANCHE PER solo display name x contains...
if (!isFiltered)
{
- isFiltered = opcUaParams.fluxLogVetoContains.Contains(uuid) || opcUaParams.fluxLogVetoContains.Contains(MonIt.DisplayName);
+ isFiltered = opcUaParams.fluxLogVetoContains.Contains(uuid) || opcUaParams.fluxLogVetoContains.Contains(displayName);
}
if (isFiltered)
{
@@ -950,22 +987,40 @@ namespace IOB_WIN_NEXT.IobOpc
if (memMap.mMapRead != null && memMap.mMapRead.Count > 0)
{
// elenco aree collegate...
- var listRelated = memMap.mMapRead.Where(x => x.Value.memAddr.Contains(uuid));
+ var listRelated = memMap.mMapRead.Where(x => x.Value.memAddr.Contains(uuid)).ToList();
if (listRelated != null && listRelated.Count() > 0)
{
foreach (var item in listRelated)
{
// ciclo e calcolo valore
- var rByte= dataItemMem[uuid].rawByte;
- string convVal = ConvBArr(rByte, item.Value.memAddr, opcUaParams.memDelim);
+ var rByte = dataItemMem[uuid].rawByte;
+ int iPos = item.Value.memAddr.IndexOf(opcUaParams.kvDelim);
+ string varDef = item.Value.memAddr.Substring(iPos + 1);
+ string convVal = ConvBArr(rByte, varDef, opcUaParams.memDelim);
// metto in array currData...
upsertKey(item.Key, convVal);
+ accodaFLog($"mMapRead | {item.Key} | {convVal}", qEncodeFLog(item.Key, convVal));
}
}
}
if (memMap.mMapWrite != null && memMap.mMapWrite.Count > 0)
{
-
+ // elenco aree collegate...
+ var listRelated = memMap.mMapWrite.Where(x => x.Value.memAddr.Contains(uuid)).ToList();
+ if (listRelated != null && listRelated.Count() > 0)
+ {
+ foreach (var item in listRelated)
+ {
+ // ciclo e calcolo valore
+ var rByte = dataItemMem[uuid].rawByte;
+ int iPos = item.Value.memAddr.IndexOf(opcUaParams.kvDelim);
+ string varDef = item.Value.memAddr.Substring(iPos + 1);
+ string convVal = ConvBArr(rByte, varDef, opcUaParams.memDelim);
+ // metto in array currData...
+ upsertKey(item.Key, convVal);
+ accodaFLog($"mMapRead | {item.Key} | {convVal}", qEncodeFLog(item.Key, convVal));
+ }
+ }
}
}
else
@@ -1357,15 +1412,7 @@ namespace IOB_WIN_NEXT.IobOpc
{
answ = fullCode.Replace(opcUaParams.BaseIdMask, "");
}
- // tolgo eventuali caratteri speciali mappati...
- // se c'รจ gestione fix nomi sistemo...
- if (opcUaParams.DictOpcNameReplace.Count > 0)
- {
- foreach (var item in opcUaParams.DictOpcNameReplace)
- {
- answ = answ.Replace(item.Key, item.Value);
- }
- }
+ answ = stringFixOpcUaName(answ);
// trimmo spazi x ridurre dimensione se > 50...
if (answ.Length > 50)
{