CANDY殿のページにてGarmin社GPS 15Lは閏秒対応らしい。
http://www.bsddiary.net/doc/ntpd-leapseconds.html
手持ちのGPSではどうなっていたのか気になったので調べてみた。
Logが残っていたのは、全くの偶然だった。
秋葉原aitendo で売ってたGPS GM-316(SiRF GSC3f/LPx 7989)には、PPS出力があるので購入したが、
パルス幅が1us固定なのでNTPの時刻源として扱うには別回路で500ms位にしてやらんとならん。
この回路を検討中で、それ以外の電源やシリアルレベルコンバータ等の回路は完成して
足れ流れ状態のNMEA出力が偶然Logに残っていたのだ。
# 非常に小型、外部ANT端子あり、3.3V系、PPS出力あり、高感度なのでとても気に入っている。
このGPSから出力されるNMEAメッセージで、時刻が含まれているのはGPZDA,GPGGA,GPGLLの3つである。
GPZDAには年月日も含まれている。また、毎秒GPZDAから順番に出力されている。
今回の閏秒は、『日本時刻で平成21年(2009年)1月1日(木)に午前8時59分59秒と午前9時00分00秒の間に「8時59分60秒」を挿入します。』なので、
のいずれかになる。と思っていたのだが・・・・
% grep ZDA GPS-316.log|sort | uniq -d $GPZDA,000000.000,02,01,2009,, $GPZDA,235945.000,31,12,2008,,
なんじゃこりゃ〜〜〜〜〜!!(大外れ!!)
閏秒らしいのは、"GPZDA,000000.000,02,01,2009"だが、これは1月2日である。(バグ?1日ずれた閏秒??)
"235945.000,31,12,2008"に至っては意味が解らん。(結果的に2秒ずらした事になるの???)
詳細を見てみよう。
出力をみるとGPGGA,GPGLLの時刻以外が異なっており、何らかの誤操作/誤動作による行コピー等ではな事がわかる。
# 緯度、経度は一部伏せ文字にしている。
- 235945.000,31,12,2008付近[23:59:44-23:59:47]
(1)正常 $GPZDA,235944.000,31,12,2008,, $GPGGA,235944.000,35xx.xx78,N,139yy.yy34,E,2,08,1.7,-9.5,M,39.2,M,2.8,0000 $GPGLL,35xx.xx78,N,139yy.yy34,E,235944.000,A,D (2)正常 $GPZDA,235945.000,31,12,2008,, $GPGGA,235945.000,35xx.xx79,N,139yy.yy31,E,2,08,1.7,-11.3,M,39.2,M,3.8,0000 $GPGLL,35xx.xx79,N,139yy.yy31,E,235945.000,A,D (3)異常1(ZDAが前秒と同じ時刻[235945.000]で、GPGGA,GPGLLと異なる) $GPZDA,235945.000,31,12,2008,, $GPGGA,235946.000,35xx.xx81,N,139yy.yy28,E,2,08,1.7,-13.0,M,39.2,M,0.8,0000 $GPGLL,35xx.xx81,N,139yy.yy28,E,235946.000,A,D (4)異常2(GGA,GLLが前秒と同じ時刻[235946.000]) $GPZDA,235946.000,31,12,2008,, $GPGGA,235946.000,35xx.xx83,N,139yy.yy24,E,2,07,1.8,-16.2,M,39.2,M,1.8,0000 $GPGLL,35xx.xx83,N,139yy.yy24,E,235946.000,A,D (5)正常 $GPZDA,235947.000,31,12,2008,, $GPGGA,235947.000,35xx.xx76,N,139yy.yy26,E,2,07,1.8,-13.0,M,39.2,M,2.8,0000 $GPGLL,35xx.xx76,N,139yy.yy26,E,235947.000,A,D
- 000000.000,02,01,2009付近[2009/01/01 23:59:59- 2009/01/02 00:00:02]
(1)正常 $GPZDA,235959.000,01,01,2009,, $GPGGA,235959.000,35xx.xx15,N,139yy.yy47,E,2,08,1.7,-132.6,M,39.2,M,0.8,0000 $GPGLL,35xx.xx15,N,139yy.yy47,E,235959.000,A,D (2)正常 $GPZDA,000000.000,02,01,2009,, $GPGGA,000000.000,35xx.xx09,N,139yy.yy51,E,2,08,1.7,-129.5,M,39.2,M,0.8,0000 $GPGLL,35xx.xx09,N,139yy.yy51,E,000000.000,A,D (3)異常1(ZDAが前秒と同じ時刻[000000.000]で、GPGGA,GPGLLと異なる) $GPZDA,000000.000,02,01,2009,, $GPGGA,000001.000,35xx.xx05,N,139yy.yy54,E,2,07,1.8,-126.5,M,39.2,M,1.8,0000 $GPGLL,35xx.xx05,N,139yy.yy54,E,000001.000,A,D (4)異常2(GGA,GLLが前秒と同じ時刻[000001.000]) $GPZDA,000001.000,02,01,2009,, $GPGGA,000001.000,35xx.xx02,N,139yy.yy52,E,2,08,1.7,-127.0,M,39.2,M,2.8,0000 $GPGLL,35xx.xx02,N,139yy.yy52,E,000001.000,A,D (5)正常 $GPZDA,000002.000,02,01,2009,, $GPGGA,000002.000,35xx.xx98,N,139yy.yy52,E,2,08,1.7,-126.0,M,39.2,M,0.8,0000 $GPGLL,35xx.xx98,N,139yy.yy52,E,000002.000,A,D
更に、uniqでは重複行(=閏秒による1秒遅れ)は発見できても欠落(=閏秒による1秒進め)は発見できないので簡易なスクリプトで調査する。
% cat ./GPS-316.log | grep GPZDA | cut -d \, -f 2 | \ gawk ' \ { C= $1 }\ { A= B - C }\ { printf " %d : %d \n",C,A } \ {B=C} \ '
この出力から、grep -ve '-1' -ve '-41' --ve'-4041' でフィルタすると、1日の変わり目以外はでないはず。
だけど、『 175946 : -2 』こんなのが出て来た。
つまり、GPZDAの時刻が2秒ずれた事があった様だ。(閏秒で時刻を進める時の動作と同じ)
- 175945.000,01,01,2009付近[1秒進んだとき]
(1)正常 $GPZDA,175943.000,01,01,2009,, $GPGGA,175943.000,35xx.xx50,N,139yy.yy31,E,2,08,1.2,55.5,M,39.2,M,2.8,0000 $GPGLL,35xx.xx50,N,139yy.yy31,E,175943.000,A,D (2)正常 $GPZDA,175944.000,01,01,2009,, $GPGGA,175944.000,35xx.xx49,N,139yy.yy32,E,2,08,1.2,55.3,M,39.2,M,3.8,0000 $GPGLL,35xx.xx49,N,139yy.yy32,E,175944.000,A,D (3)異常1(GPZDAが前秒より2秒進んでいる) $GPZDA,175946.000,01,01,2009,, $GPGGA,175945.000,35xx.xx48,N,139yy.yy33,E,2,08,1.2,55.4,M,39.2,M,0.8,0000 $GPGLL,35xx.xx48,N,139yy.yy33,E,175945.000,A,D (4)異常2(GPGGA,GPGLLが前秒より2秒進んでいる) $GPZDA,175947.000,01,01,2009,, $GPGGA,175947.000,35xx.xx47,N,139yy.yy34,E,2,08,1.2,55.8,M,39.2,M,0.8,0000 $GPGLL,35xx.xx47,N,139yy.yy34,E,175947.000,A,D (5)正常 $GPZDA,175948.000,01,01,2009,, $GPGGA,175948.000,35xx.xx45,N,139yy.yy35,E,2,08,1.2,56.3,M,39.2,M,0.8,0000 $GPGLL,35xx.xx45,N,139yy.yy35,E,175948.000,A,D
GPS GM-316(SiRF GSC3f/LPx 7989)についてまとめ。
(上記を閏秒の動作とした時)
閏秒方向 | 観測された時刻 | メモ |
挿入 | 235945.000,31,12,2008 | 調整の意図不明 |
削除 | 175945.000,01,01,2009 | 調整の意味不明。本来動作とは逆の動作(削除) |
挿入 | 000000.000,02,01,2009 | 調整日が1日ずれてる。バグか?? |
GM-316は閏秒の扱い方に関しては、『ダメダメなGPS』って事になりそうだ。
# でもこの感度の良さはとても気に入っている。
それよりも、我が家のNTPの源となっている、GARMIN GPS16-HVS,GPS18-LVCは閏秒の時にどんな出力をするのか非常に気になる。