SNTPRequest, sendet eine SNTP-Anfrage

Liste

Diese Seite ist Teil der IEC 61131-3 Programmierhandbuch. Gehen Sie zum Index.

Dieser Funktionsbaustein aus Ausführen in Aufgabe Zurück, erhält den Wert von UTC von einem Zeitserver, in dieser Artikel Es wird erklärt, wie der Server auf einem PC aktiviert wird. aktivieren Query Die Zeitwertanforderung wird von dem Server gestellt, dessen URL oder IP-Adresse übergeben wird NTPServer. Der FB fragt den Server ab und wenn er eine korrekte Antwort erhält, kehrt er zu ihm zurück UTCTime der UTC-Zeitwert in Epoche. in Offset die Differenz in ms zwischen dem zurückgegebenen UTC-Wert und der NTP-Referenzuhr wird zurückgegeben.

Am Ende der Ausführung wird der Ausgang aktiviert Done, um eine neue Zeitablesung durchzuführen, muss der Eingang deaktiviert und wieder aktiviert werden Query. in RTDelay die zum Senden der Anfrage und zum Empfangen der Antwort vom NTP-Server erforderliche Zeit ist zurückgekehrt.

NTP-Serverliste

Ein NTP-Server ist in der Lage, systematische Fehler der Systemhardwareuhr zu schätzen und zu kompensieren, es gibt mehrere NTP-Server, mit denen Sie sich verbinden können, um die Systemuhr zu aktualisieren. Das Projekt pool.ntp.org einer von ihnen ist, präsentiert er sich als großer virtueller Cluster von Zeitservern, die Millionen von Benutzern einen zuverlässigen und benutzerfreundlichen NTP-Dienst bieten. Es ist möglich, jeden dieser Server mit den Namen 0, 1, 2 und 3 zu konfigurieren.pool.ntp.org Sie verweisen auf eine zufällige Servergruppe, die sich stündlich ändert.

  • 0.pool.ntp.org
  • 1.pool.ntp.org
  • 2.pool.ntp.org
  • 3.pool.ntp.org
Informationskreis

Funktionssperre

CODESYS: nicht verfügbar

LogikLab: eLLabNetworkLib

Beschreibung

Query (BOOL) Aktivierungsbefehl anfordern. Um den Befehl erneut auszuführen, deaktivieren Sie die Eingabe und aktivieren Sie sie erneut.
SpyOn (BOOL) Wenn aktiv, können Sie den Betrieb der FB ausspionieren.
NTPServer (@STRING) NTP-Serverdefinitionszeiger. Sowohl IP als auch URL können definiert werden.
Done (BOOL) Wird am Ende der Befehlsausführung aktiviert.
Ok (BOOL) Aktiv für eine Programmschleife bei erfolgreicher Abfrage.
Fault (BOOL) Aktiv für eine Schleife bei einem Fehler bei der Befehlsausführung.
RTDelay (REAL) Roundtrip-Verzögerung, Zeit zum Senden der Anfrage und Empfangen der Antwort vom Server (mS).
UTCTime (UDINT) Datum / Uhrzeit in UTC, ausgedrückt in Epochenzeit.
Offset (REAL) Differenz zwischen dem zurückgegebenen UTC-Wert und der NTP-Referenzuhr (mS).

SNBRequest FB-Bild

Auslöser ausspionieren

Se SpyOn Aktiv können Sie die Spionagekonsole verwenden, um die Funktion des FB zu überprüfen. Es gibt verschiedene Ebenen von Triggern.

Auslösepegel
AuslösenBeschreibung
16 # 00000001Tx: Anfrage an den Server senden.
16 # 00000002Rx: Antwort vom Server empfangen.
16 # 20000000Lg: Protokollnachricht.
16 # 40000000Er: Ausführungsfehler.

Beispiele

Verwendung der Beispiele.
ST_SNTPRequest: Senden Sie alle 30 Sekunden eine Anfrage an den NTP-Server 0.pool.ntp.org und wenn die Antwort richtig ist, wird die Echtzeituhr aktualisiert.

ST_SystemClockSync: Wenn das Programm startet, aktualisiert es die Systemuhr. Wenn die Anfrage fehlerhaft ist, wird die Anfrage schnell wiederholt. Es führt stündlich ein Update durch.

LogicLab (Ptp119, ST_SNTPRequest)
PROGRAM ST_SNTPRequest
VAR
    i : UDINT; (* Auxiliary variable *)
    TimeBf : UDINT; (* Time buffer (mS) *)
    SNTPReq : SNTPRequest; (* NTP request *)
    CheckDate : ARRAY[0..1] OF DATE_AND_TIME; (* To check Date/Time *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SNTPRequest"
// *****************************************************************************
// At every 30 seconds it's a NTP request is sent and the real time clock is
// updated.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN
        SNTPReq.SpyOn:=TRUE; //Spy On
        SNTPReq.NTPServer:=ADR('0.pool.ntp.org'); //NTP server
    END_IF;

    // -------------------------------------------------------------------------
    // TIME SYNCRONIZATION
    // -------------------------------------------------------------------------
    // Check if time threshold to perform synchronization (Every 30 Sec).
    // Program initializations.

    IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#30s)) THEN
        TimeBf:=SysTimeGetMs(); //Time buffer (mS)
        SNTPReq.Query:=TRUE; //Query On
    END_IF;

    // Manage the NTP request to the server.

    SNTPReq(); //NTP request

    // Execution done, if Ok update the real time clock.

    IF (SNTPReq.Done) THEN
        SNTPReq.Query:=FALSE; //Query On
        CheckDate[0]:=TO_DATE_AND_TIME(SysDateGetS()); //System Date/Time
        CheckDate[1]:=TO_DATE_AND_TIME(SNTPReq.UTCTime); //NTP Date/Time
        IF (SNTPReq.Ok) THEN i:=SysDateSetS(SNTPReq.UTCTime); END_IF;
    END_IF;

// [End of file]
LogicLab (Ptp181, ST_SystemClockSync)
PROGRAM ST_SystemClockSync
VAR
    i : UDINT; (* Auxiliary variable *)
    ClockSync : BOOL; (* Clock syncronized *)
    TimeBf : UDINT; (* Time buffer (mS) *)
    SNTPReq : SNTPRequest; (* NTP request *)
END_VAR

// *****************************************************************************
// PROGRAM "SystemClockSync"
// *****************************************************************************
// Sends a NTP request to synchronize the system clock
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN
        ClockSync:=FALSE; //Clock syncronized
        SNTPReq.Query:=TRUE; //Query On
        SNTPReq.SpyOn:=FALSE; //Spy On
        SNTPReq.NTPServer:=ADR('0.pool.ntp.org'); //NTP server
    END_IF;

    // -------------------------------------------------------------------------
    // TIME SYNCRONIZATION
    // -------------------------------------------------------------------------
    // If system clock not synchronized executes the request faster.
    // If synchronized executes it slowly.

    IF NOT(ClockSync) THEN
        IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#30s)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
    ELSE
        IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#1h)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
    END_IF;

    // On execution done, if Ok update the real time clock.

    SNTPReq(); //NTP request
    IF (SNTPReq.Done) THEN
        SNTPReq.Query:=FALSE; //Query On
        IF (SNTPReq.Ok) THEN i:=SysDateSetS(SNTPReq.UTCTime); ClockSync:=TRUE; END_IF;
    END_IF;

// [End of file]
War dieser Artikel hilfreich?