This document defines several ObjectTypes that can be used to create an OPC UA FX Information Model. It also specifies a number of Interfaces that can be applied to existing Information Models, allowing existing models to be used as part of an OPC UA FX system. For additional guidance on mapping this model to existing Information Models, see Annex B. For an overview of the main OPC UA FX ObjectTypes, see Figure 17.

image020.png

Figure 17 – Overview of OPC UA FX Information Model

Since the OPC UA FX Information Model supports small embedded devices as well as powerful controllers, it includes many optional items. Some of these items are mandatory for controller-level Profiles but optional for embedded device Profiles. For a complete list of Profiles related to OPC UA FX, see OPC 10000-84.

The AutomationComponentType ObjectType provides for a grouping of Assets and FunctionalEntities in a given model. It exposes a Method that is used to establish Connections between FunctionalEntities. An overview of the AutomationComponentType is illustrated in Figure 18.

image021.png

Figure 18 – AutomationComponentType overview

The AutomationComponentType is the base ObjectType for an OPC UA FX device, controller, PLC, instrument, etc. It includes information related to the current Asset, the available functionality, its capabilities (including communication-related capabilities) and any related offline information. The AutomationComponentType is formally defined in Table 4 and Table 5.

Table 4 – AutomationComponentType definition

Attribute

Value

BrowseName

3:AutomationComponentType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Object

3:FunctionalEntities

0:FolderType

M

0:HasComponent

Object

3:Assets

0:FolderType

M

0:HasComponent

Object

3:PublisherCapabilities

3:PublisherCapabilitiesType

O

0:HasComponent

Object

3:SubscriberCapabilities

3:SubscriberCapabilitiesType

O

0:HasComponent

Object

3:ComponentCapabilities

3:AutomationComponentCapabilitiesType

M

0:HasProperty

Variable

3:ConformanceName

0:UriString

0:PropertyType

O

0:HasComponent

Method

3:EstablishConnections

Defined in 6.2.4

M

0:HasComponent

Method

3:CloseConnections

Defined in 6.2.5

M

0:HasComponent

Object

3:Descriptors

0:FolderType

M

0:HasComponent

Variable

3:AggregatedHealth

3:AggregatedHealthDataType

3:AggregatedHealthType

M

0:GeneratesEvent

ObjectType

0:SystemStatusChangeEventType

Defined in OPC 10000-3

ConformanceUnits

UAFX AutomationComponent Base

Table 5 – AutomationComponentType additional References

SourceBrowsePath

Reference Type

IsForward

TargetBrowsePath

3:FunctionalEntities

3:<FunctionalEntity>

0:IsHostedBy

True

3:Assets

3:<Asset>

The components of the AutomationComponentType have additional subcomponents, which are defined in Table 6.

Table 6 – AutomationComponentType additional subcomponents

BrowsePath

References

NodeClass

BrowseName

DataType

TypeDefinition

Others

3:FunctionalEntities

0: Organizes

Object

3:<FunctionalEntity>

3:FunctionalEntityType

OP

3:Assets

0: Organizes

Object

3:<Asset>

3:FxAssetType

OP

FunctionalEntities provides a Folder for the FunctionalEntities that this AutomationComponent exposes. The Folder shall be restricted to hold only instances of a type derived from FunctionalEntityType or instances that implement the IFunctionalEntityType Interface. The Folder may be empty. FunctionalEntities may reference other FunctionalEntities, but FunctionalEntities that are directly referenced from this Folder are considered top-level FunctionalEntities.

Assets provides a Folder for assets. It shall include all assets that are referenced from FunctionalEntities of this AutomationComponent. An Asset might be a complex type that includes other Assets. Assets directly referenced from this Folder are considered top-level Assets. For more details on the asset model, see 6.3. The Folder shall be restricted to hold only instances of FxAssetType or a subtype of it or instances that implement the IVendorNameplateType, ITagNameplateType, and IAssetRevisionType Interfaces. The Folder may be empty; however, typically, there is at least one entry in this Folder. For examples of Assets, see Annex D.

Objects may be added/removed to/from the FunctionalEntities or Assets Folders during operation, in which case the Server shall generate GeneralModelChangeEvent to reflect these changes.

The optional PublisherCapabilities provide the Publisher capabilities associated with this AutomationComponent. They apply to all instances in the FunctionalEntities Folder. An individual FunctionalEntity can further restrict these capabilities. If an AutomationComponent supports being a Publisher as defined in OPC 10000-14, then an instance of this Object shall be provided.

The optional SubscriberCapabilities provides the general Subscriber capabilities associated with this AutomationComponent. They apply to all instances in the FunctionalEntities Folder. An individual FunctionalEntity can further limit these capabilities. If an AutomationComponent supports being a Subscriber as defined in OPC 10000-14, then an instance of this Object shall be provided.

ComponentCapabilities is an AutomationComponentCapabilitiesType Folder that describes the functionality provided by an AutomationComponent (e.g., number of supported Connections, etc.).

The optional ConformanceName provides the URL to the product’s listing on the OPC Foundation website, under which the result of the conformance testing for this product can be found. The product's name might be different from the name of the AutomationComponent since conformance testing may be done for a product family, but this shall be described on the OPC Foundation product page. The DisplayName of the instance of the AutomationComponent shall be able to be resolved on the Website to the specifics of the product that was tested. Furthermore, at least one Asset listed in this AutomationComponent shall include IVendorNameplateType information that is on the related OPC Foundation product page.

Descriptors is a Folder that can contain AcDescriptors. Typically, at least one AcDescriptor is included, but depending on the system's architecture, additional AcDescriptors might be added. These added AcDescriptors describe added FunctionalEntities or added Assets or added combinations of Assets and FunctionalEntities. The additions may result from application developers adding functionality, integration of this AutomationComponent into a larger piece of Equipment, or the addition of modular Assets to the system. This Folder may also contain other Folders that can be used to organize the AcDescriptors.

AggregatedHealth provides the aggregated health of the AutomationComponent; this includes an aggregation of the health of all included Assets and FunctionalEntities. For the definition of the AggregatedHealthType and the aggregation rules, see 9.1.

The IsHostedBy ReferenceType (see OPC 10000-23) indicates the Assets used to execute the functionality provided by a FunctionalEntity. There may be multiple IsHostedBy References from one FunctionalEntity to multiple Assets. An example is a drive axis FunctionalEntity, which has IsHostedBy References to a drive inverter Asset and a motor Asset. Another example is an input FunctionalEntity having IsHostedBy References to the input module, the head, and the firmware Assets of a modular device.

Figure 19 illustrates an example of the usage of IsHostedBy.

image022.png

Figure 19 – IsHostedBy Reference example

If Eventing is supported, the AutomationComponent shall generate Events of SystemStatusChangeEventType (see OPC 10000-3) if the ServerState changes (e.g., following a power cycle).

The AcDescriptorType is an Object that is used to represent a Descriptor. This Object shall include either a DescriptorFile or the pair of DescriptorIdentifier and DescriptorVersion. It may include all three.

The AcDescriptorType is formally defined in Table 7.

Table 7 – AcDescriptorType definition

Attribute

Value

BrowseName

3:AcDescriptorType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasProperty

Variable

3:DescriptorIdentifier

0:UriString

0:PropertyType

O

0:HasProperty

Variable

3:DescriptorVersion

3:FxVersion

0:PropertyType

O

0:HasComponent

Object

3:DescriptorFile

0:FileType

O

ConformanceUnits

UAFX AutomationComponent Descriptor

The optional DescriptorIdentifier provides a globally unique identifier of the Descriptor of the AutomationComponent. It can be used to retrieve the Descriptor from the vendor’s product listing on the OPC Foundation Website (i.e., the OPC Marketplace).

The optional DescriptorVersion provides the version of the Descriptor used to describe this AutomationComponent.

The optional DescriptorFile exposes the Descriptor (defined in OPC 10000-83) directly from the AutomationComponent.

If both the DescriptorFile and the DescriptorIdentifier are provided, the value of the DescriptorIdentifier Variable exposed in the Object shall match the value of DescriptorIdentifier provided in the manifest of the DescriptorFile. If, in addition, the DescriptorVersion is provided, the value of the DescriptorVersion Variable exposed in the Object shall match the value of DescriptorVersion provided in the manifest of the DescriptorFile.

The EstablishConnections Method establishes one or more Connections. The ConnectionManager typically calls it. It allows for creating ConnectionEndpoints, establishing control, verifying FunctionalEntity and Asset compatibility, applying ConfigurationData, and configuration of the communication model to be used for data exchange. It is recommended that this Method be restricted to Client connections that have the well-known Role ConnectionAdmin as defined in Clause 5.9.

The signature of this Method is specified below; the arguments are defined in Table 8.

Signature

EstablishConnections (

[in] 2:FxCommandMask CommandMask,

[in] 2:AssetVerificationDataType[] AssetVerifications,

[in] 2:ConnectionEndpointConfigurationDataType[]

ConnectionEndpointConfigurations,

[in] 2:ReserveCommunicationIdsDataType[]ReserveCommunicationIds,

[in] 2:CommunicationConfigurationDataType[]CommunicationConfigurations,

[out] 2:AssetVerificationResultDataType[]AssetVerificationResults,

[out] 2:ConnectionEndpointConfigurationResultDataType[]

ConnectionEndpointConfigurationResults,

[out] 2:ReserveCommunicationIdsResultDataType[]

ReserveCommunicationIdsResults,

[out] 2:CommunicationConfigurationResultDataType[]

CommunicationConfigurationResults

);

Table 8 – EstablishConnections Method arguments

Argument

Description

CommandMask

CommandMask provides the commands to be processed by the implementation of this Method. How individual commands shall be processed is described in 6.2.4.3.

The CommandMask contains bits for the following commands: VerifyAssetCmd (see 6.2.4.3.2), VerifyFunctionalEntityCmd (see 6.2.4.3.3 ), ReserveCommunicationIdsCmd (see 6.2.4.3.4), CreateConnectionEndpointCmd (see 6.2.4.3.5), EstablishControlCmd (see 6.2.4.3.6), SetConfigurationDataCmd (see 6.2.4.3.7), ReassignControlCmd (see 6.2.4.3.8), SetCommunicationConfigurationCmd (see 6.2.4.3.9), and EnableCommunicationCmd (see 6.2.4.3.10). For a formal definition of the CommandMask, see 10.21.

The CommandMask shall have at least one command bit set to TRUE.

AssetVerifications

Provides parameters for Asset verification.

For a formal definition of the AssetVerificationDataType, see 10.5.

If CommandMask VerifyAssetCmd is set, AssetVerifications shall contain at least one element. If CommandMask VerifyAssetCmd is not set, AssetVerifications shall be null or empty.

ConnectionEndpointConfigurations

Provides configuration information for Connections.

For a formal definition of the ConnectionEndpointConfigurationDataType see 10.14.

If CommandMask VerifyFunctionalEntityCmd, CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, SetCommunicationConfigurationCmd, or EnableCommunicationCmd is set, ConnectionEndpointConfigurations shall contain at least one element. If CommandMask VerifyFunctionalEntityCmd, CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, SetCommunicationConfigurationCmd, and EnableCommunicationCmd are not set, ConnectionEndpointConfigurations shall be null or empty.

If CommandMask VerifyFunctionalEntityCmd is set, at least one of the ConnectionEndpointConfigurations elements shall contain ExpectedVerificationVariables with at least one element. If CommandMask VerifyFunctionalEntityCmd is not set, all ExpectedVerificationVariables in all ConnectionEndpointConfigurations shall be null or empty.

For the EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, SetCommunicationConfigurationCmd, or EnableCommunicationCmd, a non-null ConnectionEndpoint is required.

If CommandMask CreateConnectionEndpointCmd is set, at least one of the ConnectionEndpointConfigurations elements shall expose ConnectionEndpointDefinitionDataType with Parameter (see 10.16) as ConnectionEndpoint. If CommandMask CreateConnectionEndpointCmd is not set, all ConnectionEndpointConfigurations elements shall expose ConnectionEndpointDefinitionDataType with Node (see 10.16) as ConnectionEndpoint.

If CommandMask EstablishControlCmd or ReassignControlCmd is set, at least one of the ConnectionEndpointConfigurations elements shall contain ControlGroups with at least one element. If CommandMask EstablishControlCmd and ReassignControlCmd are not set, all ControlGroups in all ConnectionEndpointConfigurations shall be null or empty.

If CommandMask SetConfigurationDataCmd is set, at least one of the ConnectionEndpointConfigurations elements shall contain ConfigurationData with at least one element. If CommandMask SetConfigurationDataCmd is not set, all ConfigurationData in all ConnectionEndpointConfigurations shall be null or empty.

If CommandMask SetCommunicationConfigurationCmd is set, at least one of the ConnectionEndpointConfigurations elements shall contain a non-null CommunicationLinks. If CommandMask SetCommunicationConfigurationCmd is not set, all CommunicationLinks in all ConnectionEndpointConfigurations shall be set to null.

ReserveCommunicationIds

Provides the request for communication model-specific identifiers.

For a formal definition of the ReserveCommunicationIdsDataType, see 10.39.

If CommandMask ReserveCommunicationIdsCmd is set, ReserveCommunicationIds shall contain at least one element. If CommandMask ReserveCommunicationIdsCmd is not set, ReserveCommunicationIds shall be null or empty.

CommunicationConfigurations

Provides the ConfigurationData specific to the communication model utilized by the provided Connections.

For a formal definition of the CommunicationConfigurationDataType, see 10.10.

If CommandMask SetCommunicationConfigurationCmd is set, CommunicationConfigurations shall contain a single element. If CommandMask SetCommunicationConfigurationCmd is not set, CommunicationConfigurations shall be null or empty.

AssetVerificationResults

Indicates the results for the command VerifyAssetCmd (see 6.2.4.3.2).

For a formal definition of the AssetVerificationResultDataType, see 10.6.

If CommandMask VerifyAssetCmd is set, the length of this array shall match the length of AssetVerifications, and each element shall contain the result of the corresponding element in AssetVerifications. If CommandMask VerifyAssetCmd is not set, it shall be null or empty.

ConnectionEndpointConfigurationResults

Indicates the results for the commands VerifyFunctionalEntityCmd (see 6.2.4.3.3), CreateConnectionEndpointCmd (see 6.2.4.3.5), EstablishControlCmd (see 6.2.4.3.6), SetConfigurationDataCmd (see 6.2.4.3.7), ReassignControlCmd (see 6.2.4.3.8) or EnableCommunicationCmd (see 6.2.4.3.10).

For a formal definition of the ConnectionEndpointConfigurationResultDataType see 10.15.

If CommandMask VerifyFunctionalEntityCmd, CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, or EnableCommunicationCmd are set, the length of this array shall match the length of ConnectionEndpointConfigurations, and each element shall contain the result of the corresponding element in ConnectionEndpointConfigurations. If CommandMask VerifyFunctionalEntityCmd, CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd and EnableCommunicationCmd are not set, it shall be null or empty.

For the setting of the individual results in the ConnectionEndpointConfigurationResultDataType, see 6.2.4.3 (if the appropriate CommandMask bit is set) and 10.15 (if the appropriate CommandMask bit is not set).

ReserveCommunicationIdsResults

Indicates the results for the command ReserveCommunicationIdsCmd (see 6.2.4.3.4).

For a formal definition of the ReserveCommunicationIdsResultDataType, see 10.40.

If CommandMask ReserveCommunicationIdsCmd is set, the length of this array shall match the length of the ReserveCommunicationIds, and each element shall contain the result of the corresponding element in ReserveCommunicationIds. If CommandMask ReserveCommunicationIdsCmd is not set, it shall be null or empty.

CommunicationConfigurationResults

Indicates the result for the command SetCommunicationConfigurationCmd (see 6.2.4.3.9).

For a formal definition of the CommunicationConfigurationResultDataType, see 10.11.

If CommandMask SetCommunicationConfigurationCmd is set, a single element shall exist containing the result of the SetCommunicationConfigurationCmd command. If CommandMask SetCommunicationConfigurationCmd is not set, it shall be null or empty.

The possible Method result codes are formally defined in Table 9.

Table 9 – EstablishConnections Method result codes

Result Code

Description

Bad_InvalidArgument

One or multiple Arguments do not match the requirements specified for the commands set in CommandMask (see Table 8), or no bits in CommandMask are set.

Bad_InvalidState

A command bit or combination of command bits set in CommandMask cannot be processed in the AutomationComponent’s current state.

Bad_TooManyOperations

The requested number of Connections to establish exceeds the MaxConnectionsPerCall capability of the AutomationComponent (see 6.2.6).

Uncertain

The Method was aborted due to errors while executing a command.

Depending on the executed commands, one or more of the AssetVerificationResults, ConnectionEndpointConfigurationResults, ReserveCommunicationIdsResults, and CommunicationConfigurationResults will contain additional information.

The possible StatusCodes for the AssetVerificationResults VerificationStatus are formally defined in Table 10.

Table 10 – AssetVerificationResults VerificationStatus Status Codes

Result Code

Description

Bad_NodeIdUnknown

AssetToVerify does not exist in the Server address space.

The VerificationResult shall be set to Mismatch and VerificationVariablesErrors, and VerificationAdditionalVariablesErrors shall be set to null or empty in the corresponding element in AssetVerificationResults.

Bad_NodeIdInvalid

The syntax of AssetToVerify is invalid.

The VerificationResult shall be set to Mismatch and VerificationVariablesErrors, and VerificationAdditionalVariablesErrors shall be set to null or empty in the corresponding element in AssetVerificationResults.

Bad_InvalidArgument

AssetToVerify is not an Asset.

The VerificationResult shall be set to Mismatch and VerificationVariablesErrors, and VerificationAdditionalVariablesErrors shall be set to null or empty in the corresponding element in AssetVerificationResults.

Also, include all Result Codes in Table 31.

The possible StatusCodes for the ConnectionEndpointConfigurationResults FunctionalEntityNodeResult are formally defined in Table 11.

Table 11 – FunctionalEntityNodeResult Status Codes

Result Code

Description

Bad_NodeIdUnknown

The NodeId for FunctionalEntityNode does not exist in the Server address space.

Bad_NodeIdInvalid

The syntax of the NodeId for FunctionalEntityNode was invalid.

Bad_InvalidArgument

The NodeId for FunctionalEntityNode was not a FunctionalEntity or not related to the AutomationComponent on which EstablishConnections was called.

Good

The NodeId for FunctionalEntityNode was valid.

The possible StatusCodes for the ConnectionEndpointConfigurationResults ConnectionEndpointResult are formally defined in Table 12.

Table 12 – ConnectionEndpointResult Status Codes

Result Code

Description

Bad_NotSupported

The requested IsPersistent was not supported.

The requested Connection does not include a feedback signal, and the FunctionalEntity requires it.

Bad_TypeDefinitionInvalid

The requested ConnectionEndpointTypeId does not reference a supported type (see 6.6).

Bad_InvalidArgument

Neither InputVariableIds nor OutputVariableIds was specified.

An element of InputVariableIds or OutputVariableIds has an unknown or invalid NodeId or was not a Variable.

An element of InputVariableIds is not referenced from an input folder in either the FunctionalEntityNode or a SubFunctionalEntity of it.

An element of OutputVariableIds is not referenced from an output folder in either the FunctionalEntityNode or a SubFunctionalEntity of it.

The NodeId for the requested ConnectionEndpoint was not a ConnectionEndpoint.

A null RelatedEndpoint was specified.

A null ConnectionEndpoint was supplied, but the command required a ConnectionEndpoint.

The requested ConnectionEndpointTypeId does not match a concrete subtype of ConnectionEndpointType.

A preconfigured ConnectionEndpoint exists, but it does not match the requested parameters.

The preconfigured ConnectionEndpoint was not found.

This error code may also be used for any other parameter error in an EstablishConnections Call.

Bad_BrowseNameDuplicated

The name for the ConnectionEndpoint was not unique within the scope of the FunctionalEntity’s ConnectionEndpoints Folder.

Bad_ResourceUnavailable

Not enough resources were available to create this connection.

Bad_NothingToDo

The operation was skipped.

Creating this ConnectionEndpoint was skipped because a preceding command already resulted in an error.

Bad_NodeIdUnknown

The NodeId for the requested ConnectionEndpoint does not exist in the FunctionalEntity.

Bad_NodeIdInvalid

The syntax of the NodeId for the requested ConnectionEndpoint was invalid.

Bad_RequestNotAllowed

The ConnectionEndpoint to be enabled references input Variables, which are referenced by another enabled ConnectionEndpoint.

Bad_InvalidState

A preconfigured ConnectionEndpoint exists, but it is currently in use, as indicated by a RelatedEndpoint.

Good

Creating or using the ConnectionEndpoint succeeded.

The possible StatusCodes for the ConnectionEndpointConfigurationResults EstablishControlResult are formally defined in Table 13.

Table 13 – EstablishControlResult StatusCodes

Result Code

Description

Bad_NodeIdUnknown

The NodeId for the requested ControlGroup does not exist in the FunctionalEntity.

Bad_NodeIdInvalid

The syntax of the NodeId for the requested ControlGroup was invalid.

Bad_InvalidArgument

The NodeId for the requested ControlGroup was not a ControlGroup.

Bad_NothingToDo

Establishing control was skipped because a preceding command already resulted in error.

