For PubSub as a communication model, OPC 10000-14 requires certain configuration values (e.g., PublisherId, WriterGroupId, and DataSetWriterId) to match the Publisher and its corresponding Subscribers. However, unique IDs could be generated by the addressed AutomationComponent and are not known by the ConnectionManager beforehand.

OPC 10000-14 provides two ways of generating unique IDs by the AutomationComponent, either by providing a null ID when configuring PubSub or by reserving IDs.

Assuming a simple example, where a ConnectionManager processes a ConnectionConfigurationSet containing logical connections between two AutomationComponents, the sequence illustrated in Figure E.7 could be used.

image130.png

Figure E.7 – Sequence for establishing connections (two AutomationComponents)

The ConnectionManager executes the following steps for establishing the Connections:

  1. The ConnectionManager calls EstablishConnections on AC1 using the ReserveCommunicationIdsCmd to reserve WriterGroupIds and DataSetWriterIds for the publishing side (i.e., WriterGroups and DataSetWriters for AC1) and to retrieve the default PublisherId. This Call will typically contain the VerifyAssetCmd and the VerifyFunctionalEntityCmd if required; all further commands for AC1 are issued in step (3).
  2. The ConnectionManager updates the communication configuration for AC2 regarding the subscribing side (DataSetReaders) using the IDs reserved in step (1). The ConnectionManager will set the publishing side of the communication configuration for AC2 to null IDs. The ConnectionManager calls EstablishConnections on AC2 using the SetCommunicationConfigurationCmd to add the updated communication configuration. AC2 assigns IDs to the publishing side of the communication configuration and returns the information. This Call will typically contain all other required commands.
  3. The ConnectionManager updates the communication configuration for AC1 regarding the publishing side using the IDs reserved in step (1) and the subscribing side using the IDs returned from step (2). The ConnectionManager calls EstablishConnections on AC1 using the SetCommunicationConfigurationCmd to add the complete communication configuration. This Call will typically contain all further required commands.

Multiple logical connections across multiple AutomationComponents could require more steps. Assume that a ConnectionManager must establish a ConnectionConfigurationSet containing logical connections between multiple AutomationComponents.

Figure E.8 illustrates an example of such a ConnectionConfigurationSet. For this scenario, the ConnectionManager could set up the logical connections as follows:

  1. The ConnectionManager calls EstablishConnections on AC1, AC2, and AC3 using the ReserveCommunicationIdsCmd to reserve WriterGroupIds and DataSetWriterIds for the publishing side (i.e., WriterGroups and DataSetWriters for AC1, AC2 and AC3) and to retrieve the default PublisherId.
  2. The ConnectionManager updates the communication configuration for AC1, AC2, and AC3 regarding the publishing and subscribing side (DataSetReaders) using the IDs reserved in step (1). The ConnectionManager then calls EstablishConnections on AC1, AC2, and AC3 using the SetCommunicationConfigurationCmd to add the complete communication configuration.

The ConnectionManager could use the sequence illustrated in Figure E.8.

image131.png

Figure E.8 – Sequence for establishing connections (multiple AutomationComponents)

To set up this scenario, six Calls are needed in total (2 Calls per AutomationComponent). The Calls to different AutomationComponents can be issued in parallel.

If all logical connections are related to one AutomationComponent in our sample, this would be AC1. The sequence could be optimised as follows:

  1. The ConnectionManager calls EstablishConnections on AC1 using the ReserveCommunicationIdsCmd to reserve WriterGroupIds and DataSetWriterIds for the publishing side (i.e., WriterGroups and DataSetWriters for AC1) and to retrieve the default PublisherId.
  2. The ConnectionManager updates the communication configuration for AC2 and AC3 regarding the subscribing side (DataSetReaders) using the IDs reserved in step (1). The ConnectionManager will set the publishing side of the communication configuration for AC2 and AC3 to null IDs. The ConnectionManager calls EstablishConnections on AC1 and AC2 using the SetCommunicationConfigurationCmd to add the updated communication configuration. While adding the communication configuration, AC2 and AC3 assign IDs to the publishing side of the communication configuration and returns that information.
  3. The ConnectionManager updates the communication configuration for AC1 regarding the publishing side using the IDs reserved in step (1) and the IDs returned from step (2). The ConnectionManager calls EstablishConnections on AC1 using the SetCommunicationConfigurationCmd to add the complete communication configuration.

This optimised sequence is illustrated in Figure E.9

image132.png

Figure E.9 – Optimised Sequence for establishing connections (multiple AutomationComponents)

The ConnectionManager could also use a variant of the sequences above, for example, using SetCommunicationConfigurationCmd, with the publishing side of the communication configuration having null IDs instead of using the ReserveCommunicationIdsCmd. In this case, the subscribing side of the communication configuration will be added in a separate step.