diff --git a/IOB-WIN-OPC-UA/DATA/CONF/1042.json b/IOB-WIN-OPC-UA/DATA/CONF/1042.json
index cb7188a7..d8acc108 100644
--- a/IOB-WIN-OPC-UA/DATA/CONF/1042.json
+++ b/IOB-WIN-OPC-UA/DATA/CONF/1042.json
@@ -207,7 +207,7 @@
"setPzComm": {
"name": "setPzComm",
"description": "Qty",
- "tipoMem": "Int",
+ "tipoMem": "String",
"memAddr": "ns=4;s=ext_stringa3_popup",
"index": 0,
"size": 4
diff --git a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini
index 37955f66..60f333fd 100644
--- a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini
+++ b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini
@@ -28,7 +28,7 @@ CLI_INST=SteamWareSim
;STARTLIST=3026
;STARTLIST=TFT_RAMA_001
;STARTLIST=SIM_DP_01
-;STARTLIST=1042
-STARTLIST=2016
+STARTLIST=1042
+;STARTLIST=2016
MAXCNC=10
\ No newline at end of file
diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs
index 9586d048..2594ae31 100644
--- a/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs
+++ b/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs
@@ -2099,7 +2099,7 @@ namespace IOB_WIN_OPC_UA.IobOpc
string nodeId = memAddrWrite.Substring(0, iPos);
string varName = memAddrWrite.Substring(iPos + 1);
- //cerco se ci sia già un record Uds...
+ // cerco se ci sia già un record Uds...
if (nodesUdt2Write.ContainsKey(nodeId))
{
currUdsDict = nodesUdt2Write[nodeId];
diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs
index 77512991..3bb07b93 100644
--- a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs
+++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs
@@ -202,97 +202,106 @@ namespace IOB_WIN_OPC_UA.IobOpc
///
protected override void plcWriteParams(ref List updatedPar)
{
- dataConf currMem = null;
- int byteSize = 0;
- string memAddrWrite = "";
- string serObj = "";
- if (updatedPar != null)
+#if false
+ bool doLegacy = false;
+ if (doLegacy)
{
- List nodes2Write = new List();
- // controllo i parametri... ne gestisco 4...
- foreach (var item in updatedPar)
+ dataConf currMem = null;
+ int byteSize = 0;
+ string memAddrWrite = "";
+ string serObj = "";
+ if (updatedPar != null)
{
- try
+ List nodes2Write = new List();
+ // controllo i parametri... ne gestisco 4...
+ foreach (var item in updatedPar)
{
- memAddrWrite = "";
- int valInt = 0;
- double valReal = 0;
- // cerco in area memMapWrite...
- if (memMap.mMapWrite.ContainsKey(item.uid))
+ try
{
- // recupero!
- currMem = memMap.mMapWrite[item.uid];
- byteSize = currMem.size;
- memAddrWrite = currMem.memAddr;
-
- WriteValue commWriteVal = new WriteValue();
- commWriteVal.NodeId = new NodeId(currMem.memAddr);
- commWriteVal.AttributeId = Attributes.Value;
- commWriteVal.Value = new DataValue();
- commWriteVal.Value.Value = item.reqValue;
-
- // faccio preliminarmente upsertKey...
- upsertKey(currMem.name, currMem.value);
- serObj = JsonConvert.SerializeObject(item);
- lgInfo($"Inizio processing plcWriteParams per {currMem.name} | valore richiesto {currMem.value}");
- lgInfo($"---------------{Environment.NewLine}UPDATED PARAM:{Environment.NewLine}{serObj}{Environment.NewLine}---------------");
- serObj = JsonConvert.SerializeObject(currMem);
- lgInfo($"---------------{Environment.NewLine}MEMORY CONTENT:{Environment.NewLine}{serObj}{Environment.NewLine}---------------");
-
- switch (currMem.tipoMem)
+ memAddrWrite = "";
+ int valInt = 0;
+ double valReal = 0;
+ // cerco in area memMapWrite...
+ if (memMap.mMapWrite.ContainsKey(item.uid))
{
- case plcDataType.Boolean:
- break;
+ // recupero!
+ currMem = memMap.mMapWrite[item.uid];
+ byteSize = currMem.size;
+ memAddrWrite = currMem.memAddr;
- case plcDataType.Int:
- case plcDataType.DInt:
- case plcDataType.Word:
- case plcDataType.DWord:
- int.TryParse(item.reqValue, out valInt);
- commWriteVal.Value.Value = valInt;
- break;
+ WriteValue commWriteVal = new WriteValue();
+ commWriteVal.NodeId = new NodeId(currMem.memAddr);
+ commWriteVal.AttributeId = Attributes.Value;
+ commWriteVal.Value = new DataValue();
+ commWriteVal.Value.Value = item.reqValue;
- case plcDataType.Real:
- double.TryParse(item.reqValue, out valReal);
- commWriteVal.Value.Value = valReal;
- break;
+ // faccio preliminarmente upsertKey...
+ upsertKey(currMem.name, currMem.value);
+ serObj = JsonConvert.SerializeObject(item);
+ lgInfo($"Inizio processing plcWriteParams per {currMem.name} | valore richiesto {currMem.value}");
+ lgInfo($"---------------{Environment.NewLine}UPDATED PARAM:{Environment.NewLine}{serObj}{Environment.NewLine}---------------");
+ serObj = JsonConvert.SerializeObject(currMem);
+ lgInfo($"---------------{Environment.NewLine}MEMORY CONTENT:{Environment.NewLine}{serObj}{Environment.NewLine}---------------");
- case plcDataType.String:
- commWriteVal.Value.Value = item.reqValue;
- break;
+ switch (currMem.tipoMem)
+ {
+ case plcDataType.Boolean:
+ break;
- default:
- break;
- }
- lgInfo($"---------------{Environment.NewLine}OPC-UA data:{Environment.NewLine}NodeId: {commWriteVal.NodeId}{Environment.NewLine}Value: {commWriteVal.Value.Value}{Environment.NewLine}---------------");
+ case plcDataType.Int:
+ case plcDataType.DInt:
+ case plcDataType.Word:
+ case plcDataType.DWord:
+ int.TryParse(item.reqValue, out valInt);
+ commWriteVal.Value.Value = valInt;
+ break;
- if (!string.IsNullOrEmpty(memAddrWrite))
- {
- nodes2Write.Add(commWriteVal);
- // 2023.09.19 resetto richiesta
- item.reqValue = "";
+ case plcDataType.Real:
+ double.TryParse(item.reqValue, out valReal);
+ commWriteVal.Value.Value = valReal;
+ break;
+
+ case plcDataType.String:
+ commWriteVal.Value.Value = item.reqValue;
+ break;
+
+ default:
+ break;
+ }
+ lgInfo($"---------------{Environment.NewLine}OPC-UA data:{Environment.NewLine}NodeId: {commWriteVal.NodeId}{Environment.NewLine}Value: {commWriteVal.Value.Value}{Environment.NewLine}---------------");
+
+ if (!string.IsNullOrEmpty(memAddrWrite))
+ {
+ nodes2Write.Add(commWriteVal);
+ // 2023.09.19 resetto richiesta
+ item.reqValue = "";
+ }
+ else
+ {
+ lgInfo($"Errore: memAddrWrite vuoto!");
+ }
}
else
{
- lgInfo($"Errore: memAddrWrite vuoto!");
+ lgInfo($"Errore uid non trovato in area write memory: {item.uid}, ci sono {memMap.mMapWrite.Count} in area write");
}
}
- else
+ catch (Exception exc)
{
- lgInfo($"Errore uid non trovato in area write memory: {item.uid}, ci sono {memMap.mMapWrite.Count} in area write");
+ lgError($"Eccezione in fase di plcWriteParams per item {item.uid} con valore {item.value}{Environment.NewLine}{exc}");
}
}
- catch (Exception exc)
+
+ if (nodes2Write.Count > 0)
{
- lgError($"Eccezione in fase di plcWriteParams per item {item.uid} con valore {item.value}{Environment.NewLine}{exc}");
+ UA_ref.WriteNodes(nodes2Write);
}
}
+ }
+#endif
- if (nodes2Write.Count > 0)
- {
- UA_ref.WriteNodes(nodes2Write);
- }
- }
+ // uso versione nuova con parametri "dotted"
+ base.plcWriteParams(ref updatedPar);
}
#endregion Protected Methods
diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronGhidini.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronGhidini.cs
index a1bdaa58..33e19ea7 100644
--- a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronGhidini.cs
+++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronGhidini.cs
@@ -8,6 +8,7 @@ using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Threading;
+using System.Threading.Tasks;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace IOB_WIN_OPC_UA.IobOpc
@@ -35,6 +36,39 @@ namespace IOB_WIN_OPC_UA.IobOpc
#region Public Methods
+ ///
+ /// Override processing x gestione custom forceReset tramite bit...
+ ///
+ ///
+ public override Dictionary executeTasks(Dictionary task2exe, string codTav)
+ {
+ lgInfo($"OpcUaOmronGhidini: call executeTasks | {task2exe.Count} task");
+ // SOLO SE si tratta di reset...
+ foreach (var item in task2exe)
+ {
+ // converto richiesta in enum...
+ taskType tName = taskType.nihil;
+ Enum.TryParse(item.Key, out tName);
+ string iKey = item.Key;
+ // se è DP aggiungo in chiave il valore della TAV richiesta... ad es setComm --> setComm#TAV_1
+ if (!string.IsNullOrEmpty(codTav))
+ {
+ iKey += $"#{codTav}";
+ }
+ // controllo sulla KEY...
+ switch (tName)
+ {
+ case taskType.forceResetPzCount:
+ resetContapezziPLC(codTav);
+ break;
+ }
+ }
+
+ // uso metodo base x completare gestione
+ return base.executeTasks(task2exe, codTav);
+ }
+
+
///
/// Effettua reset del contapezzi
///
@@ -51,14 +85,14 @@ namespace IOB_WIN_OPC_UA.IobOpc
dataConf currMem = memMap.mMapWrite[pKey];
string addr = currMem.memAddr;
// imposto il valore e forzo la scrittura ...
- memMap.mMapWrite[pKey].value = "True";
+ memMap.mMapWrite[pKey].value = "true";
// preparo elenco parametri da inviare...
list2Write = new List();
// aggiungo bit reset
objItem currData = new objItem()
{
uid = pKey,
- reqValue = "True",
+ reqValue = "true",
name = pKey
};
list2Write.Add(currData);
@@ -71,12 +105,14 @@ namespace IOB_WIN_OPC_UA.IobOpc
currData = new objItem()
{
uid = pKey,
- reqValue = "False",
+ reqValue = "false",
name = pKey
};
list2Write.Add(currData);
// scrivo!
plcWriteParams(ref list2Write);
+
+ // scriivo anche il reset del contapezzi forzato (SE configurato)
}
}
return answ;
@@ -129,7 +165,7 @@ namespace IOB_WIN_OPC_UA.IobOpc
currData = new objItem()
{
uid = "showPopup",
- reqValue = "True",
+ reqValue = "true",
name = "showPopup"
};
list2Write.Add(currData);
@@ -142,7 +178,7 @@ namespace IOB_WIN_OPC_UA.IobOpc
currData = new objItem()
{
uid = "showPopup",
- reqValue = "False",
+ reqValue = "false",
name = "showPopup"
};
list2Write.Add(currData);
diff --git a/IOB-WIN-OPC-UA/UAClient.cs b/IOB-WIN-OPC-UA/UAClient.cs
index 1a9e7560..0830b392 100644
--- a/IOB-WIN-OPC-UA/UAClient.cs
+++ b/IOB-WIN-OPC-UA/UAClient.cs
@@ -786,9 +786,15 @@ namespace IOB_WIN_OPC_UA
// Display the results.
lgDebug("Write Results :");
+ int idx = 0;
foreach (StatusCode writeResult in results)
{
lgDebug($" {writeResult}");
+ if (!StatusCode.IsGood(writeResult))
+ {
+ lgError($"Error | {nodesToWrite[idx].NodeId} | {nodesToWrite[idx].Value} | {writeResult}");
+ }
+ idx++;
}
}
catch (Exception ex)
@@ -976,16 +982,24 @@ namespace IOB_WIN_OPC_UA
StatusCodeCollection result;
//Write the collection to the server
m_session.Write(null, valuesToWrite, out result, out _);
- foreach (StatusCode code in result)
- {
- lgDebug($" {code}");
-#if false
- if (code != 0)
+ // Validate the response
+ m_validateResponse(result, valuesToWrite);
+
+ // Display the results.
+ lgDebug("OPC-UA: Write Results :");
+ int idx = 0;
+ foreach (StatusCode writeResult in result)
+ {
+ if (!StatusCode.IsGood(writeResult))
{
- throw new Exception(code.ToString());
- }
-#endif
+ lgError($"Error | {valuesToWrite[idx].NodeId} | {valuesToWrite[idx].Value} | {writeResult}");
+ }
+ else
+ {
+ lgDebug($"{valuesToWrite[idx].NodeId} | {valuesToWrite[idx].Value} | {writeResult}");
+ }
+ idx++;
}
}