Information modelling
Anyone can expose tags. Modelling is what makes a server understandable to a client that has never seen it. This course covers modelling rules, interfaces, custom structures, authoring NodeSet2 XML, compiling it, and publishing it.
| Lessons | 12 |
|---|---|
| Time | about 96 minutes |
| Prerequisites | A3 |
| Cost | Free: written lessons open, video and labs need a free account |
What you will be able to do
- You can design a type hierarchy instead of a folder of tags.
- You can author and compile a NodeSet2 file of your own.
- You can expose a custom structure that a generic client can decode.
- You can export a live server's address space and work against it offline.
Syllabus
-
1
Model types, not instances8 min
Why an ObjectType with three instances beats three folders of tags, and what a client can do with the type that it cannot do with the folder.
Asset The same three pumps modelled both ways, browsed side by side
-
2
Apply modelling rules8 min
Mandatory, Optional and the placeholder rules. What a client may assume, and the failure when it assumes an optional node exists.
Asset A type with mandatory and optional members, and two instances that differ
-
3
Use interfaces8 min
Multiple inheritance for capabilities. How the Machinery building blocks use interfaces, and why that is what makes them composable.
Asset A node implementing two interfaces, with both sets of members browsed
-
4
Define a custom structure9 min
DataTypeDefinition, field order, and the encoding a client needs to decode it.
Asset A custom struct exposed by a server and decoded by a generic client, with the raw ExtensionObject
-
5
Survive the legacy type dictionary8 min
Servers that offer only a binary type dictionary, clients that support only DataTypeDefinition, and the undecoded ExtensionObject that results.
Asset The same struct read by two clients, one of which fails to decode it
-
6
Handle unions and optional fields7 min
Where custom-struct decoding actually breaks, and how to model so it does not.
Asset A union and an optional-field struct with the wire encoding of each written out
-
7
Author a NodeSet2 file10 min
The XML that every companion specification ships as. Structure, namespaces, aliases and references.
Asset A complete, valid NodeSet2 file for a small machine type, from scratch
-
8
Compile a model8 min
UA-ModelCompiler as a dotnet global tool, its inputs and outputs, and the errors it gives you.
Asset A model compiled with UA-ModelCompiler, including one deliberate error and its message
-
9
Load a model at runtime8 min
Importing a nodeset into a running server, and what happens to namespace indexes when you do.
Asset A nodeset imported at runtime, with NamespaceArray before and after
-
10
Export a live address space7 min
NodeSet export from a running server so you can work offline and diff between firmware versions.
Asset Two exports of the same machine after a firmware change, with the diff
-
11
Publish to the UA Cloud Library7 min
What the library is for, its REST and Swagger surface, and when to publish rather than keep local.
Asset A model uploaded and retrieved through the UA Cloud Library API
-
12
Model for the consumer, not the PLC8 min
The habits that make a model useful downstream: stable identifiers, real units, honest ranges, and states as state machines rather than integers.
Asset A review checklist applied to a real vendor model, with the eight problems it finds
Lab
Free account required
Author a NodeSet2 file for a two-station machine with identification, a state machine and a counter, compile it, load it into a local server, and browse it with UaExpert.
Unlock the lab →Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.