 FP_NTP_SYNCHRONIZE
FP_NTP_SYNCHRONIZENTP 서버로부터 시간 동기화 요청
이 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;