OPC UA FX samples from OPC 10000-81 Annex D
OPC 10000-81 closes with informative samples of how its information model is meant to be used. They are drawn as figures; this page rebuilds them in the DSL from the specification's text. Where the text leaves a detail to the figure, the model makes a plain choice and says so: the samples show the pattern, not a node-for-node copy of the figures.
The same models are in the gallery, as OPC UA FX samples, for signed-in users.
All the samples share one namespace, and import the three OPC UA FX namespaces:
namespaceUri: http://sterfive.com/UA/FX/Samples/
version: 1.0.0
publicationDate: "2026-10-09T00:00:00Z"
namespaces:
- di
- fxData
- fxAc
- fxCm
A simple ControlGroup: temperature monitor (D.3.7.2)
A temperature monitor on the Raspberry Pi Sense HAT publishes Temperature and lets the owner
choose its EngineeringUnit. While Temperature is in use, its unit should not change: the
ControlGroup MonitorControl puts EngineeringUnit in its ListToRestrict, so only the
owner of the group may change it, and Temperature in its ListOfRelated.
objectTypes:
- browseName: TemperatureMonitorType
subtypeOf: fxAc:FunctionalEntityType
description: >-
A simple temperature monitor on the Raspberry Pi Sense HAT (OPC 10000-81 D.3.7.2).
The MonitorControl ControlGroup restricts EngineeringUnit to its owner while
Temperature is in use.
components:
- browseName: fxAc:OutputData
components:
- browseName: Temperature
dataType: ua:Float
description: The current temperature, in EngineeringUnit.
- browseName: fxAc:ConfigurationData
components:
- browseName: EngineeringUnit
dataType: ua:EUInformation
accessLevel: CurrentRead | CurrentWrite
description: The engineering unit of Temperature (degree Celsius, Fahrenheit, kelvin).
- browseName: fxAc:ControlGroups
components:
- browseName: MonitorControl
typeDefinition: fxAc:ControlGroupType
references:
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/MonitorControl/fxAc:ListToRestrict
target: /fxAc:ConfigurationData/EngineeringUnit
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/MonitorControl/fxAc:ListOfRelated
target: /fxAc:OutputData/Temperature
An analogue input module (D.3.6.2 and D.3.6.5)
A four-channel analogue input module publishes its channels in OutputData. When it can only
send them as one preconfigured PublishedDataSet (PDS_AI4), its PublisherCapabilities say
so with PreconfiguredDataSetOnly and PreconfiguredPublishedDataSets. The PubSub objects
themselves (DataSetWriter, PublishedDataSet) are created by EstablishConnections at run time,
so a model does not declare them.
Sub-folders of OutputData group data: an eight-channel module whose channels are Int16 or
Float keeps each kind in a group, an OutputsFolderType of its own.
objectTypes:
- browseName: AnalogueInput4FunctionalEntityType
subtypeOf: fxAc:FunctionalEntityType
description: >-
The FunctionalEntity of a four-channel analogue input module (OPC 10000-81 D.3.6.2):
OutputData only, exchanged through the preconfigured PublishedDataSet PDS_AI4.
components:
- browseName: fxAc:OutputData
components:
- browseName: Channel1
dataType: ua:Float
- browseName: Channel2
dataType: ua:Float
- browseName: Channel3
dataType: ua:Float
- browseName: Channel4
dataType: ua:Float
- browseName: fxAc:PublisherCapabilities
optionals:
- fxAc:PreconfiguredDataSetOnly
- fxAc:PreconfiguredPublishedDataSets
# ── OPC 10000-81 D.3.6.5: analogue input module using groups ─────────────────
- browseName: AnalogueInput8FunctionalEntityType
subtypeOf: fxAc:FunctionalEntityType
description: >-
An eight-channel analogue input module whose channels are Int16 or Float, grouped
in sub-folders of OutputData (OPC 10000-81 D.3.6.5).
components:
- browseName: fxAc:OutputData
components:
- browseName: Int16Channels
typeDefinition: fxAc:OutputsFolderType
components:
- browseName: Channel1
dataType: ua:Int16
- browseName: Channel2
dataType: ua:Int16
- browseName: Channel3
dataType: ua:Int16
- browseName: Channel4
dataType: ua:Int16
- browseName: FloatChannels
typeDefinition: fxAc:OutputsFolderType
components:
- browseName: Channel5
dataType: ua:Float
- browseName: Channel6
dataType: ua:Float
- browseName: Channel7
dataType: ua:Float
- browseName: Channel8
dataType: ua:Float
A complex ControlGroup: AGV (D.3.7.3)
A simplified automated guided vehicle is controlled with normalised or raw values. The two
interfaces are two ControlGroups: each restricts its setpoint, MaxAcceleration and the
Calibrate Method to its owner, blocks the other interface's setpoint (ListToBlock), and
relates the outputs it reads. Since both restrict MaxAcceleration, they can only be used
together by the same owner.
objectTypes:
- browseName: AgvFunctionalEntityType
subtypeOf: fxAc:FunctionalEntityType
description: >-
A simplified automated guided vehicle on the Raspberry Pi (OPC 10000-81 D.3.7.3),
controlled with normalised or raw values. ControlNormalized and ControlRaw are the
two interfaces; each blocks the other's setpoint.
components:
- browseName: fxAc:InputData
components:
- browseName: SpeedSetpointNormalized
dataType: ua:Float
accessLevel: CurrentRead | CurrentWrite
- browseName: SpeedSetpointRaw
dataType: ua:Int16
accessLevel: CurrentRead | CurrentWrite
- browseName: fxAc:OutputData
components:
- browseName: SpeedActualNormalized
dataType: ua:Float
- browseName: SpeedActualRaw
dataType: ua:Int16
- browseName: Orientation
dataType: ua:Float
- browseName: Compass
dataType: ua:Float
- browseName: fxAc:ConfigurationData
components:
- browseName: MaxAcceleration
dataType: ua:Float
accessLevel: CurrentRead | CurrentWrite
- browseName: fxAc:ControlGroups
components:
- browseName: ControlNormalized
typeDefinition: fxAc:ControlGroupType
- browseName: ControlRaw
typeDefinition: fxAc:ControlGroupType
methods:
- browseName: Calibrate
description: Calibrates the AGV's sensors; restricted to the owner of a ControlGroup.
references:
# normalised interface
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListToRestrict
target: /fxAc:InputData/SpeedSetpointNormalized
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListToRestrict
target: /fxAc:ConfigurationData/MaxAcceleration
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListToRestrict
target: /Calibrate
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListToBlock
target: /fxAc:InputData/SpeedSetpointRaw
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListOfRelated
target: /fxAc:OutputData/SpeedActualNormalized
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListOfRelated
target: /fxAc:OutputData/Orientation
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlNormalized/fxAc:ListOfRelated
target: /fxAc:OutputData/Compass
# raw interface
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListToRestrict
target: /fxAc:InputData/SpeedSetpointRaw
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListToRestrict
target: /fxAc:ConfigurationData/MaxAcceleration
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListToRestrict
target: /Calibrate
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListToBlock
target: /fxAc:InputData/SpeedSetpointNormalized
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListOfRelated
target: /fxAc:OutputData/SpeedActualRaw
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListOfRelated
target: /fxAc:OutputData/Orientation
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/ControlRaw/fxAc:ListOfRelated
target: /fxAc:OutputData/Compass
A full AutomationComponent: Raspberry Pi (D.2.2, D.3.3 to D.3.5, D.4.1)
The largest sample puts the pieces together:
MyRaspberryPiType, an Asset: it makes the vendor nameplate Mandatory, carries its System-On-Chip as a built-in Asset (HasBuiltInAsset) and exposes USB connectors.ExecutionEngineType, a FunctionalEntity that runs function blocks:LoadLibraryandLoadProgram, andBlockCountandCycleIntervalin itsConfigurationData.MyRaspberryPiAC, the AutomationComponent underFxRoot: its Asset hosts the execution engine (IsHostedBy), which carries the identification of D.3.4 (FLCEx01, 1.0.0.0). The loaded programMyApplicationProgramis a sub-FunctionalEntity with one per execution block, and executes on the Raspberry Pi (IsExecutingOn). The Temperature block reuses the temperature monitor above.
Choices the text leaves open: two USB connectors stand for the board's connectors, the nameplate
values are illustrative, ConformanceName points to a placeholder, and the execution blocks other
than Temperature are plain FunctionalEntities, since the specification does not detail them.
dataTypes:
- browseName: MemorySizeEnum
description: The memory fitted to the single-board computer (OPC 10000-81 D.2.2).
enum:
- name: GB2
value: 0
- name: GB4
value: 1
- name: GB8
value: 2
objectTypes:
- browseName: TemperatureMonitorType
subtypeOf: fxAc:FunctionalEntityType
description: >-
A simple temperature monitor on the Raspberry Pi Sense HAT (OPC 10000-81 D.3.7.2).
The MonitorControl ControlGroup restricts EngineeringUnit to its owner while
Temperature is in use.
components:
- browseName: fxAc:OutputData
components:
- browseName: Temperature
dataType: ua:Float
description: The current temperature, in EngineeringUnit.
- browseName: fxAc:ConfigurationData
components:
- browseName: EngineeringUnit
dataType: ua:EUInformation
accessLevel: CurrentRead | CurrentWrite
description: The engineering unit of Temperature (degree Celsius, Fahrenheit, kelvin).
- browseName: fxAc:ControlGroups
components:
- browseName: MonitorControl
typeDefinition: fxAc:ControlGroupType
references:
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/MonitorControl/fxAc:ListToRestrict
target: /fxAc:ConfigurationData/EngineeringUnit
- referenceType: ua:Organizes
source: /fxAc:ControlGroups/MonitorControl/fxAc:ListOfRelated
target: /fxAc:OutputData/Temperature
- browseName: SystemOnChipType
description: The System-On-Chip of the single-board computer, a built-in Asset (OPC 10000-81 D.2.2).
components:
- browseName: CpuClockRate
dataType: ua:Double
engineeringUnits: gigahertz
description: The CPU clock rate, 1.5 GHz or 1.8 GHz.
- browseName: Memory
dataType: MemorySizeEnum
description: The memory fitted, 2, 4 or 8 GB.
- browseName: MyRaspberryPiType
subtypeOf: fxAc:FxAssetType
description: >-
A single-board computer modelled as an OPC UA FX Asset (OPC 10000-81 D.2.2). It makes
the vendor nameplate Mandatory, carries its System-On-Chip as a built-in Asset and
exposes USB connectors for peripherals.
promotedToMandatory:
- di:Manufacturer
- di:Model
- di:SerialNumber
- di:ProductCode
- di:HardwareRevision
- di:SoftwareRevision
components:
- browseName: fxAc:Connectors
components:
- browseName: USB1
typeDefinition: fxAc:AssetConnectorType
- browseName: USB2
typeDefinition: fxAc:AssetConnectorType
references:
- referenceType: fxAc:HasBuiltInAsset
source: /
target:
browseName: SystemOnChip
typeDefinition: SystemOnChipType
# ── OPC 10000-81 D.3.3: an execution engine as a FunctionalEntity ────────────
- browseName: ExecutionEngineType
subtypeOf: fxAc:FunctionalEntityType
description: >-
An execution engine running generic function blocks (OPC 10000-81 D.3.3). Libraries
of function blocks are loaded with LoadLibrary; LoadProgram loads the program it runs,
as a sub-FunctionalEntity.
components:
- browseName: fxAc:ConfigurationData
components:
- browseName: BlockCount
dataType: ua:UInt32
description: The number of function blocks loaded.
- browseName: CycleInterval
dataType: ua:Duration
accessLevel: CurrentRead | CurrentWrite
description: The execution cycle, in milliseconds.
methods:
- browseName: LoadLibrary
inputArguments:
- name: Library
dataType: ua:ByteString
- browseName: LoadProgram
inputArguments:
- name: Program
dataType: ua:ByteString
properties:
- browseName: fxAc:AuthorUri
dataType: ua:UriString
- browseName: fxAc:AuthorAssignedIdentifier
dataType: ua:String
- browseName: fxAc:AuthorAssignedVersion
dataType: fxAc:FxVersion
- browseName: fxAc:ApplicationIdentifier
dataType: fxAc:ApplicationIdentifierDataType
valueRank: 1
instances:
# ── OPC 10000-81 D.4.1: the Raspberry Pi AutomationComponent ─────────────────
- browseName: MyRaspberryPiAC
typeDefinition: fxAc:AutomationComponentType
organizedBy: /ua:Objects/fxData:FxRoot
description: >-
A full AutomationComponent (OPC 10000-81 D.4.1): the Raspberry Pi Asset hosts the
execution engine, whose program runs on it.
optionals:
- fxAc:ConformanceName
propertyValues:
fxAc:ConformanceName: https://www.example.com/conformance/my-raspberry-pi-ac
- browseName: MyRaspberryPiInstance
typeDefinition: MyRaspberryPiType
organizedBy: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:Assets
propertyValues:
di:Manufacturer: Raspberry Pi Ltd
di:Model: Raspberry Pi 4 Model B
di:SerialNumber: "100000000a1b2c3d"
di:ProductCode: RPI4-MODBP-4GB
di:HardwareRevision: "1.4"
di:SoftwareRevision: "2026-07-04"
# D.3.4: the execution engine, with its identification; D.3.5: a program loaded
- browseName: ExecutionEngine
typeDefinition: ExecutionEngineType
organizedBy: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities
propertyValues:
fxAc:AuthorUri: http://opcfoundation.org
fxAc:AuthorAssignedIdentifier: FLCEx01
fxAc:AuthorAssignedVersion:
major: 1
minor: 0
build: 0
subBuild: 0
initializers:
- variable: fxAc:ConfigurationData/BlockCount
value: 4
- variable: fxAc:ConfigurationData/CycleInterval
value: 100
- browseName: MyApplicationProgram
typeDefinition: fxAc:FunctionalEntityType
componentOf: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine
description: The program loaded in the execution engine; each execution block is a sub-FunctionalEntity.
- browseName: Temperature
typeDefinition: TemperatureMonitorType
componentOf: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine/MyApplicationProgram
- browseName: Humidity
typeDefinition: fxAc:FunctionalEntityType
componentOf: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine/MyApplicationProgram
- browseName: Calculation
typeDefinition: fxAc:FunctionalEntityType
componentOf: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine/MyApplicationProgram
- browseName: LedBlock
typeDefinition: fxAc:FunctionalEntityType
componentOf: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine/MyApplicationProgram
references:
# the Asset hosts the execution engine (OPC 10000-81 Table 5)
- referenceType: ua:IsHostedBy
source: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine
target: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:Assets/MyRaspberryPiInstance
# D.4.1: the program executes on the Raspberry Pi
- referenceType: ua:IsExecutingOn
source: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:FunctionalEntities/ExecutionEngine/MyApplicationProgram
target: /ua:Objects/fxData:FxRoot/MyRaspberryPiAC/fxAc:Assets/MyRaspberryPiInstance