node.jsでVISA測定器と通信する。
2015/04/24 7M4MON
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[] でやりとりしてたので、それに合わせました。
とまぁ、試行錯誤の結果ようやく動きました。
WEBインターフェースは、expressでさくっと作成。
もちろん、socket.io でリロードすることなくリアルタイムで結果を表示します。
githubに置きましたのでご自由にどうぞ。