Antworten auf häufig gestellte Fragen

Welche Zeitbasis eignet sich zur Synchronisation verteilter Systeme?

PTP/IEEE1588 ist so konzipiert, dass TAI als Zeitquelle verteilt wird und bei Bedarf in den jeweiligen Endgeräten mit Hilfe des „UTC Offset“ die UTC-Zeit berechnet werden kann.

Um Zeitsprünge zu vermeiden (die zu ungewünschten Effekten innerhalb einer Anlage führen können), ist es ratsam, eine konstant ansteigende Zeit (z. B. ohne Schaltsekunden) zu verwenden und zu verteilen, wie beispielsweise die internationale Atomzeit [französisch Temps Atomique International (TAI)].

Die koordinierte Weltzeit [englisch Coordinated Universal Time (UTC)] hingegen birgt die Gefahr von Zeitsprüngen (durch Schaltsekunden) ist dafür jedoch synchron zur Sonnenzeit und somit für viele Prozesse "alltagstauglicher".

Trotzdem wird von der unmittelbaren Nutzung der UTC abgeraten, da (für die Steuerung unvorhersehbare) Zeitsprünge den ordnungsgemäßen Betrieb einer Anlage erheblich stören können. Sollte UTC für die Anwendung dennoch erforderlich sein, so sollte der indirekte Weg über das UTC Offset gewählt werden. Die TAI kann mithilfe des UTC Offset in der Applikation in UTC umgerechnet werden.

Die EL6688 hat als Basiszeit diejenige Basiszeit, welche vom Grandmaster bereitgestellt wird! Diese Basiszeit wird fast immer die TAI sein (weil andere Zeitquellen/-basen sprungbehaftet sein können). Ggf. wird von handelsüblichen Grandmastern im Display zwar UTC angezeigt, im Netzwerk wird jedoch TAI verteilt (wenn das Gerät nicht verstellt wurde).

Worauf ist zu achten, wenn Sonnenzeiten (z. B. UTC) verwendet werden sollen?

Es sollte stets der indirekte Weg über TAI und das UTC offset gewählt werden. Die TAI kann mithilfe des UTC Offset in der Applikation in UTC umgerechnet werden. Sofern der Grandmaster Informationen zum aktuellen UTC Offset bereitstellt, werden diese im CoE der EL6688 vorgehalten, so dass diese sich in der Steuerung verarbeiten lassen. Die aktuelle Anzahl an Schaltsekunden (CoE: CurrentUtcOffset (0xFA80.0B)) sowie Ankündigungen möglicher weiterer Schaltevents (CoE: Leap61 (0xFA80.0D) für plus 1s und Leap59 (0xFA80.0E) für minus 1s) werden übermittelt und können vom Anwender ausgewertet werden.

Konkret: Sofern der Grandmaster z. B. via GPS einen korrekten UTC-offset ermittelt hat, wird er diesen Wert im Netzwerk bereitstellen:

Antworten auf häufig gestellte Fragen 1:

Die Schaltsekundenereignisse „leap59“ bzw. „leap61“ wirken sich nicht auf TAI bzw. auf ein mit TAI Zeitquelle synchronisiertes Gerät aus. Diese Informationen dienen lediglich der Applikation, welche damit die UTC Zeit vollständig abbilden bzw. berechnen und ggf. geeignete Schutzmaßnahmen im Schaltsekundenfall ergreifen kann.

Wie berechnet sich eine absolute Zeit, wie beispielsweise die UTC?

Sofern eine externe Zeitquelle (z. B. ein GPS-gestützter PTP-Master) über die EL6688 mit TwinCAT verbunden ist, lässt sich die UTC Zeit über folgende Formel berechnen (siehe Beispiel Projekt für TC2 bzw. TC3) (Verweis Beispiel PLC-Projekt):

UTCabsolut :=F_GetCurExtTime64 (DcToExtTimeOffset, DcToTcTimeOffset) – UTC_Offset_NSec

oder

UTCabsolut :=F_ ConvTcTimeToExtTime64 (GetCurDcTaskTime64(), DcToTcTimeOffset, DcToExtTimeOffset) – UTC_Offset_NSec

(GetCurExtTime64, GetCurDcTaskTime64 sowie ConvTcTimeToExtTime64 sind Teil der SPS Bibliothek Tc2_EtherCAT.lib)

Wieso ist mal DcToTcTimeOffset = 0 und mal DcToExtTimeOffset = 0?

Während der Entwicklungsphase einer Steuerung ist die Einstellung "Auto Boot" unter "Boot Settings" des TwinCAT-Systems möglicherweise noch auf "Config Mode". Sofern dies der Fall ist, kann TwinCAT während der Startphase (selbst bei physikalischer Verbindung zwischen PTP Master und EL6688) nicht auf die externe Uhr zugreifen - somit bleibt DcToTcTimeOffset = 0 und der Unterschied wird von TwinCAT in DcToExtTimeOffset eingetragen.
Erst durch Setzen der Einstellung "Auto Boot" auf "Run Mode (Enable)" kann TwinCAT während der Startphase auch auf die externe Uhr zugreifen und somit den Offset verarbeiten und in der Variable "DcToTcTimeOffset" speichern.

Wie wird aus einer T_DCTIME64 Variable etwas Menschenlesbares?

sXXX := DCTIME64_TO_STRING(tXXX)

Fehler in PTP Diagnose: PTP State wechselt nicht von „LISTENING“ zu „SLAVE“

Fehler in PTP Diagnose: „Offset From Master“ schwingt sich nicht um „0“ herum ein