An OPC UA FX drive
OPC UA FX (Field eXchange, OPC 10000-80 and following) describes how controllers, drives and I/O devices exchange data with each other. The modeler knows its three information models as standard namespaces:
| Alias | Namespace URI | Defined in |
|---|---|---|
fxData | http://opcfoundation.org/UA/FX/Data/ | OPC 10000-81, data types and FxRoot |
fxAc | http://opcfoundation.org/UA/FX/AC/ | OPC 10000-81, AutomationComponent |
fxCm | http://opcfoundation.org/UA/FX/CM/ | OPC 10000-81 §6.7, ConnectionManager |
fxAc and fxCm depend on di and fxData: the modeler loads them for you. This page names
fxData too, because the instances it creates go under its FxRoot folder.
namespaces:
- di
- fxData
- fxAc
- fxCm
The functional entity
A functional entity is the part of a device that takes part in the exchange: here, the
control function of a variable-speed drive. It publishes what it measures in OutputData and
receives what the controller commands in InputData. Both folders come from the
IFunctionalEntityType interface; declaring them is what activates them, and a subtype is the
way OPC 10000-81 §6.4 expects them to be filled.
AuthorUri, AuthorAssignedIdentifier and AuthorAssignedVersion identify the functional
entity: a client compares them with what the system engineering expects before it connects
(OPC 10000-81 D.3.8).
objectTypes:
- browseName: DriveFunctionalEntityType
subtypeOf: fxAc:FunctionalEntityType
description: The control function of a variable-speed drive, exchanged with a controller over OPC UA FX.
components:
- browseName: fxAc:OutputData
components:
- browseName: ActualSpeed
dataType: ua:Float
engineeringUnits: revolutions per minute
- browseName: MotorCurrent
dataType: ua:Float
engineeringUnits: ampere
- browseName: fxAc:InputData
components:
- browseName: SpeedSetpoint
dataType: ua:Float
engineeringUnits: revolutions per minute
accessLevel: CurrentRead | CurrentWrite
properties:
- browseName: fxAc:AuthorUri
value: http://acme.com
- browseName: fxAc:AuthorAssignedIdentifier
value: DriveControl
- browseName: fxAc:AuthorAssignedVersion
value:
major: 1
minor: 0
build: 0
subBuild: 0
The automation component
The automation component is the device as the network sees it. Its FunctionalEntities
folder organizes the functional entities, and its Assets folder organizes the hardware they
run on. The functional entity names the Asset that executes it with an IsHostedBy reference
(OPC 10000-81 Table 5).
Every OPC UA FX instance goes under FxRoot, the folder fxData adds to the Objects folder
(OPC 10000-81 §12.2). The instance Drive1 takes its members, and the IsHostedBy reference
between them, from its type.
objectTypes:
- browseName: DriveFunctionalEntityType
subtypeOf: fxAc:FunctionalEntityType
components:
- browseName: fxAc:OutputData
components:
- browseName: ActualSpeed
dataType: ua:Float
engineeringUnits: revolutions per minute
- browseName: fxAc:InputData
components:
- browseName: SpeedSetpoint
dataType: ua:Float
engineeringUnits: revolutions per minute
accessLevel: CurrentRead | CurrentWrite
- browseName: DriveAutomationComponentType
subtypeOf: fxAc:AutomationComponentType
description: A drive that offers its control function as an OPC UA FX Automation Component.
components:
- browseName: fxAc:FunctionalEntities
organizes:
- browseName: DriveControl
typeDefinition: DriveFunctionalEntityType
- browseName: fxAc:Assets
organizes:
- browseName: DriveAsset
typeDefinition: fxAc:FxAssetType
optionals:
- di:Manufacturer
- di:SerialNumber
- di:ProductCode
references:
- referenceType: ua:IsHostedBy
source: /fxAc:FunctionalEntities/DriveControl
target: /fxAc:Assets/DriveAsset
instances:
- browseName: Drive1
typeDefinition: DriveAutomationComponentType
organizedBy: /ua:Objects/fxData:FxRoot
The connection manager
A connection manager establishes the connections between automation components, from a
configuration an engineering tool writes into it. A server has at most one, and it has a fixed
name: fxCm already provides it, as FxRoot/ConnectionManager (OPC 10000-81 §12.3). A model
that imports fxCm does not declare another one.
Conformance checks
A model that imports an OPC UA FX namespace is checked against OPC 10000-81 when it is compiled, in the command line and in the editor. Each check points at the node that breaks it:
| Code | Checks that | OPC 10000-81 |
|---|---|---|
DSL-E-FX-001 | FunctionalEntities holds only FunctionalEntities | §6.2.2 |
DSL-E-FX-002 | Assets holds only Assets | §6.2.2 |
DSL-E-FX-003 | every Asset a FunctionalEntity is hosted by is listed in Assets | §6.2.2 |
DSL-E-FX-004 | InputData and OutputData hold only Variables, capabilities and groups | §6.4.4, §6.4.5 |
DSL-E-FX-005 | Variable names are unique in an Inputs or Outputs folder | §6.4.4, §6.4.5 |
DSL-W-FX-006 | String and ByteString data carry a maximum length | §6.4.4, §6.4.5 |
DSL-W-FX-007 | AutomationComponents are under FxRoot | §12.2 |
DSL-W-FX-008 | no second ConnectionManager | §12.3 |
An error is a "shall" of the specification. To turn a warning into an error, or silence one, use
the model's lint: section like for any other rule.
Going further
- Samples from OPC 10000-81 Annex D, rebuilt in the DSL: a temperature monitor with a ControlGroup, an analogue input module, an AGV and a full Raspberry Pi automation component.
- The types each namespace defines are listed in the gallery, under OPC UA FX Data, FX Automation Component and FX Connection Manager.
- The specifications: OPC 10000-81 and OPC 10000-82.