電波時計とntp

〜tristateの電波時計キットとの日々〜

最終更新日 [07Jun2005]

2005年5月17日以後、あなたは 件目のアクセスさんです。

日々拡張工事中

TS-JJY02表示処理部
(左=ACアダプタへ/上=受信部へのケーブル/右=RS-232Cでコンピュータへ)

諸言
高価な装置だった 電波時計も、今や安いものでは2〜3k円から買える様になりました。 時計屋さんや家電量販店の時計コーナーでは、『電波時計』ばかりが 目立つようになってきています。 だが、コンピュータの時計合わせに利用出来るモノは、 専用製品ばかりでまだまだ高価です。 普通の安価な電波時計には、 折角の時刻データをコンピュータに受け渡す"手段"がありませんし。

んがー、東京・秋葉原の 秋月電子通商さんで売られてる、 有限会社トライステートさんの 電波時計キットは、 組み立てキットではありますが、安価でかつ RS-232C経由でデータを 得られる(←ここ重要)という優れものであります。

もちろん、このキットをRS-232C経由でコンピュータと接続するだけでは駄目で、 時刻データを利用してコンピュータの時計を合わせるためには、 トライステートさんのページに紹介されているような 電波時計用プログラム等が必要です。
が実は、UNIX上で最も良く用いられている NTP(Network Time Protocol)プログラム ntpの新しいモノでは、この電波時計の ドライバが追加されており、簡単に利用出来る様になっております。

本稿は、このキットの御紹介と FreeBSDマシンでの ntp サーバ計画についての 諸々についての5年がかりの壮大(苦笑)な計画の結果を記したものです。

トライステートの電波時計キットとの出会い
トライステートさんの電波時計キットを知ったのは、 2001年のお正月頃のことでしょうか。

コンピュータ上で正確な時刻を知りたければ、 勿論、日本各地の公開ntpサーバ (現在ではここ などを参照して下さい)を利用すればよいのですが、 やはり一組織(自宅ででもですが)としては、 自らのところで主となるntpサーバを設置したい… という野望(笑)を持つのは当然(?)のことでしょう。 それには、専用ntpサーバ製品などを…ということになるのでしょうが、 なかなか高価(500k円くらいはしますね…)で、 残念ながら誰しもが簡単に購入出来るものではありません。

そこでどうにか安価にてntpサーバを組めないだろうかと調べました。 Kajikiさんの 「ラジオで計算機の時計を合わせよう!」 を知り、これを参考にしたシステムを2000年5月頃に構築し、 現在もテスト運用しています。 これは、AMラジオの時報をサウンドカード経由で取り込み、 Kajikiさん作の adjtmbyradio というプログラムを用いて、 時報の波形(パルス)を捕まえて時計合わせを行なう、というものです。
ラジオとサウンドカードがあれば出来る、というこの安価で素晴らしい システムは、5年たった2005年5月現在でもいまだに運用しています。 が、この手段には、いろいろと弱点があります。 毎正時前に cron で adjtmbyradio を起動し、 時報らしき波形を捕まえる…のですが、 ラジオの時報自体の精度があまりよろしくないことと、 番組の関係で毎正時に必ず時報が流れる訳でないこと…などです。 それに根本的に、絶対時刻のデータを取得する訳ではなく、 正時毎に時報(の波形)に合わせて時刻を微修正するものですので、 コンピュータ側の時刻がまるっきりずれてしまっていたら、 残念ながらどうしようもありません。 さらに、 うちはもともとあまりAMラジオの受信状態があまりよくない立地であることに加え、 コンピュータ等からの電磁波の影響を受け、AMラジオ自体にノイズが入りまくる …ということで、残念ながらうちの環境では、 飽く迄も補助的な利用方法でしかありませんでした。

絶対時刻のデータを取得するにはやはり電波時計かGPSとかかなぁ… でも製品は高いよなぁ…と思っていたそんな折に、 トライステートさんの電波時計キットを知りました。 情報通信研究機構(当時は通信総合研究所)による JJYの標準電波運用を受信し、RS-232Cでコンピュータと接続して 時刻情報を取得(コマンド送信型)することが出来る…というキットです。 比較的安価(10k円で充分お釣りが。いや自分で組み立てねばなりませんが(汗)) ですし、仕様は公開されていますし、しかもユーザさんによる電波時計用プログラムも たくさん紹介されている…と願ったり叶ったりですね。

