GPS NTP タイムサーバユニット

最終更新日:2021年3月18日

ここでは、STM32minShieldを使用した、提供可能なGPS NTP タイムサーバを紹介します。

※2021年01月15日 タイトル変更 NTP という単語を追加させて戴きました。
※2020年12月25日 一部仕様を変更しました。

シチズンさんとかセイコーさんとかから高機能なタイムサーバが提供されていますが、とても高価です。
目的さえ合えば、シンプルで安定した、、安価なタイムサーバが良いに越したことはありません。
そこでSTM32minShieldを使用して構築したタイムサーバユニットを紹介します。
時刻同期方法はいろいろ考えられますが、安価なGPSモジュールを接続したものを紹介します。

コラム

目次


利用目的を定義しておきます。】

2036年問題】

2036年問題とは、インターネットなどのIPネットワーク上での時刻合わせに用いられるNTP(Network Time Protocol)の仕様により、西暦2036年の特定の日時以降の日付と時刻を正しく扱えなくなる問題。また、それが原因で引き起こされることが懸念されている、コンピュータの一斉誤作動や社会的な混乱などの問題。※https://e-words.jp/より引用

NTPではUTC(協定世界時)を採用しています。これは1900年1月1日午前0時(GMT)からの経過秒数を符号無し32bit整数で管理しています。そのため、2036年2月6日6時28分15秒、日本時間(JST)では同日15時28分15秒で桁あふれして、正しく日時を表記出来なくなります。
一応対策は提示されており、SNTPバージョン4(RFC 4330)では最上位ビットが0の場合は2036年2月6日6時28分16秒からの経過秒数を表すよう扱いを改める手法が提案されています。
RFC 4330を満たした実装をしているか注意が必要です。

過去に2000年問題がありました。この問題は特定のアプリケーションに依存する問題でしたが、2036年問題はシステムの制限であり、個々の問題とは云えません。

2038年問題】

2038年問題とは、西暦2038年のある瞬間を境に一部のコンピュータシステムが誤作動する可能性がある問題。※https://e-words.jp/より引用

C言語でtime_t型で時刻を扱っていると、32ビットの符号付き整数の為に1970年1月1日午前0時(GMT)からの経過時間が2038年1月19日午前3時14分8秒(日本時間では同日の午後12時14分8秒)で桁あふれしてしまいます。
C言語コンパイラ側でtime_t型を64ビット符号付き整数として扱うモノがあり、コンパイルし直せば対策出来る場合もありますが、そもそも対策されているのかどのようにして確認すれば良いのかを含め注意が必要です。

構成部品】

ここで書かれている内容がどのような構成部品で実現するのか明示しておきます。
大まかには、以下の構成部品要素で実現可能です。

  1. STM32miniShiled Kit
  2. W850ioModule
  3. GPSアンテナモジュール(ステレオminiプラグタイプ)
  4. TM1637表示モジュール
  5. USBケーブル+USB電源アダプタ
  6. ステレオminiジャックコネクタ
  7. 適当なハウジング

システム例】

仕様】

 

GPSタイムサーバ
備考
時刻修正方式 GPS センテンス$xxRMCを読み取って調整
動作状態 SNTPサーバ(時刻同期)
HTTPサーバ(設定)
時刻精度 GPSモジュールの精度に準ずる 内部時間は処理時間分の遅れあり
LANインターフェース 10/100BASE-TX RJ-45
対応プロトコル SNTPv4  
外形寸法(mm) 483×44×120  
電源電圧(V) DC5V
消費電流210mA(実測値)
USBマイクロBで提供
ACアダプタは100−240VAC50/60Hz
GPSアンテナ  受信周波数(MHz) 1575.42±5 安価なカーナビ用のGPSアンテナを流用U-BLOXのモジュールを期待しているが、汎用文字列(NMEA-0183)を解釈しているので特に制限はない。
φ3.5mmステレオタイプのコネクタで有ること。本体より3.3Vの電源供給
利得(dBi) 28+/-3dB
外形寸法(mm) 45x38x15mm
ケーブル長(m) 約1.6m
固定方法 マグネット固定方式

GPSアンテナ調査】

本装置で使用するGPSアンテナは簡易取付型カーナビで使用されているステレオプラグ対応のGPSアンテナを流用して使用する事にしています。
カーナビに採用されているGPSアンテナですが、安価な簡易取付型の場合、GPSアンテナオプションの場合が多く、GPSアンテナ単体での購入が可能となっています。そのため本装置のように流通品を流用利用してしまうことになります。
このアンテナに電源供給するとシリアル9600bpsでNMEA-0183のセンテンス文字列(ASCII)を受信出来ます。
$から始まる6文字で トーカ ID と メッセージIDが固定長で得られますので、ここで篩に分けて必要なセンテンスを拾い、情報解析して必要な日付・時刻情報を抜き出し、内部時計の更新に使用する事になります。