Also, include all Result Codes in Table 63.

The possible StatusCodes for the ConnectionEndpointConfigurationResults ConfigurationDataResult are formally defined in Table 14.

Table 14 – ConfigurationDataResult Status Codes

Result Code

Description

Bad_NodeIdUnknown

The NodeId for the requested Key does not exist in the FunctionalEntity hierarchy.

Bad_NodeIdInvalid

The syntax of the NodeId for the requested Key was invalid.

Bad_InvalidArgument

The NodeId for the requested Key was not a Node in the ConfigurationData Folder hierarchy.

Bad_TypeMismatch

The value supplied for the configuration Variable is not of the same type as the implemented configuration Variable.

Bad_UserAccessDenied

The change to a configuration Variable failed; this may result from a Lock existing on the Variable.

Bad_NothingToDo

Applying the Value to this Key was skipped because a preceding command already resulted in an error.

Bad_ConfigurationError

The applied configuration data is inconsistent.

Good

Setting the ConfigurationData succeeded.

The possible StatusCodes for the ConnectionEndpointConfigurationResults ReassignControlResult are formally defined in Table 15.

Table 15 – ReassignControlResult StatusCodes

Result Code

Description

Bad_NodeIdUnknown

The NodeId for the requested ControlGroup does not exist in the FunctionalEntity.

Bad_NodeIdInvalid

The syntax of the NodeId for the requested ControlGroup was invalid.

Bad_InvalidArgument

The NodeId for the requested ControlGroup was not a ControlGroup, or the LockContext was null, invalid, or non-existent.

Bad_NothingToDo

Reassigning control was skipped because a preceding command already resulted in an error.

Bad_ConfigurationError

The applied configuration data is inconsistent.

Also, include all Result Codes in Table 68

The possible StatusCodes for the ConnectionEndpointConfigurationResults CommunicationLinksResult are formally defined in Table 16.

Table 16 – CommunicationLinksResult Status Codes

Result Code

Description

Bad_NotFound

At least one of the configuration elements referenced by the CommunicationLinks was not found in the CommunicationConfiguration.

Bad_InvalidArgument

At least one of the CommunicationLinks contains in its ConfigurationMask more than one reference bit or specifies an element operation.

Bad_NoMatch

At least one of the configuration elements referenced by the CommunicationLinks does not match the ConnectionEndpoint.

Bad_ConfigurationError

The version of the DataSet related to the DataSetReader and/or DataSetWriter referenced by the CommunicationLinks does not match the expected version.

Bad_NothingToDo

Establishing communication links was skipped because a preceding command already resulted in an error.

Bad_InvalidState

At least one of the configuration elements referenced by the CommunicationLinks or one of its parent elements is not persisted for a persistent ConnectionEndpoint.

Good

The operation was either successfully executed or not executed since CommandMask SetCommunicationConfigurationCmd was not set.

Also, include all StatusCodes defined by OPC 10000-14

The possible StatusCodes for the ConnectionEndpointConfigurationResults EnableCommunicationResult are formally defined in Table 17.

Table 17 – EnableCommunicationResult Status Codes

Result Code

Description

Bad_NothingToDo

EnableCommunicationCmd was skipped because a preceding command had already resulted in error.

Bad_RequestNotAllowed

The ConnectionEndpoint to be enabled references InputVariables, which are referenced by another enabled ConnectionEndpoint.

Bad_InvalidState

Required ToDatasetReader or ToDatasetWriter References are not configured for the ConnectionEndpoint.

Good

The operation was either successfully executed or not executed since CommandMask EnableCommunicationCmd was not set.

Also, include all StatusCodes defined by OPC 10000-14

The possible StatusCodes for the ReserveCommunicationIdsResults Result are formally defined in Table 18.

Table 18 – ReserveCommunicationIdsResults Result Status Codes

Result Code

Description

Include all Method Result Codes of the ReserveIds Method defined by OPC 10000-14

The possible StatusCodes for the CommunicationConfigurationResults Result are formally defined in Table 19.

Table 19 – CommunicationConfigurationResults Result Status Codes

Result Code

Description

Bad_ConfigurationError

The communication configuration violates the capabilities of the AutomationComponent, FunctionalEntity, Input- or OutputGroup, or the applied configuration data is inconsistent.

Bad_ResourceUnavailable

The Server does not have enough resources to add the entire PubSub configuration.

Bad_InvalidState

The current State of the Object does not allow a configuration change.

Also, include all Method Result Codes of the CloseAndUpdate Method defined by OPC 10000-14

The EstablishConnections Method representation in the AddressSpace is formally defined in Table 20.

Table 20 – EstablishConnections Method AddressSpace definition

Attribute

Value

BrowseName

3:EstablishConnections

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

0:GeneratesEvent

ObjectType

2:AuditUpdateMethodResultEventType

Defined in 8.2

ConformanceUnits

UAFX AutomationComponent Base

A Client calling the EstablishConnections Method may provide multiple commands and the required Arguments for each command. If multiple commands are provided in a single call, the individual commands shall be processed in the order VerifyAssetCmd, VerifyFunctionalEntityCmd, ReserveCommunicationIdsCmd, CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, SetCommunicationConfigurationCmd, EnableCommunicationCmd which is illustrated in Figure 20.

A Client may issue the same command in consecutive EstablishConnections Calls, e.g., to apply large configuration data in multiple Calls with SetConfigurationDataCmd.

If the processing of a command results in an error, the processing of the command sequence shall be stopped at the command that caused the error, and the EstablishConnections Method Call shall be aborted, as described in 6.2.4.3.11.

An AutomationComponent may support individual commands in EstablishConnections Method Calls or may require that certain commands be bundled in a single EstablishConnections Method Call. If an AutomationComponent requires bundled commands, the CommandBundleRequired capability shall be provided and set to TRUE(see 6.2.6). The set of bundled commands is defined as follows: CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, and SetCommunicationConfigurationCmd. The commands CreateConnectionEndpointCmd and SetCommunicationConfigurationCmd are mandatory in the bundle; the remaining commands are optional. An AutomationComponent requiring bundled commands shall return a Bad_InvalidArgument for any command in the set of bundled commands that is issued individually, i.e., not issued in a bundle.

NOTE   AutomationComponents that have CommandBundleRequired set to TRUE could be restricted regarding the size of the Arguments issued in a single call, for example, ConfigurationData.

How the commands are processed is described in Clauses 6.2.4.3.2 to 6.2.4.3.10.

image023.png

Figure 20 – Command processing sequence illustration

If CommandMask VerifyAssetCmd is set, the EstablishConnections implementation shall execute the IAssetRevisionType VerifyAsset Method for each element in the AssetVerifications array. The VerifyAsset Method shall be called on each AssetToVerify, supplying the VerificationMode, ExpectedVerificationVariables and ExpectedAdditionalVerificationVariables as Method Arguments.

The StatusCode returned by the VerifyAsset Method and the values of its output Arguments VerificationResult, VerificationVariablesErrors, and VerificationAdditionalVariablesErrors shall be stored in the appropriate elements in AssetVerificationResults (see 10.6).

Once all array processing is complete, if at least one of the following conditions is true:

then the EstablishConnections implementation shall abort processing of additional commands as described in 6.2.4.3.11.

The possible StatusCodes related to the command VerifyAssetCmd are formally defined in Table 10. The StatusCodes related to individual verification Variables are formally defined in Table 32 and Table 33.

If CommandMask VerifyFunctionalEntityCmd is set, the EstablishConnections implementation shall execute the FunctionalEntityType Verify Method for each element in ConnectionEndpointConfigurations with a non-empty ExpectedVerificationVariables array. For elements with a null or empty ExpectedVerificationVariables array, the VerificationStatus shall be set to Good_NoData, VerificationResult to NotSet, and VerificationVariablesErrors to null or empty. The Method shall be called on the FunctionalEntity identified by FunctionalEntityNode, supplying the ExpectedVerificationVariables as Method Argument.

The StatusCode returned by the Verify Method shall be stored in VerificationStatus, and the values of its output Arguments VerificationResult and VerificationVariablesErrors in VerificationResult and VerificationVariablesErrors (see 10.15).

If the FunctionalEntityNode was not found, the VerificationVariablesErrors shall be set to null or empty, and the VerificationResult shall be set to Mismatch.

Once all array processing is complete, if any one of the following conditions applies:

the EstablishConnections implementation shall abort the processing of subsequent commands as described in 6.2.4.3.11.

The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for VerificationStatus are formally defined in Table 42. The possible StatusCodes for VerificationVariablesErrors are formally defined in Table 43.

If CommandMask ReserveCommunicationIdsCmd is set, the EstablishConnections implementation shall reserve communication model identifiers for each element in ReserveCommunicationIds.

For a PubSub communication model, a structure of type PubSubReserveCommunicationIdsDataType (see 10.39.3) shall be used.

The EstablishConnections implementation shall reserve for each requested TransportProfileUri the requested number of IDs for both WriterGroups and DataSetWriters. For additional details, see OPC 10000-14 ReserveIds Method, including error definitions.

If any error occurs, the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The EstablishConnections implementation shall return for each requested TransportProfileUri the default value for the PublisherId, the reserved WriterGroupIds, and DataSetWriterIds in the output Argument ReserveCommunicationIdsResults.

The possible StatusCodes for the ReserveCommunicationIdsResults Result are formally defined in Table 18.

This clause may be defined in a future version of this document.

If CommandMask CreateConnectionEndpointCmd is set, the EstablishConnections Method shall create a ConnectionEndpoint or shall verify and update a preconfigured ConnectionEndpoint for each element in ConnectionEndpointConfigurations (see 10.14) with Parameter defined in ConnectionEndpoint (see 10.16).

The EstablishConnections implementation shall set ConnectionEndpointResult on errors as specified in Table 12.

The EstablishConnections implementation shall set ConnectionEndpointResult to Bad_NotSupported if FeedbackSignalRequired is set to TRUE (see 6.4.7) and Mode is set to Publisher.

If IsPreconfigured is set to FALSE, the EstablishConnections implementation shall create a ConnectionEndpoint in the ConnectionEndpoints Folder of the FunctionalEntity identified by FunctionalEntityNode. The created ConnectionEndpoint shall be of the subtype specified in ConnectionEndpoint TypeId. The BrowseName shall be set to Name, and all Variables shall be set according to Parameter. The appropriate entries in InputVariables and OutputVariables shall be populated.

If IsPreconfigured is set to TRUE, a preconfigured ConnectionEndpoint (see 5.5.5) shall exist with a BrowseName that matches Name in the ConnectionEndpoints Folder of the FunctionalEntity identified by FunctionalEntityNode. Its ConnectionEndpointTypeId, InputVariables and OutputVariables shall match what is specified in Parameter. IsPersistent, CleanupTimeout, and RelatedEndpoint of the preconfigured ConnectionEndpoint shall be set according to Parameter.

The implementation shall return the NodeId of the ConnectionEndpoint in the corresponding element in ConnectionEndpointConfigurationResults. If additional commands in the EstablishConnections Method sequence are present, this NodeId shall be used.

The EstablishConnections implementation shall stop processing this command on the first error and abort processing as described in 6.2.4.3.11.

The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12.

If CommandMask EstablishControlCmd is set, the EstablishConnections implementation shall call the EstablishControl Method on each element in ControlGroups for each element in ConnectionEndpointConfigurations. If ControlGroups is null or empty, EstablishControlResult shall be set to null or empty (see 10.15).

This command shall pass the ApplicationUri of the Session associated with the EstablishConnections Method Call as LockContext Argument to EstablishControl (see 6.5.3).

The EstablishConnections implementation shall stop processing this command on the first error and shall abort processing as described in 6.2.4.3.11.

The possible StatusCodes for the EstablishControlResult are formally defined in Table 13. The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12.

If CommandMask SetConfigurationDataCmd is set, the EstablishConnections implementation shall apply the Value to the Key for each element in ConnectionEndpointConfigurations and each element in ConfigurationData. If the ConnectionEndpoint related to ConfigurationData has IsPersistent set, SetStoredVariables (see 6.4.6.3) shall be called for all Variables indicated by Key having the NonVolatile bit in the AccessLevelEx Attribute not set. If ConfigurationData is empty, ConfigurationDataResult shall be set to null or empty (see 10.15).

The EstablishConnections implementation shall stop processing this command on the first error and abort processing as described in 6.2.4.3.11.

The possible StatusCodes for the ConfigurationDataResult are formally defined in Table 14. The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12.

If CommandMask ReassignControlCmd is set, the EstablishConnections implementation shall call the ReassignControl Method on each element in ControlGroups for each element in ConnectionEndpointConfigurations. If ControlGroups is null or empty, ReassignControlResult shall be set to null or empty (see 10.15).

This command shall pass the string representation of the NodeId of the ConnectionEndpoint as LockContext Argument to ReassignControl.

The EstablishConnections implementation shall stop processing this command on the first error and shall abort processing as described in 6.2.4.3.11.

The possible StatusCodes for the ReassignControlResult are formally defined in Table 15. The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12.

If CommandMask SetCommunicationConfigurationCmd is set, the EstablishConnections implementation shall apply the communication model configuration supplied in CommunicationConfigurations in an atomic operation.

The communication configuration applied in the case of a PubSub communication model is a structure of the type PubSubCommunicationConfigurationDataType (see 10.10.3).

The EstablishConnections implementation shall process the supplied PubSubConfiguration with RequireCompleteUpdate and ConfigurationReferences in an atomic operation according to the behaviour of the CloseAndUpdate Method specified by OPC 10000-14. It shall set the overall processing result in PubSubCommunicationConfigurationResults Result and the returned ChangesApplied, ReferenceResults, ConfigurationValues, and ConfigurationObjects in PubSubCommunicationConfigurationResults.

If an error is returned, the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The SetCommunicationConfigurationCmd will apply the PubSubConfiguration, including the values of all Enabled flags for the configuration elements. Depending on the values of the Enabled flags, this may result in overall enabled PubSub communication without passing the EnableCommunicationCmd or parts of the PubSub communication being enabled while others are disabled.

The EstablishConnections implementation shall create the ToDataSetReader and ToDataSetWriter References according to the link information supplied in ConnectionEndpointConfigurations CommunicationLinks (see 10.13). If the PubSub configuration model is not exposed by this Server, this Reference may point to a Node that is not accessible. If the Reference cannot be created, an appropriate StatusCode shall be set in the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The EstablishConnections implementation shall verify the SubscribedDataSet associated with the referenced DataSetReader for each element in ConnectionEndpointConfigurations having a ToDataSetReader Reference.

If ExpectedSubscribedDataSetVersion MajorVersion is 0 (for the definition of MajorVersion, see OPC 10000-14), no verification shall be performed. If ExpectedSubscribedDataSetVersion MinorVersion is 0 (for the definition of MinorVersion, see OPC 10000-14), the verification for MinorVersion shall be skipped. If the ExpectedSubscribedDataSetVersion does not match the version of the associated SubscribedDataSet, the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult shall be set to Bad_ConfigurationError, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11

If InputVariableIds is used, and at least one Variable is not contained in the associated SubscribedDataSet, the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult shall be set to Bad_NoMatch, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The EstablishConnections implementation shall verify the PublishedDataSet associated with the referenced DataSetWriter for each element in ConnectionEndpointConfigurations having a ToDataSetWriter Reference.

If ExpectedPublishedDataSetVersion MajorVersion is 0, no verification shall be performed. If ExpectedPublishedDataSetVersion MinorVersion is 0, the verification for MinorVersion shall be skipped. If the ExpectedPublishedDataSetVersion does not match the version of the associated PublishedDataSet, the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult shall be set to Bad_ConfigurationError, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11

If OutputVariableIds is used, and at least one Variable is not contained in the associated PublishedDataSet, the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult shall be set to Bad_NoMatch, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The EstablishConnections implementation shall verify that ConnectionEndpoints with their IsPersistent Property set to TRUE reference a DataSetReader and/or DataSetWriter which are persisted, including all parent Objects, i.e., WriterGroup, ReaderGroup, PubSubConnection and PublishSubscribe (see NotPersisted in OPC 10000-14). If the IsPersistent Property is set to FALSE, the EstablishConnections implementation shall verify that the DataSetReader and/or DataSetWriter are not persisted (see NotPersisted in OPC 10000-14). Otherwise, Bad_InvalidState shall be set in the appropriate element in ConnectionEndpointConfigurationResults CommunicationLinksResult, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

If communication configuration exceeds capabilities (PublisherCapabilities, SubscriberCapabilities or ComponentCapabilities) of the AutomationComponent, FunctionalEntities, Input- or OutputData, or if communication configuration cannot be applied, Bad_ConfigurationError shall be set in PubSubCommunicationConfigurationResults Result, and the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

NOTE Hint – in the EstablishConnections command, Bad_ConfigurationError is returned if a communication configuration is supplied that requests functionality that is not currently supported and not specified by a capability (e.g., usage of multicast address).

In the ConnectionEndpointConfigurationResults, the possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12. The possible StatusCodes for the CommunicationLinksResult are formally defined in Table 16.

The possible StatusCodes for the CommunicationConfigurationResults Result are formally defined in Table 19.

Standard OPC UA Diagnostics can be used to obtain additional information related to any PubSub configuration errors.

This clause may be defined in a future version of this document.

If CommandMask EnableCommunicationCmd is set, the EstablishConnections implementation shall enable all communication model-specific Objects related to the ConnectionEndpoints in an atomic operation.

The EstablishConnections implementation shall enable the DataSetReader and DataSetWriter referenced by ToDataSetReader and/or ToDataSetWriter References for each element in ConnectionEndpointConfigurations. It shall also ensure that the parent Objects (WriterGroup, ReaderGroup, PubSubConnection, and PublishSubscribe) are enabled.

If enabling any communication model-specific Objects fails, the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

If enabling a ConnectionEndpoint would lead to multiple DataSetReaders being enabled that reference the same TargetVariable(s), the EstablishConnections implementation shall abort processing as described in 6.2.4.3.11.

The possible StatusCodes for the FunctionalEntityNodeResult are formally defined in Table 11. The possible StatusCodes for the ConnectionEndpointResult are formally defined in Table 12. The possible StatusCodes for the EnableCommunicationResult are formally defined in Table 17.

This clause may be defined in a future version of this document.

The EstablishConnections implementation shall abort processing if one of the issued commands fails; see the individual command behaviour descriptions in Clauses 6.2.4.3.2 to 6.2.4.3.10. No further commands requested for this Method Call shall be executed. The result of the commands executed with this Method Call shall be rolled back according to Table 21.

Table 21 – Rollback actions

Command

Rollback action

VerifyAssetCmd

None

VerifyFunctionalEntityCmd

None

ReserveCommunicationIdsCmd

None

CreateConnectionEndpointCmd

All ConnectionEndpoints in the context of this Method Call shall be deleted.

EstablishControlCmd

All requested ControlGroups requested in the context of this Method Call shall be released by calling ReleaseControl. All Control References created shall be deleted.

SetConfigurationDataCmd

None

Note:   Any settings that have been applied will remain.

ReassignControlCmd

None

SetCommunicationConfigurationCmd

All communication configuration and References created in the context of this Method Call shall be deleted.

EnableCommunicationCmd

All communication configuration Objects that were enabled in the context of this Method Call shall be disabled.

The Method shall set the appropriate StatusCodes for not executed commands to Bad_NothingToDo and return with an Uncertain result.

There is no rollback provided by the Method over multiple Method calls; such a rollback is the responsibility of the caller of the Method (e.g., the ConnectionManager). The caller of the Method may use the CloseConnections Method for issuing a complete rollback.

This Method disables one or more Connections. Optionally, it also removes these Connections. It is recommended that this Method has the execute privilege for the well-known Role ConnectionAdmin as defined in Clause 5.9.

The signature of the Method is described below, and the arguments are described in Table 22.

Signature

CloseConnections (

[in] 0:NodeId[] ConnectionEndpoints,

[in] 0:Boolean Remove,

[out] 0:StatusCode[] Results

);

Table 22 – CloseConnections Method arguments

Argument

Description

ConnectionEndpoints

The list of Connections to be closed.

Remove

When TRUE, the Objects dynamically created for the Connection are removed.

Results

The results of closing the Connections identified by the ConnectionEndpoints argument, see Table 24.

The length of this array shall match the length of the ConnectionEndpoints list.

Clients may inspect this list to determine which Connections failed to be closed.

The possible Method result codes are formally defined in Table 23.

Table 23 – CloseConnections Method result codes

Result Code

Description

Uncertain

There was at least one error or warning for one of the Connections. Results will contain additional information.

The possible Results StatusCodes are formally defined in Table 24.

Table 24 – Results StatusCodes

Result Code

Description

Bad_NodeIdUnknown

The NodeId for the requested ConnectionEndpoint does not exist in the Server address space.

Bad_NodeIdInvalid

The syntax of the NodeId for the requested ConnectionEndpoint was invalid.

Bad_InvalidArgument

The NodeId for the requested ConnectionEndpoint was not a ConnectionEndpoint.

The CloseConnections Method representation in the AddressSpace is formally defined in Table 25.

Table 25 – CloseConnections Method AddressSpace definition

Attribute

Value

BrowseName

3:CloseConnections

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

0:GeneratesEvent

ObjectType

2:AuditUpdateMethodResultEventType

