I’m working on a wrapper library for the OPCFoundation.NetStandard.Opc.Ua
Nuget package. The purpose of the library is to make reading and writing PLC tags a bit more straight forward. Being able to read / write scalar values and arrays of scalar values works well. I’m having trouble writing OPCUA’s ExtensionObject
type.
I read it in as an ExpandoObject
which works. Reading an ExtensionObject would look like
dynamic tagValue = await plc.ReadAsync<dynamic>(someTag);
What I’m trying to do is being able to modify the values of the dynamic object and write it back to the PLC tag. I understand the value read by OPC-UA is a byte[]
. I’ve been trying to figure out how to serialize my dynamic
object into a properly serialized ExtensionObject
.
I’ve noticed that the value returned by the OPCUA session doesn’t really line up but I can’t find out why. Say I have an extension object That has 3 extension objects. The first child has 8 bool
tags, the second has 10 bool
tags, and the third has a bool
, two int
, and one string
. This is the hex value I get back when I read the parent node
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-01-00-00-00-00-00-09-00-00-00-4E-6F-20-41-6C-61-72-6D-73-00
When I try to serialize my dynamic object
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-01-00-00-00-00-00-4E-6F-20-41-6C-61-72-6D-73-00
Can anyone help me understand where the extra data is coming from? I thought the 0x09
byte was saying how many bytes were in the body but it didn’t add up. I feel like as long as I can serialize my object to look identical to how it is read I should be able to update an ExtensionObject
tag pretty easily.