ですが早速買ってみた友人曰く、どうも電波の受信度合いがあまりよろしくない…と。 丁度その頃からでしょうか「電波時計」の一般製品が安くなり始め、 私も試しとして電波時計目覚しを購入してみたものの、 やっぱりどうも受信度があまりよろしくない…。 電波を捕まえそこねたのか、気がつくと秒針が0で止まっていたり (電波捕まえモード?)、映画とかのワープシーンさながら(?)に、 時計の針がぐるぐる回っていたり(時刻合わせモード?)…(苦笑)。 ここ近畿地方は、 40kHzの福島長波局(大鷹鳥谷山)からも60kHzの九州長波局(羽金山)からも 距離的に遠く離れている上(私のところは若干、九州局の方が近いかな…)に、 鉄筋コンクリートな建物の屋内だからというのもあるのでしょうか (出来るだけ窓辺に設置してるんですが…)。

そんなこんなで、電波時計キットによるntpサーバ計画は一旦サスペンドモードに…。

トライステートの電波時計キットの購入と組み立て
で、実際にトライステートさんの電波時計キットを購入したのは、 2004年のお正月でした。

気づくと家の電波時計目覚しや柱時計が、 まぁそこそこ安定して電波を受信する様になってきたので、 そろそろかなーと購入してみることにしたのでした。 上京した際に、秋葉原の秋月電子通商さんに寄ったところ、 店頭では売り切れており、「入荷未定」と言われてとても残念な思いをしました。 が、秋月さんのオンラインショップにはなんとか在庫があったので、 本体キットとともに、 九州60kHz受信用改造キットも合わせて 通販で購入したのでした。 しかし年度末の多忙さや新しいオモチャ・ パネリーナを入手したり…と、なかなか組み立てる機会がなく、 放置プレイ(笑)の挙げ句、ようやく組み立てたのは2004年の6月でした。

実はこの通販で購入したものは TS-JJY01という旧バージョン(ver.1)で、 どうやら TS-JJY02 という新バージョン(ver.2)が発売される直前のためロット終了してたので、 店頭在庫が切れ、入荷未定だった…ということの様でした。 何のことはない、 旧バージョンの TS-JJY01 を購入したその2004年の1月から、 実際に組み立てた6月までの間に、 上京する機会が何度かあり、 秋葉原の秋月電子通商さんの店頭で新バージョンを見つけて 購入してしまったのでした(笑)。
ちなみに旧バージョン(TS-JJY01)と新バージョン(TS-JJY02)の違いは、 基盤自体が受信部と処理表示部の2つに割って(本当にパキンと割るんです) 分離使用が出来る様(勿論、分離せずにそのまま使用することも出来ます)に なったことや、受信ICやドライバICとかチップ抵抗とかが すでに基盤上に実装される様にになったり、 発振モジュール自体が改良された、というところだそうです。

組み立てですが…品数が多いので結構面倒ではありますね。 でも、附属の説明書は丁寧に書かれていますし、 判り難いところは トライステートさんのホームページ 上にクローズアップ写真付きで解説してありますし、 回路図見ながら考えるとか迷うとかいうことはありませんでした (液晶部へのコネクタの上下を逆につけてしまったことはありましたが)。 電子部品のハンダ付けが *そこそこ* 出来る方であれば、 品数は多いですが、一つ一つ丁寧にやっていけば、 1時間ほどで組み立て上がると思います。

旧バージョンTS-JJY01
(液晶部がぺにょぺにょに見えるのは保護シートを貼ったままだからです)

電波時計キットを実際に運用してみる
さてそうして組み立てた電波時計キットですが、 まずはちゃんと電波を拾ってくれるかテスト運用をしてみました。

結局組み立てたのは、2004年1月に購入したTS-JJY01が1台、 2004年5月頃に購入したTS-JJY02が2台(3台とも九州60kHz受信用改造キット付)です。 当初、TS-JJY01 でテストしようと思ったのですが、 そうでなくとも地域的に受信状態があまりよろしくないので、 分離使用で受信部を窓辺に置いて利用できる TS-JJY02 でテストしてみました。

