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.