i want to read and write a structure with an array of structures from/to my PLC (Simatic S7-1500).
Reading and writing to complex structures without arrays works fine.
My Structure of the Nodes:
TypeA
- [int] usiNumber
- [TypeB] Zyklus[50]
TypeB
-[int] usiLoops
-[bool] xActive
My Sample Code:
Code: Select all
TypeA data = new TypeA();
UnifiedAutomation.UaBase.NodeId nodeID = new UnifiedAutomation.UaBase.NodeId(nodeName, NamespaceIndexPLC);
UnifiedAutomation.UaBase.ModelHandle modelHandle = OPCUA_Connection.Model.Read(nodeID, data);
Code: Select all
[UnifiedAutomation.UaBase.UaTypeDefinition(NodeId = "ST05_Farbsystem_Data_V1.0", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public class TypeA
{
[UnifiedAutomation.UaBase.UaInstanceDeclaration(BrowseName = "usiNumber", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public byte usiNumber { get; set; }
[UnifiedAutomation.UaBase.UaInstanceDeclaration(BrowseName = "Zyklus", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public TypeB[] Zyklus { get; set; }
}
Code: Select all
[UnifiedAutomation.UaBase.UaTypeDefinition(NodeId = "ST05_Farbsystem_Zyklus_V1.0", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public class TypeB
{
[UnifiedAutomation.UaBase.UaInstanceDeclaration(BrowseName = "xEndlos", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public bool xActive { get; set; }
[UnifiedAutomation.UaBase.UaInstanceDeclaration(BrowseName = "usiLoops", NamespaceUri = "http://www.siemens.com/simatic-s7-opcua")]
public byte usiLoops { get; set; }
}
[Bad] Could not convert mapped value for field '{3:TypeB}'.|InvalidCastException|Das Objekt kann nicht in diesem Arraytyp gespeichert werden.
Changing TypeB[] to Object[] works also, but i need to de-/serialize binary data <-> TypeB.
Does anyone have an idea ?