update x versione OMRON Ghidini tav02
This commit is contained in:
@@ -207,7 +207,7 @@
|
||||
"setPzComm": {
|
||||
"name": "setPzComm",
|
||||
"description": "Qty",
|
||||
"tipoMem": "Int",
|
||||
"tipoMem": "String",
|
||||
"memAddr": "ns=4;s=ext_stringa3_popup",
|
||||
"index": 0,
|
||||
"size": 4
|
||||
|
||||
@@ -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
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user