update gestione OPC Omron

This commit is contained in:
Samuele Locatelli
2022-05-10 12:21:59 +02:00
parent 435f0afb20
commit 7ec8746464
2 changed files with 18 additions and 106 deletions
+7 -16
View File
@@ -252,22 +252,6 @@ namespace IOB_WIN_NEXT
/// <param name="forceSend"></param>
private void checkAndSend(Opc.Ua.Client.MonitoredItem MonIt, string NotifyValue, bool forceSend)
{
#if false
// provo a decodificare...
var attrlist = Attributes.GetIdentifiers();
List<string> listName = new List<string>();
List<Opc.Ua.BuiltInType> listType = new List<Opc.Ua.BuiltInType>();
foreach (var item in attrlist)
{
var testAttr = Attributes.GetBrowseName(item);
var currType = Attributes.GetBuiltInType(item);
listName.Add(testAttr);
listType.Add(currType);
}
var currVal = MonIt.LastValue;
//var decoVal = currVal.XmlEncodingId;
#endif
if (MonIt != null)
{
if (!string.IsNullOrEmpty(NotifyValue))
@@ -557,6 +541,13 @@ namespace IOB_WIN_NEXT
/// <param name="e"></param>
private void UA_ref_eh_MonItChange(object sender, opcUaMonitItemChange e)
{
// da verificare decodifica valore byte...
if (encodeReadData)
{
var currNot = e.CurrNotify;
var currMon = e.CurrMonitoredItem;
// dovrei leggere e decodificare byteset...
}
checkAndSend(e.CurrMonitoredItem, $"{e.CurrNotify.Value}", false);
lastCurrent = DateTime.Now;
}
+11 -90
View File
@@ -141,6 +141,8 @@ namespace IOB_WIN_NEXT
#region Public Constructors
protected DatiMesIcoel currData;
/// <summary>
/// Estende l'init della classe base, impiegando il pacchetto Nuget OPC-UA foundation con la gestione specifica per Omron (es ICOEL)
/// https://github.com/OPCFoundation/UA-.NETStandard
@@ -156,6 +158,7 @@ namespace IOB_WIN_NEXT
}
sendKeyRichiesta = true;
encodeReadData = true;
currData = new DatiMesIcoel(new byte[115]);
lgInfo($"Avviato IobOpcUaOmronIcoel | encodeReadData: {encodeReadData}");
}
@@ -200,6 +203,10 @@ namespace IOB_WIN_NEXT
{
B_input = powerOnOk ? 1 : 0;
// decodifico da currData
// variabili RUN...
if (!string.IsNullOrEmpty(opcUaParams.keyRunMode))
{
@@ -297,95 +304,7 @@ namespace IOB_WIN_NEXT
/// <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)
{
List<WriteValue> nodes2Write = new List<WriteValue>();
// controllo i parametri... ne gestisco 4...
foreach (var item in updatedPar)
{
try
{
memAddrWrite = "";
int valInt = 0;
double valReal = 0;
// cerco in area memMapWrite...
if (memMap.mMapWrite.ContainsKey(item.uid))
{
// 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)
{
case plcDataType.Boolean:
break;
case plcDataType.Int:
case plcDataType.DInt:
case plcDataType.Word:
case plcDataType.DWord:
int.TryParse(item.reqValue, out valInt);
commWriteVal.Value.Value = valInt;
break;
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);
}
else
{
lgInfo($"Errore: memAddrWrite vuoto!");
}
}
else
{
lgInfo($"Errore uid non trovato in area write memory: {item.uid}, ci sono {memMap.mMapWrite.Count} in area write");
}
}
catch (Exception exc)
{
lgError($"Eccezione in fase di plcWriteParams per item {item.uid} con valore {item.value}{Environment.NewLine}{exc}");
}
}
if (nodes2Write.Count > 0)
{
UA_ref.WriteNodes(nodes2Write);
}
}
}
#endregion Protected Methods
@@ -407,6 +326,7 @@ namespace IOB_WIN_NEXT
/// </summary>
public override void processContapezzi()
{
#if false
if (utils.CRB("enableContapezzi"))
{
// check condizione validazione
@@ -459,7 +379,8 @@ namespace IOB_WIN_NEXT
lgInfo("Contapezzi resettato (PLC==0 e IOB>PLC) --> pzCountResetted = true");
}
}
}
}
#endif
}
/// <summary>