旧HPの34401AデジタルマルチメーターのPCからの制御は以前は有償のプログラム環境でやってましたが、ライセンス費用の更新をするのも面倒になってきたので、pythonで制御することにして、少し試してみました。pyserialというライブラリーを使います。また、PCとしてはMacBookAirを使っています。
ハード的には34401AとはRS232Cケーブル(クロスでメスーメスのケーブルが必要)とSerial-USB変換器を使ってMacと接続します。もちろんWindowsでも問題ないはずです。
まずSerial-USB変換器のドライバーのインストールが必要です。私の場合(M3 MacBookAir)では、Cable MattersやStarTech.comのSerial-USB変換器が問題なく使えています。
34401A側をRS232Cで、通信パラメータを設定する必要があります。フロントパネルのShift, 矢印キーで設定できますが(E: I/O MENUのところで)、詳しい設定方法は34401Aのマニュアルを見てください。34401Aの電源オンにした時にディスプレイにRS-232と出るとRS232Cで通信する設定になっているはずです。
pyserialは標準のライブラリーではないので、pipかanacondaでのインストールが必要です。以前anacondaいくつかトラブルがあったので、今回はpipでインストールしています。
簡単なプログラムを置いておきます。
download
これはDCV 0.1 Vレンジに設定して、測定するだけのプログラムです。無限ループになっているので、止める時はControl+Cをタイプします。
最初の行はpythonのインストール先を指定します。serial.Serial()でSerial-USB変換器の指定が必要ですが、これはSerial-USB変換器をMacに繋いで置いて、terminalで
ls /dev/cu.usbserial-*
を実行すると、cu.usbserial-*というのが出てくるので、usbserial-*の部分をここにコピーしてやります。Windowsの場合はここがCOM3とかになりますが、その番号は設定でデバイスドライバー部分を調べると分かるはずです。
serial.Serial()の他の設定は、私の場合、通信速度だけの指定(9600)で問題なく動きましたが(34401A側の設定は9600ボー、None Parity 8bitだった)、ここで問題が出る場合は34401A側の設定とpyserialで設定(parityやデータビット数)を一致させる必要があると思います。
ser1.read(17)で読んだデータはバイナリー形式で最後にCR+LFが付いてます。なのでstrip()でCR+LFを取って、ASCIIに変換するためにdecode()をしています。
現在Cable MattersとStarTech.comのSerial-USB変換器を使ってますが、StarTech.comの方は接続するUSBポートを変えてもプログラムで指定する名前は同じですが、Cable Mattersの方は変わります。なのでUSBポート変えた時は再度ls /dev/cu.usbserial-*を実行して確認した方がいいようです。