UPD:サーバーはstratum1.net Web face: www.stratum1.net で利用可能です 。
ハブに関する同様のトピックはすでに実行されていますが、トピックはもっと詳細に開示されるべきだと思います。著者は多くの重要な詳細を省略しました。
1.ちょっとした理論
GPS World誌によると、世界中で10億台以上のGPS受信機が使用されており、その90%以上が正確な時間信号を受信するためだけに使用されています。 [19]
独自の3次元座標を決定するために、GPS受信機は4つの衛星までの距離を計算します。 この距離は、衛星からの無線信号の移動時間を測定することにより計算されます。 なぜなら 光の速度は3×10 8 m / sであり、信号通過時間は非常に短く、計算には衛星と受信機のクロックの非常に正確な同期が必要です。 したがって、各GPS衛星には1ナノ秒/日の精度の原子時計が装備されており、受信機は約50ナノ秒の時間精度を提供します[17]。 時間を決定するには、受信機が1つの衛星( tanenn )から信号を受信するだけで十分です。
したがって、GPS受信機から正確な時刻を取得できます。 結局のところ、コンピューターの時計は、スイッチ、IPカメラなどは言うまでもなく、特に正確ではありません。 しかし、たとえばpool.ntp.orgとNTPプロトコルを使用して同期できる場合、なぜGPSが必要なのでしょうか?
- システムにインターネットアクセスがない場合。
- 時間の高精度が必要な場合-マイクロ秒(マイクロ秒)の単位。
- 信頼できる時間ソースから分散システムを同期する必要がある場合。
- ただ楽しみのために:)
2. GPSレシーバー
ほとんどすべてのGPS受信機を使用できます-主なことは、標準のNMEA 0183プロトコルをサポートしていることです.NMEAプロトコルは、RS-232などのシリアルインターフェイスを介して単純なASCII文字列でGPS情報を送信するために使用されます。 NMEAは地理座標とともに、通常は1秒に1回の正確な時間も送信します。
従来のGPS受信機から受信した時間の精度は最大数ミリ秒(ms)になる可能性がありますが、受信機のモデルに大きく依存します:通常、NMEAメッセージの送信は受信機の優先事項ではないため、精度はあまり良くない場合があります。
さらに高い精度(最大数マイクロ秒)を提供する場合は、 PPS ( パルス/秒 )信号を生成できるGPS受信機を使用する必要があります。 PPSパルスは非常に高い精度で毎秒1回繰り返され、ntpdで読み取ることができます。
以下では、両方のオプションを検討します:最初に、通常のNMEAおよびより詳細にPPS。
3. GPSから時間を取得する(PPSなし)
3.1 GPSとntpdの構成
Windows管理者は、Windows用のntpdポートをインストールし、 この記事の指示に従ってください。
LinuxとFreeBSDの場合、手順は同じです。
- GPS受信機をサーバーのCOMポートに接続します(USBアダプターも機能するはずです)。
- デバイスへのシンボリックリンク/ dev / gpsXを作成します(たとえば、/ dev / cuau0-> / dev / gps0があります)。
- ntp.confに次の行を追加します
サーバー127.127.20.0モード0はiburst minpoll 4 maxpoll 6を優先します
127.127.20行目。 0は、ローカルタイムソース、 ドライバー20 (NMEA汎用)、device / dev / gps 0を使用していることを意味します 。
デバイスが4800 bps以外の速度で動作する場合、modeコマンドを使用して速度を設定する必要があります:0-4800 bps(デフォルトでは指定できません)、16-9600、32-19200など。
iburst-初期化を高速化します。
minpoll n-2 n秒の最小ポーリング間隔、最小4、つまり 16秒;
maxpoll n-2 n秒の最大ポーリング間隔、最大17、約1日半。
prefer-優先サーバー。
詳細については、優れたntpdのドキュメントを参照してください。 。
- サーバーを再起動します。 ntpq -pを実行します。 リストにはGPS_NMEA(0)が含まれているはずです...これが発生しなかった場合は、項目5「考えられる問題」を参照してください。
3.2検証と修正
問題は、受信者が時間データを遅れて送信できることです。 また、NMEAメッセージの送信の遅延を忘れないでください。 この遅延を調整するには、ntp.confにpreferパラメーターを使用して信頼性の高いNTPサーバーstratum-1を追加し、ntpdを再起動します。
検証のために、ntpq -pコマンドを使用する必要があります。 問題の形式:
各行には、NTPサーバーであるかローカルタイムソースであるかに関係なく、タイムソースに関する情報が含まれています。
行の最初の文字は選択ステータスです: * -選択されたソース、 + -私が理解するように、選択の候補-システムは、メインソースに障害が発生した場合にシステムに切り替わります、 o -PPSソース、スペース-動作しないソース、 -xなど-「拒否された」(信頼できない)ソース。
次に来る:
リモート-ホスト名またはIPアドレス。
refid-ソースID(ソースが同期されるドライバー名またはサーバーアドレス);
stratum:プライマリタイムソース(GPS)の場合は0、それに接続されているサーバーの場合は1、stratum 1と同期するサーバーの場合は2など。
t-タイプ:l-ローカルクロック、u-ネットワークノードなど。
when-最後の送信からの時間。
poll-ポーリング間隔ログ2秒、つまり poll = 4の場合、サーバーは2 4 = 16秒ごとにソースをポーリングします。
reachは、最後の8回の送信試行の成功を示す8進数です。 たとえば、0-1回の成功ではなく、377 8 = 11111111 2-すべての試行が成功しました。 ntpdの起動後、すべてが正常である場合、ソースは値が0、1、3、7、17、37、77、177、377に達することを渡します。
遅延-パケット通過時間。
offset-ソースの時刻とローカルの時刻の差。
ジッタ-ジッタ、つまりパケット通過時間の分散(分散)。
何よりも、選択、リーチ、オフセット、ジッターのステータスのシンボルに興味があります。 リーチは377に等しく、オフセットとジッタはできるだけ小さくする必要があります。
ntpq -pコマンドを実行します。 NTPサーバーのオフセットが十分に低くなるまで待ちます。
ポーリングが遅延オフセットジッタに達するときのリモートrefid st t ================================================== ============================== * mail.mobatime.r .DTS。 1 u 5 377 1 14.894 -3.198 0.490 xGPS_NMEA(0).GPS。 0 l 2 377 7 0.000 -955.90 31.554
選択したntpdサーバーには*のマークが付いていますが、GPS受信機にはbad(x)のマークが付いています。 オフセットGPS受信機は約-956ミリ秒です。 どうやら、前の秒に関する情報が送信されます。 この遅延を修正するには、ラインサーバー127.127.20.0の下で...ラインを追加する必要があります。
ファッジ127.127.20.0 time2 0.956
GPSを優先サーバーにすることができます。 サーバーを再起動すると、GPS_NMEA(0)の前に*が表示されます。
4. PPS信号を使用してGPSから時間を取得する
4.1 Garmin 18x LVCレシーバーの接続
私自身は、PPSパルス精度が±1μsのGarmin 18x LVCレシーバーを選択しました。 これはOEMレシーバーであり、美しい画面はありませんが、独自のアプリケーションで使用すると便利です。
この受信機はデータをCOMポートに送信し、5V、90mAの電力を必要とするため、USBから電力を供給するのが便利です。 DB9メスコネクタまたは半分にカットされたCOMケーブル、および電源用にカットされたUSBケーブルが必要です。 ネイティブレシーバーコネクタも切断する必要があります-これは保証に影響しません。 接続図:
黄色のワイヤ-ピン1(PPS)付き
白いワイヤ-ピン2(伝送)付き
緑色のワイヤ-ピン3(受信)付き
両方の黒いワイヤ-黒いUSBケーブルとピン5(グランド)
赤いワイヤー-赤いUSBケーブル(+ 5V)付き。
接点をはんだ付けすることをお勧めします。 単純なひねりは機能しない場合があります(ただし、チェックしませんでした)。
記事[2]および[3]に触発されて、さらに進んで、配線図にヒューズ、「電源」LED、「PPS」LED、およびLED用の抵抗器を追加しました。 職人電子工学のエンジニアは、COMケーブルのプラグにすべてを収めることができるかもしれませんが、私は完全な箱を手に入れました。
既製のブレッドボード、DB-9およびUSBタイプBソケット、ネジ留め式端子台(ネイティブBM06B-SRSS-TBTまたはSM06B-SRSS-TBコネクタが見つかりませんでした)、1Aヒューズおよびホルダーを購入しました。 どうすればこれをすべてはんだ付けでき、Epoxyはコネクタをスタックしました:)
原則として、これは必要ありません。 ここで行うように、GPS、COM、およびUSBからのワイヤを接続するだけです 。
4.2 Garmin 18x LVCの構成
パフォーマンスと信頼性を向上させるには、受信機を調整することをお勧めします。 これは、端末からコマンドを送信するか( マニュアルを参照)、WindowsユーティリティSNSRCFGを使用して実行できます。 私は2番目の方法を選びました。
受信機に接続します:
通信→セットアップ:COMポートのインストール、ボーレート:手動、4800。
通信→接続
プログラムは現在の構成をロードする必要があります。
カスタマイズ:
構成→センサー構成
PPSがオンになっていることを確認し、パルス長を200ミリ秒に増やす必要があります。
DGPSを無効にすることもできます-使用せず、Fix Mode = 2Dに設定します-理論的には、受信機は4つの衛星ではなく3つの可視衛星で動作します。 ただし、これら2つのオプションが何かに影響することを保証することはできません。
NMEAメッセージを選択します。
構成→NMEA文の選択
NTPdはGPRMCおよびGPGGAメッセージを理解します。 データ転送時間を短縮するために、GPGGAのみを残しました。
4.3 FreeBSDとntpdの設定
FreeBSDでのPPSのサポートはかなり前から存在しているため、PPSは設定が簡単で、より正確です。 Linuxユーザーは、Linux 2.6でNTP stratum-0としてGarmin GPS 18 LVCを使用する記事を参照できます。 以下に書かれた設定は、FreeBSDに適用されます。
PPSサポートを有効にするには、次のオプションを使用してシステムカーネルを再構築する必要があります。
オプションPPS_SYNC
NTPサーバーは既にシステムに存在しますが、更新する必要はありません。 FreeBSDの場合、ポートからこれを行います。
cd / usr / ports / net / ntp インストールをクリーンにする
次の行をrc.confに追加する必要があります。
ntpd_enable = "YES" ntpd_program = "/ usr / local / bin / ntpd"
ntpd_programは、ポートからのntpdのインストールパスを指します。
/ dev / gpsXおよび/ dev / ppsXデバイスへのシンボリックリンクを作成します(たとえば、/ dev / cuau0-> / dev / gps0があります)。 lnコマンドを使用するか、適切な行を/etc/devfs.confに追加できます。
リンクcuau0 gps0 リンクcuau0 pps0
NTPのドキュメントでは、GPSがクロックを正確に実行するためにPPSパルスのみを受信し、別のstratum 1サーバーから時刻自体を受信することをお勧めします。例えば:
サーバーntp.mobatime.ruはiburst maxpoll 9を好みます サーバーntp1.vniiftri.ru iburst maxpoll 9 サーバーntp2.vniiftri.ru iburst maxpoll 9 サーバー127.127.22.0 minpoll 4 ファッジ127.127.22.0 flag3 1
ドライバー22はPPSを担当します。 flag3はカーネルディシプリンをオンにします 。 ntpdのドキュメントには 、カーネルの規律を含める必要がないと書かれています:ntpdは、minpoll 4を設定するだけでより正確に機能します。しかし、逆に機能します。flag3では、クロックがより正確に動作します。
別の方法で行くこともできます:GPS時間とPPS信号の両方を受信します:
サーバー127.127.20.0はminpoll 4を優先します ファッジ127.127.20.0 flag1 1 flag3 1
flag1にはPPS、flag3-カーネル規律が含まれます。
これにより、インターネットを使用せずに時間を稼ぐことができますが、この場合、ほとんどの場合、修正が必要になります(3.2項と同様)。
変更を行った後、ntpdを再起動します。
/etc/rc.d/ntpd restart
ntpq -pコマンドを実行します(詳細については、セクション3.2を参照)。 PPS信号のみを取得する場合、出力は次のようになります。
ポーリングが遅延オフセットジッタに達するときのリモートrefid st t ================================================== ============================== xnut.rsuitb.ru 5.89.176.137 3 u 21 64377 2.074 41.522 5.869 + mx.kr-pro.ru 62.117.76.138 2 u 34 64377 4.167 0.336 0.423 + wooster.rojer.p 195.54.192.55 3 u 25 64377 70.609 9.523 0.262 x193.124.4.177 7.123.225.33 3 u 21 64377 2.133 56.525 9.041 ntp1.vniiftri.r .INIT。 16 u-512 0 0.000 0.000 0.000 xntp2.vniiftri.r .PPS。 1 u 39 64377 73.585 -14.117 0.189 * mail.mobatime.r .DTS。 1 u 17 64377 15.223 0.147 0.843 oPPS(0).PPS。 0 l 5 16377 0.000 -0.001 0.002
PPS(0)が「o」になる前に、数分以内に到達して377に到達します。残りのサーバーは時間を取得するために使用されます。
GPSからNMEA情報も受信する場合は、
ポーリングが遅延オフセットジッタに達するときのリモートrefid st t ================================================== ============================== * GPS_NMEA(0).GPS。 0 l 11 16 17 0.000 -9.795 14.537
GPS_NMEA(0)の前に*を付ける必要があります。
PPSのステータスを確認することは不要です。 これは、ntpdc -c kerninfoまたはntptimeコマンドを使用して実行できます。 ntptimeは、もう少し詳細な情報を提供します。
ntptime ntp_gettime()はコード0(OK)を返します 時間d24065e8.9067dfac水、2011年10月12日23:15:52.564、(。564085545)、 最大エラー4739 us、推定エラー1 us、TAIオフセット0 ntp_adjtime()はコード0(OK)を返します モード0x0()、 オフセット2.004 us、周波数-28.979 ppm、間隔256秒、 最大エラー4739 us、推定エラー1 us、 ステータス0x2107(PLL、PPSFREQ、PPSTIME、PPSSIGNAL、NANO)、 時定数4、精度0.001 us、許容誤差496 ppm、 pps周波数-28.979 ppm、安定性0.019 ppm、ジッタ1.434 us、 間隔313、ジッターが195を超え、安定性が0を超え、エラー1。
あなたが見る必要があるもの:
ntp_gettime()およびntp_adjtime()は「OK」を返す必要があります。
ステータスにはフラグPPSFREQ、PPSTIME、PPSSIGNALがあり、PPSWANDER、PPSJITTER、PPSERRORはありません。
ジッター超過は、到着が間に合わなかったパルスの数を示します。 ジッタ超過値が大きくなりすぎてPPSJITTERフラグがステータスに表示される場合、心配する価値があります。
間隔-キャリブレーション間隔の数。 間隔秒ごとに1回増加します (この例では256秒)
安定性の超過-時間補正の数が多すぎる、0-すべてが正常です。
エラー-まったく到着しなかった、または適切なタイミングで到着しなかったPPSパルスの数は、動作中に増加することはありません。
安定性-PPSソースとサーバークロックの動作が安定しないほど安定します。 0.1未満でなければなりません。
ジッタ-PPSパルスのジッタ 。 数マイクロ秒(us)あるはずです。
5.考えられる問題とデバッグ
5.1パニックにならないでください!
GPSレシーバーは、電源を入れてから位置を確定するまでに時間がかかることに注意してください。古いモデルでは最大30分、Garmin 18xでは45秒です。 この時間は、受信機がオフになっている時間( tanenn )に依存します。 ntpdもクロックを修正するのに時間がかかります。 私の観察によると:受信機を「見る」10〜20秒、相殺する20〜30分は最適値まで減少しました。 操作の数分後にリーチが377に設定され、オフセットが減少(モジュロ)されている場合、すべてが正常です。
5.2 ntpdは受信者を認識しません
ntpdがレシーバーを認識しない場合:ntpq -pのリーチがゼロでフリーズする場合、レシーバーのサーバーへの接続を慎重に確認する必要があります。 ntpdを停止し、ターミナルのCOMポートを開きます。 FreeBSDの場合:
cu -l / dev / gps0 -s 4800 接続済み $ GPGGA、160042.5545.7890、N、03722.6113、E、1,08,0.9、188.3、M、13.3、M、* 47 $ GPGGA、160043.5545.7890、N、03722.6114、E、1.08.0.9.188.3、M、13.3、M 、、 * 41 | hhmmss | ---緯度-|-経度--- | ^^ |衛星の数 ...
/ dev / gps0はデバイスファイル、4800はデータ転送速度です。
受信機が正しく接続されている場合、NMEAメッセージは「振りかける」必要があります。 受信機が衛星を「見ている」ことを確認してください。 GPGGAメッセージでは、衛星の数は4以上でなければならず、1つはその数の前になければなりません。 GPRMCメッセージを有効にしている場合は、時間が経過すると「A」記号が表示されます。
cuを終了するには、「Enter」、「〜」、「。」の順に押します。
NMEAメッセージが受信機に衛星が見えないことを示している場合、それをカバレッジエリアに移動する必要があります。 受信機が空全体を見ることができるのが最善です。 私のガーミンは屋根に設置することもできますが、実験を通して、私は彼が24時間衛星を見る窓の場所にそれを貼り付けました。
ntpdログを調べます。 たぶん、サーバーの最新バージョンをインストールする必要があります。
NMEAメッセージがまったく届かない場合は、受信側からのデータレートが予想されるntpdと一致していることを確認してください。 COMポートとレシーバーが接続されていることを確認します。
ポートからレシーバーまでの合計ケーブル長が5 mを超えないようにしてください。そうしないと、干渉を防ぐために信号を送信するための差動ラインを気にし、作成する必要があります。 GPSケーブルのシールドをUSBケーブルのシールドに接続することをお勧めします。
5.3 ntpdはPPS信号を認識しません
ここでも、たとえば電圧計またはオシロスコープを使用して、接続を確認します。 私はDSO Nano Pocket Pocket Oscilloscopeを使用しています。 PPS信号は次のようになります。
RealTermを使用すると便利です。NMEAメッセージとPPS信号の両方をDCD回線に毎秒1回表示します。
USB-COMアダプターを使用しないでください。それらを経由するPPS信号は、遅れたり遅れたりすることはありません。 原則として、COMポートはマザーボードに常に存在し、ケースの壁には表示されない場合があります。
5.4大きなオフセット/ジッタ
3.2で説明されているように、受信時間を調整してください。 受信機の設定により、$ GPRMC、$ GPGLL、$ GPGGA、$ GPZDA、または$ GPZDGのいずれかを除くすべてのNMEAメッセージを無効にできる場合。 PPSのみを使用する場合、すべてのメッセージを無効にできます。
COMポートのバッファリングをオフにしてみてください。 /boot/device.hintsにインストールします。
hint.sio.0.flags = "0x2"
GPS受信機の新しいファームウェアバージョンがあるかどうかを確認します。 ( Garmin 18x LVC Firmwareダウンロード )
明らかなアイデアは、データ転送速度を上げることです。 しかし、 ntpdのドキュメントによると、これは役に立ちません。 速度は4800のままにしておくとよいでしょう。
OSシステムタイマーを変更してみてください。 FreeBSDでは、/ etc / sysctl.confに記述できます。
kern.timecounter.hardware = i8254
サーバールームのエアコンが絶えずオンとオフになり始めたとき、私のオフセットは「ジャンプ」し始めました。
温度が安定しているときのオフセットPPSと温度のグラフ:
エアコンが故障した場合:
グラフは、オフセットが部屋の気温に依存することを示しています。 これは、明らかにサーバー上のタイマーの欠陥によるものです。 この問題を解決する方法については、 こことここで説明します 。
「ハード」な方法は、マザーボードの発電機を温度補償(TXCO)に交換することです。 しかし、これはマイクロエレクトロニクスの達人とはんだごての選択肢です。
6. NTPサーバーを使用するための準備
サーバーをネットワークに公開する前に、 アクセス権の設定 とリクエスト数の制限に関するドキュメントのセクションをお読みください。
ローカルネットワーク用のNTPサーバーを作成する場合は、DHCP設定にサーバーアドレスを追加できます。 ただし、このオプションはWindowsクライアントでは動作しないと思われますが、* nix dchpclientでは、各マシンで設定する必要があります。
多くの場合、単純にtime.windows.com DNSをローカルNTPサーバーに置き換えます:)これで、すべてのWindowsコンピューターがサーバー上で屠殺されます。
クライアントのリストは、ntpdc -c monlistコマンドで表示できます。
また、 Zabbix用の小さなスクリプトを作成し、リーチ/オフセット/ジッターPPSと選択したタイムサーバーを追跡しました。 スクリプトの実行をzabbix_agentd.confに追加する必要があります。
UserParameter = ntp.pps_jitter、/ usr / local / bin / php / usr / local / share / zabbix / ntp_zabbix.php ppsジッタ UserParameter = ntp.pps_offset、/ usr / local / bin / php / usr / local / share / zabbix / ntp_zabbix.php ppsオフセット UserParameter = ntp.pps_reach、/ usr / local / bin / php /usr/local/share/zabbix/ntp_zabbix.php pps reach UserParameter = ntp.source_jitter、/ usr / local / bin / php / usr / local / share / zabbix / ntp_zabbix.phpソースジッタ UserParameter = ntp.source_offset、/ usr / local / bin / php / usr / local / share / zabbix / ntp_zabbix.phpソースオフセット UserParameter = ntp.source_reach、/ usr / local / bin / php / usr / local / share / zabbix / ntp_zabbix.phpソースリーチ
エージェントを再起動します。 サーバー上で、NTPサーバー用のこれらのアイテムをそれぞれ追加する必要があります。 これで、トリガーとグラフを構成できます。
7.時刻同期の他の方法
NMEAに加えて、ntpdはより多くのエキゾチックなデバイスをサポートしています( 完全なリストを参照)。
まず第一に、無線信号でクロックを同期する機能に注目する価値があります。 たとえば、 RWMサービスはロシアで運用されており、DCF77ステーションはドイツのフランクフルトから放送されています。 DCF77はロシアのヨーロッパ地域でよく見受けられます(モスクワで自信を持って歓迎されています)。 DCF77とntpdを友達にするのは簡単です。 記事を参照してください 。 このようなソリューションの精度は低くなりますが、GPSオプションよりも数倍安くなります。アンテナを購入するだけで、無線技術の知識は必要ありません。
職人は、1時間の終わりにマヤックラジオのパルスによって同期を調整できます。 最後の6番目のパルスの長さは、現在の時間によって異なります。 しかし、この方法は、インターネット上の通常の時刻同期よりも明らかに精度が劣ります。
正確な時刻は、携帯電話会社( hellt )から取得できます。 この「機能」はNITZと呼ばれます。 ただし、すべてのオペレーターやすべてのGSMデバイスがサポートしているわけではありません。 SIM900チップ上のGSMモデムSiemens MC55およびArduino GPRS-shieldをチェックしました-これらのデバイスにはそのようなATコマンドはありません。
GPSまたはGLONASSセンサーを備えた既製のNTPサーバーもありますが、もちろん、はるかに高価です。
動作中のロシアの公共サーバーのリスト1
ntp1.vniiftri.ru
ntp2.vniiftri.ru
ntp4.vniiftri.ru
ntp.mobatime.ru
ntp0.ntp-servers.net
ntp1.ntp-servers.net
ntp2.ntp-servers.net
ntp0.zenon.net
gps-time.prao.psn.ru
ntp.ix.ru
文学
「ユーティリティ」でソート:
- Ntpdドキュメント
- GPS 18 LVCデバイスに基づいたFreeBSD NTPサーバーの追加
- Linux 2.6でNTP stratum-0としてGarmin GPS 18 LVCを使用する
- FreeBSD 7.0を使用したNTP基準クロック
- Stratum 1 NTP、FreeBSD 8.0上のGarmin GPS 18 LVC ( ミラー )
- Garmin GPSとの時間同期
- PPS同期(NTP FAQ)
- Stratumワンタイムサーバー
- 教授 David R. Andersen:NTP温度補正
- NTP温度補正
- PC Gnu / Linuxおよびfreebsdを使用したNetwork Time Protocolサーバー
- LinuxPPS NTPDサポート
- カーネルの規律
- コンピューターの時計の時刻が間違っているのはなぜですか? (FreeBSD FAQ)
- NTP Precision Time System
- 最後のNetwork Time Protocol(NTP)は、RFCおよびメーリングリストへのリンクを提供します。
- GPSの背後にある5つのアイデア
- DFC77レシーバー
- 安価なGPS妨害装置の危険性は何ですか