diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ICOEL_001.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_ICOEL_001.json
index 3bb72f5e..91e9ffc6 100644
--- a/IOB-WIN-NEXT/DATA/CONF/GIACO_ICOEL_001.json
+++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ICOEL_001.json
@@ -127,8 +127,6 @@
"rovrd": "PATH RAPID OVERRIDE"
},
"subscribedItems": [
- "ns=4;s=Dati_Mes",
- "ns=4;s=Calibratrice_L1",
- "ns=4;s=Calibratrice_L2"
+ "ns=4;s=Dati_Mes"
]
}
\ No newline at end of file
diff --git a/IOB-WIN-NEXT/IobOpcUa.cs b/IOB-WIN-NEXT/IobOpcUa.cs
index f7a2d100..1c48cc7f 100644
--- a/IOB-WIN-NEXT/IobOpcUa.cs
+++ b/IOB-WIN-NEXT/IobOpcUa.cs
@@ -252,7 +252,7 @@ namespace IOB_WIN_NEXT
///
private void checkAndSend(Opc.Ua.Client.MonitoredItem MonIt, string NotifyValue, bool forceSend)
{
-#if true
+#if false
// provo a decodificare...
var attrlist = Attributes.GetIdentifiers();
List listName = new List();
@@ -310,6 +310,34 @@ namespace IOB_WIN_NEXT
}
}
+
+ protected bool encodeReadData { get; set; } = false;
+
+ ///
+ /// Restitusice una versione serializzata delle variabili complesse in formato string
+ ///
+ ///
+ ///
+ ///
+ protected virtual string bSerString(string dataType, object rawData)
+ {
+ string answ = "";
+
+ return answ;
+ }
+ ///
+ /// Restitusice una versione serializzata delle variabili complesse in formato object (generico)
+ ///
+ ///
+ ///
+ ///
+ protected virtual object bSerObj(string dataType, object rawData)
+ {
+ object answ = null;
+
+ return answ;
+ }
+
///
/// Vera connessione ad OpcUa
///
@@ -430,9 +458,18 @@ namespace IOB_WIN_NEXT
{
dataItemMem.Add(uuid, newItem);
lgDebug($"Item subscribed: {uuid}");
- // restituisce i 115 byte da deserializzare... qui HACK!
- var rawVal = UA_ref.ReadNodeRaw(item.StartNodeId);
- string currVal = UA_ref.ReadNode(item.StartNodeId);
+ // verifico se ho i dati complessi by design
+ string currVal = "";
+ if (encodeReadData)
+ {
+ // restituisce i 115 byte da deserializzare... qui HACK!
+ var rawVal = UA_ref.ReadNodeRaw(item.StartNodeId);
+ currVal = bSerString("OPC", rawVal);
+ }
+ else
+ {
+ currVal = UA_ref.ReadNode(item.StartNodeId);
+ }
checkAndSend(item, currVal, true);
}
}
diff --git a/IOB-WIN-NEXT/IobOpcUaOmron.cs b/IOB-WIN-NEXT/IobOpcUaOmron.cs
index d55bf288..7dbe62d0 100644
--- a/IOB-WIN-NEXT/IobOpcUaOmron.cs
+++ b/IOB-WIN-NEXT/IobOpcUaOmron.cs
@@ -21,22 +21,24 @@ namespace IOB_WIN_NEXT
public MesItemStatus(byte[] rawData)
{
Stato = BitConverter.ToUInt16(rawData, 0);
- Velocita= BitConverter.ToUInt16(rawData, 2);
+ Velocita = BitConverter.ToUInt16(rawData, 2);
Termico = !rawData.Skip(4).Take(1).Equals(0);
- MagnetoTermico= !rawData.Skip(5).Take(1).Equals(0);
- AvariaInverter= !rawData.Skip(6).Take(1).Equals(0);
+ MagnetoTermico = !rawData.Skip(5).Take(1).Equals(0);
+ AvariaInverter = !rawData.Skip(6).Take(1).Equals(0);
}
///
/// Converte un singolo item in un array di byte per scrittura su PLC S7
///
///
- public byte[] convertToByte()
+ public byte[] serialize()
{
byte[] answ = new byte[7];
- //Buffer.BlockCopy(UInt16.ToByteArray(Stato), 0, answ, 0, 2);
- //Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Speed), 0, answ, 4, 4);
- //Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Load), 0, answ, 8, 4);
+ Buffer.BlockCopy(BitConverter.GetBytes(Stato), 0, answ, 0, 2);
+ Buffer.BlockCopy(BitConverter.GetBytes(Velocita), 0, answ, 2, 2);
+ Buffer.BlockCopy(BitConverter.GetBytes(Termico), 0, answ, 4, 1);
+ Buffer.BlockCopy(BitConverter.GetBytes(MagnetoTermico), 0, answ, 5, 1);
+ Buffer.BlockCopy(BitConverter.GetBytes(AvariaInverter), 0, answ, 6, 1);
return answ;
}
@@ -105,8 +107,28 @@ namespace IOB_WIN_NEXT
/// Flusso di dati RAW da tradurre...
public DatiMesIcoel(byte[] rawData)
{
- Calibratrice_L1 = new MesItemStatus(rawData.Skip(0).Take(7).ToArray());
- Calibratrice_L2 = new MesItemStatus(rawData.Skip(7).Take(7).ToArray());
+ // solo se i dati sono esattamente 115...
+
+ if (rawData.Length >= 115)
+ {
+ Calibratrice_L1 = new MesItemStatus(rawData.Skip(0).Take(7).ToArray());
+ Calibratrice_L2 = new MesItemStatus(rawData.Skip(7).Take(7).ToArray());
+ Dewatering_L1 = new MesItemStatus(rawData.Skip(14).Take(7).ToArray());
+ Dewatering_L2 = new MesItemStatus(rawData.Skip(21).Take(7).ToArray());
+ Precalibro_L1 = new MesItemStatus(rawData.Skip(28).Take(7).ToArray());
+ Precalibro_L2 = new MesItemStatus(rawData.Skip(35).Take(7).ToArray());
+ Taglierina_L1 = new MesItemStatus(rawData.Skip(42).Take(7).ToArray());
+ Taglierina_L2 = new MesItemStatus(rawData.Skip(49).Take(7).ToArray());
+ NastroTaglierina_L1 = new MesItemStatus(rawData.Skip(56).Take(7).ToArray());
+ NastroTaglierina_L2 = new MesItemStatus(rawData.Skip(63).Take(7).ToArray());
+ Elevatore_L1 = new MesItemStatus(rawData.Skip(70).Take(7).ToArray());
+ Elevatore_L2 = new MesItemStatus(rawData.Skip(77).Take(7).ToArray());
+ ImmergitoreBins_L1 = new MesItemStatus(rawData.Skip(84).Take(7).ToArray());
+ ImmergitoreBins_L2 = new MesItemStatus(rawData.Skip(91).Take(7).ToArray());
+ ImmergitoreCasse_L1 = new MesItemStatus(rawData.Skip(98).Take(7).ToArray());
+ ImmergitoreCasse_L2 = new MesItemStatus(rawData.Skip(105).Take(7).ToArray());
+ Varie = new PlantStatus(rawData.Skip(112).Take(3).ToArray());
+ }
}
}
@@ -238,7 +260,7 @@ namespace IOB_WIN_NEXT
List nodes2Write = new List();
nodes2Write.Add(commWriteVal);
-
+
UA_ref.WriteNodes(nodes2Write);
}
catch (Exception exc)