Rama Siemens:

- Update decodifica altri valori contatori
This commit is contained in:
Samuele Locatelli
2024-11-25 09:35:08 +01:00
parent 79f0ac91cc
commit 9ff0e8aae9
2 changed files with 80 additions and 30 deletions
+18 -15
View File
@@ -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": {
"\"": ""
}
+62 -15
View File
@@ -891,6 +891,40 @@ namespace IOB_WIN_NEXT.IobOpc
return changed;
}
/// <summary>
/// Fix stringa da versione "raw " a "bonificata"
/// </summary>
/// <param name="origName"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Dizionario chiavi OpcUa bonificate da char non standard
/// </summary>
internal Dictionary<string, string> DictOpcFixKeys { get; set; } = new Dictionary<string, string>();
/// <summary>
/// Verifica ed invia variazioni DAL FORMATO RAW data (byte[])
/// </summary>
@@ -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)
{