Solicitar la sincronización horaria del servidor NTP
Esta instrucción FP envía una solicitud al servidor NTP para sincronizar la hora.
Entrada
Número de reintentos de solicitud de sincronización horaria
Valores: 0–20
Intervalo de sincronización horaria
Valores: 16–600
Salida
Código de resultado de ejecución
16#FFFF |
En curso |
|
16#0 |
Finalización normal |
|
16#10 |
Error de doble arranque |
Se está ejecutando la instrucción que solicita la sincronización horaria. NOTA El error de doble arranque no se produce cuando la instrucción se ejecuta con el número de reintentos fijado en 0 para cancelar la instrucción de solicitud de sincronización horaria. |
16#11 |
Error de configuración de la dirección del servidor SNTP |
Configuración ET-LAN, configuración de la dirección del servidor SNTP = "0.0.0.0" |
16#12 |
Error de desconexión |
Ethernet está desconectado. |
16#13 |
Error de inicialización activa de Ethernet |
No se ha asignado ninguna dirección IP a la unidad Ethernet que envía la solicitud. (sys_bIsEthernetIPAddressAssigned es FALSE) |
16#14 |
Error de configuración del número de reintentos |
El número de reintentos especificado está fuera de rango. |
16#15 |
Error de configuración del intervalo de reintentos |
El intervalo de reintentos especificado está fuera de rango. |
16#20 |
Error de tiempo de espera de respuesta |
El tiempo de respuesta del procesamiento de la solicitud de sincronización horaria supera el tiempo predefinido. NOTA Este error también se produce cuando no se resuelve una dirección IP NTP. |
16#30 |
Tiempo de espera de respuesta de la tarea Ethernet |
Este error se produce cuando no se devuelve ninguna respuesta de la tarea Ethernet. |
Esta instrucción no está disponible en los programas de interrupción.
Si es previsible que el tiempo de sincronización se agote, ajustar nNumberOfRetries a un valor más alto.
Para cancelar otros intentos de sincronización de la hora, ajustar nNumberOfRetries a 0. En este caso, el código de resultado de la ejecución no se guarda en nResult.
El tiempo de espera para un intento de sincronización horaria está fijado en 3 segundos.
Cuando se especifican varios intentos de sincronización horaria, se inicia una nueva solicitud una vez transcurrido el tiempo de espera (3 segundos) más el intervalo de procesamiento (especificado por nRetryInterval).
El tiempo de espera total (segundos) para la sincronización horaria se obtiene con la siguiente fórmula: nRetryInterval x 3 + (nRetryInterval x (nNumberOfRetries-1)). (Aquí, nNumberOfRetries es mayor que 0.)
si el área especificada utilizando el modificador índice supera el límite.
si la instrucción se ejecuta en un programa de interrupción
si el área especificada utilizando el modificador índice supera el límite.
si la instrucción se ejecuta en un programa de interrupción
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU.Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
bRequestSynchronization: BOOL:=FALSE;
iNumberOfRetries: INT:=3;
iRetryInterval: INT:=20;
wResult: WORD:=0;
bEnable: BOOL:=FALSE;
END_VAR
Cuando la variable del sistema sys_bIsEthernetInitializing está a FALSE y la variable bEnable pasa a TRUE, se ejecuta la función.
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;