| GPS | ジュピター |
| CPU | Peitium/P55C 200MHz |
| OS | FreeBSD 4.4-RELEASE |
| ntp サーバ | ntpd 4.0.99b + jupiter バイナリフォーマット用ドライバ |
接続例 (GND 等は省略しています) ジュピター MAX233 DB9オス ストレートケーブル PC(D-Sub9) 6 SD1 --------------> T1IN T1OUT ----> RD 2 ---------------------------> 2 RD 7 RD1 <-------------- R1OUT R1IN <---- SD 3 <--------------------------- 3 SD 8 TM-1PPS --インバータ--> T2IN T2OUT ----> CD 1 ---------------------------> 1 CD
NMEA-0183 形式の出力は、PPS と同期していません。 PPS と同期しているのはバイナリフォーマットの Message 1108 だけで、 これは PPS の 400 msec 前に出力されます。 従って、PPS を利用するには、 バイナリフォーマットで使用する必要があります。 NMEA 形式からバイナリフォーマットにするには、
$PRWIIPRO,,RBIN\r\n (\r = CR, \n = LF)というコマンドを送ります。
しかし、バイナリフォーマットにしただけでは、 同期は保証されません。 バイナリフォーマットのデフォルトでは、
1108 を出力するときに、たまたま他のメッセージが出力中であると、 そのメッセージの出力が終了した後で 1108 を出力します。ということらしいのです。 1000 と 1002 は PPS とは無関係に内部クロックに同期して出力しますが、 1108 は測位開始した瞬間から PPS の 400msec 前に出そうとします。 従って、電源投入のタイミングによっては、 1108 が 1000, 1002 に「押されて」しまうことがあります。 これは、実際にデータロガーで確認できました。 (というか、時系列では、 そういう現象を確認したので SPA に問い合わせた、という順序でした。)
このため、message 1108 がきちんと PPS と同期するためには、 1108 以外のメッセージを全て停止する必要があります。 こんな重要な情報が、マニュアルや web のどこにも載ってないというのは困ります。
メッセージ停止方法も SPA から教えて頂きました。
●特定のメッセージを止めるには、 そのメッセージのヘッダを組み立て DisconnectBit を ON(1) にします。例えば、メッセージ1000を止めたい場合は、
WORD1;SOH,DEL 0x81FF WORD2;ID=1000 0x03E8 WORD3;DataCount 0x0000 WORD4;D=1 0x8000 WORD5;CheckSum 0xFA19というヘッダだけのデータを送信します。
そこで、アンテナを屋上に移動しました。
屋上からはほぼ全天が見渡せます。
その結果は、測位不可能 0 回という満足できる値が得られました。
message 1108 は「次の PPS の時刻」を示しているのですが、 このドライバでは 「PPS の直後の message 1108 が PPS の時刻を示す」 というつくりになっているので、ntp.conf の fudge には time -1 を指定する必要があります。
当方ではジュピターの精度そのものは検証できません。 ジュピターの PPS に対する NTP サーバの精度は、 2001年12月23日 では、標準偏差 1.886 マイクロ秒となりました。
日周期が見られますが、 これは NTP サーバの設置してある部屋の温度に影響を受けていると推測されます。 時々、人が入って暖房をいれたりすると、 こんなふうに なってしまいます。
今後の予定はアンテナを延長し、サーバを専用の部屋に移動するつもりです。 そちらは急激な気温変化はないので、より安定した運用を期待できます。
Nov 8 20:24:44 web6 ntpd[6054]: time reset 1.000517 s Nov 9 02:42:37 web6 ntpd[6054]: time reset 0.999996 s Nov 9 03:03:01 web6 ntpd[6054]: time reset -0.607228 s Nov 11 01:24:34 web6 ntpd[6054]: time reset -0.999998 s Nov 11 08:29:10 web6 ntpd[6054]: time reset 1.000009 s Nov 11 08:49:38 web6 ntpd[6054]: time reset -0.611232 s Nov 12 07:46:12 web6 ntpd[6054]: time reset -0.350546 sのように、一日ごとに 1 秒進んだり戻ったりする NTP サーバになってしまいました。
Nov 14 17:45:52 web6 ntpd[91762]: time reset 1.000002 s Nov 14 18:06:24 web6 ntpd[91762]: time reset -0.613810 sのように、相変わらず進んだり戻ったりしてしまいました。 デフォルトでは、1 秒ごとに message 1000, 1002 が出力され、 ときどき 1003, 1135 も出力されます。 PPS に同期しているはずの 1108 は、 それらに阻まれて遅れて送信されてしまいます。 PPS 出力から 1108 出力までのディレイを測定すると、 デフォルトでは下図のようになってしまい、 安定した NTP サーバにはなりませんでした。 (縦軸が PPS - 1108 の時間(秒)で、横軸は 1 目盛 10000 秒です。)
message 1108 以外のメッセージを停止して同様に測定すると、
下図が得られました。
これを見ると 1108 も完全に PPS に同期しているのではなく、
出力タイミングは内部クロックに依存している様子が伺えます。
ただし、PPS の 0.4 秒前から大きくずれないように、
時々タイミングを調整しているようです。
message 1108 以外を停止して、
SD1 と PPS の波形をデータロガーで記録しました。
これは、電源投入後測位開始する瞬間をとらえています。(2000msec 付近)