The OPC UA server does not consider the timeoutHint in Publish Requests from an OPC UA client

The OPC UA server does not consider the timeoutHint in Publish Requests from an OPC UA client

Summary

The zenon OPC UA server in the process gateway and the zenon logic OPC UA server, do not consider the timeoutHint in Publish Requests from OPC UA clients. OPC UA clients that expect an OPC UA server to consider the timeoutHint may reject a Publish Response with a DataChangeNotification, that the zenon OPC UA server would send after a value or status of a monitored item has changed. This can result in the loss of value changes on the OPC UA client side, under specific circumstances, where the communication is irregular or timeoutHint is defined unreasonably short and Publish Responses with DataChangeNotifications are returned after the timeoutHint expired.  

Description

The zenon OPC UA server in the process gateway and the zenon logic OPC UA server, do not consider the timeoutHint in Publish Requests from OPC UA clients. OPC UA clients that expect an OPC UA server to consider the timeoutHint may reject a Publish Response with a DataChangeNotification, that the zenon OPC UA server would send after a value or status of a monitored item has changed. This can result in the loss of value changes on the OPC UA client side, under specific circumstances, where the communication is irregular or timeoutHint is defined unreasonably short and Publish Responses with DataChangeNotifications are returned after the timeoutHint expired.  

Solution

The OPC UA server in the process gateway and the OPC UA server for zenon logic, have been enhanced in a way that when a PublishResponse (either a keep alive or a notification) needs to be send, all Publish Requests in the queue with outstanding PublishRequests for the session are checked. When the timestamp in the PublishRequest + timeoutHint in the PublishRequest are older or equal than the current time, the OPC UA server discards the PublishRequest and sends a ServiceFault message with Bad_Timeout, to inform the OPC UA client. The OPC UA server performs this for all Publish Requests in the queue, where this is the case and then takes the next valid PublishRequest from the queue, or waits for a new PublishRequest from the OPC UA client, when the queue is empty, in order to send a PublishResponse.  

Information

The situation where the OPC UA server returns a PublishResponse where the timeout for the timeoutHint on the client side has expired, normally does not occur when the communication between the OPC UA server and an OPC UA client, is regular. Following this change, it does become relevant that the system time of the OPC UA server and the OPC UA client, are accurately synchronized. A time difference > 1 minute between the system with the OPC UA server and an OPC UA client that uses a timeoutHint of 60 seconds, may result in all PublishRequest to be returned with a timeout.

Issue Number: 36767
Fixed on Date: 19.7.2016
Versions: 7.20 0 BUILD 30230 | 7.50 0 BUILD 30617