FP_NTP_SYNCHRONIZE

NTPサーバーの時刻同期要求

このFP命令は、NTPサーバーに時刻同期要求を送信します。

入力

nNumberOfRetries (WORD, INT, UINT)

時刻同期要求のリトライ回数

値:0~20

nRetryInterval (WORD, INT, UINT)

時刻同期間隔

値:16~600

出力

nResult (WORD, INT, UINT)

実行結果コード

16#FFFF

処理中

16#0

正常完了

16#10

重複起動エラー

時刻同期を要求する命令が実行中です。

注記

時刻同期要求命令をキャンセルするため再試行回数を0に設定して命令を実行すると、重複起動エラーは発生しません。

16#11

SNTPサーバーアドレス設定エラー

ET-LAN設定、SNTPサーバーアドレス設定 = "0.0.0.0"

16#12

接続の切断エラー

Ethernetが未接続です。

16#13

Ethernet初期化中エラー

要求を送信するEthernetユニットにIPアドレスが割り当てられていません。(sys_bIsEthernetIPAddressAssignedFALSE)

16#14

再試行回数設定エラー

指定した再試行回数が範囲外です。

16#15

リトライ間隔設定エラー

指定したリトライ間隔が範囲外です。

16#20

レスポンス待ちタイムアウトエラー

時刻同期要求処理のレスポンス時間が事前定義された時間を超過しました。

注記

このエラーはNTPのIPアドレスが未解決の場合にも発生します。

16#30

Ethernetタスクのレスポンス待ちタイムアウト

このエラーはEthernetタスクからのレスポンスがない場合に発生します。

解説

  • この命令は、割り込みプログラム中で使用することはできません。

  • 時刻同期タイムアウトが見込まれる場合は、nNumberOfRetriesの設定値を高くします。

  • 時間の同期の追加リトライをキャンセルするには、nNumberOfRetriesを0に設定します。この場合、実行結果コードはnResultに格納されません。

  • 時刻同期の試行1回あたりのタイムアウト時間は3秒に固定されています。

  • 時刻同期を複数回試行するよう指定した場合、新たな要求はタイムアウト時間(3秒)経過後、さらに処理間隔(nRetryIntervalで指定)の時間経過後に開始されます。

  • 時刻同期のタイムアウト合計時間(秒)は以下の式で求められます。nRetryInterval x 3 + (nRetryInterval x (nNumberOfRetries - 1))。(ここでnNumberOfRetriesは0より大きい数)

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • インデックス修飾時にエリアを超えたとき

  • 命令が割り込みプログラム内で実行された場合。

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • インデックス修飾時にエリアを超えたとき

  • 命令が割り込みプログラム内で実行された場合。

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。

	VAR
		bRequestSynchronization: BOOL:=FALSE;
		iNumberOfRetries: INT:=3;
		iRetryInterval: INT:=20;
		wResult: WORD:=0;
		bEnable: BOOL:=FALSE;
			END_VAR

LDボディ

システム変数sys_bIsEthernetInitializingFALSEのとき変数bEnableTRUEに設定すると、ファンクションが実行されます。

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

STボディ

if NOT (sys_bIsEthernetInitializing) AND (bEnable) then
    FP_NTP_SYNCHRONIZE(nNumberOfRetries := iNumberOfRetries,
    nRetryInterval := iRetryInterval,
    nResult => wResult);
end_if;

最終修正日: 2024-03-07このページに関するフィードバックお問い合わせ窓口