Defined in 8.2

ConformanceUnits

UAFX AutomationComponent Base

The Method implementation shall disable all communication model Objects for each element in ConnectionEndpoints in an atomic operation.

If PubSub is used as the communication model for a ConnectionEndpoint, the Method implementation shall only disable the DataSetReader and DataSetWriter referenced by ToDataSetReader and/or ToDataSetWriter References if no further References from other ConnectionEndpoints exist. Their parent Objects (WriterGroup, ReaderGroup, PubSubConnection, and PublishSubscribe) shall be left in their current state.

The behaviour of the Client Server communication model may be defined in a future version of this document.

The CleanupTimeout processing shall be disabled.

If Remove is TRUE, the Method implementation shall remove what has been dynamically created by EstablishConnections Method Call(s) related to the ConnectionEndpoints. This includes any configuration specific to the utilized communication model, all related communication model Objects if not referenced from other ConnectionEndpoints, the ConnectionEndpoints, and all persisted items. In addition, all ControlGroups-based restrictions placed on Objects shall be released. Preconfigured Objects or Objects referenced by other ConnectionEndpoints shall not be removed.

What occurs with the ConfigurationData that was applied when establishing the ConnectionEndpoints is vendor-specific.

NOTE   A FunctionalEntity could provide application-specific behaviour for its ConfigurationData, i.e., it might roll it back to a predetermined setting, or it might leave it as configured.

The AutomationComponentCapabilitiesType extends the FolderType defined in OPC 10000-5. It shall be restricted to hold only Variables that reflect the capabilities of the AutomationComponentType.

The AutomationComponentCapabilitiesType is formally defined in Table 26.

Table 26 – AutomationComponentCapabilitiesType definition

Attribute

Value

BrowseName

3:AutomationComponentCapabilitiesType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

3:HasCapability

Variable

3:<Capability>

0:BaseDataType

0:BaseDataVariableType

OP

3:HasCapability

Variable

3:SupportsPersistence

0:Boolean

0:BaseDataVariableType

O

3:HasCapability

Variable

3:MaxFunctionalEntities

0:UInt32

0:BaseDataVariableType

O

3:HasCapability

Variable

3:MaxConnections

0:UInt32

0:BaseDataVariableType

O

3:HasCapability

Variable

3:MaxConnectionsPerCall

0:UInt32

0:BaseDataVariableType

O

3:HasCapability

Variable

3:CommandBundleRequired

0:Boolean

0:BaseDataVariableType

O

ConformanceUnits

UAFX AutomationComponent Base

<Capability> - is a placeholder to indicate that additional capabilities may be added by this document or by a companion specification at any time. These capabilities shall include a Description.

The optional SupportsPersistence indicates whether this AutomationComponent supports persistent Connections. For additional details on persistence, see 6.6. If this capability is not present or set to FALSE, the AutomationComponent does not support persistent Connections.

The optional MaxFunctionalEntities indicates the maximum number of FunctionalEntities that the AutomationComponent can support.

The optional MaxConnections indicates the maximum number of Connections that the AutomationComponent can support. This number may be further restricted based on the type of Connections being provided (i.e., a high-speed Connection might further reduce the number of available Connections).

The optional MaxConnectionsPerCall indicates the maximum number of Connections that can be established in a single EstablishConnections Call (see 6.2.4).

If MaxFunctionalEntities, MaxConnections, and MaxConnectionsPerCall are not present or set to zero, no limit is specified.

The optional CommandBundleRequired indicates whether this AutomationComponent requires a single Method Call for bundled commands when EstablishConnections is called (see 6.2.4.3.1). If the capability is not present or set to FALSE, the AutomationComponent supports individual calls.

The PublisherCapabilitiesType is a subtype of the BaseObjectType. It is used to contain the various Publisher capabilities that can be supported. An instance of this ObjectType groups the capabilities and can be deployed as part of any Object that desires to expose a range of capabilities that are supported by that Object.

It is formally defined in Table 27.

Table 27 – PublisherCapabilitiesType definition

Attribute

Value

BrowseName

3:PublisherCapabilitiesType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

3:SupportedPublishingIntervals

