LabVIEWからアクセスするコード紹介

最終更新日 2021年08月03日

LabVIEWでNTPサーバにアクセスし現在時刻を所得するコードを書いてみます。

LabVIEWで作成したアプリケーションに時刻表示したり、イベントログを書き出す機能を装備させた場合、その時刻はPC/M/Bから所得することになります。そのPCが正しい時刻を刻んでいればいいのですが、PCのRTC(RealTimeClock)は決して性格正確ではありません。一日1秒程度の遅れ/進みはざらです。もっとズレる可能性があります。
OS側でタスクスケジューラにNTPサーバに対して定期的な時刻同期を実行する様登録しておけばほぼ解決しますが、アプリケーション起動時にアプリケーション側からNTPサーバに対して時刻同期を掛け、PCに時刻設定するという方法もあります。

実際にコードを書いてみます。rfc1361に従うわけですが、RFC-1305の知識は必要ありません。

方針ですが、UDPソケット通信でNTPサーバに対してNTPパケットを送信し、受信したパケットを解析して時刻及び時差を元に時刻設定すれば良いかと思います。

テストコードを掲載しておきます。Norton360でスキャンして脅威は無い事を確認してあります。

QueryNTP(LV2016).rar

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---+-----+-----+---------------+---------------+---------------+ 0|LI | Ver |Mode | Stratum |PollingInterval| Precision | +---+-----+-----+---------------+---------------+---------------+ 1| RootDelay | +---------------------------------------------------------------+ 2| RootDispersion | +---------------------------------------------------------------+ 3| ReferenceID | +---------------------------------------------------------------+ 4| ReferenceTimestamp | 5| | +---------------------------------------------------------------+ 6| OriginTimestamp | 7| | +---------------------------------------------------------------+ 8| ReceiveTimestamp | 9| | +---------------------------------------------------------------+ 0| TransmitTimestamp | 1| | +---------------------------------------------------------------+
Leap Indicator (LI)

これは、当日の最後の1分間に挿入/削除されるうるう秒が差し迫っていることを警告する2ビットのコードで、それぞれビット0とビット1が次のようにコード化されています。

LI       Value     Meaning
-------------------------------------------------------
00       0         no warning
01       1         last minute has 61 seconds
10       2         last minute has 59 seconds)
11       3         alarm condition (clock not synchronized)
Version number (Ver)

これは、NTPバージョン番号(現在は3)を示す3ビット整数です。
3なら0b011、4なら0b100です

Mode

3bitの値でクライアントが送信する際には0b011、サーバが応答する際には0b100をセットします。

モードの意味

------------------------------------
0:予約済み
1:対称アクティブ
2:対称パッシブ
3:クライアント
4:サーバー
5:放送
6:NTP制御メッセージ用に予約済み
7:私的使用のために予約済み
Peer Clock Stratum (Stratum)

Stratum(階層)を8bitで指定します。

Stratum 0
原子時計と無線および GPS による信号送信

GPS (全地球測位システム)
携帯電話システム
低周波無線送信 WWVB (米国コロラド州)、JJY-40 および JJY-60 (日本)、DCF77 (ドイツ)、および MSF (英国)

これらの信号は専用デバイスで受信可能で、通常は RS-232 で組織全体またはサイト全体のタイムサーバーとして使用されるシステムに接続されます。

Stratum(層)の意味
      ----------------------------------------------
      0        unspecified or unavailable
      1        primary reference (e.g., radio clock)
      2-15     secondary reference (via NTP or SNTP)
      16-255   reserved
Peer Polling Interval (PollingInterval)

ポーリング間隔:

これは、連続するメッセージ間の最大間隔を秒単位で2の最も近い累乗で示す8ビットの符号付き整数です。

このフィールドに通常表示される値は、6から10までの範囲です。

Perr Clock Precision (Precision)

精度:

これは、ローカルクロックの精度を秒単位で2の最も近い累乗で示す8ビットの符号付き整数です。

このフィールドに通常表示される値は、主電源周波数クロックの-6から一部のワークステーションにあるマイクロ秒クロックの-18までの範囲です。

Root Deley

ルート遅延:Strarum 1までの往復の遅延を32bitで表します。

これは、プライマリ参照ソースへの合計ラウンドトリップ遅延を秒単位で示し、ビット15と16の間に小数点がある32ビットの符号付き固定小数点数です。

この変数は、相対的な時間と周波数の誤差に応じて、正の値と負の値の両方をとることができることに注意してください。

このフィールドに通常表示される値は、数ミリ秒の負の値から数百ミリ秒の正の値までの範囲です。

Root Dispersion

ルートの分散:

これは、32ビットの符号なし固定小数点数であり、プライマリ参照ソースに関連する最大エラーを秒単位で示し、ビット15と16の間に小数点があります。

このフィールドに通常表示される値の範囲は、0?数百ミリ秒です。

Reference ID

基準クロック識別子:

これは、特定の基準クロックを識別する32ビットコードです。

ストラタム0(指定なし)またはストラタム1(プライマリリファレンス)の場合、これは4オクテット、左寄せ、ゼロが埋め込まれたASCII文字列です。

NTP仕様の一部として列挙されていませんが、以下は代表的なASCII識別子です。

Reference Timestamp

これは、現地の時計が置かれている現地時間です。

64ビットのタイムスタンプ形式で最後に設定または修正されました。
Reference/Orgin/Receive/Transmit同一フォーマット
固定小数値で上位32bitが整数部、下位32bitが小数点以下 UTC

Orgin Timestamp

これは、リクエストが行われた現地時間です

64ビットのタイムスタンプ形式でサーバーのクライアントを出発しました。

Receive Timestamp

これは、リクエストがサーバーに到着した現地時間で、64ビットのタイムスタンプ形式です。

Transmit Timestamp

これは、64ビットのタイムスタンプ形式で、応答がクライアントのためにサーバーを出発した現地時間です。


もう少しアプリケーションらしいコードも書いてみました。掲載しておきます。

LVNTP(LV2016).rar

実験用のコードとして使える様に通信ポートをオープンした後に連続して実行出来る様にしてみました。
実効間隔・実行回数を設定してTEST実行します。一種の負荷テストです。
一寸レタッチすれば一定間隔で持続的に時刻取得を実行する様な負荷テストも実現出来るかなと思います。
※PCに時刻反映する部分は省きました。

戯言(nonsense)に戻る


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。