In OPC UA, servers can stick to the standard types defined in the OPC UA specifications, or they can define their own types. The "non-standard" data types can be completely server-specific, or can conform to some industry standard. Usage of these data types is commonly referred to as OPC UA complex data. With complex data, it is possible that the data type is not even know at compile time; instead, it can be discovered, constructed or processed during runtime, without prior knowledge of it.
Use of OPC UA complex data poses a new range of interoperability problems. When the server uses some new data type, how can the client know what the data type is, and how is the data encoded? The data is basically a binary blob that is transferred as a block between the server and the client, and who knows what it means? In some cases, the client can be hard-coded with upfront knowledge of what this binary blob of data (called extension object) contains and how it is encoded. But that is only when the client can be written with specific knowledge about the server it connects to, and even then decoding of the data might be a tedious programming task. Thankfully, OPC UA specifications provide ways for servers to describe the data types and their encoding to the clients, using information that can reside in the server itself. This is done
Knowledge Base: Comparison of OPC UA complex data models .
In OPC Data Client, both models work together and in a unified way from developer's perspective. OPC client can then extract the data type descriptions from these dictionaries or definitions, and be written in a generic way that adjusts to the data types that exist in the server.
Retrieving the associated metadata from the server's information model, interpreting the data type dictionaries or data type definitions, and decoding and encoding data according to data type descriptions is quite complicated. OPC Data Client can do it for you, with the help of the OPC UA Complex Data extension, described in this chapter. With the OPC UA Complex Data extension, you do not have to deal with binary blobs; instead, you work with meaningful structures that represent the data types and the data itself logically.
The OPC UA Complex Data extension integrates into the EasyUAClient Class pipeline, and its functionality is thus transparently available both to .NET and COM programming languages and tools.