低価格GPSレシーバを使ったシステムの時間合わせプログラム

すずきひろのぶ
hironobu @ h2np . net
Hironobu Home Network Project Presents

1998/Aug/14 (第1版), 1999/Jan/26 (一般公開版), 1999/Aug/7 (RedHat対応版)
1999/Aug/28 (リアルタイム対応版), 1999/Dec/12 (ちょっと整理した版)
2000/Jan/05 Y2K対応版リリース
2003/Aug/15 終了のお知らせ

[2003/Aug/15] gpstadjプロジェクトは終了しました --- 1998年8月から使い続けたgpstadjは 2003年6月中旬を持って、利用するのを止めました。第一に新しいオフィスで はGPSを設置する場所を探すのが難しいこと、第二に国内ISPがNTPを完備する ようになり、さらにはFTTH時代(筆者はBフレッツを使っています)となった ため、このような安価なGPS時間同期システムの必要性があまりなくなったた めです。

むかし、 こんなことをやっていたという記録のために、このWebページは残しておきます。


[2001Sep17] 松下電工の「 タイミング同期用GPS受信機内蔵アンテナ 」が欲しい!!

松下電工では約30,000円という低価格の時刻同期専用GPSを開発、販売してい ます。これはOEMのみの製品で一般向けに外販しておらず松下電工から直接入 手することは不可能となっております。OEM先に関しては不明です。この時刻 同期専用GPSの入手に関する情報がありましたら、gpstadj@h2np.net まで御一報下されば幸いです。


さらに性能に関して実験した結果(2000年6月20日版) からは十分な性能が発揮されていることがわかります。

  • ソースコードパッケージ (gps-03.3.tar.gz 30Kyte)

  • gpstadjマニュアル

  • スタティックリンクで作られているLinux用実行ファイル (gpstadj-static.gz 148Kbyte)

  • SONY製GPS IPS-5000の製品情報 [SPA社Webページへジャンプ]

  • IPS-5000の設置に関して ( これでもイケちゃうGPS )

  • さらに性能に関して実験した結果(2000年6月20日版)

  • gpstadjのちょっと真面目な性能評価

  • gpstadjのちょっと真面目な誤差についての考察

  • GPSが動いているLinuxマシンを時間サーバに見立てて 時間がずれているLinuxマシンを時間同期させるプログラム tping
    このツールの公式メールアドレス [gpstadj@h2np.net]

    Keywords: Linux GPS NTP 時間同期



  • 1999年8月28日公開版 gps-03.tar.gz
    Linuxのプロセススケジュールコントロールの機能を使ってリアルタイム性を 付加しました。負荷の強いマシン上でもこのプログラムが最優先で実行される ようになります。

    よく聞かれる質問

  • [Q] ntpを使ってLAN内の時間を合わせるクロックにしたいのですが gpstadjはxntpdの代わりになりますか?

  • [A] 別にそんなことをしなくとも、まず gpstadjをデーモンとして動 作させておいて、次にxntpdを動かせば終りです。xntpdのリファレンスクロッ クをマシンのクロックにしておけばいいのです。RedHatなどのrpmパッケージ の構成はデフォルトはそうなっているはずですので、何も考えず動かせれるは ずです。

  • [Q] 動かしてもしばらく時間を合わせようとしないのですが

  • [A]このプログラムの時間合わせのアルゴリズムはコンピュータ側と GPSから得られる入力の差を統計的手法を使って計算させています。動作させ てから最低90秒(デフォルト)は統計処理のために使う要素データ収集のみの動 作になります。

  • [Q] 時間合わせにとても時間がかかる

  • [A] 最大減少率や最大増加率となっている場合でも、その増加/減少度 合は毎秒 5/1000秒前後です。非常にゆっくり減少、増加が行なわれる理由は ファイルのタイムスタンプなどの時間が逆転してしまうような矛盾を避けるた めです。

  • [Q]xntpを使わない理由は?

  • [A] xntpを使わない理由はいくつかありますが、最大の理由は他人の 作ったプログラムのインタフェース程度を改造した所でつまらないことです。 時間合わせのアルゴリズムを考えて、GPSの入力をシリアルから取って、手元 にあるLinuxの時間合わせをする精度程度なら短い行数で作れます。C++で書い ているのは愛敬です。Perlでも十分に記述できます。

    xntpシステムとは何かをもう一度思い出す必要があります。xntpシステムの目 的は全世界規模であるインターネット上での時間同期です。xntpが自分の時計 を持つのは高精度な時間同期機能を持つGPS機器や原子時計を使ってstratum-1 と呼ばれる高精度時間サーバを作るためです。stratum-1からネットワークを 介して時間を同期させstratum-2のような2次的な時間サーバを提供し、そして、 さらに末端のシステムがstrantum-1あるいはstrantum-2を参照して時間をあわ せるといったネットワークのための時間合わせシステムです。

    汎用品ディスクトップパソコンのハードウェア程度にGPSからの入力を使って 時間を精度で合わせるだけなら、そんなに複雑なシステムは必要なく、このよ うな小さなプログラムで十分なのです。もっともインターネットに接続してい るのなら、わざわざ自分でGPSを用意する必要などありません。ネットワーク 経由でxntpを使って時間を合わせれば良いのです。


    以下にマニュアルからの抜粋を載せます。

    1. はじめに

    話を端折り、「『自分の使用しているコンピュータの内部時計を常に正確に保 持したい』というニーズは、色々な局面で発生する。」ということで、まずニー ズがある所から話をスタートします。

    専用線で常時インターネット接続しているサイトならば、 Network Time Protocol (NTP) の機能を使って時間合わせをすれば良いでしょう。では、常時 接続されていないマシンはどうすれ、正確な時間を得るのか?

    一番知られている方法はxntpという時間合わせプログラムとGPSを組み合わせ ることです。ところが、xntpで使える時間を正確に合わせるようなGPSレシー バは精密な分、価格も高い(TS-800 138,000円 必要附属品一式込)。一万分の 1秒の単位(PPM)の精度が得られますが、それは私の使っているようなマシン には過剰品質と言えるでしょう。それよりなりより、そんな高価な機材を買う お金がない。

    そこで誰でも手が届く普及品を使います。ターゲットは、GPSで最も低価格帯 製品であるSONY IPS-5000 (本体29,800円、ケーブル、電源別途)というGPSレ シーバです。IPS-5000を使い、かつ、プログラムを書く愉しみも味わいながら、 作ったのがこのプログラムです。 IPS-5000に関しての情報は IPS-FAQのページ が参考になります。

    1.1 本プログラム機能

    GPSからの時間情報を使って、マシン内部時計を プラス・マイナス 0.1 秒以 下の(100 msec以下) の誤差範囲で監視/調整します。

    2. 使用したモノ

    2.1 GPS

    使用したGPSは次の通り。

  • SONY GPS IPS-5000 ( RS-232c接続コード + 電源アダプター)

    ちなみに、筆者が使用したGPSは、 株式会社SPA システムプロデューサアソシエイツ という所から通版で買いました。平成8年当時で、本体、接続ケーブル、 電源など全部込で約4万円ぐらいだったと記憶しています。現在の価格等に関 しては、 SPAのホームページを参照してください。

    .....