Synchronisation Client-Server

In einer Client-Server-Umgebung kompensiert WinCC OA mit Hilfe des Features Synchronisation Differenzen in der Systemzeit von Client (abgesetztes User Interface) und Server, ohne dass die Systemzeit des Clients manuell korrigiert werden muss.

Grundlagen

Der WinCC OA Event-Manager stellt die Kommunikationszentrale (siehe Architektur) eines WinCC OA Systems dar und hält als zentrales Verarbeitungssystem stets ein aktuelles Abbild aller Prozessvariablen im Speicher.

Insbesondere werden auf dem Server vom Event-Manager alle Lese- bzw. Schreibanfragen der anderen beteiligten Funktionseinheiten (Manager) verwaltet, wobei Wertänderungen von Prozessvariablen sowie die Alarmbehandlung innerhalb des Event-Managers durchgeführt werden.

Sendet das abgesetzte UI eine Wertänderungsanfrage (dpSet) oder z.B. eine Alarmquittierung (alertSet) an den Event-Manager, dann ist ein strenger zeitlicher Ablauf vorgegeben, der mit Hilfe von Zeitstempel, die vom Client generiert werden, geregelt wird.

Anmerkung:

Bei einem abgesetzten UI erfolgt immer eine Korrektur der Systemzeit!

Beim Start des Clients wird die Differenz zur Systemzeit des Servers in Sekunden im internen Datenpunktelement _ManagerConnections.TimeDiff gespeichert (vgl. Abbildung 1).

Abbildung 1. Datenpunktelement "_ManagerConnections.<Verbindung>.TimeDiff"

Hinweis

Bei Bedarf muss ein Datenpunkt vom Typ _ManagerConnections für die zu betrachtende Verbindung angelegt werden, um die Information zur Zeitdifferenz zu erhalten, und zwar in der Form: _Conn_event_<number><replica>_to_<manager>_<number>_<replica>, z.B. _Conn_event_0_1_to_ui_3_1.

Darüber hinaus zeigt der interne Datenpunkt _Connections die Hostnamen aller verbundenen Manager in der Form _Connections.<manager type>.HostNames an.

Damit kann überprüft werden, ob am Client tatsächlich die Systemzeit des Servers in dpSet bzw. alertSet verwendet wird.

Technische Details

Die Zeitsynchronisation kann prinzipiell von jedem Manager genutzt werden. Im Gegensatz zum abgesetzten UI, bei dem sie automatisch durchgeführt wird, muss die Synchronisation bei allen anderen Managern (z.B. API-Manager) explizit aktiviert werden.

Sobald ein Manager auf einem anderen Host als der Event-Manager läuft (abgesetzter Manager), wird über die Callback-Funktion useServerTime() ermittelt, ob eine Synchronisation durchgeführt werden soll oder nicht.

Der Default-Rückgabewert der Callback-Funktion ist FALSE (= keine Synchronisation), diese kann von jedem Manager überladen werden. Dadurch wird die in der Managerklasse verfügbare Membervariable useServerTime_ gesetzt, welche die Nutzung der Synchronisation ermöglicht. Um diese zu aktivieren, muss die Membervariable explizit auf TRUE gesetzt werden.

Die Datenpunkte für Nachrichten zu einer Wertänderung (DP_MESSAGE_VC) bzw. zur Meldebehandlung (DP_MSG_ALERT_VC) enthalten ebenfalls ein zusätzliches Flag useServerTime für die Synchronisation. Dieses wird durch die Funktionen dpSet() bzw. alertSet() auf den Wert der Membervariable useServerTime_ gesetzt. Bei aktivierter Zeitsynchronisation wird dann vom Event-Manager anstelle des Sendezeitpunkts einer Nachricht der Bearbeitungszeitpunkt verwendet.

Ist die Zeitkorrektur aktiviert, dann wird im Log Viewer beim Hochfahren lediglich eine Warnung ausgegeben, falls die Zeitdifferenz den in der Konfigurationsdatei angegebenen Toleranzwert überschreitet. Siehe dazu auch: Konfigurationsdatei / alle Sektionen -> valueChangeTimeDiff.

Bei deaktivierter Synchronisation wird, wenn die Zeitdifferenz die in der Konfigurationsdatei angegebene Zeitspanne übersteigt, eine Meldung mit der Priorität SEVERE ausgegeben und die Verbindung wird geschlossen.

Achtung

Das explizite Setzen eines Zeitstempels durch dpSetTimed() und alertSetTimed() bleibt davon unberührt und ist weiterhin möglich.

Achtung

Falls ein abgesetzter, nicht synchronisierter Manager seine eigene Systemzeit verwendet, werden Wert- bzw. Alarmänderungen unter Umständen verworfen oder als ungültig markiert.

Zeitsynchronisation in redundanten und in verteilten Systemen

In redundanten Systemen werden die Nachrichten vom aktiven Event-Manager zuerst zum redundanten (passiven) Event-Manager weitergeleitet, bevor sie verarbeitet werden. Die vom Client erhaltenen Nachrichten mit Zeitkorrektur werden dabei vom aktiven Event-Manager mit einem Zeitstempel in Server-Systemzeit versehen, bevor sie an den passiven Event-Manager gesendet werden.

In verteilten Systemen ist die Vorgangsweise analog zu redundanten Systemen: die Wertänderungen werden zum Zielsystem weitergeleitet und der Ziel-Event-Manager vergibt die Zeitstempel.

In redundanten verteilten Systemen leitet nur der aktive Event-Manager die Wertänderungen weiter, der passive blockiert die Nachrichten.