Skip to main content

Interfaces

Defining an Interface

An interface in OPC UA Modeler is defined using the interfaceTypes keyword. Each interface can have multiple components, each with a browseName, dataType, and modellingRule.

Here is an example of defining an interface called IVendorPlateType:

interfaceTypes:
- browseName: IVendorPlateType
components:
- browseName: Manufacturer
dataType: ua:LocalizedText
modellingRule: Mandatory
- browseName: SerialNumber
dataType: ua:String
modellingRule: Mandatory
- browseName: Revision
dataType: ua:LocalizedText
modellingRule: Optional

Implementing an Interface at the Object Type Level

To implement an interface at the object type level, you use the implementedInterfaces keyword within the objectTypes definition.

Here is an example of defining an object type called MySensorType that implements the IVendorPlateType interface:

objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
implementedInterfaces:
- browseName: IVendorPlateType

Implementing an Interface at the Component Level

Interfaces can also be implemented at the component level, meaning that the component itself implements the interface. This is done using the implementedInterfaces keyword within the components definition.

Here is an example of defining an object type called MySensorType with a component called Identification that implements the IVendorPlateType interface:

objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
implementedInterfaces:
- browseName: IVendorPlateType

Promoting Optional Members to Mandatory at the interface implementation level

For advanced use, it is possible to promote some optional members of the original interface to mandatory. This is done using the promotedToMandatory keyword within the implementedInterfaces definition.

Here is an example of promoting the Revision member to mandatory:

objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
components:
- browseName: Identification
typeDefinition: ua:FolderType
implementedInterfaces:
- browseName: IVendorPlateType
promotedToMandatory:
- Revision

implementing an interface from another namespace

Obviously, you can also implement an interface that has been defined into a other namespace by prefixing the browseName with the namespace alias.

namespaces:
- di # import the device integration namespace
objectTypes:
- browseName: MySensorType
subtypeOf: di:ComponentType
implementedInterfaces:
# implement the IVendorPlateType interface from the di namespace
- browseName: di:IVendorNameplateType
# and turn the optional property of IVendorPlateType into mandatory in
# our implementation
promitedToMandatory:
- di:Revision
- di:Manufacturer
- di:SerialNumber