室温計測のためのソフトウエア




測定用のコンピュータには、FreeBSD-2.2.1-RELEASEをインストールしています。 まず、AD変換モジュールの制御についてですが、ここではデバイスドライバー を使わずに直接I/Oポートにアクセスする方法を採用しました。(参考:FreeBSDメーリングリストの過去メール) /dev/io ファイルをオープンすれば、これが可能になります。 この部分はC言語で作成しました。DOS用のC言語ソースに少し手を入れるだけで使用できます。

という方式にしていたんですが、FreeBSD-2.2.6-RELEASE にバージョンアップしたところ、 一般ユーザが /dev/io ファイルをオープンできないような仕様に変更されていました。 当然この方が安全で、UNIX はかくあるべきなんですが、今度はデバイスドライバを作らなければなりません。 運の良い事に Software Design 1998 年 4 月号 p.50 (三田吉郎 氏)に プリンタポートを汎用 I/O ポートとして 使用するための記事がありましたのでこれを参考にして lpt0 を改良しました。 これによりユーザプログラムの方ではI/Oポートアドレス等を全く意識せずにプログラム できるようになります。

FreeBSD-3.*-RELEASE 以降では汎用 I/O ポートドライバ /dev/ppi0 がデフォルトで実装されて いますのでこれを使います。C言語のソースはこのようになります。

これをcronデーモンを使って10分おきに起動し、データをファイルに 記録しています。そして1日の終りには、その日のデータファイルの名前を変えて セーブし、新しいファイルを準備します。 こういうところ、UNIXは非常に簡単にできてしまいます。

WEBページに表示する方法ですが、測定用コンピュータとWEBサーバーが別になっていますので、 測定用コンピュータにもappache(httpd)をインストールし、CGIを実行できるように設定します。 このあたりの準備は、FreeBSDのpackageをインストールすれば、ほとんど特別な事をする 必要はありません。訪問者による遠隔測定用のCGIスクリプトと、データをグラフに表示する CGIスクリプトをperlにより作成しました。グラフ表示は、gdグラフィックライブラリを 用いて、データをGIF画像に変換し、ブラウザにわたすという方法をとっています。 (参考:"C&Perl5によるCGI入門"、星雲社)


SST_Labo's Home Page