NTP 서버로부터 시간 동기화 요청
이 FP 명령은 NTP 서버에 요청을 전송하여 시간을 동기화합니다.
입력
시간 동기화를 요청하는 재시도 횟수
값: 0-20
시간 동기화 간격
값: 16-600
출력
실행 결과 코드
16#FFFF |
진행 중 |
|
16#0 |
정상 완료 |
|
16#10 |
더블 시작 에러 |
시간 동기화를 요청하는 명령어가 실행 중입니다. 주석 시간 동기화 요청 명령을 취소하기 위해 0으로 설정된 재시도 횟수와 함께 명령어가 실행될 때는 더블 시작 에러가 발생하지 않습니다. |
16#11 |
SNTP 서버 어드레스 설정 에러 |
ET-LAN 설정, SNTP 서버 어드레스 설정 = "0.0.0.0" |
16#12 |
연결 끊김 에러 |
이더넷의 연결이 끊겼습니다. |
16#13 |
이더넷 초기화 활성 에러 |
요청을 전송하는 이더넷 유닛에 할당된 IP 어드레스가 없습니다. (sys_bIsEthernetIPAddressAssigned가 FALSE임) |
16#14 |
재시도 횟수 설정 에러 |
지정된 재시도 횟수가 범위를 벗어났습니다. |
16#15 |
재시도 간격 설정 에러 |
지정된 재시도 간격이 범위를 벗어났습니다. |
16#20 |
응답 타임아웃 에러 |
시간 동기화 요청을 처리하는 응답 시간이 미리 정의된 시간을 초과합니다. 주석 이 에러는 NTP IP 어드레스가 확인되지 않은 경우에도 발생합니다. |
16#30 |
이더넷 태스크 응답 타임아웃 |
이 에러는 이더넷 태스크에서 응답이 반환되지 않을 때 발생합니다. |
인터럽트 프로그램에서는 이 명령을 사용할 수 없습니다.
시간 동기화 타임아웃을 예측할 수 있는 경우 nNumberOfRetries를 더 높은 값으로 설정하십시오.
시간을 동기화하려는 추가 시도를 취소하려면 nNumberOfRetries를 0으로 설정합니다. 이 경우 실행 결과 코드는 nResult에 저장되지 않습니다.
한 번의 동기화 시도에 대한 타임아웃 기간이 3초로 고정됩니다.
다중 횟수 동기화 시도가 지정되면 타임아웃 기간이 경과한 후(3초) 처리 간격이 지나면 새 요청이 시작됩니다(nRetryInterval에 의해 지정됨).
시간 동기화를 위한 총 타임아웃 기간(초)은 다음 공식을 사용하여 얻을 수 있습니다. nRetryInterval x 3 + (nRetryInterval x (nNumberOfRetries-1)). (여기서 nNumberOfRetries는 0보다 큼)
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
명령을 인터럽트 프로그램에서 실행한 경우.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
명령을 인터럽트 프로그램에서 실행한 경우.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bRequestSynchronization: BOOL:=FALSE;
iNumberOfRetries: INT:=3;
iRetryInterval: INT:=20;
wResult: WORD:=0;
bEnable: BOOL:=FALSE;
END_VAR
시스템 변수 sys_bIsEthernetInitializing이 FALSE이고 변수 bEnable이 TRUE로 설정되면 펑션이 실행됩니다.
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;