This function block is used to request that the Server translates one or more UABrowsePaths to UANodeIDs. Each UA_BrowsePath is constructed of a starting UANodeID and a UARelativePath. The specified starting UANodeID identifies the UANodeID from which the UARelativePath is based. The UARelativePath contains a sequence of UARelativePathElement and UAQualifiedName.

One purpose of this function block is to allow programming against type definitions. Since UAQualifiedName shall be unique in the context of type definitions, a user program may create a UABrowsePath that is valid for a type definition and use this path on instances of the type. For example, an ObjectType “Boiler” may have a “HeatSensor” Variable as InstanceDeclaration. A graphical element programmed against the “Boiler” may need to display the Value of the “HeatSensor”. If the graphical element would be called on “Boiler1”, an instance of “Boiler”, it would need to call this Service specifying the UANodeID of “Boiler1” as starting UANodeID and the UABrowsePaths of the “HeatSensor” as browse path. The function block would return the UANodeID of the “HeatSensor” of “Boiler1” and the graphical element could subscribe to its value.

If an OPC UA Node has multiple targets with the same UABrowsePaths, the underlying server will return a list of UANodeIDs. However, since one of the main purposes of this function block is to support programming against type definitions, the UANodeID of the OPC UA Node based on the type definition of the starting OPC UA Node is returned as the first UANodeID in the list.


Figure 7: TranslatePath sequence