3:IntervalRange[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:SupportedQos

3:PublisherQosDataType[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:PreconfiguredPublishedDataSets

0:String[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:PreconfiguredDataSetOnly

0:Boolean

0:BaseDataVariableType

M

ConformanceUnits

UAFX AutomationComponent Base

UAFX FunctionalEntity Base

SupportedPublishingIntervals provides the supported intervals for publishing.

SupportedQos provides the supported Quality of Service settings.

PreconfiguredPublishedDataSets provides the names of preconfigured PublishedDataSets (see 5.5.5), where the name is the string part of the BrowseName of a PublishedDataSet that is listed in the PublishedDataSets Folder tree of the PublishSubscribe Object (see OPC 10000-14). If PublisherCapabilities is referenced from a FunctionalEntity (see 6.4.2) or OutputData (see 6.4.5), a preconfigured PublishedDataSet shall only reference OutputVariables of this FunctionalEntity and its sub-FunctionalEntities. If the PublisherCapabilities is referenced from an AutomationComponent, a preconfigured PublishedDataSet shall only reference OutputVariables from FunctionalEntities that are part of the AutomationComponent. When the preconfigured PublishedDataSet is used in a ConnectionConfigurationSet, Connections shall be established to one or more of the FunctionalEntities whose variables are present in the DataSet.

PreconfiguredDataSetOnly, if set to TRUE, indicates that the Publisher supports publishing of preconfigured PublishedDataSets only. If set to FALSE, the Publisher supports publishing of customized PublishedDataSets as well as preconfigured PublishedDataSets.

The SubscriberCapabilitiesType is a subtype of the BaseObjectType. It is used to contain the various Subscriber capabilities that can be supported. An instance of this ObjectType groups the capabilities and can be deployed as part of any Object that desires to expose a range of capabilities that are supported by that Object.

It is formally defined in Table 28.

Table 28 – SubscriberCapabilitiesType definition

Attribute

Value

BrowseName

3:SubscriberCapabilitiesType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

3:SupportedPublishingIntervals

3:IntervalRange[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:SupportedQos

3:SubscriberQosDataType[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:SupportedMessageReceiveTimeouts

3:IntervalRange[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:PreconfiguredSubscribedDataSets

0:String[]

0:BaseDataVariableType

M

0:HasComponent

Variable

3:PreconfiguredDataSetOnly

0:Boolean

0:BaseDataVariableType

M

ConformanceUnits

UAFX AutomationComponent Base

UAFX FunctionalEntity Base

SupportedPublishingIntervals provides the intervals for publications, which this Subscriber is able to receive.

SupportedQos provides the supported Quality of Service settings.

SupportedMessageReceiveTimeouts provides the supported timeouts for receiving messages.

PreconfiguredSubscribedDataSets provides the names of preconfigured StandaloneSubscribedDataSets (see 5.5.5), where the name is the string part of the BrowseName of a StandaloneSubscribedDataSet that is listed in the SubscribedDataSets Folder tree of the PublishSubscribe Object (see OPC 10000-14). If SubscriberCapabilities is referenced from a FunctionalEntity (see 6.4.2) or InputData (see 6.4.4), a preconfigured StandaloneSubscribedDataSet shall only reference InputVariables from the FunctionalEntity and its sub-FunctionalEntities. If the SubscriberCapabilities is referenced from an AutomationComponent, a preconfigured StandaloneSubscribedDataSet shall only reference InputVariables from FunctionalEntities that are part of the AutomationComponent. When the preconfigured StandaloneSubscribedDataSet is used in a ConnectionConfigurationSet, Connections shall be established to one or more of the FunctionalEntities whose variables are present in the DataSet.

PreconfiguredDataSetOnly, if set to TRUE, indicates that the Subscriber only supports subscribing with preconfigured StandaloneSubscribedDataSets. If set to FALSE, the subscriber supports subscribing with customized SubscribedDataSets as well as preconfigured StandaloneSubscribedDataSets.

Figure 21 provides an illustration of the Fx AssetType model. The figure includes an illustration of the nodes that are added via the Interfaces.

image024.png

Figure 21 – FxAssetType overview

The FxAssetType provides general information as defined in OPC 10000-100. It also includes additional information that is defined as an Interface. Being defined as an Interface allows other device models to include what is required for OPC UA FX Asset modelling without having to implement the FxAssetType Object directly. Conformance testing shall test that the required information, defined by the Interfaces included in the FxAssetType, is available, not that the Object is of FxAssetType. Any Object that implements all of the Interfaces defined in FxAssetType is considered an Asset.

Additional References are defined as part of the model to show relationships between Assets, within Assets, and between Assets and FunctionalEntities and the overall AutomationComponent model (see 11.1).

The FxAssetType is formally defined in Table 29.

Table 29 – FxAssetType definition

Attribute

Value

BrowseName

3:FxAssetType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasInterface

ObjectType

5:IVendorNameplateType

Applied from IVendorNameplateType (defined in OPC 10000-100)

0:HasProperty

Variable

5:Manufacturer

0:LocalizedText

0:PropertyType

O

0:HasProperty

Variable

5:ManufacturerUri

0:String

0:PropertyType

O

0:HasProperty

Variable

5:Model

0:LocalizedText

0:PropertyType

O

0:HasProperty

Variable

5:ProductCode

0:String

0:PropertyType

O

0:HasProperty

Variable

5:HardwareRevision

0:String

0:PropertyType

O

0:HasProperty

Variable

5:SoftwareRevision

0:String

0:PropertyType

O

0:HasProperty

Variable

5:DeviceRevision

0:String

0:PropertyType

O

0:HasProperty

Variable

5:DeviceManual

0:String

0:PropertyType

O

0:HasProperty

Variable

5:DeviceClass

0:String

0:PropertyType

O

0:HasProperty

Variable

5:SerialNumber

0:String

0:PropertyType

O

0:HasProperty

Variable

5:ProductInstanceUri

0:String

0:PropertyType

O

0:HasProperty

Variable

5:RevisionCounter

0:Int32

0:PropertyType

O

0:HasInterface

ObjectType

5:ITagNameplateType

Applied from ITagNameplateType (defined in OPC 10000-100)

0:HasProperty

Variable

5:AssetId

0:String

0:PropertyType

O

0:HasProperty

Variable

5:ComponentName

0:LocalizedText

0:PropertyType

O

0:HasInterface

ObjectType

3:IAssetRevisionType

Applied from IAssetRevisionType

0:HasProperty

Variable

3:MajorAssetVersion

0:UInt16

0:PropertyType

O

0:HasProperty

Variable

3:MinorAssetVersion

0:UInt16

0:PropertyType

O

0:HasProperty

Variable

3:BuildAssetNumber

0:UInt16

0:PropertyType

O

0:HasProperty

Variable

3:SubBuildAssetNumber

0:UInt16

0:PropertyType

O

0:HasComponent

Method

3:VerifyAsset

Defined in 6.3.3

O

0:HasInterface

ObjectType

3:IAssetExtensionsType

Applied from IAssetExtensionsType

0:HasComponent

Object

3:Connectors

0:FolderType

O

0:HasInterface

ObjectType

5:IDeviceHealthType

Applied from IDeviceHealthType (defined in OPC 10000-100)

0:HasComponent

Variable

5:DeviceHealth

5:DeviceHealthEnumeration

0:BaseDataVariableType

O

0:HasComponent

Object

5:DeviceHealthAlarms

0:FolderType

O

0:HasAddIn

Object

5:SoftwareUpdate

5:SoftwareUpdateType

O

ConformanceUnits

UAFX FXAsset Type

The display name of the Asset should be used to provide the name that an operator/engineer would expect for the Asset.

For examples of how to apply the OPC UA FX Information Model to other models, see Annex B. For examples of FxAssetType models, see Annex D.

The following are the definitions associated with the IVendorNameplateType interface; they are enclosed in quotes and included here for clarity. Their formal definition is in OPC 10000-100. Additional notes are provided for recommended usage within this model.

  • Manufacturer provides the name of the company that manufactured the item to which this Interface is applied.”
  • ManufacturerUri provides a unique identifier for this company. This identifier should be a fully qualified domain name; however, it may be a GUID or similar construct that ensures global uniqueness.”
  • Model provides the name of the product.”
  • ProductCode provides a unique combination of numbers and letters used to identify the product. It may be the order information displayed on type shields or in ERP systems.”
  • HardwareRevision provides the revision level of the hardware of an Asset.”
  • SoftwareRevision provides the version or revision level of the software component, the software/firmware of a hardware component, or the software/firmware of the Device.”
  • DeviceRevision provides the overall revision level of a hardware component or the Device. As an example, this Property can be used in ERP systems together with the ProductCode Property.”
  • DeviceManual allows specifying an address of the user manual for an Asset. It may be a pathname in the file system or a URL (Web address).”
  • DeviceClass indicates in which domain or for what purpose a certain ComponentType is used. Examples are “ProgrammableController”, “RemoteIO”, and “TemperatureSensor”. This standard does not predefine any DeviceClass names. More specific standards that utilize this Interface will likely introduce such classifications.”

Within this model, this information is typically used for display purposes only. It is recommended that if this Property is provided, the string should be from some standardized dictionary.

  • SerialNumber is a unique production number of the manufacturer of the Asset. This is often stamped on the outside of a physical component and may be used for traceability and warranty purposes.”

Within this model, SerialNumber shall be provided for Assets listed directly in the Assets Folder of the AutomationComponent.

  • ProductInstanceUri is a globally unique resource identifier provided by the manufacturer. This is often stamped on the outside of a physical component and may be used for traceability and warranty purposes. The maximum length is 255 characters. The syntax of the ProductInstanceUri is: <ManufacturerUri>/<any string> where <any string> is unique among all instances using the same ManufacturerUri.”

Within this model, ProductInstanceUri shall be provided for Assets listed directly in the Assets Folder of the AutomationComponent.

  • RevisionCounter is an incremental counter indicating the number of times the configuration data within an Asset has been modified.”

Within this model, this configuration data may be one of the items defined in this document, but more likely, it is a configuration item that has been added to the asset model either as part of a companion specification or as part of an instance.

The following two definitions are from the ITagNameplateType interface. They are included enclosed in quotes and included here for clarity. Their formal definition is in OPC 10000-100. Additional notes are provided for recommended usage within OPC UA FX.

  • AssetId is a user-writable alphanumeric character sequence uniquely identifying a component. The ID is provided by the integrator or user of the device. It typically contains an identifier in a branch use case or user-specific naming scheme. This could be, for example, a reference to an electric scheme.“
  • ComponentName is a user-writable name provided by the integrator or user of the component.”

The following two definitions are from the IDeviceHealthType interface. They are enclosed in quotes and included here for clarity. Their formal definition is in OPC 10000-100. Additional notes are provided for recommended usage within OPC UA FX.

The IDeviceHealthType Interface shall be implemented on top-level Assets and any other Assets that maintain their own status information. DeviceHealth of the top-level Assets is aggregated into AggregatedDeviceHealth (see 9.1.2). Whether nested Assets aggregate their DeviceHealth into DeviceHealth of their parent Asset is vendor-specific and is further described in OPC 10000-110 (e.g., for redundant nested Assets, one might fail without the parent Asset failing).

SoftwareUpdate is an AddIn (see OPC 10000-100) that defines support for firmware or software updates. This optional AddIn should be included in any Asset that includes firmware or software that can be upgraded or changed. For a definition of the AddIn concept, see OPC 10000-3.

The following definitions are associated with the IAssetRevisionType interface (see 7.3).

The following definitions are associated with the IAssetExtensionsType interface (see 7.4).

  • Connectors is a Folder used to group and list physical- or software-based connectors (instances of AssetConnectorType) that can be used to link multiple Assets. A connector provides more information about an Asset connection than a simple Reference can. For a formal definition of the AssetConnectorType, see 6.3.4.

The VerifyAsset Method allows a Client to verify whether an Asset’s identity and functionality meet the expectations of system engineering.

Three different modes are available for Asset verification (see VerificationMode). Each mode depends on a set of mandatory and optional Variables (see definition of AssetVerificationModeEnum in 10.4) to be present for verification. The VerifyAsset Method also accepts additional Variables for verification.

An Asset implementing the VerifyAsset Method shall at least support the VerificationMode AssetCompatibility and expose the corresponding mandatory and implemented optional Variables in its Information Model. If at least one of the optional Variables, SerialNumber and/or ProductInstanceUri, are provided, then the VerificationModes AssetIdentity and AssetIdentityAndCompatibility shall be supported.

The signature of this Method is specified below; the arguments are defined in Table 30.

Signature

VerifyAsset (

[in] 2:AssetVerificationModeEnumVerificationMode,

[in] 0:KeyValuePair[] ExpectedVerificationVariables,

[in] 2:NodeIdValuePair[] ExpectedAdditionalVerificationVariables,

[out] 2:AssetVerificationResultEnumVerificationResult,

[out] 0:StatusCode[] VerificationVariablesErrors,

[out] 0:StatusCode[] VerificationAdditionalVariablesErrors

);

Table 30 – VerifyAsset Method arguments

Argument

Description

VerificationMode

Mode for Asset verification: see 10.4 for a definition of the AssetVerificationModeEnum.

ExpectedVerificationVariables

An array of KeyValuePair containing verification Variables. Key shall be the BrowseName of the Variable to verify (relative to the Asset this Method is being called on), and Value is its expected value.

A Client shall pass all mandatory and implemented optional Variables depending on VerificationMode:

IVendorNameplateType ManufacturerUri (M),

IVendorNameplateType ProductCode (M),

IAssetRevisionType MajorAssetVersion (M),

IAssetRevisionType MinorAssetVersion (M),

IAssetRevisionType BuildAssetNumber (O),

IAssetRevisionType SubBuildAssetNumber (O),

IVendorNameplateType HardwareRevision (O),

IVendorNameplateType SoftwareRevision (O)

IVendorNameplateType ManufacturerUri (M),

IVendorNameplateType ProductCode (M),

At least one of:

IVendorNameplateType SerialNumber,

IVendorNameplateType ProductInstanceUri

AssetIdentityAndCompatibility: All mandatory Variables of both AssetCompatibility and AssetIdentity are mandatory for top-level Assets (those directly in the Assets Folder in the AutomationComponent). All optional Variables of AssetCompatibility are optional.

ExpectedAdditionalVerificationVariables

An array of NodeIdValuePair containing additional verification Variables. NodeId shall be the NodeId of the Variable to verify, and Value shall be its expected value. This array may be null or empty if no additional Variables are to be verified.

The following rules shall apply to the usage of NodeIdValuePair:

  • If NodeId refers to variables of type array, it shall be verified that Value is a matching array.
  • If the ArrayIndex is provided, the value shall be checked against the corresponding index.

If Value is null, it shall be verified that NodeId exists. The Node may be a of any NodeClass, but only the NodeClass of Variable or VariableType can have a non-null value.

VerificationResult

The result of Asset verification is determined by the Method implementation; see 10.7 for a definition of the AssetVerificationResultEnum.

The following general rule applies to determine VerificationResult:

  • All string-type Variables shall be stripped of leading and trailing whitespaces before processing.

The following specific rules apply to determine AssetCompatibility:

If this value is set, VerificationVariablesErrors and/or VerificationAdditionalVariablesErrors shall be populated.

The following specific rules apply to determine AssetIdentity:

The following specific rules apply to determine AssetIdentityAndCompatibility:

Mismatch: Shall be returned if verification of AssetCompatibility or AssetIdentity or both result in Mismatch.

VerificationVariablesErrors

An array of StatusCode corresponding to the ExpectedVerificationVariables input argument that indicates any errors that occurred during the processing of ExpectedVerificationVariables. If this array is populated, the length of this array shall match the length of ExpectedVerificationVariables. For possible values in this array, see Table 32.

VerificationAdditionalVariablesErrors

An array of StatusCode corresponding to the ExpectedAdditionalVerificationVariables input argument that indicates any errors that occurred during the processing of ExpectedAdditionalVerificationVariables. If this array is populated, the length of this array shall match the length of ExpectedAdditionalVerificationVariables. For possible values in this array, see Table 33.

The possible Method result codes are formally defined in Table 31.

Table 31 – VerifyAsset Method result codes

Result Code

Description

Bad_InvalidArgument

One or more arguments are invalid, or ExpectedVerificationVariables is missing Variables that are mandatory for the chosen VerificationMode (or optional, and the implementation of this Method expects them because they are implemented).

Bad_NotSupported

The Client specified a VerificationMode that is not supported by this Method implementation.

Uncertain

At least one element in ExpectedVerificationVariables and/or ExpectedAdditionalVerificationVariables is invalid or failed verification. VerificationVariablesErrors and/or VerificationAdditionalVariablesErrors will contain additional information.

The VerificationVariablesErrors StatusCodes are formally defined in Table 32.

Table 32 – VerificationVariablesErrors StatusCodes

Result Code

Description

Bad_BrowseNameInvalid

The BrowseName for the verification Variable is invalid or was passed more than once.

Bad_TypeMismatch

The value supplied for the verification Variable (if non-null) is not of the same type as the implemented verification Variable.

Bad_OutOfRange

The value supplied for the Variable is not equal to the actual value of the Variable (if non-null).

Good

The verification for this Variable succeeded.

The VerificationAdditionalVariablesErrors StatusCodes are formally defined in Table 33.

Table 33 – VerificationAdditionalVariablesErrors StatusCodes

Result Code

Description

Bad_OutOfRange

The value supplied for the Variable is not equal to the actual value of the Variable (if non-null).

Good

The verification for this Variable succeeded.

The VerifyAsset Method representation in the AddressSpace is formally defined in Table 34.

Table 34 – VerifyAsset Method AddressSpace definition

Attribute

Value

BrowseName

3:VerifyAsset

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

ConformanceUnits

UAFX IAssetRevision VerifyAsset Base

The AssetConnectorType provides information about physical connections that are part of an Asset. An example of these connections might be slots in which cards can be mounted or sockets that cables can be connected to. For additional examples, see Annex D. It is expected that subtypes of this type that provide or require additional Properties or Variables will be created. Figure 22 provides an illustration of the AssetConnectorType.

image025.png

Figure 22 – AssetConnectorType illustration

The AssetConnectorType is an abstract type and must be subtyped. It is formally defined in Table 35.

Table 35 – AssetConnectorType definition

Attribute

Value

BrowseName

3:AssetConnectorType

IsAbstract

True

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasProperty

Variable

3:Id

0:UInt16

0:PropertyType

O

0:HasProperty

Variable

3:Name

0:String

0:PropertyType

O

0:HasSubtype

ObjectType

3:SlotType

Defined in 6.3.5

0:HasSubtype

ObjectType

3:SocketType

Defined in 6.3.6

0:HasSubtype

ObjectType

3:ClampType

Defined in 6.3.7

0:HasSubtype

ObjectType

3:ClampBlockType

Defined in 6.3.8

ConformanceUnits

UAFX AssetConnector Slot Base

UAFX AssetConnector Socket Base

UAFX AssetConnector Clamp Base

UAFX AssetConnector ClampBlock Base

Id provides the (physical) ID of the connector, representing the physical location of the connector in the Asset. The use of this ID can be further explained or defined in subtypes.

Name provides the physical label that is associated with this connector. The use of Name can be further explained or defined in subtypes. For example, it might be the name of the target of this connector, the DisplayName would be slot1, and the Name would be Pump1.

Figure 23 provides an illustration of some of the possible subtypes of the AssetConnectorType.

image026.png

Figure 23 – AssetConnectorType subtypes illustration

Some connector types are used to link other Assets, while other AssetConnectorTypes might be used to indicate physical connections.

The SlotType represents a physical slot where a module can attach to, e.g., in a modular Asset like a PLC backplane or modular IO device.

The SlotType is formally defined in Table 36.

Table 36 – SlotType definition

Attribute

Value

BrowseName

3:SlotType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 3:AssetConnectorType

0:HasProperty

Variable

3:Id

0:UInt16

0:PropertyType

M

0:HasProperty

Variable

3:LogicalId

0:UInt16

0:PropertyType

O

ConformanceUnits

UAFX AssetConnector Slot Base

Id is from AssetConnectorType and is mandatory in SlotType. It shall start at 1 and increment by 1 for each physical slot in a rack or device.

The optional LogicalId represents the“logical slot number that might be assigned to a physical ID. For example, module 3 is physically plugged into slot 3, but internally it is used as slot 8.

Each Slot that has a module plugged into it shall have a HasAttachedComponent Reference (see OPC 10000-23) indicating the Asset that occupies the slot.

The SocketType represents a physical socket where a cable can be connected.

The SocketType is formally defined in Table 37.

Table 37 – SocketType definition

Attribute

Value

BrowseName

3:SocketType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 3:AssetConnectorType

0:HasComponent

Variable

3:Kind

0:UInt16

0:MultiStateValueDiscreteType

O

0:HasProperty

Variable

3:Name

0:String

0:PropertyType

M

ConformanceUnits

UAFX AssetConnector Socket Base

Name is from AssetConnectorType and is mandatory in SocketType. It represents the label that would be associated with a Socket.

The optional Kind is a MultiStateValueDiscreteType that describes the type of socket, e.g., RJ-45 or M12. The MultiStateValueDiscreteType has two properties: EnumValues and ValueAsText. An enumeration (SocketKindEnum) is defined (see 10.43) that provides a default list of Kind values. The configured list of EnumValues for a Socket can use the list provided by the default enumeration, extend the default list, or create its own list of EnumValues. A companion specification may define a different or extended list of Kind EnumValues.

The ClampType represents a wire connection, such as a twisted pair or single wire connection, where the wire needs to be connected to some termination connection.

The Clamp Type is formally defined in Table 38.

Table 38 – ClampType definition

Attribute

Value

BrowseName

3:ClampType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 3:AssetConnectorType

0:HasProperty

Variable

3:Name

0:String

0:PropertyType

M

0:HasComponent

Variable

3:Kind

0:UInt16

0:MultiStateValueDiscreteType

O

ConformanceUnits

UAFX AssetConnector Clamp Base

UAFX AssetConnector ClampBlock Base

Name is from AssetConnectorType and is mandatory in ClampType.

The optional Kind is a MultiStateValueDiscreteType that describes the type of clamp, e.g., screw connector, thumb connector, etc. The MultiStateValueDiscreteType has two properties: EnumValues and ValueAsText. An enumeration is defined (see 10.8) that provides a default list of Kind EnumValues. The configured list of EnumValues for a Clamp can use the default list, can extend the default list, or can create its own list of EnumValues. A companion specification may define a different or extended list of Kind EnumValues.

The ClampBlockType represents a wire connection block, where the block contains a number of termination points for twisted pair or single wire connections.

The ClampBlock Type is formally defined in Table 39.

Table 39 – ClampBlockType definition

Attribute

Value

BrowseName

3:ClampBlockType

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Other

Subtype of the 3:AssetConnectorType

0:HasProperty

Variable

3:Name

0:String

0:PropertyType

M

0:HasProperty

Variable

3:BlockSize

0:UInt16

0:PropertyType

O

0:HasComponent

Variable

3:Kind

0:UInt16

0:MultiStateValueDiscreteType

O

0:HasComponent

Object

3:<Clamp>

3:ClampType

OP

ConformanceUnits

UAFX AssetConnector ClampBlock Base

Name is from AssetConnectorType and is mandatory in ClampBlockType.

The optional BlockSize is the maximum number of clamps that this block can support.

The optional Kind is a MultiStateValueDiscreteType that describes the type of clamp, e.g., screw connector, thumb connector, etc. The MultiStateValueDiscreteType has two properties: EnumValues and ValueAsText. An enumeration is defined (see 10.8) that provides a default list of Kind EnumValues. The configured list of EnumValues for a ClampBlock can use the list provided by the default EnumValues, extend the default list, or create its own list of EnumValues. A companion specification may define a different or extended list of Kind EnumValues.

<Clamp > are entries for each Clamp that is in use with the details of that specific clamp in the block.

FunctionalEntityType is the base type for the definition of all functionality in an OPC UA FX Information Model. A FunctionalEntity can provide InputData, OutputData, ConfigurationData, diagnostic information and Methods for manipulating or sharing the data. It is expected that other models will subtype the FunctionalEntityType. It can have SubFunctionalEntities and relationships to other Objects defined in this model or other models. A FunctionalEntity may be implemented using the IFunctionalEntityType Interface. It does not need to be an instance of FunctionalEntityType or an instance of a subtype of FunctionalEntityType.

The FunctionalEntityType is illustrated in Figure 24.

image027.png

Figure 24 – FunctionalEntityType overview

The FunctionalEntityType is formally defined in Table 40. Most of this ObjectType is obtained from the I FunctionalEntityType Interface (see 7.2). The description of the components and properties in a FunctionalEntityType is in this clause; the I FunctionalEntityType only references this clause. For examples of extending FunctionalEntityType or utilising it in an existing model, see Annex B.

Table 40 – FunctionalEntityType definition

Attribute

Value

BrowseName

3:FunctionalEntityType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasInterface

ObjectType

3:IFunctionalEntityType

Applied from IFunctionalEntityType

0:HasProperty

Variable

3:AuthorUri

0:UriString

0:PropertyType

O

0:HasProperty

Variable

3:AuthorAssignedIdentifier

0:String

0:PropertyType

O

0:HasProperty

Variable

3:AuthorAssignedVersion

3:FxVersion

0:PropertyType

O

0:HasProperty

Variable

3:ApplicationIdentifier

3:ApplicationIdentifierDataType[]

0:PropertyType

O

0:HasComponent

Method

3:Verify

Defined in 6.4.3

O

0:HasComponent

Object

3:InputData

3:InputsFolderType

O

0:HasComponent

Object

3:OutputData

3:OutputsFolderType

O

0:HasComponent

Object

3:ConfigurationData

3:ConfigurationDataFolderType

O

0:HasComponent

Object

3:Capabilities

3:FunctionalEntityCapabilitiesType

O

0:HasComponent

Object

3:PublisherCapabilities

3:PublisherCapabilitiesType

O

0:HasComponent

Object

3:SubscriberCapabilities

3:SubscriberCapabilitiesType

O

0:HasComponent

Object

3:ConnectionEndpoints

3:ConnectionEndpointsFolderType

O

0:HasComponent

Object

3:ControlGroups

3:ControlGroupsFolderType

O

0:HasComponent

Variable

3:OperationalHealth

3:OperationalHealthOptionSet

0:BaseDataVariableType

O, RO

0:HasComponent

Object

3:OperationalHealthAlarms

0:FolderType

O

3:HasSubFunctionalEntity

Object

3:<SubFunctionalEntity>

3:FunctionalEntityType

OP

ConformanceUnits

UAFX FunctionalEntity Base

The FunctionalEntityType is a base ObjectType. It is expected that companion specifications or vendors will define subtypes of FunctionalEntityType. Subtypes will define additional Variables that would exist in InputData, OutputData and ConfigurationData. The subtypes might also add Objects and Methods or define nested FunctionalEntityType instances. In addition, the information in the FunctionalEntityType may be directly used in an existing ObjectType, either via the AddIn concept or Interface concept defined in OPC 10000-3. For an illustration of how this can be accomplished, see B.3.

The optional AuthorUri is a string that is a URI that resolves to the website of the company that is responsible for this FunctionalEntity.

NOTE Multiple instances of FunctionalEntityType could reference the same instance of AuthorUri.

The optional AuthorAssignedIdentifier provides a unique code used to identify the author-defined type of this FunctionalEntity. This Property is maintained by the author. The semantics of the AuthorAssignedIdentifier is author-specific.

The optional AuthorAssignedVersion provides the version of this FunctionalEntity. The semantic of the AuthorAssignedVersion is author-specific. This identifier is provided to allow additional information beyond what the AuthorAssignedIdentifier provides. For example, some authors might have more than one version of the motor controller model or the PID controller algorithm.

The optional ApplicationIdentifier – provides application information consisting of two properties: a localized Name that is intended to be human-readable and a unique identifier that is intended to be machine-readable. For a definition of the ApplicationIdentifierDataType, see 10.3. The ApplicationIdentifier shall be used as follows:

  • Name provides the name of the application this FunctionalEntity is used in. The Name is given by the system integrator, manufacturer or end-user that created the application.
  • UniqueIdentifier provides a unique identifier for the application in which FunctionalEntity is used. UniqueIdentifier is maintained by the creator of the identifier. This field is of ApplicationId DataType to allow the creator to create any type of identifier. An ApplicationId DataType allows the field to contain a string, integer, GUID, or ByteString. It is up to the creator of the identifier to choose which of these types is used.

The optional ApplicationIdentifier is specified as an array since it may indicate multiple levels of application and thus have multiple values. For example, the product vendor of an advanced alarm control creates a FunctionalEntity and assigns to it an identifier. A system integrator customizes it with settings for boiler alarming and assigns an additional identifier. The end-user may further deploy an instance of the configured FunctionalEntity on “Boiler #5” and provide an additional identifier.

The optional InputData provides a grouping of information in this FunctionalEntity. It provides a reference to all data that this FunctionalEntity can use as input to its processing. The InputsFolderType is defined in 6.4.4.

The optional OutputData provides a grouping of information in this FunctionalEntity. It provides a reference to all data that this FunctionalEntity can use as output from its processing. The OutputsFolderType is defined in 6.4.5.

The optional ConfigurationData provides a grouping of information in this FunctionalEntity into a logical grouping of information that is considered configuration information (for additional information, see 5.4). The ConfigurationDataFolderType is defined in 6.4.6.

The optional Capabilities is a FunctionalEntityCapabilitiesType Folder that describes functionality provided by a FunctionalEntity (see 6.4.7).

The optional PublisherCapabilities provide the Publisher capabilities associated with this FunctionalEntity. They also apply to all sub-FunctionalEntities of this FunctionalEntity. The PublisherCapabilities for the FunctionalEntity describes additional restrictions of the PublisherCapabilities defined in the AutomationComponent. It can also be further restricted by the PublisherCapabilities provided in OutputData or a sub-FunctionalEntity.

The optional SubscriberCapabilities provide the Subscriber capabilities associated with this FunctionalEntity. They also apply to all sub-FunctionalEntities of this FunctionalEntity. The SubscriberCapabilities for the FunctionalEntity describes additional restrictions of the SubscriberCapabilities defined in the AutomationComponent. It can also be further restricted by the SubscriberCapabilities provided in InputData or a sub-FunctionalEntity.

NOTE   The PublisherCapabilities and SubscriberCapabilities on the FunctionalEntity level apply to data and heartbeats. PublisherCapabilities and SubscriberCapabilities on Output-/InputData level only apply for that data, i.e., not for heartbeats.

The ConnectionEndpoints Folder provides a container for all Connection-related information that this FunctionalEntity might contain. For details on the ConnectionEndpointsFolderType, see 6.4.8. For details on the ConnectionEndpointType that this Folder contains, see 6.6. If the FunctionalEntity does not expose ConnectionEndpoints, the Folder may be missing.

The ControlGroups Folder provides a container for all ControlGroupType instances this FunctionalEntity might contain. For the concepts, see 5.3. For details on the ControlGroupsFolderType, see 6.4.9. For details on the ControlGroupType that this Folder contains, see 6.5.

The optional OperationalHealth indicates the operational health of the FunctionalEntity. It aggregates the health of its SubFunctionalEntities and the health of ConnectionEndpoints. For the definition of the OperationalHealthOptionSet, see 10.30.

The aggregation rules are defined as follows:

All top-level FunctionalEntities shall implement OperationalHealth. The OperationalHealth of the top-level FunctionalEntities is aggregated into AggregatedOperationalHealth (see 9.1.2) Variable of the AggregatedHealth Variable in the AutomationComponent (see 6.2.2).

The optional OperationalHealthAlarms Folder shall be restricted to hold only instances of Alarms. No UAFX-specific Alarms are defined in this release, but base OPC UA Alarms can be used. In future versions of this document, UAFX-specific Alarms will be defined.

The optional <SubFunctionalEntity> allows for the nesting of FunctionalEntities. A FunctionalEntity can have any number of SubFunctionalEntities. SubFunctionalEntities are identified by the HasSubFunctionalEntity ReferenceType. They may be of FunctionalEntityType or another ObjectType that implements the IFunctionalEntityType Interface.

The Verify Method allows a Client to verify whether a FunctionalEntity meets the expectation of system engineering (e.g., whether it is of the expected author, but also if it implements any optional Variables required by a Client application). It also supports verifying any Variables defined by the application.

The signature of this Method is specified below; the arguments are defined in Table 41.

Signature

Verify (

[in] 2:NodeIdValuePair[] ExpectedVerificationVariables,

[out] 2:FunctionalEntityVerificationResultEnumVerificationResult,

[out] 0:StatusCode[] VerificationVariablesErrors

);

Table 41 – Verify Method arguments

Argument

Description

ExpectedVerificationVariables

An array of NodeIdValuePair containing verification variables. NodeId shall be the NodeId of the variable to verify and Value its expected value.

The following rules shall apply to the usage of NodeIdValuePair:

A Client may pass in any NodeId with a null Value to verify if the Node exists in the Server. The Node may be of any NodeClass, but only the NodeClass of Variable or VariableType can have a non-null value.

VerificationResult

The result of the verification; see 10.20 for a definition of the FunctionalEntityVerificationResultEnum.

The following general rules apply to determine VerificationResult:

  • All string-type variables shall be stripped of leading and trailing whitespaces before processing.

The following specific rules shall apply to determine VerificationResult:

VerificationVariablesErrors

An array of StatusCode corresponding to the ExpectedVerificationVariables input argument that indicates any errors (if VerificationResult equals NotSet) or detailed verification results (if VerificationResult equals Mismatch). If this array is populated, the length of this array shall match the length of ExpectedVerificationVariables. For possible values in this array, see Table 43.

The Method result codes are formally defined in Table 42.

Table 42 – Verify Method result codes

Result Code

Description

Bad_InvalidArgument

ExpectedVerificationVariables is empty.

Uncertain

There was at least one error or warning for one of the Variables to be verified. VerificationVariablesErrors will contain additional information.

The VerificationVariablesErrors StatusCodes are formally defined in Table 43.

Table 43 – VerificationVariablesErrors StatusCodes

Result Code

Description

Bad_TypeMismatch

The value supplied for the verification variable (if non-null) is not of the same type as the implemented verification variable.

Bad_NodeIdInvalid

The NodeIdValuePair contains a NodeId with an invalid syntax in its key field.

Bad_NodeIdUnknown

The NodeIdValuePair contains a NodeId in its key field that does not exist in the Server address space.

Bad_OutOfRange

The value supplied for the Variable is not equal to the actual value of the Variable (if non-null).

Bad_NothingToDo

The operation was skipped.

Verification of this variable was skipped because verification of preceding variables already resulted in VerificationResult to be set to Mismatch.

Good

The verification for this Variable succeeded.

The Verify Method representation in the AddressSpace is formally defined in Table 44.

Table 44 – Verify Method AddressSpace definition

Attribute

Value

BrowseName

3:Verify

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

ConformanceUnits

UAFX IFunctionalEntity Verify

The InputsFolderType is a subtype of the FolderType defined in OPC 10000-5.

The InputsFolderType is formally defined in Table 45.

Table 45 – InputsFolderType definition

Attribute

Value

BrowseName

3:InputsFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

0:HasComponent

Object

3:SubscriberCapabilities

3:SubscriberCapabilitiesType

O

3:HasInputGroup

Object

3:<InputGroup>

3:InputsFolderType

OP

0:Organizes

Variable

3:<InputVariable>

0:BaseDataType

0:BaseDataVariableType

OP

ConformanceUnits

UAFX FunctionalEntity Base

The InputsFolderType provides for the grouping of input variables. It shall be restricted to hold only Variables. The InputsFolder may be empty.

The optional SubscriberCapabilities shall only be present on InputData of the FunctionalEntity. It provides the Subscriber capabilities associated with the InputData and describes additional restrictions of the SubscriberCapabilities defined in the FunctionalEntity or AutomationComponent.

<InputsGroup> allows for the nesting of Folders. Nested instances can be used to create a structure of input groups.

The OutputsFolderType is a subtype of the FolderType defined in OPC 10000-5.

The OutputsFolderType is formally defined in Table 46.

Table 46 – OutputsFolderType definition

Attribute

Value

BrowseName

3:OutputsFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

0:HasComponent

Object

3:PublisherCapabilities

3:PublisherCapabilitiesType

O

3:HasOutputGroup

Object

3:<OutputGroup>

3:OutputsFolderType

OP

0:Organizes

Variable

3:<OutputVariable>

0:BaseDataType

0:BaseDataVariableType

OP

ConformanceUnits

UAFX FunctionalEntity Base

The OutputsFolderType provides for the grouping of output variables. It shall be restricted to hold only Variables. The OutputsFolder may be empty.

The optional PublisherCapabilities shall only be present on OutputData of the FunctionalEntity. It provides the Publisher capabilities associated with the OutputData and describes additional restrictions of the PublisherCapabilities defined in the FunctionalEntity or AutomationComponent.

<OutputGroup> allows for the nesting of Folders. Nested instances can be used to create a structure of output groups.

The ConfigurationDataFolderType is used to organize ConfigurationData Variables and provides the Methods for supporting storage of Variables (see 5.4). A ConfigurationDataFolder may contain sub-Folders derived from FunctionalGroupType.

The ConfigurationDataFolderType is illustrated in Figure 25.

image028.png

Figure 25 – ConfigurationDataFolderType illustration

The ConfigurationDataFolderType extends the FunctionalGroupType defined in OPC 10000-100.

The ConfigurationDataFolderType is formally defined in Table 47.

Table 47 – ConfigurationDataFolderType definition

Attribute

Value

BrowseName

3:ConfigurationDataFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 5:FunctionalGroupType defined in OPC 10000-100

0:Organizes

Variable

3:<ConfigurationVariable>

0:BaseDataType

0:BaseDataVariableType

OP

0:HasComponent

Method

3:SetStoredVariables

Defined in 6.4.6.3

O

0:HasComponent

Method

3:ClearStoredVariables

Defined in 6.4.6.4

O

0:HasComponent

Method

3:ListStoredVariables

Defined in 6.4.6.5

O

ConformanceUnits

UAFX FunctionalEntity Base

<ConfigurationVariable > - represents the optional configuration data that this Folder can organize.

The optional Methods SetStoredVariables, ClearStoredVariables, and ListStoredVariables allow maintaining the storage for configuration Variables. If storage is supported, SetStoredVariables, ClearStoredVariables, and ListStoredVariables shall be supported.

The optional SetStoredVariables Method allows a Client to store current values of configuration Variables for the FunctionalEntity and its SubFunctionalEntities.

The FunctionalEntity shall apply the stored values to the configuration variables after a power cycle.

The signature of this Method is specified below; the arguments are defined in Table 48.

Signature

SetStoredVariables (

[in] 0:NodeId[] VariablesToStore,

[out] 0:StatusCode[]Results

);

Table 48 – SetStoredVariables Method arguments

Argument

Description

VariablesToStore

An array of NodeIds containing configuration data variables. NodeId shall be the NodeId of a configuration data variable belonging to ConfigurationData of this FunctionalEntity or one of its SubFunctionalEntities.

Results

An array of StatusCode corresponding to the VariablesToStore input argument that indicates any errors that occurred during the processing of VariablesToStore. If this array is populated, it has the same length as the VariablesToStore array. For possible values in this array, see Table 50.

The possible Method result codes are formally defined in Table 49.

Table 49 – SetStoredVariables Method result codes

Result Code

Description

Uncertain

There was at least one error while processing the Variables to be stored. Results will contain additional information.

The Results StatusCodes are formally defined in Table 50.

Table 50 – Results StatusCodes

Result Code

Description

Bad_InvalidArgument

The NodeId is not a ConfigurationData Variable or does not belong to this FunctionalEntity or one of its SubFunctionalEntities.

Bad_NotSupported

The NodeId specifies a Variable that is non-volatile.

Bad_ResourceUnavailable

There are not enough resources for storing this Variable.

Good

Storing this Variable succeeded.

The SetStoredVariables Method representation in the AddressSpace is formally defined in Table 51.

Table 51 – SetStoredVariables Method AddressSpace definition

Attribute

Value

BrowseName

3:SetStoredVariables

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

ConformanceUnits

UAFX ConfigurationDataFolder VariableStorage

The optional ClearStoredVariables Method allows a Client to clear the Variable from the list of Variables that are to be restored.

The signature of this Method is specified below; the arguments are defined in Table 52.

Signature

ClearStoredVariables (

[in] 0:NodeId[] VariablesToClear,

[out] 0:StatusCode[]Results

);

Table 52 – ClearStoredVariables Method arguments

Argument

Description

VariablesToClear

An array of NodeId containing configuration data variables.

Results

An array of StatusCode corresponding to the VariablesToClear input argument that indicates any errors that occurred during the processing of VariablesToClear. If this array is populated, it has the same length as the VariablesToClear array. For possible values in this array, see Table 54.

The possible Method result codes are formally defined in Table 53.

Table 53 – ClearStoredVariables Method result codes

Result Code

Description

Uncertain

There was at least one error while processing the Variables to be cleared.

Results will contain additional information.

The Results StatusCodes are formally defined in Table 54.

Table 54 – Results StatusCodes

Result Code

Description

Bad_InvalidArgument

The NodeId is not a ConfigurationData Variable or does not belong to this FunctionalEntity or one of its SubFunctionalEntities.

Bad_NotSupported

The NodeId specifies a Variable that is non-volatile or does not have storage for the Variable.

Good

Clearing the storage for this Variable succeeded.

The ClearStoredVariables Method representation in the AddressSpace is formally defined in Table 55.

Table 55 – ClearStoredVariables Method AddressSpace definition

Attribute

Value

BrowseName

3:ClearStoredVariables

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

ConformanceUnits

UAFX ConfigurationDataFolder VariableStorage

The optional ListStoredVariables Method allows a Client to list the Variables that are currently in storage.

The signature of this Method is specified below; the arguments are defined in Table 56.

Signature

ListStoredVariables (

[out] 2:NodeIdValuePair[] StoredVariables

);

Table 56 – ListStoredVariables Method arguments

Argument

Description

StoredVariables

An array of NodeIdValuePair. Key indicates a Variable belonging to ConfigurationData of this FunctionalEntity or one of its SubFunctionalEntities. Value indicates the stored value.

The ListStoredVariables Method representation in the AddressSpace is formally defined in Table 57.

Table 57 – ListStoredVariables Method AddressSpace definition

Attribute

Value

BrowseName

3:ListStoredVariables

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

ConformanceUnits

UAFX ConfigurationDataFolder VariableStorage

The FunctionalEntityCapabilitiesType extends the FolderType defined in OPC 10000-5. It shall be restricted to hold only Variables that reflect the capabilities of the FunctionalEntity.

The FunctionalEntityCapabilitiesType is formally defined in Table 58.

Table 58 – FunctionalEntityCapabilitiesType definition

Attribute

Value

BrowseName

3:FunctionalEntityCapabilitiesType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

3:HasCapability

Variable

3:<Capability>

0:BaseDataType

0:BaseDataVariableType

OP

3:HasCapability

Variable

3:FeedbackSignalRequired

0:Boolean

0:BaseDataVariableType

O

ConformanceUnits

UAFX FunctionalEntity Base

<Capability> - is a placeholder to indicate that additional capabilities may be added by this document or by a companion specification at any time. These capabilities shall include a Description.

If the optional FeedbackSignalRequired is present and set to TRUE, the FunctionalEntity requires a feedback signal for all Connections. A feedback signal is represented by the reception of either data or a heartbeat. The following connection types (see 5.5.1) support feedback: bidirectional, unidirectional with heartbeat, unidirectional Subscriber, and autonomous Subscriber. If FeedbackSignalRequired is missing or set to FALSE, the connection types unidirectional Publisher and autonomous Publisher are also supported.

The ConnectionEndpointsFolderType extends the FolderType defined in OPC 10000-5. It shall be restricted to hold only instances of ConnectionEndpointType or subtypes of ConnectionEndpointType. It may be empty.

The ConnectionEndpointsFolderType is formally defined in Table 59.

Table 59 – ConnectionEndpointsFolderType definition

Attribute

Value

BrowseName

3:ConnectionEndpointsFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

HasConnectionEndpoint

Object

3:<ConnectionEndpoint>

3:ConnectionEndpointType

OP

0:HasComponent

Variable

3:CommHealth

3:CommHealthOptionSet

0:BaseDataVariableType

O, RO

ConformanceUnits

UAFX FunctionalEntity Base

The optional CommHealth aggregates the Status of all ConnectionEndpoints contained in the Folder. The aggregation rules are defined as follows:

For the definition of the CommHealthOptionSet, see 10.9.

The ControlGroupsFolderType extends the FolderType defined in OPC 10000-5. It shall be restricted to hold only instances of ControlGroupType (see 6.5). The ControlGroupsFolder may be empty.

The ControlGroupsFolderType is formally defined in Table 60.

Table 60 – ControlGroupsFolderType definition

Attribute

Value

BrowseName

3:ControlGroupsFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

3:HasControlGroup

Object

3:<ControlGroup>

3:ControlGroupType

OP

ConformanceUnits

UAFX FunctionalEntity Base

The ControlGroupType is used to manage the control of the functionality provided by a FunctionalEntity or part of it. ControlGroups are used when some part of a FunctionalEntity is to be “controlled” by another FunctionalEntity or application. ControlGroups can be used by an application to help understand how the Variables (inputs, outputs, configuration) and Methods are logically related to each other in the application. ControlGroups utilize the LockingServices defined in OPC 10000-100. The ControlGroupType is illustrated in Figure 26.

image029.png

Figure 26 – ControlGroupType illustration

ControlGroups are part of the FunctionalEntity model and are independent of any communication model (Client Server, PubSub, etc.). A ControlGroup is used to identify the usage of parts of the FunctionalEntity. ControlGroups may result in a restriction to the grouped items. The restriction can include Objects (input and configuration Variables) and Method invocations. The restriction can block all changes to Variables or restrict changes to only the lock-owner (application or user). The lock-owner of the restrictions may be unrelated to the caller of the EstablishControl Method.

A Variable, Object, or Method may be referenced from more than one ControlGroup. Multiple ControlGroups might exist with different combinations.

ListToRestrict and ListToBlock each have their own instances of LockingServices. When a ControlGroup is assigned to a user or application, the Variables or Methods in ListToBlock or ListToRestrict are associated with that user or application (that user or application becomes the lock-owner). The LockingServices exposed in ListToBlock and ListToRestrict (InitLock, RenewLock, ExitLock) can only be called by the lock-owner. An administrative user with appropriate rights may override a Lock and release it.

The ControlGroup also exposes EstablishControl, ReassignControl, and ReleaseControl Methods. EstablishControl will acquire the Lock for both ListToRestrict and ListToBlock. ReassignControl can be used to change the lock-owner to a different user or application. ReleaseControl will release the Lock. A user or application different from the lock-owner shall not be able to successfully call EstablishControl on another ControlGroup that references the same Variables or Methods in ListToBlock or ListToRestrict.

The EstablishConnections Method supports commands to establish control (EstablishControlCmd) and reassign control (ReassignControlCmd). The CloseConnections Method will release any Locks that may have been acquired as part of connection establishment. The functionality provided by EstablishConnections (ReassignControlCmd) and CloseConnections is the same as that provided by the individual Methods in the ControlGroup, except they operate on the Locks as the lock-owner. If a ControlGroup is assigned to a ConnectionEndpoint, only those having the rights to call EstablishConnections or CloseConnections can reassign or release control (i.e., the EstablishConnections and CloseConnections Method act as the ConnectionEndpoint).

One or more Clients may call EstablishControl on separate ControlGroups that do not share any Variables or Methods (in ListToRestrict or ListToBlock). For examples of ControlGroups, see Annex D.3.

The FunctionalEntity may provide Variables in its InputData, OutputData and ConfigurationData Folders. A ControlGroup may include any combination of the input, output, and configuration Variables from the FunctionalEntity. A FunctionalEntity may provide information in InputData, OutputData and ConfigurationData that are not part of any ControlGroup.

ControlGroups are primarily used for locking, but they may also be used to merely provide a subset of FunctionalEntity configuration related to a specific described set of controls. The described grouping of functionality may be nested to allow further organization of the functionality. For example, a simple PID may be modelled as a FunctionalEntity; it can be run in cascade mode where another FunctionalEntity provides the setpoint input, or it can allow an operator to enter setpoints via an HMI. In this case, two ControlGroups could be provided by the PID FunctionalEntity, and the choice of ControlGroup would lock the functionality into a specific mode. More complex FunctionalEntities might also restrict which ControlGroups are available based on configuration settings.

The ControlGroupType is formally defined in Table 61.

Table 61 – ControlGroupType definition

Attribute

Value

BrowseName

3:ControlGroupType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Object

3:ListToBlock

3:ControlItemFolderType

M

0:HasComponent

Object

3:ListToRestrict

3:ControlItemFolderType

M

0:HasComponent

Object

3:ListOfRelated

0:FolderType

M

0:HasProperty

Variable

3:IsControlled

0:Boolean

0:PropertyType

M

0:HasComponent

Method

3:EstablishControl

Defined in 6.5.3

O

0:HasComponent

Method

3:ReleaseControl

Defined in 6.5.4

O

0:HasComponent

Method

3:ReassignControl

Defined in 6.5.5

O

0:HasComponent

Object

3:<ControlGroup>

3:ControlGroupType

OP

ConformanceUnits

UAFX IFunctionalEntity ControlGroups

ListToBlock is a group of items that are to be blocked from any changes to Variables or executing Methods. This could be any Variables or Methods in the hierarchical structure of instances that are in the FunctionalEntity. Once an EstablishControl Call is made, the values of Variables in this list can no longer be modified, and Methods in this list can no longer be executed.

ListToRestrict is a group of items that are to be restricted to allow only the lock owner (see OPC 10000-100) to change Variables or execute Methods. This could be any Variables or Methods in the hierarchical structure of instances that are in the FunctionalEntity.

ListOfRelated is a group of items that are part of the ControlGroup that are not blocked or restricted (i.e., it is Objects, Variables, Methods).

A Variable, Method or Object shall not be included in more than one of the lists within a ControlGroup.

IsControlled is a flag that indicates if the ControlGroup is currently controlled. When this bit is set, the controlling entity can be determined by following the Controls Reference or by the information in the Lock Object (i.e., the Lock LockingClient) in either the ListToRestrict Folder or the ListToBlock Folder.

The optional EstablishControl Method invokes the LockingServices in both the ListToBlock and ListToRestrict groups. The Lock LockingClient is set to the LockContext parameter unless this parameter is a null String, in which case it is set to the ApplicationUri of the Client connection used to call this Method.

The optional ReassignControl Method will assign all active Locks in the ControlGroup to a different LockingClient.

The Locks can be assigned to a ConnectionEndpoint. In this case, the following applies:

If the lock is assigned to the Client connection, the Controls Reference (see OPC 10000-23) shall have a SourceNode of the Object associated with the Client connection (see OPC 10000-100) and a TargetNode of the ControlGroup.

The optional ReleaseControl Method calls the ExitLock Method on all established Locks and removes the Controls Reference. It also clears the IsControlled flag.

Calling the ExitLock Method on the Locks does not affect the IsControlled flag and associated Controls Reference; it will only release the Lock on the given group of items (ListToBlock, ListToRestrict).

The LockingServices provide a system-wide MaxInactiveLockTime, which a local MaxInactiveLockTime can overwrite in each lock Folder. If the CleanupTimeout is different for each Connection, then a local MaxInactiveLockTime should be specified and related to the ConnectionEndpoint CleanupTimeout. It is important to understand that this timeout will be used to timeout locks and thus must be larger than the CleanupTimeout if a lock is not to be removed before a Connection is removed. The system-wide MaxInactiveLockTime may be used for other applications or deployments of LockingServices, so care should be exercised if a local MaxInactiveLockTime is not used.

A ControlGroup can contain additional nested ControlGroups. The specified Methods of ControlGroupType shall not be applied to any nested ControlGroups.

This Method shall acquire Locks required by the ControlGroup in the ListToRestrict and ListToBlock. If acquiring any Lock fails, all Locks shall be released, and the appropriate LockStatus shall be returned. If all required Locks can be acquired, the Method shall set the IsControlled flag and create the Controls Reference.

It is recommended that this Method be restricted to Client connections that have the well-known Role ConnectionAdmin as defined in Clause 5.9.

EstablishControl shall set Lock LockingClient to the LockContext Argument.

The signature of this Method is specified below; the arguments are defined in Table 62.

Signature

EstablishControl (

[in] 0:String LockContext,

[out] 0:Int32 LockStatus

);

Table 62 – EstablishControl Method Arguments

Argument

Description

LockContext

A string used to provide context information about the lock-owner. It may be the NodeId (in string representation) of a ConnectionEndpoint or the ApplicationUri of a Client connection as provided in the CreateSession Service Call (see OPC 10000-4). If this parameter is a null string, it shall default to the ApplicationUri of the Client connection initiating this command.

LockStatus

0 – OK

-1 – E_AlreadyLocked – An element is already locked; this might be an entire Lock, or it might be a single variable in one of the lists.

-2 – E_Invalid – the element cannot be locked

The possible Method result codes are formally defined in Table 63.

Table 63 – EstablishControl Method result codes

ResultCode

Description

Bad_UserAccessDenied

The caller is not allowed to establish control on the ControlGroup.

The EstablishControl Method representation in the AddressSpace is formally defined in Table 64.

Table 64 – EstablishControl Method AddressSpace definition

Attribute

Value

BrowseName

3:EstablishControl

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

Argument[]

0:PropertyType

Mandatory

0:HasProperty

Variable

0:OutputArguments

Argument[]

0:PropertyType

Mandatory

ConformanceUnits

UAFX IFunctionalEntity ControlGroups

This Method Call shall release the ControlGroup and issue a Call to the Lock Objects in each Folder for the ExitLock Method (see OPC 10000-100). It shall create the appropriate parameters for the ExitLock Method. It shall remove the Controls Reference from the ControlGroup.

It is recommended that this Method be restricted to Client connections that have the well-known Role ConnectionAdmin as defined in Clause 5.9.

The signature of this Method is specified below.

Signature

ReleaseControl (

);

The possible Method result codes are formally defined in Table 65.

Table 65 – ReleaseControl Method result codes

Result Code

Description

Bad_UserAccessDenied

The caller is not allowed to release control on the ControlGroup.

The ReleaseControl Method representation in the AddressSpace is formally defined in Table 66.

Table 66 – ReleaseControl Method AddressSpace definition

Attribute

Value

BrowseName

3:ReleaseControl

References

Node Class

BrowseName

DataType

TypeDefinition

Other

ConformanceUnits

UAFX IFunctionalEntity ControlGroups

This Method shall reassign Locks required by the ControlGroup in the ListToRestrict and ListToBlock. It shall reassign the SourceNode of the Controls Reference (see OPC 10000-23) to the controlling entity as defined by the LockContext.

It shall set Lock LockingClient to the LockContext Argument.

It is recommended that this Method be restricted to Client connections that have the well-known Role ConnectionAdmin as defined in Clause 5.9.

The signature of this Method is specified below; the arguments are defined in Table 67.

Signature

ReassignControl (

[in] 0:String LockContext,

[out] 0:Int32 LockStatus

);

Table 67 – ReassignControl Method Arguments

Argument

Description

LockContext

A string used to provide context information about the lock-owner. It may be the NodeId (in string representation) of a ConnectionEndpoint or the ApplicationUri of a Client connection as provided in the CreateSession Service Call (see OPC 10000-4). It cannot be null.

LockStatus

0 – OK

-1 – E_NotLocked – the Object is not locked

-2 – E_Invalid – the element cannot be reassigned

The possible Method result codes are formally defined in Table 68.

Table 68 – ReassignControl Method result codes

Result Code

Description

Bad_UserAccessDenied

The caller is not allowed to reassign control on the ControlGroup.

Bad_InvalidArgument

LockContext was null, invalid, or non-existing.

The ReassignControl Method representation in the AddressSpace is formally defined in Table 69.

Table 69 – ReassignControl Method AddressSpace definition

Attribute

Value

BrowseName

3:ReassignControl

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

Mandatory

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

Mandatory

ConformanceUnits

UAFX IFunctionalEntity ControlGroups

The ControlItemFolderType is a subtype of the FunctionalGroupType.

The ControlItemFolderType is formally defined in Table 70.

Table 70 – ControlItemFolderType definition

Attribute

Value

BrowseName

3:ControlItemFolderType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 5:FunctionalGroupType defined in OPC 10000-100

0:HasComponent

Object

5:Lock

5:LockingServicesType

M

0:HasProperty

Variable

5:MaxInactiveLockTime

0:Duration

0:PropertyType

O

ConformanceUnits

UAFX IFunctionalEntity ControlGroups

The Lock is of LockingServicesType defined in Device Integration (see OPC 10000-100) and provides the basic locking functionality.

As described in OPC 10000-100, Locks will timeout after a MaxInactiveLockTime period unless there is activity as defined or unless the RenewLock Method is called on a Lock. An optional local MaxInactiveLockTime shall have precedence over the global MaxInactiveLockTime defined in the ServerCapabilities Object.

A ConnectionEndpoint is used to represent an endpoint of a Connection between two FunctionalEntities for data exchange. It provides information about which InputVariables and/or OutputVariables are exchanged. ConnectionEndpoints reside in the ConnectionEndpoints Folder of a FunctionalEntity.

The ConnectionEndpointType is illustrated in Figure 27.

image030.png

Figure 27 – ConnectionEndpointType illustration

A ConnectionEndpoint further describes the link between Variables in the FunctionalEntityType and the communication model used for exchange. Communication models can be Client Server or PubSub. This type specifies the exchanged Variables and contains the status of the Connection. Subtypes of ConnectionEndpointType provide details specific to the utilized communication model and specify how the Connection status shall be determined for a given communication model.

Figure 28 illustrates a Connection between two FunctionalEntities and the use of PubSubConnectionEndpointType to represent the exchanged Variables, as well as corresponding references, into the PubSub Information Model.

image031.png

Figure 28 – Illustration of a Connection between FunctionalEntities

This ObjectType is the abstract base type of all communication model-specific ConnectionEndpointTypes. It defines the elements and behaviour that are common to all ConnectionEndpointTypes. Additional communication model-specific subtypes are defined in subsequent clauses.

The ConnectionEndpointType is formally defined in Table 71.

Table 71 – ConnectionEndpointType definition

Attribute

Value

BrowseName

3:ConnectionEndpointType

IsAbstract

True

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

3:Status

3:ConnectionEndpointStatusEnum

0:BaseDataVariableType

M, RO

0:HasComponent

Variable

3:RelatedEndpoint

2:RelatedEndpointDataType

0:BaseDataVariableType

M

0:HasComponent

Variable

3:InputVariables

0:NodeId[]

0:BaseDataVariableType

O

0:HasComponent

Variable

3:OutputVariables

0:NodeId[]

0:BaseDataVariableType

O

0:HasComponent

Variable

3:IsPersistent

0:Boolean

0:BaseDataVariableType

M

0:HasComponent

Variable

3:CleanupTimeout

0:Duration

0:BaseDataVariableType

M

0:HasSubtype

ObjectType

3:PubSubConnectionEndpointType

Defined in 6.6.3

ConformanceUnits

UAFX ConnectionEndpoint Base

The Status describes the current status of a ConnectionEndpoint. This status is illustrated by the state machine in Figure 29. The Status values are defined in the ConnectionEndpointStatusEnum (see 10.17).

image032.png

Figure 29 – Status illustration

How Status is determined for a specific communication model is specified in the subtypes of ConnectionEndpointType.

The optional InputVariables reference Variables that are to have their values updated by the communication model connected to the ConnectionEndpoint. All referenced Variables shall be in the InputData of the FunctionalEntity related to the ConnectionEndpoint or a SubFunctionalEntity of it. The referenced Variables may be a subset of the Variables referenced by InputData.

The optional OutputVariables reference Variables that are to be reported by the communication model connected to the ConnectionEndpoint. All referenced Variables shall be listed in the OutputData of the FunctionalEntity related to the ConnectionEndpoint or a SubFunctionalEntity of it. The referenced Variables may be a subset of the Variables referenced by OutputData.

The communication represented by the ConnectionEndpoint shall include all referenced InputVariables and OutputVariables.

A ConnectionEndpoint shall include at least one of the following:

RelatedEndpoint points to the related ConnectionEndpoint (i.e., the other end of the Connection). The RelatedEndpointDataType is defined in 10.38. If the ConnectionEndpoint is not exposed in the Information Model of the related connection partner, RelatedEndpoint will specify the path to the connected FunctionalEntity.

IsPersistent indicates if the ConnectionEndpoint shall be persistent. Persistent ConnectionEndpoints shall be restored following a power cycle by the AutomationComponent. The restore of a persistent ConnectionEndpoint shall include:

An AutomationComponent indicates support for persistent Connections; see SupportsPersistence in 6.2.6.

Non-persistent ConnectionEndpoints following a power cycle behave as if the CloseConnections Method was called with Remove set to TRUE(see 6.2.5).

The CleanupTimeout defines a time delay period before a clean-up shall occur. The time delay period starts following a status change from Operational to any other Status. The time delay period is reset to its original value when the Status changes back to Operational. If the time delay period expires, this Connection shall be closed as if the CloseConnections Method was called with Remove set to TRUE(see 6.2.5), and if Auditing is supported, an Event of AuditConnectionCleanupEventType shall be generated. Any negative number indicates that the CleanupTimeout shall not be used and no clean-up occurs. For a persistent ConnectionEndpoint, the CleanupTimeout shall be set to a negative number. A zero indicates immediate clean-up. CleanupTimeout processing may be disabled by a CloseConnections Call (see 6.2.5).

PubSubConnectionEndpointType is a subtype of the ConnectionEndpointType. It extends the abstract ConnectionEndpointType with behaviour that is specific to the OPC UA PubSub communication model.

The PubSubConnectionEndpointType is illustrated in Figure 30.

image033.png

Figure 30 – PubSubConnectionEndpointType illustration

The PubSubConnectionEndpointType is formally defined in Table 72 and Table 73.

Table 72 – PubSubConnectionEndpointType definition

Attribute

Value

BrowseName

3:PubSubConnectionEndpointType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 3:ConnectionEndpointType

HasComponent

Variable

3:Mode

2:PubSubConnectionEndpointModeEnum

0:BaseDataVariableType

M

ConformanceUnits

UAFX ConnectionEndpoint PubSub

Table 73 – PubSubConnectionEndpointType additional References

SourceBrowsePath

Reference Type

IsForward

TargetBrowsePath

3:ToDataSetReader

True

0:Objects

0:Server

0:PublishSubscribe

0:<PubSubConnection>

0:<ReaderGroup>

0:<DataSetReader>

3:ToDataSetWriter

True

0:Objects

0:Server

0:PublishSubscribe

0:<PubSubConnection>

0:<WriterGroup>

0:<DataSetWriter>

Mode defines the mode of the ConnectionEndpoint with respect to the Connection. The modes are formally defined in the PubSubConnectionEndpointModeEnum defined in Clause 10.37. They shall require the following references:

A PubSubConnectionEndpoint shall have at most one ToDataSetReader and at most one ToDataSetWriter Reference (see 6.2.4.3.9.2).

If present, the ToDataSetReader Reference (see 11.20) shall point to the DataSetReader that this ConnectionEndpoint is associated with. It shall be present if the PubSubConnectionEndpoint references InputVariables or receives a heartbeat. The referenced DataSetReader shall be associated with a SubscribedDataSet having the subtype TargetVariablesType that contains all of the referenced ConnectionEndpoint InputVariables. If no InputVariables are referenced, the referenced DataSetReader shall be associated with a null DataSet (heartbeat).

If present, the ToDataSetWriter Reference (see 11.21) shall point to the DataSetWriter that this ConnectionEndpoint is associated with. It shall be present if the PubSubConnectionEndpoint references OutputVariables or publishes a heartbeat. The referenced DataSetWriter shall be associated with a PublishedDataSet having the subtype PublishedDataItemsType that contains all of the referenced ConnectionEndpoint OutputVariables. If no OutputVariables are referenced, the referenced DataSetWriter shall be associated with a null DataSet to publish the heartbeat.

The Status is determined based on the Status of the referenced DataSetReader and DataSetWriter. If a required Reference (see Mode) to a DataSetReader or DataSetWriter is missing, the Status shall be Initial.

For PubSubConnectionEndpoints with Mode of PublisherSubscriber, the Status shall be determined by the Status of the referenced DataSetReader and DataSetWriter as defined in Figure 31.

image034.png

Figure 31 – Status with Mode of PublisherSubscriber

For PubSubConnectionEndpoints with Mode of Subscriber, the Status shall be determined by the Status of the referenced DataSetReader according to Figure 32.

image035.png

Figure 32 – Status with Mode of Subscriber

For PubSubConnectionEndpoints with Mode of Publisher, the Status shall be determined by the Status of the referenced DataSetWriter according to Figure 33.

image036.png

Figure 33 – Status with Mode of Publisher

For the connection types autonomous publisher and autonomous subscriber (see 5.5.1), RelatedEndpoint Address shall be set to the Server address of the ConnectionEndpoint, the ConnectionEndpoint array shall be set to null or empty, and the ConnectionEndpointName to an empty String.

Annex E provides examples of PubSubConnectionEndpoints for the various types of Connections.

The ClientServerConnectionEndpointType may be defined in a future version of this document.

Figure 34 illustrates the structure of the ConnectionManagerType. A ConnectionManager uses the configuration data stored in a ConnectionConfigurationSet (see 6.8) to establish Connections. Optional Methods are provided by ConnectionManagerType to allow Clients to manage editing and trigger the processing of Connections.

A ConnectionManager is represented by an instance of ConnectionManagerType; see 12 for details on its location in the UAFX Information Model.

image037.png

Figure 34 – ConnectionManagerType illustration

ConnectionConfigurationSets may be serialized into a file format as described in Annex F.

The ConnectionManagerType is formally defined in Table 74.

Table 74 – ConnectionManagerType definition

Attribute

Value

BrowseName

4:ConnectionManagerType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Object

4:ConnectionConfigurationSets

0:FolderType

M

0:HasComponent

Object

4:ConnectionManagerConfiguration

4:ConnectionManagerConfigurationType

O

0:HasComponent

Method

4:EditConnectionConfigurationSets

Defined in 6.7.4

O

0:HasComponent

Method

4:ProcessConnectionConfigurationSets

Defined in 6.7.5

O

0:HasComponent

Object

4:Capabilities

4:ConnectionManagerCapabilitiesType

O

0:HasComponent

Variable

4:AggregatedCurrentState

0:Boolean

0:BaseDataVariableType

O

ConformanceUnits

UAFX ConnectionManager Base

ConnectionConfigurationSets provides a Folder for the ConnectionConfigurationSets (defined in 6.8) that are exposed by this ConnectionManager. It shall be restricted to holding only instances of ConnectionConfigurationSetType, which provide the data required by a ConnectionManager to establish Connections. This Folder may also contain other Folders that can be used to organize the ConnectionConfigurationSets. The Folder may be empty. The string part of the BrowseName of ConnectionConfigurationSets shall be unique within a ConnectionConfigurationSets Folder.

ConnectionManagerConfiguration provides standardized mechanisms for adding, removing, or replacing ConnectionConfigurationSets (see F.1).

EditConnectionConfigurationSets provides a way to alter the Edit Property of one or more ConnectionConfigurationSets in a single Call.

ProcessConnectionConfigurationSets causes the ConnectionManager to manage Connections contained in one or more ConnectionConfigurationSets in a single Call (see 6.7.5). In addition, vendor-specific means may be used to trigger the processing of ConnectionConfigurationSets. All processing of ConnectionConfigurationSets shall follow the behaviour defined in 6.7.5.3.

Capabilities is a ConnectionManagerCapabilitiesType Folder that describes the functionality provided by a ConnectionManager (see 6.7.6).

AggregatedCurrentState shall be set to TRUE if one or more ConnectionConfigurationSets’ ConnectionConfigurationSetStateMachine is in State Error. This only indicates that the ConnectionManager encountered a problem in processing one or more of the ConnectionConfigurationSets; it does not indicate the status of the Connections.

The ConnectionManager performs the functionality described in this clause. This functionality may be invoked by a ConnectionManagerType defined Method or by vendor-specific means.

To establish Connections defined in a ConnectionConfigurationSet, the ConnectionManager shall use the sequence of Calls illustrated in Figure 36 to the EstablishConnections Method on the involved AutomationComponents.

See Figure 35 for an illustration of the configuration information contained in the ConnectionConfigurationSet. The figure illustrates a single Connection. For further examples, please refer to Annex E.

image038.png

Figure 35 – ConnectionConfigurationSet example

The EstablishConnections Method (see 6.2.4) is used to establish ConnectionEndpoints on an AutomationComponent.

The Method allows establishing multiple Connections with a single Call. The number of Connections to be established with a single Call may be restricted by the addressed AutomationComponent as indicated by MaxConnectionsPerCall (see 6.2.6).

The Method provides several commands (see 10.21) to verify and create the individual Information Model Objects related to a Connection.

Figure 36 illustrates the sequence of commands to a single AutomationComponent when calling the EstablishConnections Method.

image039.png

Figure 36 – Command sequence illustration

A ConnectionManager shall call the EstablishConnections Method on the AutomationComponents, passing in one or several commands to be executed together with their required arguments. A ConnectionManager may use one or multiple EstablishConnections Calls (see 6.2.4).

The ConnectionManager shall use the following commands in the following sequence: CreateConnectionEndpointCmd, EstablishControlCmd, SetConfigurationDataCmd, ReassignControlCmd, and SetCommunicationConfigurationCmd. The sequence may be built by having one EstablishConnections Call with the required commands (in this case, the mandated sequence is maintained by the AutomationComponent) or multiple subsequent EstablishConnections Calls by keeping the sequence of commands across the Calls (in this case, the mandated sequence is maintained by the ConnectionManager).

The ConnectionManager may use the following commands at any time and in any order: VerifyAssetCmd, VerifyFunctionalEntityCmd, ReserveCommunicationIdsCmd, and EnableCommunicationCmd.

A Client using the Methods exposed in the Information Model (e.g., VerifyAsset, ReassignControl) can invoke them in any order or at any time. The sequence is only mandated for the commands within the EstablishConnections Method.

The following applies to the usage of commands:

If Auditing is supported, the ConnectionManager shall generate an Event of AuditClientUpdateMethodResultEventType for all calls of the EstablishConnections Method and shall pass the AuditEventId as part of the Method invocation.

It is recommended that the ConnectionManager has the well-known Role ConnectionAdmin as defined in Clause 5.9.

NOTE   The specified configuration sequence applies to the establishment of a single Connection (on an AutomationComponent). It is implementation-specific in which sequence (and to which extent in parallel) a ConnectionManager establishes multiple Connections.

Table 75 lists the commands and their required configuration information in the ConnectionConfigurationSetType Information Model.

Table 75 – Commands and their required configuration information

Command

Description

Relevant types from configuration model

VerifyAssetCmd

Verify that the Assets are the ones expected by system engineering.

The argument AssetVerifications that is passed for this command is constructed out of the AssetVerificationType instances in the AutomationComponentConfiguration.

VerifyFunctionalEntityCmd

Verify that the FunctionalEntity is the one expected by system engineering.

The argument ConnectionEndpointConfigurations ExpectedVerificationVariables that is passed for this command is constructed out of the ExpectedVerificationVariables contained in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

ReserveCommunicationIdsCmd

Reserves identifier for the communication configuration.

The argument ReserveCommunicationIds that is passed for this command is constructed out of the instance of CommunicationModelConfigurationType.

CreateConnectionEndpointCmd

Create a ConnectionEndpoint on the FunctionalEntity.

Alternatively, use a preconfigured ConnectionEndpoint.

The argument ConnectionEndpointConfigurations ConnectionEndpoint that is passed for this command is constructed out of the Parameter Object in the ConnectionEndpoint Object in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

EstablishControlCmd

Establish control of specific ControlGroups of the FunctionalEntity.

The argument ConnectionEndpointConfigurations ControlGroups that is passed for this command is constructed out of the ControlGroups Variable in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

SetConfigurationDataCmd

Set ConfigurationData on the FunctionalEntity to adapt its behaviour as required (e.g., setting engineering units).

The argument ConnectionEndpointConfigurations ConfigurationData that is passed for this command is constructed out of the ConfigurationData Variable in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

ReassignControlCmd

Reassigns the ControlGroups to be associated with a Connection.

The argument ConnectionEndpointConfigurations ControlGroups that is passed for this command is constructed out of the ControlGroups Variable in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

SetCommunicationConfigurationCmd

Set communication configuration specific for the communication model utilized for data exchange (e.g., PubSub).

The argument CommunicationConfigurations that is passed for this command is constructed out of the instance of CommunicationModelConfigurationType. The argument ConnectionEndpointConfigurations CommunicationLinks is constructed out of CommunicationLinks Variable in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

EnableCommunicationCmd

Enable the communication model.

The argument ConnectionEndpointConfigurations ConnectionEndpoint that is passed for this command is constructed out of the ConnectionEndpoint Object in Endpoint1 or Endpoint2 Object in the instances of ConnectionConfigurationType.

The ConnectionManager shall resolve identifier information contained in the ConnectionConfigurationSets to the arguments required for the EstablishConnections Call (see 13).

If any of the ConnectionEndpoints require SKS configuration, the ConnectionManager shall also call the SKS and add the appropriate configuration (SecurityGroups and/or PushTargets; see E.5 for examples).

If a configuration entry is null or empty, the corresponding command shall be skipped.

If EstablishConnections returns Uncertain, indicating an Abort of the Method (see 6.2.4.3.11) or if a fatal OPC UA communication error occurs, the ConnectionManager shall stop the establishing sequence and initiate a ProcessingToError transition in the ConnectionConfigurationSetStateMachine (see 6.9). If RollbackOnError is TRUE, the ConnectionManager shall call the Method CloseConnections for all ConnectionEndpoints established so far with Remove set to TRUE. If RollbackOnError is FALSE, no additional actions are performed by the ConnectionManager.

To close Connections defined in a ConnectionConfigurationSet, a ConnectionManager shall use the CloseConnections Method on the AutomationComponents (see 6.2.5). A ConnectionManager may remove or disable the Connections.

If CloseConnections returns any error, the ConnectionManager shall complete closing all Connections in the ConnectionConfigurationSet and initiate a ProcessingToError transition in the ConnectionConfigurationSetStateMachine (see 6.9).

If any of the ConnectionEndpoints require SKS configuration and were removed, the ConnectionManager shall also remove the appropriate configuration from the SKS (SecurityGroups and/or PushTargets, see E.5 for examples).

The EditConnectionConfigurationSets Method manages the editing of ConnectionConfigurationSets by a Client.

The Method shall set the Edit Property to TRUE for the requested ConnectionConfigurationSets. For ConnectionConfigurationSets which are not editable (indicated by the absence of the Property Edit), this Method shall return Bad_InvalidState. For the ConnectionConfigurationSets that allow editing, the Method shall also set the Lock to the Client Session associated with this Method Call. The Lock shall behave as described in OPC 10000-100, including the requirement to renew the Lock and to remove the Lock in the case of the Client Session exiting. If the Lock exits for any reason, the internal action on the ConnectionConfigurationSets shall be as if this Method was called with a DiscardUpdates Action. For ConnectionConfigurationSet already in edit mode and locked to this Client Session, no action shall be performed on this ConnectionConfigurationSet, and a successful result is returned.

If Action is CommitUpdates, the Method shall set the Property Edit to FALSE for all requested ConnectionConfigurationSets. The ConnectionManager shall only process committed updates. It shall reassign the Lock back to the ConnectionManager. If Version is supported, it shall always be incremented; for additional behaviour, see Version in 6.8.2. If the requesting Client does not own the Lock, the request is rejected with an error.

If Action is DiscardUpdates, the Method shall set the Property Edit to FALSE for all requested ConnectionConfigurationSets. The ConnectionManager shall discard the updates to the ConnectionConfigurationSet. It shall reassign the Lock back to the ConnectionManager. If the requesting Client does not own the Lock, the request is rejected with an error.

If a ConnectionConfigurationSet is called with Action set to either CommitUpdates or DiscardUpdates, but the Edit Property is FALSE, the Method shall ignore the Call for the ConnectionConfigurationSet.

The signature of this Method is specified below. The Method parameters are defined in Table 76.

Signature

EditConnectionConfigurationSets (

[in] 4:FxEditEnum Action,

[in] 0:NodeId[] ConnectionConfigurationSets,

[out] 0:StatusCode[]Results

);

Table 76 – EditConnectionConfigurationSets Method arguments

Argument

Description

Action

Indicates whether to allow editing, commit the updates to the ConnectionConfigurationSets or discard the updates.

ConnectionConfigurationSets

A list of NodeIds of ConnectionConfigurationSets to be edited.

Results

A list of StatusCode corresponding to the ConnectionConfigurationSets input argument. The length of this array shall match the length of the ConnectionConfigurationSets NodeId array.

Clients may inspect this list to determine which ConnectionConfigurationSets were successfully updated and which failed. See Table 78 for possible Results values.

The possible Method result codes are formally defined in Table 77.

Table 77 – EditConnectionConfigurationSets Method result codes

ResultCode

Description

Bad_UserAccessDenied

The caller is not allowed to invoke this Method.

Uncertain

There was at least one error or warning for one of the ConnectionConfigurationSets. Results will contain additional information.

The possible Results StatusCodes are formally defined in Table 78. The Results array shall contain Good for any ConnectionConfigurationSet that was successfully updated.

Table 78 – Results StatusCodes

ResultCode

Description

Good

The operation succeeded.

Bad_NodeIdUnknown

The NodeId refers to a non-existent ConnectionConfigurationSet.

Bad_NodeIdInvalid

The syntax of the NodeId is not valid.

Bad_InvalidArgument

The NodeId for the requested ConnectionConfigurationSet was not a ConnectionConfigurationSet.

Bad_UserAccessDenied

The caller is not allowed to edit this ConnectionConfigurationSet.

Bad_InvalidState

The ConnectionConfigurationSet cannot be edited. The caller is not allowed to edit, commit, or discard updates since the ConnectionConfigurationSet is locked by a different Client.

The EditConnectionConfigurationSets Method representation in the AddressSpace is formally defined in Table 79.

Table 79 – EditConnectionConfigurationSets Method AddressSpace definition

Attribute

Value

BrowseName

4:EditConnectionConfigurationSets

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

0:GeneratesEvent

ObjectType

2:AuditUpdateMethodResultEventType

Defined in 8.4

ConformanceUnits

UAFX ConnectionManager EditConnectionConfigurationSets

The ProcessConnectionConfigurationSets Method causes the ConnectionManager to process the requested ConnectionConfigurationSets according to the specified Action:

The ProcessConnectionConfigurationSets Method shall initiate the ReadyToProcessing or ErrorToProcessing transition in the ConnectionConfigurationSetStateMachine (see 6.9) on all requested ConnectionConfigurationSets.

The Method triggers the processing and returns immediately. The result of processing is “returned” asynchronously by one of the ConnectionConfigurationSetEventType Events.

The signature of this Method is specified below; the Method arguments are defined in Table 80.

Signature

ProcessConnectionConfigurationSets (

[in] 4:FxProcessEnumAction,

[in] 0:NodeId[] ConnectionConfigurationSets,

[out] 0:StatusCode[]Results

);

Table 80 – ProcessConnectionConfigurationSets Method arguments

Argument

Description

Action

The operation to be performed on the ConnectionConfigurationSets (see 10.23).

ConnectionConfigurationSets

A list of NodeIds of ConnectionConfigurationSets to be processed.

Results

The array of StatusCode corresponding to the ConnectionConfigurationSets input argument. The length of this array shall match the length of the ConnectionConfigurationSets NodeId array.

Clients may inspect this list to determine the status of the individual Call to Trigger processing on each ConnectionConfigurationSets. For possible values for StatusCode, see Table 82.

The possible Method result codes are formally defined in Table 81.

Table 81 – ProcessConnectionConfigurationSets Method result codes

ResultCode

Description

Bad_UserAccessDenied

The caller is not allowed to invoke this Method.

Bad_NotSupported

The requested Action is not supported.

Uncertain

There was at least one error or warning for one of the ConnectionConfigurationSets. Results will contain additional information.

The possible Result StatusCodes are formally defined in Table 82.

Table 82 – Results StatusCodes

Result Code

Description

Good

Changing the State succeeded for the ConnectionConfigurationSet.

Bad_NodeIdInvalid

The syntax of the NodeId is not valid.

Bad_NodeIdUnknown

The NodeId refers to a node that does not exist in the Server address space.

Bad_InvalidArgument

The NodeId for the requested ConnectionConfigurationSet was not a ConnectionConfigurationSet.

Bad_UserAccessDenied

The caller is not allowed to trigger processing of this ConnectionConfigurationSet.

Bad_InvalidState

The ConnectionConfigurationSet is in a State that does not allow it to be triggered for processing.

The ProcessConnectionConfigurationSets Method representation in the AddressSpace is formally defined in Table 83.

Table 83 – ProcessConnectionConfigurationSets Method AddressSpace definition

Attribute

Value

BrowseName

4:ProcessConnectionConfigurationSets

References

Node Class

BrowseName

DataType

TypeDefinition

Other

0:HasProperty

Variable

0:InputArguments

0:Argument[]

0:PropertyType

M

0:HasProperty

Variable

0:OutputArguments

0:Argument[]

0:PropertyType

M

0:GeneratesEvent

ObjectType

2:AuditUpdateMethodResultEventType

Defined in 8.4

ConformanceUnits

UAFX ConnectionManager ProcessConnectionConfigurationSets

Calling ProcessConnectionConfigurationSets with Action set to ActionEstablishConnectionsEnabled, ActionEstablishConnectionsDisabled, or ActionEstablishConnections shall establish the Connections contained in the ConnectionConfigurationSets and their related communication model.

Establishing connections shall follow the behaviour specified in 6.7.3.2.

The ConnectionManager shall ensure the expected result of the requested Action as follows:

A disabled ClientServer communication model may be defined in a future version of this document.

Calling ProcessConnectionConfigurationSets with Action set to ActionEstablishConnections shall establish all Connections contained in the ConnectionConfigurationSets with the communication model as configured by the engineering tool generating the communication model. The ConnectionManager shall apply the communication model as is using the SetCommunicationConfigurationCmd and omit EnableCommunicationCmd from the command sequence. Depending on the state of the configuration elements (e.g., the value of the Enabled flag for PubSub configuration elements), parts of the communication model may be enabled and others disabled. This allows, for example, to have a subset of the Connections enabled and the rest disabled. It is the responsibility of the engineering tool to configure the state of the configuration elements properly and consistently.

Calling ProcessConnectionConfigurationSets with Action set to ActionRemoveConnections shall remove all Connections contained in the ConnectionConfigurationSets and their related communication model.

For each ConnectionConfigurationSet, the ConnectionManager shall call the CloseConnections Method (see 6.2.5) with Remove set to TRUE for all contained ConnectionEndpoints. See 6.7.3.3 for ConnectionManager behaviour.

Calling ProcessConnectionConfigurationSets with Action set to ActionEnableConnections shall enable all Connections contained in the ConnectionConfigurationSets.

For each ConnectionConfigurationSet, the ConnectionManager shall call the EstablishConnections Method containing the EnableCommunicationCmd for all contained ConnectionEndpoints. See 6.7.3.2 for ConnectionManager behaviour.

Calling ProcessConnectionConfigurationSets with Action set to ActionDisableConnections shall disable all Connections contained in the ConnectionConfigurationSets.

For each ConnectionConfigurationSet, the ConnectionManager shall call the CloseConnections Method (see 6.2.5) with Remove set to FALSE for all contained ConnectionEndpoints. See 6.7.3.3 for ConnectionManager behaviour.

The ConnectionManagerCapabilitiesType extends the FolderType defined in OPC 10000-5. It shall be restricted to hold only Variables that reflect the capabilities of the ConnectionManager.

The ConnectionManagerCapabilitiesType is formally defined in Table 84.

Table 84 – ConnectionManagerCapabilitiesType definition

Attribute

Value

BrowseName

4:ConnectionManagerCapabilitiesType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FolderType defined in OPC 10000-5

4:HasCMCapability

Variable

4:<Capability>

0:BaseDataType

0:BaseDataVariableType

OP

4:HasCMCapability

Variable

4:MaxConnectionConfigurationSets

0:UInt32

0:BaseDataVariableType

O

ConformanceUnits

UAFX ConnectionManager Capabilities

<Capability> - is a placeholder to indicate that additional capabilities may be added by this document, a companion specification, or by a vendor at any time. These capabilities shall include a Description.

MaxConnectionConfigurationSets indicates the maximum number of ConnectionConfigurationSets that the ConnectionManager can support.

The ConnectionConfigurationSetType is an ObjectType representing one or more Connection configurations. Connections are grouped in a set, for example, to allow sharing communication model configurations by multiple Connections; see 5.5.6.2.3 and 5.5.6.2.4 for appropriate use cases.

ConnectionConfigurationSets are generated and deployed to the ConnectionManager (see Figure 11 label 3). The ConnectionManager may expose the ConnectionConfigurationSet in its AddressSpace.

If a ConnectionConfigurationSet is exposed in the AddressSpace, its representation serves two purposes: making Connection configurations available for modification by standard Clients (see Figure 11 label 4) and providing an interface to trigger the processing of such Connection configurations.

A ConnectionConfigurationSet may only be modified by a standard Client as follows:

With these mechanisms, the generator of the ConnectionConfigurationSet is able to specify and restrict the allowed changes.

For an overview of the ConnectionConfigurationSetType with its related types, see Figure 35. For examples, see Annex E.

The ConnectionConfigurationSetType is illustrated in Figure 37.

image040.png

Figure 37 – ConnectionConfigurationSetType illustration

The ConnectionConfigurationSetType is formally defined in Table 85 and Table 86.

Table 85 – ConnectionConfigurationSetType definition

Attribute

Value

BrowseName

4:ConnectionConfigurationSetType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Object

4:ConnectionConfigurationSetStateMachine

4:ConnectionConfigurationSetStateMachineType

M

0:HasProperty

Variable

4:Edit

0:Boolean

0:PropertyType

O, RO

4:HasConnectionConfiguration

Object

4:<Connection>

4:ConnectionConfigurationType

MP

4:HasCommunicationFlowConfiguration

Object

4:<CommunicationFlow>

4:CommunicationFlowConfigurationType

MP

4:HasServerAddress

Variable

4:<ServerAddress>

4:ServerAddressDataType

4:ServerAddressType

MP

4:HasAutomationComponentConfiguration

Object

4:<AutomationComponentConfiguration>

4:AutomationComponentConfigurationType

MP

0:HasProperty

Variable

4:RollbackOnError

0:Boolean

0:PropertyType

M

0:HasComponent

Object

5:Lock

5:LockingServicesType

M

0:HasComponent

Variable

4:SecurityKeyServer

4:SecurityKeyServerAddressDataType

4:SecurityKeyServerAddressType

O

0:HasComponent

Variable

4:SecurityGroups

0:SecurityGroupDataType[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:PubSubKeyPushTargets

0:PubSubKeyPushTargetDataType[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:Version

0:UInt32

0:BaseDataVariableType

O, RO

ConformanceUnits

UAFX ConnectionManager Base

Table 86 – ConnectionConfigurationSetType additional references

SourceBrowsePath

Reference Type

IsForward

TargetBrowsePath

4:<ServerAddress>

4:ToAutomationComponentConfiguration

True

4:<AutomationComponentConfiguration>

4:<AutomationComponentConfiguration>

4:ToConnectionEndpointConfiguration

True

4:<Connection>

4:Endpoint1

4:<AutomationComponentConfiguration>

4:ToConnectionEndpointConfiguration

True

4:<Connection>

4:Endpoint2

ConnectionConfigurationSetStateMachine contains the current State of this ConnectionConfigurationSet. See 6.9 for a formal definition of the state machine.

If Edit is present, the ConnectionConfigurationSet supports editing. If Edit is TRUE, the ConnectionConfigurationSet is currently being edited by a Client. See 6.7.4 on editing a ConnectionConfigurationSet.

<Connection> represents one or more instances of ConnectionConfigurationType, which defines Connection configurations to be established. For a formal definition, see 6.10.

<CommunicationFlow > represents one or more instances of CommunicationFlowConfigurationType, which defines communication model-specific configuration to apply to a Connection. For a formal definition, see 6.13. There may be fewer instances of this type than ConnectionConfigurations.

<ServerAddress> represents one or more instances of ServerAddressType, which defines addressing information for AutomationComponents. For a formal definition, see 9.2. There may be fewer instances of this type than ConnectionConfigurations.

<AutomationComponentConfiguration> represents one or more AutomationComponents. In addition, it holds the parameters used for Asset verification. For a formal definition, see 6.14.

RollbackOnError indicates the behaviour that should be followed when there is an error on Connection establishment. If this Property is TRUE and an error occurs during the Connection establishment sequence, establishing the set shall stop, and all established Connections that are part of this set shall be closed (see 6.7.3.2).

It is recommended that the system integrator Client use the well-known Role ConfigureAdmin as defined in Clause 5.9 for accessing this Object. It is recommended that modifiable content of the ConnectionConfigurationSet has the write privilege for the well-known Role ConfigureAdmin as defined in Clause 5.9.

Lock is an instance of LockingServicesType, defined in OPC 10000-100, which provides the basic locking functionality. A ConnectionConfigurationSet that is not in editable mode shall be locked to the ConnectionManager and blocked from any changes (the Client is set to NodeId of the ConnectionManager, and the user is set to “CM”). A Client can call the EditConnectionConfigurationSets Method on a ConnectionManager to release the Lock from the ConnectionManager and assign it to the Client that issued the EditConnectionConfigurationSets Method Call (for additional details, see 6.7.4).

SecurityKeyServerAddress defines the location of the SKS to be used for PubSub security configuration of this ConnectionConfigurationSet. For a formal definition, see 9.3.

NOTE   Depending on the environment, the list could contain the address of a GDS acting as SKS, the address of the ConnectionManager itself if providing SKS functionality, or other SKS within the network.

SecurityGroups and PubSubPushKeyTargets define the configuration information to be applied to the SKS for PubSub security configuration of the ConnectionConfigurationSet.

NOTE   For an overview of how to configure the SKS, see E.5.

Version shall be a monotonically increasing number. It shall be incremented by 1 on each change to a given ConnectionConfigurationSet, no matter the source of the change. Its ServerTimestamp shall be set to the time of the change. When a ConnectionConfigurationSet is added or replaced (i.e., new NodeId), Version shall be set to 1. Changes could occur via the CloseAndUpdate Method defined in F.3.3, via the EditConnectionConfigurationSets Method, or via vendor-specific means.

NOTE    Version allows a Client to detect changes on a ConnectionConfigurationSet due to editing. Clients could detect a replacement of a ConnectionConfigurationSet by having a different NodeId.

The ToAutomationComponentConfiguration Reference is used to link a ServerAddress to AutomationComponentConfiguration (see 6.14). The ServerAddress provides the Connection information to address the referenced AutomationComponent.

The ToConnectionEndpointConfiguration Reference is used to link an AutomationComponentConfiguration to ConnectionEndpointConfigurations (see 6.11).

The ToOutboundFlow Reference is used to link a ConnectionEndpointConfiguration to a PubSubCommunicationFlowConfiguration (see 6.13.3). This Reference defines the PubSub- specific configuration to be used for the transmission of output data related to this ConnectionEndpoint. It shall be present if an outbound PubSub flow is configured.

The ToInboundFlow Reference is used to link a ConnectionEndpointConfiguration to a SubscriberConfiguration (see 6.13.3.3). This Reference defines the PubSub- specific configuration to be used for the reception of input data related to this ConnectionEndpoint. It shall be present if an in-bound PubSub flow is configured.

A ConnectionEndpointConfiguration shall have at most one ToOutboundFlow and at most one ToInboundFlow Reference.

The References used to link a ConnectionEndpointConfiguration to Client Server-specific communication configuration will be defined in a later version of this document.

NOTE   For an overview of how to configure the various Connection types, see Annex E.

A state machine is defined to coordinate actions executed internally (a ConnectionManager establishing Connections) that involve the processing of a ConnectionConfigurationSet. The States and Transitions that comprise the state machine are illustrated in Figure 38. Numbers in circles indicate the TransitionNumber of a transition.

image041.png

Figure 38 – ConnectionConfigurationSetStateMachineType overview diagram

The transitions with TransitionNumber 1 and 4 (process) may also be triggered by a Client but are more typically triggered internally by a vendor-specific algorithm. The transitions with TransitionNumber 2 (processing succeeded) and 3 (processing failed) are only triggered internally on completion of Connection establishment processing.

A ConnectionConfigurationSetStateMachine may transition to Error for several reasons. Transient errors will be resolved by re-processing the ConnectionConfigurationSet. If the transient error has cleared, the state machine will transition to Ready; otherwise, it will return to Error. The error may be a permanent error that needs correction by the system integrator.

The ConnectionConfigurationSetStateMachineType and the corresponding set of Methods (see ConnectionConfigurationSetType) and Events (subtypes of the ConnectionConfigurationSetEventType) are illustrated in Figure 39.

image042.png

Figure 39 – ConnectionConfigurationSetStateMachineType illustration

Methods and Events illustrated in Figure 39 are defined in subsequent clauses. The ConnectionConfigurationSetStateMachineType is formally defined in Table 87. StateType and TransitionType only exist in the type system; thus, they do not have a modelling rule.

Table 87 – ConnectionConfigurationSetStateMachineType definition

Attribute

Value

BrowseName

4:ConnectionConfigurationSetStateMachineType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:FiniteStateMachineType defined in OPC 10000-16

0:HasComponent

Variable

0:LastTransition

0:LocalizedText

0:FiniteTransitionVariableType

M

0:HasComponent

Object

4:Ready

0:StateType

0:HasComponent

Object

4:Processing

0:StateType

0:HasComponent

Object

4:Error

0:StateType

0:HasComponent

Object

4:ReadyToProcessing

0:TransitionType

0:HasComponent

Object

4:ProcessingToReady

0:TransitionType

0:HasComponent

Object

4:ProcessingToError

0:TransitionType

0:HasComponent

Object

4:ErrorToProcessing

0:TransitionType

ConformanceUnits

UAFX ConnectionManager Base

The components of the ConnectionConfigurationSetStateMachineType have additional references, which are defined in Table 88.

Table 88 – ConnectionConfigurationSetStateMachineType additional References

SourceBrowsePath

Reference Type

IsForward

TargetBrowsePath

4:ReadyToProcessing

0:ToState

True

4:Processing

0:FromState

True

4:Ready

0:HasCause

True

4:ConnectionManager

4:ProcessConnectionConfigurationSets

0:HasEffect

True

4:ConnectionConfigurationSetProcessingStartedEventType

4:ProcessingToReady

0:ToState

True

4:Ready

0:FromState

True

4:Processing

0:HasEffect

True

4:ConnectionConfigurationSetProcessingSucceededEventType

4:ProcessingToError

0:ToState

True

4:Error

0:FromState

True

4:Processing

0:HasEffect

True

4:ConnectionConfigurationSetProcessingFailedEventType

4:ErrorToProcessing

0:ToState

True

4:Processing

0:FromState

True

4:Error

0:HasCause

True

4:ConnectionManager

4:ProcessConnectionConfigurationSets

0:HasEffect

True

4:ConnectionConfigurationSetProcessingStartedEventType

The component Variables of the ConnectionConfigurationSetStateMachineType have additional Attributes defined in Table 89.

Table 89 – ConnectionConfigurationSetStateMachineType attribute values for child Nodes

BrowsePath

Value Attribute

4:Ready

0:StateNumber

1

4:Processing

0:StateNumber

2

4:Error

0:StateNumber

3

4:ReadyToProcessing

0:TransitionNumber

1

4:ProcessingToReady

0:TransitionNumber

2

4:ProcessingToError

0:TransitionNumber

3

4:ErrorToProcessing

0:TransitionNumber

4

Ready – A ConnectionConfigurationSet in this State may be processed by the ConnectionManager.

Processing – A ConnectionConfigurationSet in this State indicates that it is currently being processed by the ConnectionManager (i.e., Connections are being established). Internals of the processing executed in this State are described in 6.7.5.3.

Error – A ConnectionConfigurationSet in this State indicates an error has occurred during Processing.

ReadyToProcessing – This transition shall be initiated by the ProcessConnectionConfigurationSets Method Call. In addition, this state transition may also be initiated by vendor-specific means. While being in State Processing, the ConnectionManager establishes or closes the Connections contained in the ConnectionConfigurationSet; for details, see 6.7.5.3.

ProcessingToReady – This transition shall be initiated if the ConnectionManager succeeds in processing all of the Connections contained in the ConnectionConfigurationSet.

ProcessingToError – This transition shall be initiated if the ConnectionManager fails the processing of any Connection contained in the ConnectionConfigurationSet.

Information about the success or failure of the establishment of specific Connections is provided by the ProcessingResult Property in ConnectionConfigurationType.

ErrorToProcessing – This transition shall be initiated by the ProcessConnectionConfigurationSets Method Call. In addition, this state transition may also be initiated by vendor-specific means.

The ConnectionConfigurationType ObjectType describes the configuration information needed to establish a single Connection contained in the ConnectionConfigurationSetType.

The ConnectionConfigurationType is illustrated in Figure 40.

image043.png

Figure 40 – ConnectionConfigurationType illustration

The ConnectionConfigurationType is formally defined in Table 90.

Table 90 – ConnectionConfigurationType definition

Attribute

Value

BrowseName

4:ConnectionConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:ProcessingResult

0:StatusCode

0:BaseDataVariableType

M, RO

0:HasComponent

Object

4:Endpoint1

4:ConnectionEndpointConfigurationType

M

0:HasComponent

Object

4:Endpoint2

4:ConnectionEndpointConfigurationType

O

ConformanceUnits

UAFX ConnectionManager Base

ProcessingResult indicates the StatusCode of the last processing of this Connection. This StatusCode is the overall status of the creation or close of the ConnectionEndpoints. On creation, if any of the actions required for creating this Connection (verify FunctionalEntity, create ConnectionEndpoint, establish or reassign ControlGroup, assign ConfigurationData, configure or enable communication model for either endpoint) fail, the returned StatusCode will be stored in this Variable. Additional error information can be provided via OPC UA Diagnostics (see OPC 10000-4 and OPC 10000-5).

Endpoint1 and the optional Endpoint2 hold the configuration information for the endpoints of the Connection. The ConnectionEndpointConfigurationType is defined in 6.11.

The ConnectionEndpointConfigurationType ObjectType holds the information for an endpoint of a Connection.

The ConnectionEndpointConfigurationType is illustrated in Figure 41.

image044.png

Figure 41 – ConnectionEndpointConfigurationType illustration

The ConnectionEndpointConfigurationType is formally defined in Table 91.

Table 91 – ConnectionEndpointConfigurationType definition

Attribute

Value

BrowseName

4:ConnectionEndpointConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:FunctionalEntityNode

4:PortableNodeIdentifier

0:SelectionListType

M

0:HasComponent

Object

4:ConnectionEndpoint

4:ConnectionEndpointParameterType

M

0:HasComponent

Variable

4:ExpectedVerificationVariables

4:PortableNodeIdentifierValuePair[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:ControlGroups

4:PortableNodeIdentifier[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:ConfigurationData

4:PortableNodeIdentifierValuePair[]

0:BaseDataVariableType

O

ConformanceUnits

UAFX ConnectionManager Base

FunctionalEntityNode specifies the identifier of the FunctionalEntity to configure for this Connection. If a PortableRelativePath is specified, the path shall be relative to FxRoot.

ConnectionEndpoint specifies the parameters for the ConnectionEndpoint to be used for the Connection.

ExpectedVerificationVariables, if present, specifies the variables to be verified. If a PortableRelativePath is specified as Key, the path shall be relative to FunctionalEntityNode.

ControlGroups, if present, specifies the ControlGroups to be controlled. If a PortableRelativePath is specified, the path shall be relative to FunctionalEntityNode.

ConfigurationData, if present, specifies the parameters to apply for the configuration of the FunctionalEntityNode. If a PortableRelativePath is specified as Key, the path shall be relative to FunctionalEntityNode.

The ConnectionEndpointParameterType ObjectType holds the parameters to create the ConnectionEndpoint of a Connection.

The ConnectionEndpointParameterType is illustrated in Figure 42.

image045.png

Figure 42 – ConnectionEndpointParameterType illustration

The ConnectionEndpointParameterType is formally defined in Table 92.

Table 92 – ConnectionEndpointParameterType definition

Attribute

Value

BrowseName

4:ConnectionEndpointParameterType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:Name

0:String

0:SelectionListType

M

0:HasComponent

Variable

4:ConnectionEndpointTypeId

0:PortableNodeId

0:BaseDataVariableType

M

0:HasComponent

Variable

4:InputVariableIds

4:PortableNodeIdentifier[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:OutputVariableIds

4:PortableNodeIdentifier[]

0:BaseDataVariableType

O

0:HasComponent

Variable

4:IsPersistent

0:Boolean

0:SelectionListType

M

0:HasComponent

Variable

4:CleanupTimeout

0:Duration

0:SelectionListType

M

0:HasComponent

Variable

4:IsPreconfigured

0:Boolean

0:BaseDataVariableType

M

0:HasComponent

Variable

4:CommunicationLinks

2:CommunicationLinkConfigurationDataType

0:BaseDataVariableType

O

0:HasComponent

Variable

4:PreconfiguredPublishedDataSet

0:String

0:BaseDataVariableType

O

0:HasComponent

Variable

4:PreconfiguredSubscribedDataSet

0:String

0:BaseDataVariableType

O

ConformanceUnits

UAFX ConnectionManager Base

Name specifies the BrowseName of the ConnectionEndpoint to create. This name shall be unique within the FunctionalEntity’s ConnectionEndpoints Folder.

ConnectionEndpointTypeId specifies the well-known NodeId of the type definition, which shall be used to create the ConnectionEndpoint. This can be any of the subtypes of the ConnectionEndpointType (for example, PubSubConnectionEndpointType).

InputVariableIds, if present, specifies a list of node identifiers to be used as inputs. If InputVariableIds is present, it shall contain at least one element.

OutputVariableIds, if present, specifies a list of node identifiers to be used as outputs. If OutputVariableIds is present, it shall contain at least one element.

If a PortableRelativePath is specified for InputVariableIds or OutputVariableIds, the path shall be relative to the FunctionalEntityNode specified in the ConnectionEndpointConfigurations.

A ConnectionEndpointParameter shall include at least one of the following fields:

IsPersistent, if TRUE, specifies the created ConnectionEndpoint shall be persistent.

CleanupTimeout specifies the value to be used for the clean-up timeout. A negative number indicates an infinite timeout. A zero indicates an immediate clean-up.

IsPreconfigured, if TRUE, specifies the ConnectionEndpoint is preconfigured.

CommunicationLinks specifies the configuration data related to this ConnectionEndpoint within the CommunicationModelConfigurationType (see 6.16).

PreconfiguredPublishedDataSet shall only be present if the ConnectionEndpointTypeId is PubSubConnectionEndpointType. If it is not an empty string, it specifies the name of a preconfigured PublishedDataSet (see 6.2.7 for more information on preconfigured DataSets) to be used for connecting the OutputVariables. The ConnectionManager can obtain any required information related to this preconfigured PublishedDataSet from the UA Publishers exposed PubSub configuration. The Subscriber does not need to expose or utilize all variables that are being published.

PreconfiguredSubscribedDataSet shall only be present if the ConnectionEndpointTypeId is PubSubConnectionEndpointType. If it is not an empty string, it specifies the name of a preconfigured StandaloneSubscribedDataSet (see 6.2.8 for more information on preconfigured DataSets) to be used for connecting the InputVariables. The ConnectionManager can obtain any required information related to this preconfigured StandaloneSubscribedDataSet from the UA Subscribers exposed PubSub configuration. The Publisher is required to provide all data in the StandaloneSubscribedDataSet, but it may include additional data that is not required by the Subscriber.

The CommunicationFlowConfigurationType describes the communication-model-specific configuration to be used for an information flow. An information flow consists of the transmission of output data from a ConnectionEndpoint to input data of a ConnectionEndpoint. The CommunicationFlowConfiguration allows a standard Client to adapt communication-model-specific parameters (e.g., destination address or update interval) without having to understand the internals of the CommunicationModelConfiguration. The ConnectionManager reflects the changes of a Client in the related elements in CommunicationModelConfiguration.

CommunicationFlowConfigurations are referenced by ConnectionEndpointConfigurations using the ToOutboundFlow or ToInboundFlow References. Absence or presence of these References reflects the type of Connection in which the particular ConnectionEndpoint(s) are participating, such as bidirectional, unidirectional, unidirectional with heartbeat, autonomous publisher, or autonomous subscriber. For details about possible Connection types, see 5.5.1. Examples of the configuration can be seen in Annex E.

Multiple ConnectionEndpointConfigurations may reference the same CommunicationFlowConfiguration to share the set of configuration items (e.g., address, QoS, interval, or timeout).

The CommunicationFlowConfigurationType is illustrated in Figure 43.

image046.png

Figure 43 – CommunicationFlowConfigurationType illustration

The CommunicationFlowConfigurationType is an abstract type. It is formally defined in Table 93.

Table 93 – CommunicationFlowConfigurationType definition

Attribute

Value

BrowseName

4:CommunicationFlowConfigurationType

IsAbstract

True

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasSubtype

ObjectType

4:PubSubCommunicationFlowConfigurationType

Defined in 6.13.3

ConformanceUnits

UAFX ConnectionManager Base

PubSubCommunicationFlowConfigurationType indicates the usage of PubSub as the communication model for the Connections. It is formally defined in 6.13.3.

ClientServerCommunicationFlowConfigurationType may be defined in a future release to indicate the usage of Client Server as the communication model for the Connections.

The PubSubCommunicationFlowConfigurationType defines the PubSub- specific communication configuration (see OPC 10000-14).

For examples of PubSubCommunicationFlowConfigurationType, see Annex E.

The PubSubCommunicationFlowConfigurationType is illustrated in Figure 44.

image047.png

Figure 44 – PubSubCommunicationFlowConfigurationType illustration

The PubSubCommunicationFlowConfigurationType is formally defined in Table 94.

The PubSubCommunicationFlowConfigurationType contains the configuration needed for both the publishing and subscribing of an information flow. In terms of this model, the information flow can be linked with ConnectionEndpointConfiguration Objects to explicitly indicate Publisher and Subscriber(s) of the information flow. The linkage is provided by ToOutboundFlow and ToInboundFlow References (defined in 11.23 and 11.24; see 6.8.2 for additional description). There are, in general, two types of information flows: 1 to 1 (unicast) or 1 to N (multicast), which imply the following relations:

  • Unicast

Publishing ConnectionEndpointConfiguration, if specified, references the PubSubCommunicationFlowConfiguration Object using the ToOutboundFlow Reference.

Subscribing ConnectionEndpointConfiguration, if specified, shall reference the single instance of the <SubscriberConfiguration> using the ToInboundFlow Reference.

  • Multicast

Publishing ConnectionEndpointConfiguration, if specified, references the PubSubCommunicationFlowConfiguration Object using the ToOutboundFlow Reference.

Subscribing ConnectionEndpointConfigurations, if specified, shall reference the <SubscriberConfiguration > Objects using the ToInboundFlow Reference. There can be as many <SubscriberConfiguration > Objects as there are Subscribers, in which case each ConnectionEndpointConfiguration references its corresponding configuration. <SubscriberConfiguration > Objects may be shared by the ConnectionEndpointConfiguration Objects.

The referenced SubscriberConfiguration does not replicate information that is contained in its parent object, but the parent information is required to establish the Connection.

For the usage of SelectionLists, see 6.8.1.

Table 94 – PubSubCommunicationFlowConfigurationType definition

Attribute

Value

BrowseName

4:PubSubCommunicationFlowConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 4:CommunicationFlowConfigurationType

0:HasComponent

Variable

4:Address

0:NetworkAddressDataType

0:SelectionListType

O

0:HasComponent

Variable

4:TransportProfileUri

0:String

0:SelectionListType

O

0:HasComponent

Variable

4:HeaderLayoutUri

0:String

0:SelectionListType

O

0:HasComponent

Variable

4:PublishingInterval

0:Duration

0:SelectionListType

O

0:HasComponent

Variable

4:Qos

4:CommunicationFlowQosDataType

0:SelectionListType

O

0:HasComponent

Variable

4:SecurityMode

0:MessageSecurityMode

0:SelectionListType

O

0:HasComponent

Variable

4:SecurityGroupId

0:String

0:SelectionListType

O

0:HasComponent

Object

4:<SubscriberConfiguration>

4:SubscriberConfigurationType

OP

ConformanceUnits

UAFX ConnectionManager PubSubCommunicationFlowConfiguration

The optional Address specifies the destination network address to be used for transmission of NetworkMessages by the Publisher of the information flow. This is an abstract type, and a concrete subtype shall be used. For the usage of Address, see OPC 10000-14 Clause “PubSub mappings”, Subclause “Transport protocol mappings”. The configuration is invalid if Address is omitted here and in <SubscriberConfiguration >.

The optional TransportProfileUri specifies the transport protocol mapping and the message mapping to be used. If TransportProfileUri is omitted, the default transport protocol for the Address shall be used. For the definition of TransportProfileUri, see OPC 10000-14.

The optional HeaderLayoutUri specifies the UADP header formats for both NetworkMessages and DataSetMessages. If HeaderLayoutUri is omitted, a fixed layout for periodic data shall be used (http://opcfoundation.org/UA/PubSub-Layouts/UADP-Periodic-Fixed). For the definition of HeaderLayoutUri, see OPC 10000-14.

The optional PublishingInterval specifies the interval to be used for publishing NetworkMessages. For the definition of PublishingInterval, see OPC 10000-14.

The optional Qos specifies the Quality of Service to be used for the information flow. For the definition of CommunicationFlowQosDataType, see 10.12. Qos ReceiveQos may be overridden by a <SubscriberConfiguration > (see 6.13.3.3).

SecurityMode specifies the security mode to be used for the information flow. For the definition of SecurityMode, see OPC 10000-14.

SecurityGroupId specifies the security group to be used for the information flow. For the definition of SecurityGroupId, see OPC 10000-14.

The optional <SubscriberConfiguration> represents instances of SubscriberConfigurationType. It defines the configuration for Subscriber(s) of the information flow. <SubscriberConfiguration> is omitted for an autonomous publisher.

The SubscriberConfigurationType is formally defined in Table 95. It describes the Subscriber specific information for the Subscriber of an information flow. The configuration of the Subscriber requires additional information from the parent object, which applies to all Subscribers.

Table 95 – SubscriberConfigurationType definition

Attribute

Value

BrowseName

4:SubscriberConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:Address

0:NetworkAddressDataType

0:SelectionListType

O

0:HasComponent

Variable

4:MessageReceiveTimeout

0:Duration

0:SelectionListType

M

0:HasComponent

Variable

4:ReceiveQos

0:ReceiveQosDataType[]

0:SelectionListType

O

ConformanceUnits

UAFX ConnectionManager PubSubCommunicationFlowConfiguration

The optional Address specifies the network address to be used for the reception of NetworkMessages at the Subscriber of the information flow. This is an abstract type, and a concrete subtype shall be used. For the usage of Address, see OPC 10000-14 Clause “PubSub mappings”, Subclause “Transport protocol mappings”. If Address is omitted and the parent Object contains a multicast network address, the Address of the parent Object shall be used for the Subscriber. If Address is omitted and the parent Object contains a unicast network address, the default reception address with the default port shall be used (e.g., “opc.udp://localhost”; for details, see OPC 10000-14). The configuration is invalid if Address is omitted here and in the parent Object.

The MessageReceiveTimeout specifies the maximum acceptable time between DataSetMessages. Received by the Subscriber. For the definition of MessageReceiveTimeout, see OPC 10000-14.

The optional ReceiveQos specifies the Quality of Service to be used for the Subscriber of the information flow. It shall only be present if Qos is present in the parent Object. If present, ReceiveQos will override Qos ReceiveQos of the parent Object. For the definition of ReceiveQos, see OPC 10000-14.

The ClientServerCommunicationFlowConfigurationType may be defined in a future version of this document.

The AutomationComponentConfigurationType ObjectType holds the information to be used for locating an AutomationComponent within a Server.

The AutomationComponentConfigurationType is illustrated in Figure 45.

image048.png

Figure 45 – AutomationComponentConfigurationType illustration

The AutomationComponentConfigurationType is formally defined in Table 96.

Table 96 – AutomationComponentConfigurationType definition

Attribute

Value

BrowseName

4:AutomationComponentConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:AutomationComponentNode

4:PortableNodeIdentifier

0:SelectionListType

M

4:HasCharacteristic

Variable

4:CommandBundleRequired

0:Boolean

0:BaseDataVariableType

M

4:HasAssetToVerify

Object

4:<AssetVerification>

4:AssetVerificationType

OP

0:HasComponent

Object

4:CommunicationModelConfig

4:CommunicationModelConfigurationType

O

ConformanceUnits

UAFX ConnectionManager Base

AutomationComponentNode specifies the AutomationComponent that is to be used for establishing Connections. If a PortableRelativePath is specified, the path shall be relative to FxRoot.

CommandBundleRequired, when TRUE, specifies that the ConnectionManager shall bundle commands to this AutomationComponent.

AssetVerification holds the Asset verification parameters for an Asset associated with this AutomationComponent. The AssetVerificationType is defined in 6.15.2.

CommunicationModelConfig provides the ConfigurationData specific to the communication model utilized by the Connections.

The AssetVerificationType ObjectType holds the information to be used for compatibility verification of an Asset.

The AssetVerificationType is illustrated in Figure 46.

image049.png

Figure 46 – AssetVerificationType illustration

The AssetVerificationType is formally defined in Table 97.

Table 97 – AssetVerificationType definition

Attribute

Value

BrowseName

4:AssetVerificationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasComponent

Variable

4:AssetToVerify

4:PortableNodeIdentifier

0:SelectionListType

M

0:HasComponent

Variable

4:VerificationMode

2:AssetVerificationModeEnum

0:BaseDataVariableType

M

0:HasComponent

Variable

4:ExpectedVerificationResult

2:AssetVerificationResultEnum

0:BaseDataVariableType

M

0:HasComponent

Variable

4:ExpectedVerificationVariables

4:PortableNodeIdentifierValuePair[]

0:BaseDataVariableType

M

0:HasComponent

Variable

4:ExpectedAdditionalVerificationVariables

4:PortableNodeIdentifierValuePair[]

0:BaseDataVariableType

M

ConformanceUnits

UAFX ConnectionManager Base

AssetToVerify specifies the expected Asset to be verified. If a PortableRelativePath is specified, the path shall be relative to AutomationComponentNode.

VerificationMode is the mode to use for the verification (compatibility and/or identity).

ExpectedVerificationResult is the expected level of compatibility that this Asset shall provide.

ExpectedVerificationVariables hold the variables to be verified for compatibility and/or identity. It is expected that this list contains as Keys IdentifierBrowsePath with a PortableRelativePath using BrowseNames as defined in Table 30.

ExpectedAdditionalVerificationVariables hold the variables to be verified for compatibility and/or identity. If a PortableRelativePath is specified, the path shall be relative to the expected Asset.

The CommunicationModelConfigurationType ObjectType provides the configuration data specific to the communication model utilized by the Connections.

The CommunicationModelConfigurationType is illustrated in Figure 47.

image050.png

Figure 47 – CommunicationModelConfigurationType illustration

PubSubCommunicationModelConfigurationType provides the configuration data specific to the usage of PubSub as the communication model for the Connections. It is formally defined in 6.16.3.

ClientServerCommunicationModelConfigurationType indicates the usage of Client Server as the communication model for the Connections. It may be defined in a future release.

This ObjectType is the abstract base type of all communication model-specific configuration data.

The CommunicationModelConfigurationType is formally defined in Table 98.

Table 98 – CommunicationModelConfigurationType definition

Attribute

Value

BrowseName

4:CommunicationModelConfigurationType

IsAbstract

True

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasSubtype

ObjectType

4:PubSubCommunicationModelConfigurationType

Defined in 6.16.36.17.3

ConformanceUnits

UAFX ConnectionManager Base

The PubSubCommunicationModelConfigurationType defines the communication model-related configuration information for the usage of PubSub as the communication model (see OPC 10000-14).

The PubSubCommunicationModelConfigurationType is illustrated in Figure 48.

image051.png

Figure 48 – PubSubCommunicationModelConfigurationType illustration

The PubSubCommunicationModelConfigurationType is formally defined in Table 99.

Table 99 – PubSubCommunicationModelConfigurationType definition

Attribute

Value

BrowseName

4:PubSubCommunicationModelConfigurationType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 4:CommunicationModelConfigurationType

0:HasComponent

Variable

4:PubSubConfiguration

0:PubSubConfiguration2DataType

0:BaseDataVariableType

M

0:HasComponent

Variable

4:Namespaces

0:String[]

0:BaseDataVariableType

M

0:HasComponent

Variable

4:TranslationTable

4:NodeIdTranslationDataType[]

0:BaseDataVariableType

M

0:HasComponent

Variable

4:ConfigurationReferences

0:PubSubConfigurationRefDataType[]

0:BaseDataVariableType

M

0:HasComponent

Variable

4:ConfigurationValues

0:PubSubConfigurationValueDataType[]

0:BaseDataVariableType

M

ConformanceUnits

UAFX ConnectionManager Base

The PubSubConfiguration modifies the existing PubSub configuration on the addressed Server when establishing Connections. The PubSubConfiguration2DataType is defined in OPC 10000-14.

Namespaces contains namespace URIs for NamespaceIndex used in the PubSubConfiguration. Examples are NodeIds contained in PublishedDataSets. The NamespaceIndex in the PubSubConfiguration will need to be updated to reflect what the NamespaceIndexes are in the addressed Server.

NodeIds contained in the PubSubConfiguration, which use the special namespace “http://opcfoundation.org/UA/FX/CM/Translation/”, are not valid NodeIds but placeholders which shall be resolved before the ConnectionManager can use the PubSubConfiguration for connection establishment. The resolution consists of 2 steps. The first step is done locally within the ConnectionManager, and it involves the conversion of these NodeIds to PortableNodeIdentifiers according to the TranslationTable. The second step involves the resolution of the PortableNodeIdentifiers to actual NodeIds of the Nodes on the target Server (see 13). If a PortableNodeIdentifier is represented by a PortableRelativePath, the starting node of such a path depends on which PubSubConfiguration element the identifier corresponds to. If the identifier corresponds to a published or subscribed Variable (e.g., PublishedVariable of PublishedVariableDataType or TargetNodeId of FieldTargetDataType), the path shall start at the hosting AutomationComponent.

ConfigurationReferences points to elements within the PubSubConfiguration and indicates whether they are to be added, matched, modified, or removed. The PubSubConfigurationRefDataType is defined in OPC 10000-14.

PubSubConfiguration and ConfigurationReferences are generated by the engineering tool creating the ConnectionConfigurationSet or by the ConnectionManager. The relation of configuration elements in PubSubConfiguration to a ConnectionEndpoint is provided by the CommunicationLinks (see 6.12.2).

For examples of how to establish the configuration information for AutomationComponents, see E.2, and for the SKS, see E.5.

The ConfigurationValues Variable contains the names and identifiers that were assigned by EstablishConnections. They correspond to null names or 0 identifiers in the PubSubConfiguration.

OPC UA FX allows multiple ConnectionManagers to establish Connections to a single AutomationComponent independently of each other. It also allows any Client to establish Connections. An AutomationComponent may even receive PubSub configuration (unrelated to OPC UA FX) via corresponding Methods exposed in the PubSub configuration model. Coordinating all possible sources of PubSub configuration can become a very difficult task. Since OPC 10000-14 requires certain elements of the PubSub configuration model to be unique (e.g., WriterGroupId and DataSetWriterId), such scenarios may lead to conflicting PubSub configurations (e.g., identical WriterGroupIds configured by two different ConnectionManagers).

Since the Clients passing in such (potentially conflicting) PubSub configurations are unaware of each other, resolving conflicting configuration elements can only be provided by the entity receiving them. In scenarios where PubSub configuration is generated by a single entity (e.g., an engineering tool), this does not apply since the entity generating PubSub configuration could uniquely determine all names and identifiers.

For certain elements in PubSubConfiguration, the entity generating the ConnectionConfigurationSet may set their names (i.e., PubSubConnection, ReaderGroup, WriterGroup, DataSetReader, DataSetWriter) to a specific value or to null. If set to null, a unique name is generated by the addressed AutomationComponent when passing the PubSubConfiguration using the EstablishConnections SetCommunicationConfigurationCmd. If it has a specific value, that value will be used.

For certain elements in PubSubConfiguration, the entity generating the ConnectionConfigurationSet may set their identifiers (i.e., PublisherId, WriterGroupId, WriterId) to a specific value or to null. If set to null, a unique identifier is generated by the addressed AutomationComponent (see OPC 10000-14). Two options exist:

It is recommended that the entity generating the ConnectionConfigurationSet uses null Names and identifiers. Additional details for each identifier are provided below. See Annex E.5 for examples.

For PubSubConnections, specific handling applies: OPC 10000-14 requires a PubSubConnection to have a unique Address across all PubSubConnections. This implies that there is exactly one PubSubConnection with a specific Address determining the PublisherId to be used for that Address. It is therefore recommended that the entity generating the ConnectionConfigurationSet sets the names and PublisherIds of PubSubConnections to null and that the ConnectionManager uses ElementAdd and ElementMatch with a null name and a null PublisherId for PubSubConnections. This allows the sharing of existing PubSubConnections. If the PubSubConnection matches, the PublisherId of the matching PubSubConnection shall be used; otherwise, a new PubSubConnection is created with the default PublisherId. The ConnectionManager shall adapt the PubSubConfiguration of subscribing AutomationComponents with the returned PublisherIds as required.

It is recommended to use ElementAdd for WriterGroups and ReaderGroups under the assumption that each ConnectionManager maintains groups separate from other ConnectionManagers.

After a ConnectionConfigurationSet is edited (see 6.7.4), the ConnectionManager shall update the PubSubConfiguration (see Annex E.5 for examples).

The ClientServerCommunicationModelConfigurationType may be defined in a future version of this document.