PXI、デスクトップETS、FieldPoint、産業用コントローラ、スマートカメラ、およびLinuxリアルタイムターゲットは、SNTP同期をネイティブにサポートしていません。 このプロセスは、VxWorksオペレーティングシステム(OS)が搭載されているCompactRIOコントローラにのみ適用可能です。使用しているコントローラに搭載されているOSを確認するには、リアルタイムコントローラとリアルタイムオペレーティングシステムの互換性を参照してください。
LabVIEW Real-Time 8.6以降では、VxWorksオペレーティングシステムを使用するCompactRIOリアルタイムコントローラは、SNTPサーバと同期するように構成できます。
SNTPサーバと同期するようにコントローラーを構成するには、次の手順を行います。
- コントローラからWindowsマシンにni-rt.iniファイルをFTPで送信します。
- コントローラのni-rt.iniファイルにあるtime syncセクションの最後に以下の行を追加します。
[TIME SYNC]
source_priority=sntp;rtc;
source.sntp.enable=true
source.sntp.address=x.x.x.x
source.sntp.interval=60
source.sntp.port=123
source.sntp.verbose=false
source.sntp.log=false
- 変更したni-rt.iniファイルをコントローラにFTPで戻します。ni-rt.iniファイルを更新し再起動すると、cRIOコントローラはSNTPサーバとの同期を自動的に実装します。
次の表で、.iniトークンについて説明します。
トークン | タイプ | デフォルト | 重要性 | 説明 |
---|
source_priority | 文字列 | sntp | 必須 | インストールされた時間同期プラグインの相対的優先度をリストします。cRIOで使用可能なオプションはrtc、dio、およびsntpです。 |
source.sntp.enable | ブール | False | 必須 | Trueに設定するとsntp時間同期プラグインを有効にします。Falseに設定すると無効になります。 |
source.sntp.address | 文字列 | 0.0.0.0 | 必須 | SNTPサーバのIPv4アドレスを指定します。下記のリンクにあるNIST Internet Time Service Clockからお使いの地域にあるサーバを選択します。ピリオドで区切られたアドレスを使用します。現時点では、pool.ntp.orgのような名前付けされたアドレスは無効です。 |
source.sntp.interval | 整数 | 60 | 推奨 | デフォルトでSNTPクライアントドライバは、後続するタイムサーバのポーリング間隔でスリープ状態になります。間隔を調整するには、新規の遅延を秒単位で設定します。 |
source.sntp.port | 整数 | 123 | 任意 | デフォルトで、SNTPは既知のポートを使用してタイムサーバと通信します。タイムサーバが非標準ポートにある場合は新規のポート番号を設定します。 |
source.sntp.verbose | ブール | False | 任意 | デフォルトでSNTPクライアントドライバエラーは、暗黙的に破棄されます。コンソール出力への詳細なエラーの表示を有効にするには、Trueに設定します。 |
source.sntp.log | ブール | False | 任意 | タイムスタンプをファイルにログするにはTrueに設定します。これはデバッグの目的のみで使用します。Trueに設定した場合、ログはni-rt\system\ts_sntp_log.txtに保存されます。 |
Additional Information
ts_sntp_log.txt(64ビット16進数)の例:
currentLocalTimeNS, frequencyHz, t1_raw, t2_ns, t3_ns, t4_raw |
30744de63d52117c: 98989929.000000, 000000004b7deac0, 30744e740a609a99, 30744e740a60ee36, 000000004b90fef7 |
パラメータ | 説明 |
currentLocalTimeNS | cRIOのローカル時間 |
frequencyHz | プロセッサクロックの周波数 |
t1_raw | タイムスタンプを開始、クライアントが送信する時間要求 |
t2_ns | タイムスタンプを受信、サーバが受信する時間要求 |
t3_ns | タイムスタンプを送信、サーバが送信する時間応答 |
t4_raw | タイムスタンプを出力、クライアントが受信する時間応答 |
上記の例から10進数にタイムスタンプを変更する場合は、以下のようになります。
t1_raw = 1,266,543,296
t2_ns = 3,491,501,871,416,253,081
t3_ns = 3,491,501,871,416,274,486
t4_raw = 1,267,793,655
ただし、t1_rawおよびt4_rawは有用ではありません。代わりに、コントローラが最後に起動されたときからの各継続時間を変換する必要があります。
t1_raw = 0x4b7deac0 = 1,266,543,296ティック
t1_duration_since_boot = (ティックカウント×ナノ秒分の秒/周波数) = (1,266,543,296×1e9 / 98,989,929) = 12,794,668,192ナノ秒 (~12.7秒)
t4_duration = 12,807,299,366ナノ秒 (~12.8秒)
この変換により、tに対して意味のある値を計算することができます。
t = ((t2 - t1) + (t3 - t4)) / 2
t = ((3491501871416253081-12794668192) + (3491501871416274486-12807299366)) / 2
t = 3,491,501,858,615,279,616ナノ秒
この値は、ソフトウェアで変数として保存されています。RTコントローラが何時かを知る必要があるとき、現在のティックカウントを読み取り、持続時間(ティック×1e9/周波数)を変換して、このt値を追加します。この値は、ローカルカウンタとNTPサーバのカウンタ間の違いを示していますが、ローカルタイムスタンプでの誤差量(リファレンスからのオフセット)を示していません。
このデータでNTP時間リファレンスからの即時オフセットを計算することは、実際は可能なことではありません。行うことはできるものの、どのようにt値がオーバータイムを変化するかを見ています。新旧のt値間の違いは、ローカル時間がどのくらい前の同期間隔間のNTPマスターから離れていくかを表します。これは、リファレンスからのオフセットの大まかなアイディアを得られます。
さらに、以下の2つの方法はサーバのパフォーマンスを評価するためにも利用できます。
- 往復の遅延dおよびローカルクロックオフセットtを計算します。
d = (t4_raw - t1_raw) - (t2_ns - t3_ns)
t = ((t2_ns - t1_raw) + (t3_ns - t4_raw)) / 2
- cRIOのローカル時間とサーバ時間を以下の式を使用して比較します。
(t2_ns + t3_ns) / 2
SNTPは、ネットワークタイムプロトコル(NTP)の簡素化されたサブセットです。SNTPの詳細については、RFC 2030を参照してください。他のタイムサーバのオプションの詳細については、下記の関連リンクを参照してください。。
SNTP同期は、起動時に日付/時刻の大幅な補正をおこないます。起動後、プロセッサクロックを調整してドリフトを考慮します。アルゴリズムには誤差許容値がありますが、その許容値を超える(つまり、同期から大きく外れている)と、プロセッサクロックを同期する調整を停止します。通常、日付と時間を設定VIを呼び出すとクロックがアルゴリズムの誤差許容値外になります。