OPC 11030-1: UA Modelling Best Practices
Deprecated 1.02 (Replaced by 1.03)
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