node.jsでVISA測定器と通信する。

2015/04/24 7M4MON

web inteactive io

node-serialportに触発されて、node.jsで測定器を制御したいと思いました。

測定器の世界には VISA(Virtual Instrument Software Architechture)という
GPIB、VXI、PXI、シリアル(RS232/485)、イーサネット、USBおよび/もしくは
IEEE 1394をインタフェースとした計測器の標準規格がありまして、これを扱うには
visa32.dllを叩けばインターフェースの種類に関係なく、共通の命令で制御できるわけです。

対してnode.jsには node-ffi というネイティブdllを扱える神モジュールがありますので、
この2つを組み合わせれば、測定器をnode.jsから扱えそうです。

という訳で実際にやってみました。

visa32.dllには沢山の関数が有りますが、とりあえず必要な分だけ実装してみました。
('viOpenDefaultRM','viOpen','viPrintf','viScanf','viClose' の5つ)

'viOpenDefaultRM'は本来ならばint型を引数に取るはずですが、何故かstring型を渡さないと動きませんでした。
'viOpen'も何故かsesn = 0ではだめで、( IO Monitorでを立ち上げた状態でInteractiveIOで *IDN? を投げたときのsesn の値)'256' にしたら動きました。
'viPrintf'もなぜ'1'で'int'が正解なのかわかりませんが、これでエラーはなくなりました。
'viScanf'はvisa32.csを見ると色々な型を受け付けるみたいですが、IO Monitor を見ると int8[] でやりとりしてたので、それに合わせました。

とまぁ、試行錯誤の結果ようやく動きました。

visa32test

WEBインターフェースは、expressでさくっと作成。
もちろん、socket.io でリロードすることなくリアルタイムで結果を表示します。

githubに置きましたのでご自由にどうぞ。