Zum Inhalt

TIMESTAMP_NS

TIMESTAMP_NS


Einleitung

Der TIMESTAMP_NS ist ein IEC 61499-konformer Funktionsbaustein zur Erzeugung hochauflösender Zeitstempel in Nanosekunden. Standardmäßig generiert er Unix-Epoch-Timestamps (ab 01.01.1970), unterstützt aber durch Anpassung des Startdatums (startDate) alternative Zeitreferenzen. Entwickelt unter EPL-2.0 Lizenz.


Schnittstellenstruktur

Ereignis-Eingänge

  • REQ (Trigger): Startet die Berechnung des Zeitstempels. Muss mit dem Eingangsparameter startDate verknüpft sein. Beispiel: REQ(startDate := DT#2000-01-01-00:00:00)

Ereignis-Ausgänge

  • CNF (Bestätigung): Signalisiert den Abschluss der Berechnung. Der generierte Zeitstempel steht dann als ULINT-Wert zur Verfügung.

Daten-Eingänge

  • startDate (DT): Startdatum für die Zeitstempelberechnung. Default: DT#1970-01-01-00:00:00 (Unix-Epoch). Hinweis: Andere Werte ermöglichen benutzerdefinierte Referenzen (z. B. Systemstart).

Daten-Ausgänge

  • ULINT (Ausgangsvariable): Zeitstempel in Nanosekunden seit dem definierten startDate. Beispiel: 1680000000000000000 (1,68e18 ns ≈ 2023-03-28).

Funktionsweise

  1. Initialisierung:
  2. Wird durch REQ-Ereignis aktiviert.
  3. Nutzt den aktuellen Systemzeitpunkt (NOW()).

  4. Berechnung:

  5. Subtrahiert startDate von der aktuellen Systemzeit.
  6. Konvertiert die Differenz via TIME_IN_NS_TO_ULINT() in Nanosekunden.
  7. Gibt Ergebnis als ULINT aus und löst CNF aus.

  8. Fehlerbehandlung:

  9. Keine explizite Fehlermeldung, aber Überlauf möglich bei:
    • Extrem großen Zeitdifferenzen (>584 Jahre).
    • Ungültigem startDate (z. B. Zukunft).

Technische Besonderheiten

  • Nanosekunden-Präzision: 64-bit-Zähler (ULINT) vermeidet Überlauf bis ~584 Jahre.
  • Flexible Referenzen: Beliebige Startdaten (z. B. DT#2000-01-01 für Y2K-Referenz).
  • Lizenz: Eclipse Public License 2.0 (EPL-2.0).

Rückgabecodes

  • Erfolg: Gültiger ULINT-Wert (Nanosekunden).
  • Fehler: Keine expliziten Codes, aber:
  • 0 bei ungültiger Berechnung (z. B. startDate > NOW()).
  • Überlauf bei Differenzen >2⁶⁴ ns.

Anwendungsszenarien

  1. High-Performance-Logging: Synchronisation von Ereignissen in verteilten Systemen.
  2. Echtzeit-Messungen: Laufzeitanalyse mit Nanosekunden-Präzision.
  3. Benutzerdefinierte Zeiträume: Berechnung von Intervallen ab beliebigen Referenzpunkten.

⚖️ Vergleich mit ähnlichen Bausteinen

Funktion TIMESTAMP_NS NOW() F_NOW_MONOTONIC
Ausgabeformat Nanosekunden (ULINT) Zeitintervall (TIME) Zeitintervall (TIME)
Referenzpunkt Konfigurierbar Systemstart Hardwareabhängig
Präzision 1 ns 1 ms 1 ns (typisch)
Anwendungsfall Absolute Zeitstempel Relative Zeitmessung Monotone Messung

Fazit

TIMESTAMP_NS ist ein essentieller Baustein für Anwendungen, die hochpräzise und flexible Zeitstempel benötigen. Seine Unterstützung benutzerdefinierter Startdaten und Nanosekunden-Präzision macht ihn ideal für: - Industrielle Datenaufzeichnung - Echtzeit-Steuerungen - Wissenschaftliche Messsysteme

Hinweis: Für monotone Zeitmessungen sollte F_NOW_MONOTONIC bevorzugt werden.