トーカ IDは無視し、メッセージIDのRMC(Recommended Minimum Specific GNSS Data)を採用すれば、日付・時刻情報が得られることが判っています。
カーナビでは位置情報も重要ですが、正確な時間も必要です。そのためRMCの情報はどのカーナビでも採用していると考えられます。(※確定情報では無く、手元の調査情報です。)

ちなみにRMCセンテンス仕様は以下の通りです。
※GPRMCとGNRMCに違いがあることが判りました。パースの仕方に注意が必要です。

センテンス例:$GPRMC,085120.307,A,3541.1493,N,13945.3994,E,000.0,240.3,181211,,,A*6A
単語例 説明 意味
GP
   
RMC
  GPS測位まとめデータのような存在
085120.307 時刻  8:51:20.307
A データ有効性 A/B/V/W A= valid current data
3541.1493 緯度 DDMM.MMMフォーマット 緯度:35度41.1493分
N 緯度方角 N/S N = 北緯
13945.3994 経度 経度;139度45.3994分
E 緯度方角 E/W E=東経
000.0 地表における移動の速度 移動の速度:000.0[knot]
240.3 地表における移動の真方位 移動の真方位:240.3度
181211 日付 DDMMYY UTC日付:2011年12月18日
  磁北と真北の間の角度の差。  
  磁北と真北の間の角度の差の方向。E/W  
A 測位モード N/A/D/E/M/S/ A=自律方式
*6A チェックサム  
センテンス例2:$GNRMC,004055.000,A,3430.62710,N,13316.68285,E,0.05,115.20,251220,,,A,V*0B
単語例 説明 意味
GN
   
RMC
  GPS測位まとめデータのような存在
004055.000
時刻 
00:40:55.000
V データ有効性 A/B/V/W V= navigation receiver warming
3430.62710
緯度 DDMM.MMMフォーマット 緯度:34度30.62710分
N 緯度方角 N/S N = 北緯
13316.68285
経度 経度;133度16.68285分
E 緯度方角 E/W E=東経
0.05  地表における移動の速度 移動の速度:0.05[knot]
115.20
地表における移動の真方位 移動の真方位:115.20度
251220
日付 DDMMYY UTC日付:2020年12月25日
  磁北と真北の間の角度の差。  
  磁北と真北の間の角度の差の方向。E/W  
N 測位モード N/A/D/E/M/S/ A=データ無効
V
ナビゲーション状態 S/C/U/V V:無効(RAIM 機能 OFF)
*0B チェックサム  

実際にamazonで入手可能の対象GPSモジュールを調査しました。

ブランド 参考型番 価格 ケーブル長 写真等
ThiEYE CV3-GPS \2999  
VANBAR A2000 \1499  
Superbat GA50-180-35MRA \1380 1.8m
Crosstour 5823920520 \1499  
VANBAR D164 \1300  
NZACE   \999  
YAZACO YG30 \1790  
AZDOME JPDOME-GS01 \1999  
AKEEYO AKY-X2-GPS \2088  


    設置】

本体(タイムサーバー)の設置】

19"ラックに設置し、同梱LANケーブルにてHUBに接続します。

GPSアンテナの設置】

GPSアンテナは屋内専用です。外壁近くの受診良好な窓用の箇所に貼り付けてください。
接続ケーブルの延長ですが、供給電圧が3.3Vと云う事も有り、延長先の電圧が3Vを切ってしまうと動作不安定になります。延長にはステレオタイプのケーブルが流用出来ます。
もともと車内で使用する様になっており、LVTTLのラインドライバがモジュール側に備わっているような気がします。

電源の投入】

GPSアンテナへの電源供給は本体から実行します。
本体への電源供給はUSBケーブル(タイプA-MicroB)及びUSB-ACアダプタを使用して実行します。
USBケーブルは添付のモノでは短い場合、2A供給可能なケーブルで置き換えてください。

    セットアップ】

    使用方法】

EtherNet/IPモジュール CJ1W-EIP21 の取説10章『時計情報自動調整機能』に記述があります。
CJの場合、このモジュールが設定済みのSNTP サーバから時間情報を取得し、自身が装着されているCPU ユニットの内部時計情報を更新することになります。
設定にはSysmacStudioが必要の様です。

  項目名 内容(デフォルト値)
