update x versione OMRON Ghidini tav02

This commit is contained in:
Samuele Locatelli
2025-11-10 11:44:58 +01:00
parent 1a7cde2cba
commit 1d36cab4da
6 changed files with 145 additions and 86 deletions
+1 -1
View File
@@ -207,7 +207,7 @@
"setPzComm": {
"name": "setPzComm",
"description": "Qty",
"tipoMem": "Int",
"tipoMem": "String",
"memAddr": "ns=4;s=ext_stringa3_popup",
"index": 0,
"size": 4
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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];
+78 -69
View File
@@ -202,97 +202,106 @@ namespace IOB_WIN_OPC_UA.IobOpc
/// <param name="updatedPar"></param>
protected override void plcWriteParams(ref List<objItem> updatedPar)
{
dataConf currMem = null;
int byteSize = 0;
string memAddrWrite = "";
string serObj = "";
if (updatedPar != null)
#if false
bool doLegacy = false;
if (doLegacy)
{
List<WriteValue> nodes2Write = new List<WriteValue>();
// 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<WriteValue> nodes2Write = new List<WriteValue>();
// 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
+41 -5
View File
@@ -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
/// <summary>
/// Override processing x gestione custom forceReset tramite bit...
/// </summary>
/// <param name="task2exe"></param>
public override Dictionary<string, string> executeTasks(Dictionary<string, string> 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);
}
/// <summary>
/// Effettua reset del contapezzi
/// </summary>
@@ -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<objItem>();
// 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);
+22 -8
View File
@@ -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++;
}
}