update gestione OPC Omron
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user