試料の質量変化を1分毎に24時間連続測定したい場合とか、あるいは電圧変化を10秒毎に24時間連続計測したい場合、人がストップウォッチを見ながら、一回一回実験ノートに記録するのでは、費やす労力が余りにも大きすぎる。PCがこれだけ普及した現在、人手で記録していたのでは非効率的、前近代的である。
このような場合はPCと測定装置を接続した上で、PCで測定機器を制御し、データを自動的にPCに取り込むのが一般的だ。
測定装置とPCの接続にはRS-232C(シリアル)ケーブルか、GP-IBケーブル(HP-IB、IEEE488とも言う)を使用するのが一般的である。当然ながら、測定装置はそれぞれの仕様に対応していることが必要で、パソコン側に対応する端子がない場合は変換コネクタ(ケーブル)が必要になる。
■ 昔はNEC98シリーズでN88BASICでプログラミングしたが・・・
私は1991年頃、修士課程の大学院生のとき、NEC製PC-9801 RX21(当時NECの98シリーズが圧倒的なシェアを誇っていた)に、GP-IBボードを装着し、GP-IBケーブルを通して、デジタルマルチメータHP3478Aを制御して、電圧値、抵抗値などを一定時間おきに自動測定したのが最初の経験である。MS-DOS上で動作するN88BASICとGPIB.EXEを用いて、比較的容易にプログラムを組んだ。プログラム自体は一定時間おきに装置から数値を取得するというごく簡単なものだったが、実験の労力は格段に軽減した。人がつきっきりでデータを記録するのに比べれば楽なのは、当たり前である。せいぜい1秒おきにデータを取得するのなら、この頃(1990年代前半)のPCの性能で十分なのである。
その後、Windows 95が登場し、Windows 98、Windows XPとOSが進化を遂げるにつれ、プログラムの仕方が複雑になり、わけがわからなくなってしまったので、キャッチアップするのをあきらめ、この間、ずっと、ついこの間まで、90年代前半のNECの98シリーズを使って、N88BASICで組んだプログラムを活用してきていた。(「いまどきN88BASICでGP-IBボードを通じて計測器を制御する方法」参照)
一度、Windows 95上のプログラミングに挑戦しようと思い立ち、ADコンバータを装着したPC(100 kHzデジタルオシロスコープとして使っていた)を、Visual C++でプログラミングし直してFFTアナライザに改造したことがあった。しかし、その余りの煩雑さにもう二度とWindowsプログラミングは嫌だと思うようになった。プログラミングを本業とするのではなく、化学研究などの傍らにプログラミングを行うなら、Visual C++でなく、Visual Basic、Excel上のVBA、場合によっては普通のC言語、FORTRANをお勧めする。N88BASICが得意という30代以降の方(そうとも限らない?)なら、後で述べるWindows上で動くN88BASICのエミュレータを使うのもいいと思う。
そんなこんなで、我が研究室では、それほど高速を必要としない秒単位の自動測定にはずっと昔のNEC 9800シリーズを使ってきたのであるが、PCには寿命があり、さすがに15年も使うと壊れてしまった。はてどうしたものかと困ってしまい、完全動作する中古品を買うことも考えたが、この際、最新のWindows XPのPCでプログラムを組んで、自動測定することを思い立った。Windows XPレベルになると、市販、あるいは付属の自動測定プログラムを使ったり、プロに外注したりすることも多いようだが、以下のノウハウで、昔と同じように比較的楽にプログラムできるようになった。以下はその記録ノート。似たような境遇の人は多いと思う。
■ Windows XPでRS-232C(シリアル)ケーブルで自動測定する方法
次の1)~4)の方法がある
1) ExcelのVBA(マクロ)から、Win32のAPI関数を呼び出す・・・煩雑なプログラムになる。相当勉強しないとプログラミングは面倒。プログラミング例として、Egawa氏の「Excel VBAによるOMRの制御」
2) ExcelのVBA(マクロ)で、フリーツールのEasyCommを利用する・・・1)に書いた煩雑な部分がモジュール化してあるフリーツールがEasyComm(木下隆氏作成)。これを使うとVBAプログラミングがかなり楽になる。EasyCommの説明やダウンロードについてはhttp://www.activecell.jp/参照。
3) N88BASICのエミュレータ(Windows XP上で動くN88BASIC)を使う・・・N88BASICのプログラム資産がそのまま活用できる。N88BASICを知らない方はあえて勉強する必要はなく、2)でやればよいと思う。Windows 95以降で動くものが潮田康夫氏からフリーで提供されている。ダウンロードはこちらから。このエミュレータでは、メニューバーからRS-232Cの設定ができるが、COM1からCOM4までしか指定できないようである(RS-232CポートがCOM9になったときは使えない)。また、RS-232Cは使用できるが、GP-IBはカバーしていない。
4) Visual Basic (VBAとは異なる)でMSCommコントロール(Active Xの一つ)を使う・・・MS Excelとは別にVisual Basicを購入する必要がある。Visual Basicのプログラムが書ける人なら簡単に作れる。プログラム中に、mscPort.CommPort = 1(通信ポートPC側をCOM1に設定)、mscPort.Settings="9600,n,8,1"(通信速度9600bps、8ビットデータパリティなし、ストップビットが1ビットと設定)などと記す。詳しくは金藤仁著『自動計測システムのためのVisual Basic 2005入門』(技術評論社) amazonへリンクなどを参照。
私自身、経験があるのは2)と3)であるが、お勧めは2)。以下には2)と3)について詳しく記す。
■ RS-232Cを使うときに共通する注意事項
1) ケーブルタイプに注意・・・RS-232Cケーブルにはノーマルタイプとリバースタイプ(クロスタイプともいう)がある。これらは結線が違うのだが、外観は同じ。これを間違うと絶対動かない。通常、PCと測定装置を接続するケーブルはノーマルタイプだが(例えばエーアンドデイ社の電子天秤HX-400はノーマルタイプ)、アジレント社のデジタルマルチメータHP34401Aはなぜかリバースタイプのケーブルを使うことになっている。私は当初これを間違え、かなり苦労した。装置側のマニュアルを熟読すべきである。
2) 通信設定をPCと装置で一致させる・・・通信速度(Baud Rate)、データ長、パリティの有無を正しく設定する。これを間違うとうんともすんとも言わない。エラーメッセージさえ出てくれないので、非常にストレスがたまる。例えば、装置側の通信速度が2400bps、データ長とパリティが7ビット偶数パリティに設定されていれば、PC側の設定(プログラム中での指定とコントロールパネル→システム→デバイスマネージャのポート設定の両方)もそう指定する。
3) RS-232Cポート(シリアルポート)のないPCの場合・・・COM1、COM2だとか|○|○|と書いてあり、9本のピンが出ているポートがRS-232Cポートである。最近、RS-232CポートのないPCが増えているようだ。そのような場合はUSB-RS232C(シリアル)コンバータをUSBポートに差して、RS-232Cケーブルを接続する。この場合、コントロールパネル→システム→デバイスマネージャのポート設定を見て、COMいくつになっているかを確認すること。私がデスクトップPCでこれをやったときはCOM9になっていた。
4) 待ち時間をプログラムに入れる・・・PCの性能がよくなり過ぎたということだと思う。データを送れとPCから測定装置に命令を送ってから、装置が反応して、実際に装置がデータを送ってくるまで(PCの処理速度に比べると)かなり時間がかかる。データを送れの命令を送った直後に、データを取り込む命令をプログラムすると、データを取り込んでくれない場合がほとんどである。「データを送れ」の信号とデータを取り込む命令の間に、For I = 1 to 10000 : Next I のように待ち時間を入れて、PC側の処理を遅らせる必要がある。
■ 実際にPCから電子天秤を制御してみる
以下は東芝ノートPCダイナブック(T4/495CME2、OSはWindows XP)にエーアンドデイ社製の電子天秤HX400を接続して、自動測定するシステムを作ったときの記録メモ。
1) ストレートタイプのRS232Cケーブル(D-SUB9ピンメス+D-SUB25ピンオス)で、ノートPCと電子天秤を接続。
2) PCでコントロールパネル→システム→ハードウェア→デバイスマネージャ。COMあるいはポートと書いてあるところを探し、COMの番号を確認する。我々の例ではCOM1だった。さらにCOMをクリックして、2400bps、7ビット、偶数パリティに設定する(電子天秤HX400の設定と合わせる)。
3) EasyComm(http://www.activecell.jp/参照)をダウンロード。EasyCommのマニュアルに従って、Visual Basic Editorのメニューバーにある「ファイルのインポート」で、ec.basとecDef.basの二つをインポートする。(Visual Basic Editorは、Excelのメニューバーで、[表示]→ツールバー→Visual Basicでアイコンを表示し、左から4番目のアイコンをクリックして立ち上げる)
4) Visual Basic Editorにプログラムを入力し、実行する。下記のプログラムで10秒毎に電子天秤からデータをExcelのワークシート上に取り込める。
Public Sub HX400()
ec.COMn = 1 'COM1を開く
ec.Setting = "2400,e,7,1"
ec.HandShaking = ec.HANDSHAKEs.RTSCTS
ec.Delimiter = "CRLF"
n = 10 '測定回数
For i = 0 To n - 1
ec.AsciiLine = "SI" 'コマンド 指示値を送れ
a$ = ec.AsciiLine '天秤の指示値をa$に取り込む
Cells(i, 1) = Right(Now(), 8) '時刻を1列目のセルに記録
Cells(i, 2) = i
Cells(i, 3) = Mid(a$, 4, 9) '指示値を3列目のセルに記録
Cells(i, 4) = Left(a$, 2) '天秤からの情報を記録
Application.Wait Now() + TimeValue("00:00:10") '10秒待つ
Next i
End Sub
プログラム中のSIなどのコマンドは、電子天秤側で決まっているコマンド。装置側のマニュアルを参照する。電子天秤から送られてくるデータのうち、4文字目から12文字目までが、重量を表す数字なので、Midなどの関数を使用して取り出してある。
※ 富士通DESKPOWER(C9/160WLT)などのようにシリアルポートのない場合は、USB-SERIAL CONVERTERをUSBポートに挿入し、インストール後、使用することになる。その場合、2)にあるデバイスマネージャでCOMの番号をチェックすること。
※※ コンピュータ関係で勤務する知人に話したところ、RS232Cなんてレガシーなものをまだ使ってるんですねと言われてしまったが(レガシー=過去の遺物)、PCやOSがどんどん進歩する一方で、装置側のインターフェースがほとんど進歩していないのでやむを得ないと思われる。
最近のコメント