職場と自宅(距離的にそれほど離れていません。お互いが見通せる程度の距離です)の 2箇所に、TS-JJY02をそれぞれ設置してみました。 ともに鉄筋コンクリートの建物の窓辺に置いたのですが、 職場のはLEDに8割方「X」と表示され、 自宅のは8割方「O」と表示されます。 入れ換えてみても同じですので、キットの個体差とかではなく、 やっぱりその場所の電波状態なんでしょうか。 でも窓の外に置いてみてもあまり変わらないし…。謎だ。 (時期によっては双方の状態が全く逆な時もあります)
とはいえ、職場のは全く時刻を捕まえられないかというと、 数日放置してたまにLEDを見てみると、 「X」が表示されているものの時刻は(ほぼ)合っている、 という状態になっていますので、たまには電波を拾っているのでしょうね (きっと、私が見てない時に限って合わせてるんでしょうか…(苦笑))。 距離的に、九州局からぎりぎり500km程度という場所ですので、 結構キワドイんでしょうかねぇ。設置場所や向きだけでなく、 日や時によって状態が異なるので、電気製品のノイズや 地球的な電磁波の状態などにも影響されるのでしょうか。

新バージョンTS-JJY02の表示処理部

新バージョンTS-JJY02の受信部

電波時計キットをコンピュータに接続してみる
さてそういう電波時計キットですが、 RS-232C経由でコンピュータに接続してみました(2004年初夏)。

接続するにはRS-232Cシリアルケーブル(ストレート)が必要です…って、 昔はモデムとの接続に必ず使っていた筈なんですけど、 部屋を探してみても見つからなかったり(苦笑)。
勿論、秋月さんの USB・シリアル変換ケーブルを使うことで、 電波時計キットをUSBで接続することは可能になります。 が、この変換ケーブル自体にドライバ等も必要になるかもしれませんし、 今回は FreeBSD 等から利用することを考え、 素直(?)にRS-232Cシリアルケーブルで直接接続することにしました。
そこで買い出しに行ったのですが、 最近、シリアルはUSBが中心になってる様ですので、 RS-232Cのケーブルってなかなか売ってませんでした。うーむ。 高価な箱入りばっかりだったり。 ようやく安価なものを見つけて買ったものの、 よく見ると、コネクタ部のオスメスが合ってませんでした(苦笑)。 ちゃんと確認して買いに行きましょう(爆)。
コンピュータ側(一般的なATXパソコン)にはメス、 電波時計キット側にはオスのコネクタが付いていますので、 9ピンのオス<=>メスのストレートシリアルケーブル(DB9M-DB9F)が必要になります。 (確認せずに店に行ったために、最初誤ってオス<=>オスのケーブルを 買ってきたのでした(汗))

RS-232C経由で接続したところで、 まずはちゃんと接続できているかをテストしてみました。 接続したFreeBSDマシンで、X11上で使える通信ソフト seyon を用います。 シリアルポート0に接続したので、 通信につかうデバイスとしては /dev/cuaa0 を指定し、 あとは附属のマニュアルにも書かれている様に、 「9600baud, 8bit, non-parity, stopbit 1, flow制御なし」という 設定をしました。 そして seyon のコンソールで時刻出力コマンド"TIME"や日付出力コマンド"DATE"を 打ち込み、 Enterキーを押すとちゃんとそれぞれの値が返ってくることを確認しました。 ふむふむ。

さてさて、この動作を自動的に行なうために、 何らかのプログラムを用いるのですが…。

