CC/USB の Switch Register によるテスト

(C) Copyright 2003 by Hirofumi Fujii (KEK Online Group)
(LastUpdate: 21-Jul-2003)
(FirstDraft: 17-Jul-2003)

はじめに

CC/USB を Windows で使うことを想定してテストプログラムを書いてみた。 なお、USB ドライバーは、前に述べたように、 柏野 政弘氏 による 汎用 USB driver UUSBDで動作確認できたので、これを使うことにした。

プログラムは、なるべく単純で、かつ実際のデータ収集を想定して、 以下のような動作をすることとした。

この動作を繰り返す。 つまり、CAMAC によるデータ収集の一般的な 手法を実現してみようというわけである。 (テストなので)これをいかに簡単に実現するかが次の課題になる。


24bit Switch Register の利用

KEK 回路グループが開発した CAMAC モジュールに、24bit Switch Register なる モジュールがある。パネル上には 24bit の トグルスイッチと 24bit の LED があり、スイッチの読み取りと、 LED を制御するレジスタへの書き込みができる。また、パネル上に 押しボタンがあり、これを押すとLAM が発生する。このモジュールを 使うことにした。すなわち、

という方法をとることにする。また読んだデータは画面に表示すると同時に モジュールの LED へ反映させることにする。LAM は常時監視しているので、 トグルスイッチを設定して、押しボタンを押すと、ただちに LED へ反映される はずである。これによりプログラムが正しく動作していることが確認 できる。


機器設定

テストした時の様子を写真1に示す。また、モジュールと USB アダプタを写真2に、 プログラムの画面を写真3に示す(プログラムは後で述べる)。

写真1:テストの様子 写真1:テストの様子。 右下のディスプレーの左上の窓がこのテストのプログラム。USB 接続している PC は画面の右にあるが、写真には写っていない。
左の写真をクリックすると 大きい写真(2560x1920ピクセル)が表示される。
写真2:Switch Register 写真2:向かって一番左端のモジュールが Switch Register。 モジュールの右下にある黒ボタンを押すと LAM が発生する。この時テストプログラムが トグルスイッチを読み取り、LED に同じ値を表示する。
左の写真をクリックすると大きい写真(2560x1920ピクセル) が表示される。
プログラム実行画面 写真3:プログラム実行画面。LAM の発生を検知し、トグルスイッチを 読み取り LED を点灯させると同時にそのデータ値を画面(Data)に表示する。別スレッドで 現在時刻の表示も行っている。


ソフトウェア開発環境

Windows で使いたい理由の一つには GUI(Graphical User Interface) で 使いたいということがあるだろう。一方、デバイスを扱うので、 WIN32API の利用を完全に覆い隠すのは困難であると思われる。 ところが GUI をWIN32APIだけで作り上げていくのは、かなり鬱陶しい 作業である。通常は Microsoft が提供する Visual Studio などの 開発環境を使うことになる。しかしながら、この程度のプログラムに 利用するには、かなり大げさすぎる気がする。

Microsoft は Java によく似た .NET Framework なるものを提供している。 この SDK (Software Development Kit) も無償で配布されている。これを 利用すると、ほとんど Java 感覚でプログラムを書くことができるばかり でなく、WIN32API とのインターフェースも簡単にとることができる。 そこで、今回は .NET Framework 環境下で動く GUI プログラムを SDK のみで 作成することにした。実際に使用した言語は C# である。


常時監視は適当に Sleep() を入れて システムに制御を返してやる必要がある。そうしないと、監視モードに入ったが 最後、LAM が発生するまで応答無しの Window ができることになる。

ここで、最大の問題は、CC/USB Adapter には LAM の発生を通知する機能が 無いことである。つまり、この機能を実現するには LAM を常時監視して おくしかない。この常時監視をドライバーで行うか、ユーザのアプリケーション プログラム側で行うかは考察の余地があるが、ドライバーに手を入れるのは 大変そうなので、ここではユーザのアプリケーションプログラムの中で 監視を行うことにした。

このプログラムを

という環境下で、走らせたところ、 であった。CPU の占有率は、Sleep(0) の場合で約10%前後であった。