ObjectTypes
objectTypes:
- browseName: MySensorType
# Add components, properties, organizes, methods as needed
browseName
- The browse name is a normative name for the OPCUA node it represents, and must be chosen with care. Indeed, the browseName is used by OPCUA clients to browse the tree of nodes by their access path. The path of a node in the tree is made of browseNames.
- We will follow the naming style already used by companion standards such as Device Integration, Analyser Device Integration, Robotics etc. which are referenced to ensure a uniform style.
- It is commonly accepted that the BrowseName should be a term expressed in 'English' to allow for internationalization of the API.
- The use of acronyms or abbreviations should be avoided and the use of an explicit term or combination of terms should be preferred.
- The use of the naming convention called PascalCase is strongly recommended. The first letter of the name starts with a capital letter, in case of a compound name (e.g. Adjective+Name), the two terms are pasted without space and each term starts with a capital letter.
- In practice, it consists of alpha-numeric characters. A browse name must not start with a number.
Examples:
- ❌
capteur_de_temperature(French terms, no PascalCase) - ❌
temperature_Sensor(underscores not allowed) - ✅
TemperatureSensor(correct — English, PascalCase)
subtypeOf
subtypeOf specifies the ObjectType from which the new ObjectType is derived. If omitted,
the modeler assumes it derives from ua:BaseObjectType.
objectTypes:
- browseName: MySensorDeviceType
subtypeOf: di:DeviceType
Components, Properties, Methods
Components, properties, and methods are declared in their respective subsections.
Methods
instances:
- browseName: Calculator
organizedBy: /ua:Objects
methods:
- browseName: AddTwoValues
inputArguments:
- name: Operand1
dataType: ua:Double
description: First operand
- name: Operand2
dataType: ua:Double
description: Second operand
outputArguments:
- name: Result
dataType: ua:Double
inputArguments/outputArgumentsdescribe the arguments of the method.nameuses PascalCase and a universal (English) term.dataTypereferences the data type, prefixed with the namespace alias if needed:ua:Double— standard OPC UA Doubledi:DeviceHealthEnumeration— from the Device Integration companion spec
Conventions
modellingRule is Mandatory by default
Components and features added to an objectType or variableType have modellingRule: Mandatory
by default. Explicitly set modellingRule: Optional to make it optional.
In rare cases where no modelling rule should be applied at all, use modellingRule: false.
objectTypes:
- browseName: MeasurementType
components:
- browseName: MyMandatoryComponent
dataType: ua:Double
# modellingRule defaults to Mandatory — no need to write it
- browseName: MyOptionalComponent
dataType: ua:Double
modellingRule: Optional
- browseName: MyComponentWithNoModelingRule
dataType: ua:Double
modellingRule: false
- browseName: <MyOptionalPlaceholderComponent>
dataType: ua:Double
modellingRule: OptionalPlaceholder
- browseName: <MyMandatoryPlaceholderComponent>
dataType: ua:Double
modellingRule: MandatoryPlaceholder
Overloading optional components or properties
To make an optional component from a base type mandatory in your derived type, redefine it:
objectTypes:
- browseName: MySensorDeviceTypeV2
subtypeOf: di:DeviceType
components:
# Redefine the optional ParameterSet from di:DeviceType as mandatory
- browseName: di:ParameterSet
components:
- browseName: Temperature
dataType: ua:Double
- Put the overloaded item in the correct category (
components:,properties:,methods:). - Prefix the
browseNamewith the source namespace alias (e.g.di:ParameterSet).
Turning optional properties into mandatory properties
Use promotedToMandatory to expose optional elements from a base type and enforce them
as Mandatory in your ObjectType:
stateMachines:
- browseName: CustomStateMachineType
subtypeOf: ua:FiniteStateMachineType
promotedToMandatory:
- CurrentState.Name
- LastTransition.Id
- LastTransition.TransitionTime
How to know the structure of a base type
Consult the PDF documentation associated with the imported companion specs to understand the structure of the types you wish to use. You can also explore types in the OPC UA tree with an OPC UA client.
Advanced component reference types
New in v4.10.0For industrial companion specifications, OPC UA defines specialised component reference
types beyond HasComponent. Use these fields on components inside an objectType or
instance to express precise physical and logical relationships:
| Field | OPC UA reference | Description |
|---|---|---|
components | HasComponent | Standard composition |
orderedComponents | HasOrderedComponent | Components where order matters (e.g. a sequence of steps) |
physicalComponents | HasPhysicalComponent | Physical sub-parts (e.g. sub-assemblies, physical sensors) |
containedComponents | IsContainedIn | Logical containment within an enclosure or module |
attachedComponents | HasAttachedComponent | Attached accessories or peripherals |
objectTypes:
- browseName: AssemblyType
orderedComponents:
- browseName: Step1
typeDefinition: ua:BaseObjectType
- browseName: Step2
typeDefinition: ua:BaseObjectType
physicalComponents:
- browseName: Housing
typeDefinition: ua:BaseObjectType
containedComponents:
- browseName: ControlBoard
typeDefinition: ua:BaseObjectType
generatedEvents
Declare which event types instances of this ObjectType may emit. This adds
GeneratesEvent references to the generated NodeSet, informing OPC UA clients which
event types to subscribe to.
objectTypes:
- browseName: PressureVesselType
generatedEvents:
- OverpressureAlarmType
- PressureOutOfRangeType
See Event Types for how to define custom event types.
Variable access control
Control read/write access and sampling behaviour on component variables:
accessLevel and userAccessLevel
objectTypes:
- browseName: SensorType
components:
- browseName: Temperature
dataType: ua:Double
accessLevel: CurrentRead # read-only for all clients
- browseName: SetPoint
dataType: ua:Double
accessLevel: CurrentRead | CurrentWrite # read-write
userAccessLevel: CurrentRead # but user-level access is read-only
| Value | Description |
|---|---|
CurrentRead | Clients can read the current value |
CurrentWrite | Clients can write the current value |
CurrentRead | CurrentWrite | Both |
None | No access |
minimumSamplingInterval
The minimum interval (in milliseconds) at which the server will sample this variable:
objectTypes:
- browseName: FastSensorType
components:
- browseName: FastSensor
dataType: ua:Double
minimumSamplingInterval: 50 # 50 ms minimum sampling interval
📄 Full working example — object-types.model.yaml
# yaml-language-server: $schema=../../../../schemas/nodeset2.schema.json
#
# Living documentation example for: s50_object-types.md
# Validate: opcua-modeler generate --input object-types.model.yaml
namespaceUri: http://example.com/doc/object-types/
version: 1.0.0
namespaces:
- di
# ── Event types referenced by generatedEvents (must be defined first) ─────────
eventTypes:
- browseName: OverpressureAlarmType
subtypeOf: ua:BaseEventType
description: Emitted when pressure exceeds the safe operating limit.
- browseName: PressureOutOfRangeType
subtypeOf: ua:BaseEventType
description: Emitted when pressure drifts outside the calibrated range.
# ── StateMachine used to demonstrate promotedToMandatory ──────────────────────
stateMachines:
- browseName: CustomStateMachineType
subtypeOf: ua:FiniteStateMachineType
promotedToMandatory:
- CurrentState.Name
- LastTransition.Id
- LastTransition.TransitionTime
# ── ObjectTypes ────────────────────────────────────────────────────────────────
objectTypes:
- browseName: MySensorType
# Add components, properties, organizes, methods as needed
- browseName: MySensorDeviceType
subtypeOf: di:DeviceType
- browseName: MeasurementType
components:
- browseName: MyMandatoryComponent
dataType: ua:Double
# modellingRule defaults to Mandatory — no need to write it
- browseName: MyOptionalComponent
dataType: ua:Double
modellingRule: Optional
- browseName: MyComponentWithNoModelingRule
dataType: ua:Double
modellingRule: false
- browseName: <MyOptionalPlaceholderComponent>
dataType: ua:Double
modellingRule: OptionalPlaceholder
- browseName: <MyMandatoryPlaceholderComponent>
dataType: ua:Double
modellingRule: MandatoryPlaceholder
- browseName: MySensorDeviceTypeV2
subtypeOf: di:DeviceType
components:
# Redefine the optional ParameterSet from di:DeviceType as mandatory
- browseName: di:ParameterSet
components:
- browseName: Temperature
dataType: ua:Double
- browseName: AssemblyType
orderedComponents:
- browseName: Step1
typeDefinition: ua:BaseObjectType
- browseName: Step2
typeDefinition: ua:BaseObjectType
physicalComponents:
- browseName: Housing
typeDefinition: ua:BaseObjectType
containedComponents:
- browseName: ControlBoard
typeDefinition: ua:BaseObjectType
- browseName: PressureVesselType
generatedEvents:
- OverpressureAlarmType
- PressureOutOfRangeType
- browseName: SensorType
components:
- browseName: Temperature
dataType: ua:Double
accessLevel: CurrentRead # read-only for all clients
- browseName: SetPoint
dataType: ua:Double
accessLevel: CurrentRead | CurrentWrite # read-write
userAccessLevel: CurrentRead # but user-level access is read-only
- browseName: FastSensorType
components:
- browseName: FastSensor
dataType: ua:Double
minimumSamplingInterval: 50 # 50 ms minimum sampling interval
# ── Instances ──────────────────────────────────────────────────────────────────
instances:
- browseName: Calculator
organizedBy: /ua:Objects
methods:
- browseName: AddTwoValues
inputArguments:
- name: Operand1
dataType: ua:Double
description: First operand
- name: Operand2
dataType: ua:Double
description: Second operand
outputArguments:
- name: Result
dataType: ua:Double
📄 Generated NodeSet2.xml — object-types.model.Nodeset2.xml
<?xml version="1.0"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:ns2="http://opcfoundation.org/UA/DI/Type.xsd" xmlns:ns1="http://example.com/doc/object-types/Type.xsd">
<NamespaceUris>
<Uri>http://example.com/doc/object-types/</Uri>
<Uri>http://opcfoundation.org/UA/DI/</Uri>
</NamespaceUris>
<Models>
<Model ModelUri="http://example.com/doc/object-types/" Version="1.0.0" PublicationDate="2026-06-02T17:03:00.000Z">
<RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05.06" PublicationDate="2025-11-08T00:00:00.000Z"/>
<RequiredModel ModelUri="http://opcfoundation.org/UA/DI/" Version="1.05.0" PublicationDate="2025-11-15T00:00:00.000Z"/>
</Model>
</Models>
<Aliases>
<Alias Alias="Argument">i=296</Alias>
<Alias Alias="Double">i=11</Alias>
<Alias Alias="GeneratesEvent">i=41</Alias>
<Alias Alias="HasComponent">i=47</Alias>
<Alias Alias="HasContainedComponent">i=25263</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
<Alias Alias="HasOrderedComponent">i=49</Alias>
<Alias Alias="HasPhysicalComponent">i=25262</Alias>
<Alias Alias="HasProperty">i=46</Alias>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="Organizes">i=35</Alias>
</Aliases>
<!--ReferenceTypes-->
<!--ObjectTypes-->
<!--ObjectType - 1:CustomStateMachineType {{{{ -->
<UAObjectType NodeId="ns=1;i=1000" BrowseName="1:CustomStateMachineType">
<DisplayName>CustomStateMachineType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2771</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:CustomStateMachineType }}}}-->
<!--ObjectType - 1:OverpressureAlarmType {{{{ -->
<UAObjectType NodeId="ns=1;i=1001" BrowseName="1:OverpressureAlarmType">
<DisplayName>OverpressureAlarmType</DisplayName>
<Description>Emitted when pressure exceeds the safe operating limit.</Description>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2041</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:OverpressureAlarmType }}}}-->
<!--ObjectType - 1:PressureOutOfRangeType {{{{ -->
<UAObjectType NodeId="ns=1;i=1002" BrowseName="1:PressureOutOfRangeType">
<DisplayName>PressureOutOfRangeType</DisplayName>
<Description>Emitted when pressure drifts outside the calibrated range.</Description>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=2041</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:PressureOutOfRangeType }}}}-->
<!--ObjectType - 1:MySensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1003" BrowseName="1:MySensorType">
<DisplayName>MySensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:MySensorType }}}}-->
<!--ObjectType - 1:MySensorDeviceType {{{{ -->
<UAObjectType NodeId="ns=1;i=1004" BrowseName="1:MySensorDeviceType">
<DisplayName>MySensorDeviceType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=1002</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:MySensorDeviceType }}}}-->
<!--ObjectType - 1:MeasurementType {{{{ -->
<UAObjectType NodeId="ns=1;i=1005" BrowseName="1:MeasurementType">
<DisplayName>MeasurementType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1006</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1007</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1008</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1009</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1010</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1006" BrowseName="1:MyMandatoryComponent" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyMandatoryComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1007" BrowseName="1:MyOptionalComponent" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyOptionalComponent</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=80</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1008" BrowseName="1:MyComponentWithNoModelingRule" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName>MyComponentWithNoModelingRule</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1009" BrowseName="1:<MyOptionalPlaceholderComponent>" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName><MyOptionalPlaceholderComponent></DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=11508</Reference>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1010" BrowseName="1:<MyMandatoryPlaceholderComponent>" ParentNodeId="ns=1;i=1005" AccessLevel="3" DataType="Double">
<DisplayName><MyMandatoryPlaceholderComponent></DisplayName>
<References>
<Reference ReferenceType="HasModellingRule">i=11510</Reference>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:MeasurementType }}}}-->
<!--ObjectType - 1:MySensorDeviceTypeV2 {{{{ -->
<UAObjectType NodeId="ns=1;i=1011" BrowseName="1:MySensorDeviceTypeV2">
<DisplayName>MySensorDeviceTypeV2</DisplayName>
<References>
<Reference ReferenceType="HasComponent">ns=1;i=1012</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">ns=2;i=1002</Reference>
</References>
</UAObjectType>
<!--Object - 2:ParameterSet {{{{ -->
<UAObject NodeId="ns=1;i=1012" BrowseName="2:ParameterSet" ParentNodeId="ns=1;i=1011">
<DisplayName>ParameterSet</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1013</Reference>
</References>
</UAObject>
<UAVariable NodeId="ns=1;i=1013" BrowseName="1:Temperature" ParentNodeId="ns=1;i=1012" AccessLevel="3" DataType="Double">
<DisplayName>Temperature</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--Object - 2:ParameterSet }}}} -->
<!--ObjectType - 1:MySensorDeviceTypeV2 }}}}-->
<!--ObjectType - 1:AssemblyType {{{{ -->
<UAObjectType NodeId="ns=1;i=1014" BrowseName="1:AssemblyType">
<DisplayName>AssemblyType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasOrderedComponent">ns=1;i=1015</Reference>
<Reference ReferenceType="HasOrderedComponent">ns=1;i=1016</Reference>
<Reference ReferenceType="HasPhysicalComponent">ns=1;i=1017</Reference>
<Reference ReferenceType="HasContainedComponent">ns=1;i=1018</Reference>
</References>
</UAObjectType>
<!--Object - 1:Step1 {{{{ -->
<UAObject NodeId="ns=1;i=1015" BrowseName="1:Step1">
<DisplayName>Step1</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Step1 }}}} -->
<!--Object - 1:Step2 {{{{ -->
<UAObject NodeId="ns=1;i=1016" BrowseName="1:Step2">
<DisplayName>Step2</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Step2 }}}} -->
<!--Object - 1:Housing {{{{ -->
<UAObject NodeId="ns=1;i=1017" BrowseName="1:Housing">
<DisplayName>Housing</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:Housing }}}} -->
<!--Object - 1:ControlBoard {{{{ -->
<UAObject NodeId="ns=1;i=1018" BrowseName="1:ControlBoard">
<DisplayName>ControlBoard</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAObject>
<!--Object - 1:ControlBoard }}}} -->
<!--ObjectType - 1:AssemblyType }}}}-->
<!--ObjectType - 1:PressureVesselType {{{{ -->
<UAObjectType NodeId="ns=1;i=1019" BrowseName="1:PressureVesselType">
<DisplayName>PressureVesselType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="GeneratesEvent">ns=1;i=1001</Reference>
<Reference ReferenceType="GeneratesEvent">ns=1;i=1002</Reference>
</References>
</UAObjectType>
<!--ObjectType - 1:PressureVesselType }}}}-->
<!--ObjectType - 1:SensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1020" BrowseName="1:SensorType">
<DisplayName>SensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1021</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1022</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1021" BrowseName="1:Temperature" ParentNodeId="ns=1;i=1020" DataType="Double">
<DisplayName>Temperature</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<UAVariable NodeId="ns=1;i=1022" BrowseName="1:SetPoint" ParentNodeId="ns=1;i=1020" AccessLevel="3" DataType="Double">
<DisplayName>SetPoint</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:SensorType }}}}-->
<!--ObjectType - 1:FastSensorType {{{{ -->
<UAObjectType NodeId="ns=1;i=1023" BrowseName="1:FastSensorType">
<DisplayName>FastSensorType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1024</Reference>
</References>
</UAObjectType>
<UAVariable NodeId="ns=1;i=1024" BrowseName="1:FastSensor" ParentNodeId="ns=1;i=1023" AccessLevel="3" MinimumSamplingInterval="50" DataType="Double">
<DisplayName>FastSensor</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
</UAVariable>
<!--ObjectType - 1:FastSensorType }}}}-->
<!--VariableTypes-->
<!--Other Nodes-->
<!--Object - 1:Calculator {{{{ -->
<UAObject NodeId="ns=1;i=1025" BrowseName="1:Calculator">
<DisplayName>Calculator</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasComponent">ns=1;i=1026</Reference>
</References>
</UAObject>
<UAMethod NodeId="ns=1;i=1026" BrowseName="1:AddTwoValues" ParentNodeId="ns=1;i=1025">
<DisplayName>AddTwoValues</DisplayName>
<References>
<Reference ReferenceType="HasProperty">ns=1;i=1027</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=1028</Reference>
</References>
</UAMethod>
<UAVariable NodeId="ns=1;i=1027" BrowseName="InputArguments" ParentNodeId="ns=1;i=1026" ValueRank="1" ArrayDimensions="2" DataType="Argument">
<DisplayName>InputArguments</DisplayName>
<Description>the definition of the input argument of method 1:Calculator.1:AddTwoValues</Description>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Operand1</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text>First operand</Text>
</Description>
</Argument>
</Body>
</ExtensionObject>
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Operand2</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text>Second operand</Text>
</Description>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAVariable NodeId="ns=1;i=1028" BrowseName="OutputArguments" ParentNodeId="ns=1;i=1026" ValueRank="1" ArrayDimensions="1" DataType="Argument">
<DisplayName>OutputArguments</DisplayName>
<Description>the definition of the output arguments of method 1:Calculator.1:AddTwoValues</Description>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>Result</Name>
<DataType>
<Identifier>i=11</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions/>
<Description>
<Text/>
</Description>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<!--Object - 1:Calculator }}}} -->
</UANodeSet>