OPC 11030: UA Modelling Best Practices


Released 1.02

2024-04-21

This document is subject to the license terms described here.

The general OPC Foundation specification license agreement also applies and can be found here.

This document is a copy of the original which can be found here.


1 Scope 2 Naming Conventions 2.1 Naming Conventions for Nodes 2.1.1 Overview 2.1.2 General Rules for BrowseNames 2.1.3 Rules for specific NodeClasses 2.1.4 Additional Considerations 2.2 Naming Conventions for structure Fields 2.3 Naming Conventions for Enums 2.4 Naming Conventions for UaNodeSets 2.5 Naming Conventions for NamespaceUris 3 Rules for backward compatibility of Information Models 3.1 Overview 3.2 Rules 3.2.1 Adding mandatory components to ObjectTypes and VariableTypes 3.2.2 Adding optional components to ObjectTypes and VariableTypes 3.2.3 Adding Interfaces to ObjectTypes 3.2.4 Changing the values of an Enumeration DataType 3.2.5 Changing the fields of a Structure DataType 3.2.6 Changing the fields of a Union DataType 3.2.7 Changing the bits of an OptionSet based on numeric DataTypes 3.2.8 Changing the bits of an OptionSet based on OptionSet DataType 3.2.9 Changing the Type Hierarchy of ObjectTypes or VariableTypes 3.2.10 Changing the Type Hierarchy of DataTypes 3.2.11 Changing the Signature of a Method 3.2.12 Changing the DataType of a Variable 3.2.13 Changing the TypeDefinition of an InstanceDeclaration 3.2.14 Changing the Semantics of ReferenceTypes 3.2.15 Changing the Type Hierarchy of ReferenceTypes 3.3 Strategies for Breaking Changes 4 How to define StatusCodes in Companion Specifications 5 How to return application-specific statuses in Methods 5.1 Overview 5.2 Example 6 How to create a Companion Specification 6.1 What is a Companion Specification? 6.2 How to create a joint Working Group 6.3 Tools to create a Companion Specification 6.4 How to Create Test Cases 7 How to use OPC UA Modelling Concepts 7.1 Overview Base Modelling Concepts 7.2 ObjectTypes 7.2.1 Overview 7.2.2 Where to derive from? 7.2.3 Abstract or concrete? 7.2.4 Composition versus Inheritance 7.2.5 Grouping of Substructures 7.2.6 Interfaces or AddIns? 7.2.7 Optional versus Mandatory 7.2.8 Optional Grouping Elements with Mandatory Placeholders or vice versa? 7.3 VariableTypes 7.3.1 Overview 7.3.2 Properties versus DataVariables 7.3.3 Properties versus Attributes 7.3.4 When to create VariableTypes? 7.4 Methods 7.5 Granularity of Data: Variables, Structured DataTypes, Methods, and Event 7.5.1 Overview 7.5.2 Individual Variables 7.5.3 Structured DataType and one Variable using the DataType 7.5.4 Structured DataType and one Variable and individual Variables as subvariables 7.5.5 Methods 7.5.6 Events 7.5.7 Conclusion 7.6 Lists / Arrays of Objects, Variables and Values 7.7 EventTypes 7.8 ReferenceTypes 7.9 DataTypes 7.10 Recursive containment 7.11 Instances 7.12 Predefined numeric values (Enums, MultiState VariableTypes, etc.) 7.12.1 Overview 7.12.2 Special Enumeration Value for Extensibility 7.12.3 MultiState VariableTypes 7.12.4 NodeIds referencing abstract ObjectTypes 7.12.5 StateMachines 7.13 NodeIds and Namespaces 8 How to model configuration changes affecting the AddressSpace 8.1 Overview 8.2 NodeManagement Services 8.3 Writing Variables 8.4 Calling Methods 8.4.1 Methods on the TypeDefinition 8.4.2 Methods at the place the instance is located 8.4.3 FileTransfer 8.5 Conclusion 9 Handling UaNodeSets for Dictionary References 9.1 Overview Dictionary References 9.2 UaNodeSets for Dictionaries 10 How to use existing Companion Specifications 10.1 Overview 10.2 What if used Companion Specs are changing? 11 How to extend an existing Companion Specification 11.1 Overview 11.2 How to add new functionality 11.2.1 InstanceDeclarations (Variables, Methods, and Objects) 11.2.2 A set of InstanceDeclarations on various TypeDefinitions 11.2.3 Adding new Enumeration values 11.2.4 Adding new Structure Fields 11.2.5 Adding new OptionSet Options 11.2.6 Replacing a TypeDefinition 11.3 How to create a new Namespace for a breaking change 12 How to define Conformance Units and Profiles 12.1 ConformanceUnits 12.2 Profiles 13 How to use BrowseNames in text 13.1 Overview 13.2 Using BrowseNames in text only showing up in a Companion Specification 13.3 Using BrowseNames in text used in UaNodeSets