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
startDateverknü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¶
- Initialisierung:
- Wird durch
REQ-Ereignis aktiviert. -
Nutzt den aktuellen Systemzeitpunkt (
NOW()). -
Berechnung:
- Subtrahiert
startDatevon der aktuellen Systemzeit. - Konvertiert die Differenz via
TIME_IN_NS_TO_ULINT()in Nanosekunden. -
Gibt Ergebnis als
ULINTaus und löstCNFaus. -
Fehlerbehandlung:
- 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-01fü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:
0bei ungültiger Berechnung (z. B.startDate > NOW()).- Überlauf bei Differenzen >2⁶⁴ ns.
Anwendungsszenarien¶
- High-Performance-Logging: Synchronisation von Ereignissen in verteilten Systemen.
- Echtzeit-Messungen: Laufzeitanalyse mit Nanosekunden-Präzision.
- 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.