Merge branch 'release/OpcSiemensRama04'
This commit is contained in:
@@ -36,14 +36,14 @@ namespace IOB_UT_NEXT
|
||||
int bId = 0;
|
||||
if (int.TryParse(sList[3], out bId))
|
||||
{
|
||||
this.Bit = bId;
|
||||
this.Num = bId;
|
||||
}
|
||||
}
|
||||
}
|
||||
public string Product { get; set; } = "ND";
|
||||
public string Type { get; set; } = "ND";
|
||||
public int Idx { get; set; } = 0;
|
||||
public int Bit { get; set; } = 0;
|
||||
public int Num { get; set; } = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,6 +331,17 @@ namespace IOB_UT_NEXT
|
||||
/// </summary>
|
||||
public Dictionary<string, string> itemTranslation { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Separatore configurazione area OPC e subObj in caso di memorie struct speciali
|
||||
/// </summary>
|
||||
public char kvDelim { get; set; } = '#';
|
||||
|
||||
/// <summary>
|
||||
/// Separatore definizione aree memoria speciali
|
||||
/// </summary>
|
||||
public char memDelim { get; set; } = '.';
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Nome variabile x EmergencyStop
|
||||
/// </summary>
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
"BrowseFullVal": "ns=3;s=\"PV_Exchange_DB_R\"",
|
||||
"BrowseNSIndex": 0,
|
||||
"BrowseValue": 0,
|
||||
"keyPartCount": "\"Production\"#GEN.Float.0",
|
||||
"kvDelim": "#",
|
||||
"memDelim": ".",
|
||||
"keyPartCount": "PV_Exchange_DB_R.Production#GEN.Float.0",
|
||||
"keyPartReq": "",
|
||||
"keyPartId": "",
|
||||
"keyProgName": "",
|
||||
@@ -12,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"
|
||||
}
|
||||
@@ -36,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"
|
||||
}
|
||||
@@ -51,7 +53,7 @@
|
||||
"checkMode": "AND",
|
||||
"checkList": [
|
||||
{
|
||||
"keyName": "\"Enabled\"",
|
||||
"keyName": "PV_Exchange_DB_R.Enabled",
|
||||
"bitNum": 5,
|
||||
"targetValue": "1"
|
||||
}
|
||||
@@ -61,7 +63,7 @@
|
||||
"checkMode": "OR",
|
||||
"checkList": [
|
||||
{
|
||||
"keyName": "\"Fabric Run\"",
|
||||
"keyName": "PV_Exchange_DB_R.Fabric Run",
|
||||
"bitNum": 0,
|
||||
"targetValue": "0"
|
||||
}
|
||||
@@ -75,7 +77,7 @@
|
||||
"checkMode": "AND",
|
||||
"checkList": [
|
||||
{
|
||||
"keyName": "\"Alarms\"",
|
||||
"keyName": "PV_Exchange_DB_R.Alarms",
|
||||
"bitNum": 0,
|
||||
"targetValue": "1"
|
||||
}
|
||||
@@ -94,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",
|
||||
@@ -224,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,
|
||||
@@ -238,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,
|
||||
@@ -252,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,
|
||||
@@ -272,7 +277,7 @@
|
||||
"MemConfWrite": "",
|
||||
"MaxVal": 9999
|
||||
},
|
||||
"BaseIdMask": "\"PV_Exchange_DB_R\".",
|
||||
"BaseIdMask": "",
|
||||
"DictOpcNameReplace": {
|
||||
"\"": ""
|
||||
}
|
||||
|
||||
@@ -3547,7 +3547,7 @@ namespace IOB_WIN_NEXT.Iob
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// ActiveAlarmList.Add($"Unknown Bit.{i}");
|
||||
// ActiveAlarmList.Add($"Unknown Num.{i}");
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,14 +143,14 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
}
|
||||
else
|
||||
{
|
||||
if (diKey.Contains(kvDelim))
|
||||
if (diKey.Contains(opcUaParams.kvDelim))
|
||||
{
|
||||
int iPos = opcUaParams.keyPartCount.IndexOf(kvDelim);
|
||||
int iPos = opcUaParams.keyPartCount.IndexOf(opcUaParams.kvDelim);
|
||||
string kRef = opcUaParams.keyPartCount.Substring(0, iPos);
|
||||
string varDef = opcUaParams.keyPartCount.Substring(iPos + 1);
|
||||
// recupero byte
|
||||
byte[] bArray = getDataItemValueBytes(kRef);
|
||||
answ = ConvBArr(bArray, varDef, kvSet);
|
||||
answ = ConvBArr(bArray, varDef, opcUaParams.memDelim);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -438,11 +438,7 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||
return outVal;
|
||||
}
|
||||
/// <summary>
|
||||
/// Delimitatore nei key x indicare la parte di configurazione della variabile
|
||||
/// </summary>
|
||||
private char kvDelim = '#';
|
||||
private char kvSet = '.';
|
||||
|
||||
/// <summary>
|
||||
/// Effettua vero processing contapezzi
|
||||
/// </summary>
|
||||
@@ -458,14 +454,14 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
{
|
||||
// cerco parametro contapezzi... gest alternativa se è un parametro SPECIALE (con "#")
|
||||
string currPzCount = "";
|
||||
if (opcUaParams.keyPartCount.Contains(kvDelim))
|
||||
if (opcUaParams.keyPartCount.Contains(opcUaParams.kvDelim))
|
||||
{
|
||||
int iPos = opcUaParams.keyPartCount.IndexOf(kvDelim);
|
||||
int iPos = opcUaParams.keyPartCount.IndexOf(opcUaParams.kvDelim);
|
||||
string kRef = opcUaParams.keyPartCount.Substring(0, iPos);
|
||||
string varDef = opcUaParams.keyPartCount.Substring(iPos + 1);
|
||||
// recupero byte
|
||||
byte[] bArray = getDataItemValueBytes(kRef);
|
||||
currPzCount = ConvBArr(bArray, varDef, kvSet);
|
||||
currPzCount = ConvBArr(bArray, varDef, opcUaParams.memDelim);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -533,7 +529,7 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
switch (tVal)
|
||||
{
|
||||
case plcDataType.Boolean:
|
||||
var boolVal = S7.Net.Types.Boolean.GetValue(bArray[currMem.Idx], currMem.Bit);
|
||||
var boolVal = S7.Net.Types.Boolean.GetValue(bArray[currMem.Idx], currMem.Num);
|
||||
answ = $"{boolVal}";
|
||||
break;
|
||||
case plcDataType.Int:
|
||||
@@ -565,7 +561,7 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
//case plcDataType.RealLH:
|
||||
// break;
|
||||
case plcDataType.String:
|
||||
answ = S7.Net.Types.String.FromByteArray(bArray.Skip(currMem.Idx).Take(currMem.Bit).ToArray());
|
||||
answ = S7.Net.Types.String.FromByteArray(bArray.Skip(currMem.Idx).Take(currMem.Num).ToArray());
|
||||
break;
|
||||
//case plcDataType.HLPInt:
|
||||
// break;
|
||||
@@ -895,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>
|
||||
@@ -927,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
|
||||
@@ -937,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)
|
||||
{
|
||||
@@ -949,6 +982,46 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
{
|
||||
accodaFLog(sVal, qEncodeFLog(descr, currVal));
|
||||
//accodaFLog(sVal, qEncodeFLog(descr, $"{NotifyValue}"));
|
||||
|
||||
// calcolo eventuali variazioni dati "collegati" in memRead/memWrite...
|
||||
if (memMap.mMapRead != null && memMap.mMapRead.Count > 0)
|
||||
{
|
||||
// elenco aree collegate...
|
||||
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;
|
||||
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
|
||||
{
|
||||
@@ -1339,6 +1412,7 @@ namespace IOB_WIN_NEXT.IobOpc
|
||||
{
|
||||
answ = fullCode.Replace(opcUaParams.BaseIdMask, "");
|
||||
}
|
||||
answ = stringFixOpcUaName(answ);
|
||||
// trimmo spazi x ridurre dimensione se > 50...
|
||||
if (answ.Length > 50)
|
||||
{
|
||||
|
||||
@@ -29,10 +29,10 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
* STRUTTURA MEMORIA DB101: (scrittura) 14byte, solo 2 impiegati x ora
|
||||
* NB: segnali da tenere attivi ALMENO 3 secondi x farli recepire
|
||||
*
|
||||
* B0.0 Bit Azzeramento volume acqua OSMOSI
|
||||
* B0.1 Bit Azzeramento volume acqua DEPURAZIONE
|
||||
* B0.0 Num Azzeramento volume acqua OSMOSI
|
||||
* B0.1 Num Azzeramento volume acqua DEPURAZIONE
|
||||
*
|
||||
* B1.7 Bit Attivazione modo DEMO (0 = disattivato)
|
||||
* B1.7 Num Attivazione modo DEMO (0 = disattivato)
|
||||
*
|
||||
* -------------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
@@ -20,14 +20,14 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
*
|
||||
*
|
||||
* DB15
|
||||
* B0.0 Bit PowerOn
|
||||
* B0.1 Bit Run
|
||||
* B0.2 Bit Contapezzi
|
||||
* B0.3 Bit Allarme
|
||||
* B0.4 Bit Manuale
|
||||
* B0.5 Bit MagOutPieno
|
||||
* B0.6 Bit MagInVuoto
|
||||
* B0.7 Bit EmergenzaArmata (0=triggered,premuta)
|
||||
* B0.0 Num PowerOn
|
||||
* B0.1 Num Run
|
||||
* B0.2 Num Contapezzi
|
||||
* B0.3 Num Allarme
|
||||
* B0.4 Num Manuale
|
||||
* B0.5 Num MagOutPieno
|
||||
* B0.6 Num MagInVuoto
|
||||
* B0.7 Num EmergenzaArmata (0=triggered,premuta)
|
||||
* Contapezzi DInt 2
|
||||
* PezziRiman DInt 6
|
||||
*
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
* CodComm Array[0..9] of Char DBB20..29
|
||||
* CodProgr Array[0..9] of Char DBB30..39
|
||||
*
|
||||
* DB29 blocco dati letto dal MES Byte Bit
|
||||
* DB29 blocco dati letto dal MES Byte Num
|
||||
* CicloOn Bool 0 0
|
||||
* MacchOn Bool 0 1
|
||||
* ManualeOn Bool 0 2
|
||||
@@ -210,7 +210,7 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
* B5: emergenza (1=attiva/premuta, 0=armed)
|
||||
*
|
||||
* - BIT di stato
|
||||
* DB29 blocco dati letto dal MES Byte Bit
|
||||
* DB29 blocco dati letto dal MES Byte Num
|
||||
* CicloOn Bool 0 0
|
||||
* MacchOn Bool 0 1
|
||||
* ManualeOn Bool 0 2
|
||||
|
||||
Reference in New Issue
Block a user