OPC UA Safety provides an application protocol using safety Variables, which is implemented by the SafetyProvider / SafetyConsumer. The communication layer is completely unaware that safety data is being transported.

Any logical connection may, therefore, reference any number of safety and non-safety Variables, even from different SafetyProviders or SafetyConsumers. There is nothing special in establishing a connection containing safety Variables. In fact, the connection establishment is unaware of safety data being transported.

Figure C.3 shows an example of a logical connection between FunctionalEntity_A and FunctionalEntity_B. The exchange of data is represented as dotted lines. The logical connection contains the unidirectional safety data exchange between the SafetyProvider on Controller A and the SafetyConsumer on Controller B (CtrBRequest à CtrARequest, CtrAResponse à CtrBResponse) and, in addition, data exchange between other Variables of these FunctionalEntities (e.g., Out_X5  IN_A1).

OPC 10000-15 uses the terms unidirectional and bidirectional from a safety application’s point of view, referring to the flow of safety application data. From a communication perspective, however, data exchange is always bidirectional (ResponseSPDU containing the safety application data in one direction and RequestSPDU in the other direction), even for a unidirectional safety data exchange.


Figure C.3 – Example of a logical connection with unidirectional safety data exchange

In many cases, safety communication between two controllers is a bidirectional safety data exchange. This data exchange may also be organized in one logical connection, as indicated in Figure C.4. It contains the bidirectional safety data exchange and additional data exchange of other Variables (e.g., Out_X5  IN_A1).

In this example, all output Variables, including the data related to the SafetyProvider and SafetyConsumer, share the same NetworkMessage.


Figure C.4 – Example of a logical connection with bidirectional safety data exchange