時間合わせプログラムを探す
トライステートさんのホームページには、 「ユーザー様より御提供の電波時計用プログラム」として WindowsやMac、FreeBSD用のものや、Javaで書かれたプログラムなどが 掲載されています。
…が、「道正さんからご提供:FreeBSD用の時間補正プログラム」が 残念ながら既にリンク切れでした。googleってみても見つかりませぬ。 同ページに紹介されている、 高橋さんによる 電波時計キット用ユーティリティ(perl,CGI)が利用できそうだと、 いろいろ触ってみたのですが、なんだかうまく時刻を拾ってくれません。
やはり自分で何とかせねばならんか…と諦めかけていたところ、 大野さんによる NTP4.1.0用電波時計パッチ が見つかりました。
で、もしかして本家に merge されているとか、 どなたかが既に使える様にして下さっているかも?!と ntp-4.2.0.tar.gz のソースを見てみると、 ntpd/refclock_jjy.c (coded by Takao Abe さん) に
/*                                                                    */
/*  2001/07/15                                                        */
/*    [New]    Support the Tristate Ltd. JJY receiver                 */
/* 
とか書いてあります。ほほー素晴らしい。
丁度、FreeBSDの ports に入っているのが ntp-4.2.0 でしたので、 早速 install して、 ntp のソースに附属しているドキュメント(html/drivers/driver40.html)や、 重村さんの NTPd with C-dex JST2000なども参考にして、ntp.conf を設定します。
server  127.127.40.X mode 1
fudge   127.127.40.0 time1 YYYY
Takeo Abe さんの refclock_jjy.c は、 このトライステートの電波時計キットだけでなく、 C-DEX社のJST2000にも 対応するもので、serverセクションの modeに トライステートの電波時計キットであれば1を、 JST2000であれば2を指定するようになっています。

この refclock_jjy.c では、/dev/jjy* というデバイスファイルを使用しますので、 コンピュータの Serial Port 0 (FreeBSD では /dev/cuaa0)、 Serial Port 1 (同じく /dev/cuaa1)など、接続したポートに応じて、 ln -s /dev/cuaa0 /dev/jjy0などとリンクしておきます。
さらに、serverセクションの127.127.40.XXの部分は、/dev/jjyX に対応するものですので、 /dev/jjy0 を使用する場合は、X0と指定します。
Serial Port 0 にこの電波時計キットを接続したうちの場合では、 /dev/cuaa0 を /dev/jjy0 にリンクし、

server  127.127.40.0 mode 1
となります。
ちなみに、127.127.40.X40とは、 ntpd/refclock_conf.c にある様に、 この refclock_jjy のドライバ番号(?)です。

さらに、fudgeセクションの

fudge   127.127.40.0 time1 YYYY
YYYY部は、実際に ntpサーバを運用してから、offsetのズレに対して 補正する値(秒)を与えることになります。

で、実際に設定をして運用を開始してみました(2004年初秋)。
ところがいつまで経っても、

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 JJY(0)          .JJY.            0 l    -   64    0    0.000    0.000 4000.00
と、when は値がなく、reach, delay, offset が 0、jitterが4000のままで、 一向に時刻合わせをしている形跡がありません。 謎だ…。

そこで?!
いつまで経っても時刻を合わせようとしない ntp に悩みました(苦笑)。
トライステートのホームページにもあるように、 Ver.2.01の製品には TMON と TMOF コマンドが正常に動かないという バグがあり、これを修正するプログラムが公開されていることから、 当初、ROM側の問題かも?…とまで考えました。
そこで、秋月通商の AKI-PICプログラマーキットというPICプログラマーのキットを購入して 組み立て、これを用いて電波時計キットのPIC ROM(PIC16F873-20もしくは PIC16F976-20)自体のバージョンアップを試みました(2004年冬)。 …が、PICのデータは読み出せるのに、書き込みに失敗する…という状態で、 うーん、プログラマーキット自体の組み立てに失敗してるのか何なのか 不明なまま、またサスペンドモード(苦笑)に…。

ある日
2005年春、ふと何気に「ntp自体の新しいモノではちゃんと対応している のではないか?」と、ntpの本家(?) NTP Public Services Project を眺めていたところ、 4.2.0a の development版のsnapshotsが結構頻繁に更新されているのに気づきました。 んでは試しに…と make して install してみると…、 なんの問題もなく、ntp が時刻を合わせてくれるではないですかっ!!!
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*JJY(0)          .JJY.            0 l   37   64  377    0.000    3.177  13.802

件のソース(refclock_jjy.c)を見てみると、

/* 2004/10/31                                                        */
/*    [Change] Command send timing for the Tristate Ltd. JJY receiver */
/*             JJY-01 ( Firmware version 2.01 )                       */
/*             Thanks to Andy Taki for testing under FreeBSD          */
/*                                                                    *
とか
The Tristate JJY-01 ( Firmware version 1.01 ) accepts "time" and "stim"
commands without any delay. But the JJY-01 ( Firmware version 2.01 )
does not accept these commands continuously, so this driver issues
the second command "stim" after the reply of the first command "date".
とか書いてあるではないですかっ!! (refclock_jjy.cより引用)
refclock_jjy.c の作者の Takao Abe さんのホームページには、
2004/11/02 トライステート社JJY-01の新バージョン(Version2)の問題解決パッチ
トライステート社のJJY-01の新しいハードウェアあるいはファームウェアで、
JJYのクロック・ドライバが動作しない問題を解決するパッチです。
本家NTPのNTPアーカイブの ntp-dev-4.2.0a-20041122.tar.gz以降に取り込まれています。
…ってそのものぢゃないですかっ!!
日頃、作者さんのページ等で最新動向を 確認しておけば良かった…という一例ですね(苦笑)。

トライステートの電波時計キット、 旧バージョンの version1 (TS-JJY01)は Firmwareは V.1.01 までが、 新バージョンの version2 (TS-JJY02)では V.2.02 までが公開されています。 ソース内にあるように、この Firmware V.1系では "date"コマンドと "time"/"stim"コマンドを連続的に受け付けてくれるのに、 Firmware V.2系(少なくとも V.2.01も)ではそれが駄目らしいです。 なので "date"コマンドの返答があるまで待つ様に fix されています。

ってことは…、 Firmware V.2.01 の TS-JJY02 (新バージョン)だけで試すのではなく、 折角組み立てた V.1.01 の TS-JJY01 (旧バージョン)で試してみておれば、 さっさと理由が判明していたのかもしれないですね(汗)。

窓辺にたたずむ(笑)TS-JJY02受信部
(ガラス窓です。よく見るとガラスにTS-JJY02が映り込んでますね)

その他もろもろ
TS-JJY02で受信部と処理表示部を分離使用する際には、 一般的な8芯LAN用ストレートケーブルを用います。 …というか普通のLANケーブルが流用できる用に配線されているだけですが。 尚、薄型ケーブルとか一部LANケーブルに、8芯フル結線されてないものが ありますが、これは動作しません(とホームページにも書いてありますが(汗))。

電源としては、仕様によると DC7〜15V・60mA (のACアダプタ)が必要です。 で、通常ではバックアップ用の回路がありませんので、電源を抜き差ししたり 瞬停とかあると、折角捕まえていた時刻をすーっかり忘れてしまいます。 そのため、TS-JJY02 ではバックアップ用バッテリが接続可能になっています。 NiCd10セル12Vつまり単3を10本直列してやればよい様です。 使用しつつこの電池を充電するには、電源的に15Vのモノが必要だそうで、 秋月さんの スイッチングACアダプタ 15V0.8Aが推奨されています。 電波を常時十二分に捕まえきれないうちの環境では、 これ、スイッチングですので、ノイズ発生も気にはなりますが…。

大阪日本橋の 共立電子さんで、バックアップ用電源として、 単3電池10本用BOXと単3NiCd(1.2V/900mA)を10本買ってきました(電池って結構重いんですよね…)。 現在、1台のTS-JJY02でテストしています。
…ちなみにこの状態でACアダプタを抜いてみました。 すると5秒ほどで液晶がほぼ消え、10秒ほどで時刻データまで消えてしまいました(汗)。 買ってきたNiCd電池がもう死んでしまってるんでしょうか? 暇が出来ればテストしてみます。
……してみました。10本中4本が死んでました(苦笑)。
…………新しいの買ってきました。うむ、ちゃんと大丈夫でした:-)。

秋月さんのスイッチングACアダプタ 15V0.8A

まだまだテストの日々が続きます…。
受信感度向上計画(アンテナ作成? 40kHzや60kHzって大変なんですが…)も考えなきゃ。
何かいい手段ありませんか?

----------------------------------------
Internet 関連業績(笑)一覧 internet へ戻る
----------------------------------------

はやし はるひさ hayashi あっとまーく laic.u-hyogo.学術.日本
Home