@ SNTP サーバの時計情報 (取得しない)
SNTP サーバから時計情報を取得し、取得した時刻をCPU 内蔵時計に
反映するか、しないかを選択します。
取得するに変更します。
A ポートNo. (123)
時計情報を取得するSNTP サーバとの接続に使うポート番号を設定
します。変更しないでください。
B サーバ指定方法 (IP アドレス)
時計情報を取得するSNTP サーバを、どの方法で指定するかを選択
します。
IP アドレス/ホスト名 変更せず、IP アドレスとします。
C IP アドレス SNTP サーバのIP アドレスを設定します。
実際の環境に合わせて、NTPサーバのIPアドレスを入力します
D ホスト名 SNTP サーバのホスト名(ホストのドメイン名)を設定します。
何も入力しないでください。
E 指定時刻[時: 分: 秒] (00:00:00)
SNTP サーバにアクセスして、時計を合わせる時刻を設定します。
(設定範囲:00:00:00 〜 23:59:59)
F タイムアウト時間[秒] タイムアウトの検知時間を設定します。(設定範囲:0 〜 255 秒)
リモートホストから応答がないときは、ここで設定した時間の間隔で、
再送処理を4 回まで行います。
最短時間1秒に設定します。
G 時差調整 (+0)
SNTP サーバから取得した時間データに時差を足したものを、
CPU ユニットの時計情報に設定したい場合、設定します。
SNTP サーバはUTCですのでJSTにするため+9とします。

『日付と時刻』>『インターネット時刻』タブ>『設定の変更』>今すぐ更新 で実現出来ます。

上記方法はマニュアルでの設定になります。定期的な設定はタスクスケジューラで実現します。

コマンドスクリプトを実行して設定した方が確実かと思います。

schtasks /create /tn "TimeDame adjustment" /tr "w32tm /resync" /sc Daily /st 15:00

上記スクリプトは毎日15時に“w32tm /resync”というコマンドを実行するというスクリプトで、タスクスケジューラに『TimeDame adjustment』と云う名前で登録するというモノです。※名前は任意です。
/createは新規作成ですので、一旦作成したら/change に変更して更新登録とすべきかと思います。※/changeでは/sc使えません。時刻変更する場合は以下のように書けばよいようです。実行する際にログオンパスワードを要求されます。
※上書きも許されるようです。

schtasks /change /tn "TimeDame adjustment" /tr "w32tm /resync" /st 16:00

w32tm /resync”は既にインタネット時刻設定にntpサーバが登録済みである必要があります。
実際にこのコマンドが実行されるとコマンドプロンプトが起動します。気になる場合はScriptのラップを掛けて解決できるようです。

w32tmの/monitorオプションは、ローカル・コンピュータとリモート・コンピュータ(NTPサーバ)間の時刻差や上位NTPサーバの名前を確認できます。

w32tm /monitor /computers:192.168.0.199

タスクスケジューラ用のコマンドについてはいろいろなサイトに紹介記事がありますので割愛します。@ITの記事を参考にしています。
https://www.atmarkit.co.jp/ait/articles/1207/12/news146.html
NTPの仕組みについても@ITの以下のサイトを参考にしました。
https://www.atmarkit.co.jp/ait/articles/0508/12/news089.html

Raspberry Piハードウエア的にRTCが搭載されていないので、起動時に時刻同期するようにするのがリーズナブルです。
設定ファイル /etc/systemd/timesyncd.conf を編集することが一般的のようです。

NTP=192.168.0.199 LocalNTP


コロン表記】

時刻表記を『時分』で扱うため、動作しているのかどうか安易に示す方法としてコロン表記を点滅表記するようにしています。現状0.5秒点灯0.5秒消灯の点滅です。

このコロン表記ですが、諏訪精工舎が1970年に特許出願したモノだとのことです。1秒間隔での区切り点滅とのことです。出願後20年経っていますので、ここに問題は残っていないと思います。
※重田暁彦氏著『「雪見だいふく」はなぜ大ヒットしたのか 77の「特許」発想法』より


2Uのパネルの方が需要があるかな
サウンドハウスが扱っているパネルは安価で、アルミt1なので加工しやすいと考えています。
https://www.soundhouse.co.jp/products/detail/item/53980/


オブジェクト自体はベクター殿のストレージをお借りしています。

https://www.vector.co.jp/vpack/browse/person/an051501.html


製作物に戻る


免責事項

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

本ソフトウエアの著作権は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社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。