Zeitsynchronisation vom NTP-Server beauftragen
Dieser FP-Befehl sendet einen Auftrag an den NTP-Server, um die Zeit zu synchronisieren.
Eingang
Anzahl der Wiederholungsversuche des Beauftragens der Zeitsynchronisation
Werte: 0–20
Zeitsynchronisationsintervall
Werte: 16–600
Ausgang
Ausführungsergebniscode
16#FFFF |
Läuft |
|
16#0 |
Normaler Abschluss |
|
16#10 |
Doppelter Anlaufzeitfehler |
Der Befehl, der die Zeitsynchronisation angefragt hat, wird gerade ausgeführt. Anmerkung Der doppelte Anlaufzeitfehler tritt nicht auf, wenn der Befehl ausgeführt wird, während die Anzahl der Wiederholungen auf 0 eingestellt ist, um den Befehl zur Zeitsynchronisation abzubrechen. |
16#11 |
SNTP-Serveradressen-Einstellungsfehler |
ET-LAN-Einstellung, SNTP-Serveradressen-Einstellung = "0.0.0.0" |
16#12 |
Verbindungsabbruchfehler |
Ethernet ist getrennt |
16#13 |
Fehler Ethernet-Initialisierung aktiv |
Dem Ethernet-Modul, das den Auftrag sendet, wurde keine IP-Adresse zugewiesen. (sys_bIsEthernetIPAddressAssigned ist FALSE) |
16#14 |
Fehler bei der Einstellung der Anzahl der Wiederholungsversuche |
Die angegebene Anzahl der Wiederholungen liegt außerhalb des zulässigen Bereichs. |
16#15 |
Wiederholungsintervalleinstellungsfehler |
Das angegebene Wiederholungsintervall liegt außerhalb des zulässigen Bereichs. |
16#20 |
Antwortzeitüberschreitungsfehler |
Die Antwortzeit für die Bearbeitung des Zeitsynchronisationsauftrags überschreitet die vordefinierte Zeit. Anmerkung Dieser Fehler tritt auch auf, wenn eine NTP-IP-Adresse nicht aufgelöst wird. |
16#30 |
Ethernet-Task-Antwortzeitüberschreitung |
Dieser Fehler tritt auf, wenn keine Antwort von der Ethernet-Task geliefert wird. |
Dieser Befehl ist in Interrupt-Programmen nicht verfügbar.
Wenn eine Zeitüberschreitung bei der Zeitsynchronisation absehbar ist, stellen Sie nNumberOfRetries auf einen höheren Wert ein.
Um weitere Versuche, die Zeit zu synchronisieren, abzubrechen, stellen Sie nNumberOfRetries auf 0 ein. In diesem Fall wird der Ausführungsergebniscode nicht in nResult gespeichert.
Die Timeout-Periode für einen Synchronisationsversuch ist auf 3 Sekunden festgelegt.
Wenn mehrere Zeitsynchronisationsversuche angegeben sind, beginnt ein neuer Auftrag nach Ablauf der Timeout-Periode (3 Sekunden) plus dem Verarbeitungsintervall (angegeben durch nRetryInterval).
Die Gesamt-Timeout-Periode (Sekunden) für die Zeitsynchronisation wird mit der folgenden Formel berechnet: nRetryInterval x 3 + (nRetryInterval x (nNumberOfRetries-1)). (Hierbei ist nNumberOfRetries größer als 0.)
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn der Befehl in einem Interrupt-Programm ausgeführt wird
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn der Befehl in einem Interrupt-Programm ausgeführt wird
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bRequestSynchronization: BOOL:=FALSE;
iNumberOfRetries: INT:=3;
iRetryInterval: INT:=20;
wResult: WORD:=0;
bEnable: BOOL:=FALSE;
END_VAR
Wenn die Systemvariable sys_bIsEthernetInitializing auf FALSE ist und die Variable bEnable auf TRUE gesetzt wird, wird die Funktion ausgeführt.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsEthernetInitializing,6,1,8,3,N);
B(B_CONTACT,,bEnable,15,1,17,3,);
B(B_F,FP_NTP_SYNCHRONIZE!,,22,0,35,5,,?DEN?DnNumberOfRetries?DnRetryInterval?AENO?AnResult);
B(B_VARIN,,iNumberOfRetries,20,2,22,4,);
B(B_VAROUT,,wResult,35,2,37,4,);
B(B_VARIN,,iRetryInterval,20,3,22,5,);
L(1,0,1,5);
L(1,2,6,2);
L(8,2,15,2);
L(17,2,22,2);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if NOT (sys_bIsEthernetInitializing) AND (bEnable) then
FP_NTP_SYNCHRONIZE(nNumberOfRetries := iNumberOfRetries,
nRetryInterval := iRetryInterval,
nResult => wResult);
end_if;