光科学及び光技術調査委員会 ■ 光 学 工 房 気 軽 に U S B 光 の 広 場 研究には,さまざまな機器を駆 して実験を行う 1. デバイスドライバー UUSBD 必要に迫られる場合があります.さまざまな機器の Windows のプログラミングですので,USB 機器 さまざまなパラメーターを制御しながら計測するた を制御するためにはデバイスドライバーが必要とな めには,それらの設定を手作業で操作を行うのでは ります.ここでは,柏野政弘氏が 開 (http:/ /www. なく,機器を PC(personal computer)に繫げて otto.to/kasiwano/newpage17.htm)している汎用 実 験 を 行 い ま す.一 昔 前 な ら,RS-232(Recom- USB デバイスドライバー uusbd.sys とダイナミッ mended Standard 232) や GP-IB (General Pur- クリンクライブラリー uusbd.dll を用いて制御して pose Interface Bus, IEEE 488)での制御で事足り みました. ていました.しかし,USB (universal serial bus) UUSBD は ユ ー ザ ー プ ロ グ ラ ム か ら の read/ が PC にほぼ標準的に搭載されるようになってか write をそのままデバイスへの USB の送受信コマ ら,USB をインターフェースにもつ機器が増えて ンドとして通信します.したがって,ユーザープロ きて,USB による機器制御が必要になってきまし グラムは UUSBD を通じて直接 USB 機器とデータ た.今回,USB をインターフェースにもつ をやり取りするようにプログラミングできます. 光器 (Ocean Optics 社:HR2000)からのスペクトル取 得に迫られましたので,USB によるデータ取得プ さて,UUSBD でプログラミングする際に必要な情 報は, ログラミングについて紹介したいと思います.な 1. Vendor ID お,確認はしていませんが,同社の USB2000 とコ 2. Product ID ードは互換性があります.また,少し拡張すれば簡 3. データ転送のためのパイプ番号 単に最近の USB 4. USB コマンド 光器からのデータ取得も可能に なると思います. です.これらの情報は,Ocean Optics 社の場合で さて,Windows 以前のプログラミングは非常に はホームページの Engineering docs (http:/ /www. 簡単でした.例えば,各ポートに対する命令さえわ oceanoptics.com/technical/engineeringdocs.asp) かれば,直接 I/O ポートに命令を送ることで制御 で 開されています. ができたからです.しかしながら,Windows プロ UUSBD のインストールに関しては,柏野政弘氏 グラムでは直接ハードウェアを制御することはでき のホームページ等を参 にしてください.インスト ず,かならずデバイスドライバーを通して制御を行 ール後,uusbd.inf ファイルの VID (vendor ID)と わなければなりません.デバイスドライバーの作成 PID(product ID)を 3か所ずつ設定する必要があ も可能ですが,敷居が高くそう安々とは行えませ ります.Ocean Optics社の VendorID は 2457,HR2000 ん.もちろん,機器メーカーは,デバイスドライバ (USB2000)の Product ID は 100A (1002)なので, ーを用意し,これを うためのライブラリーを提供 これらを書き換えます(いずれも 16進数表記です) . していますが,これらが非常に高価である場合があ なお,VID,PID 等を複数記述することも可能です. ります.そこで,メーカー提供のライブラリーを わない, 開されている通信コマンドを用いたプロ グラミングを紹介します. 2. プログラミング 実際のプログラミングでは,USB デバイスのオ ープン (Uusbd Open,または Uusbd open mask) , 37巻 3号(2 08) 199 (59 ) リスト 1 USB デバイスのパイプハンドルの取得 (Uusbd FIFO メモリーを,ハードウェアレベルではエンド ,データの送受信(ReadFile,WriteFile: OpenPipe) ポイントとよびます.ユーザープログラムでは,エ いずれも Windows のファイル操作 API 関数) ,パ ンドポイントと直接やり取りするのではなく,パイ イプのクローズ(CloseHandle:Windows の API プとよばれる仮想的な通信経路を ってデータを送 関数),デバイスのクローズ(Uusbd Close)を順 受信します.したがって,ユーザーとしては,何番 に行います. パイプで,どのようなデータをやり取りすればよい USB は複数の機器を数珠つなぎで接続すること かがわかれば,プログラミングが可能となります. ができます.したがって,どの USB デバイスに通 HR2000 では,EP2(エンドポイント 2)がコマン 信を行うのか,指定する必要があります.Uusbd ドの送信とスペクトル情報の受信,EP7(エンドポ Open 関 数 は uusbd.inf に 書 か れ た VID と PID に イント 7)が 光器情報の受信のために用いられま 合致する USB デバイスをオープンします.したが す.なお,HR2000 のデータシートにはエンドポイ って,合致するものが複数ある場合は,そのうちの ントとパイプの関係が示されていませんでしたが, 1つが選択されます(どのデバイスが選択されるか 他の は,繫ぎかたに依存します) .もし PID 等で選択し Error から,パ イ プ 1が EP2 の 送 信,パ イ プ 2が たい場合は,Uusbd open mask 関数を って選択 EP7 の受信,パイプ 4が EP2 の受信であることが します. わかりました. USB はシリアル通信ですが,通信データを時 光器のデータシートからの類推と Try & 光器との通信は,パイプ 1に命令(先頭バイト 割して送受信し,USB デバイスの複数の FIFO メ がコマンドを表し,その後に情報を付加する)を送 モリーと PC の複数のバッファー間でデータをやり ることで行います.リスト 1(以下,C 言語のソー 取りすることができます.この USB デバイスの スの一部.簡単のためエラー処理はない)に, 光 200 (60 ) 光 学 光 の 広 場 リスト 2 器の積算時間の設定関数を示します.積算時間の設 行います.HR2000 の場合,1つのスペクトルは 16 定を表すコマンドが 0x02 で,これを先頭バイトと ビット 2048個のデータからなりますが,各データ し,続いて積算時間を表す情報を付加して,パイプ は上位ビット,下位ビットに 1から送信しています. ずつに 割されて送られてきます.なお最後にデー 光器からデータを受け取るには,パイプ 4を用 います.リスト 2は, 光器の各種設定情報を取得 けて,さらに 64個 タが終わったことを表す,0x69 の値が 1バイト付 加されています(リスト 3) . する関数です.まず,パイプ 1の先頭バイトに 光 器の設定情報の受信を表すコマンド 0x05 と,それ 以上のように,汎用デバイスドライバー UUSBD に続いてどのような設定の返信を要求するか表すコ を用いると,簡単に USB 機器を制御することがで マンドを加えて送信します.例えば,0x00 はシリ きます.もちろん,機器の USB コマンドが アルナンバー返信要求を表します.そして,引き続 れている場合に限られますが. いてパイプ 4を通して情報を受信します. 開さ さて,筆 者 の グ ル ー プ で は,Igor Pro (wave- 同様に,スペクトルも取得することができます. /www.wavemetrics.com)という metrics 社,http:/ このときのコマンドは 0x09 で,パイプ 1でこれを データ処理ソフトウェアを,機器制御にも用いてい 送信します.スペクトルの取得はパイプ 2を通じて ます.今回,HR2000 と通信するプラグイン (Igor 37巻 3号(2 08) 201 (61 ) リスト 3 Pro では XOP とよばれています)も作成しました. XOP は,ユーザーの自己責任の範囲内で 用して 用してみたい方,ソースファイルが必要な方は, ください.これらの 用によって生じた不具合や不 筆者(mamoru@me.es.osaka-u.ac.jp)まで直接お 利益などについて,その妥当性を問わず日本光学会 問い合わせください. ならびに著者は一切責任を負いませんので,ご了承 なお,例に掲げたプログラムの一部,ならびに 202 (62 ) ください. (大阪大学 橋本 守) 光 学
© Copyright 2025 ExpyDoc