#author("2024-06-01T08:34:28+09:00;2024-05-27T10:36:20+09:00","default:masami","masami") #author("2024-06-07T10:54:20+09:00;2024-05-27T10:36:20+09:00","default:masami","masami") *旧HPの34401AマルチメーターをPythonから制御する(2024/05/27) #image(https://mkanzaki.sakura.ne.jp/images/HP34401A.png,center,50%) #contents **経緯 旧HPの34401AデジタルマルチメーターのPCからの制御は以前は有償のプログラム環境でやってましたが、ライセンス費用の更新をするのも面倒になってきたので、pythonで制御することにして、少し試してみました。pyserialというライブラリーを使います。また、PCとしてはMacBookAirを使っています。 **Pythonで制御してみる ハード的には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で通信する設定になっているはずです。 34401A側をRS232Cで、通信パラメータを設定する必要があります。フロントパネルのShift, 矢印キーで設定できますが(E: I/O MENUのところで)、詳しい設定方法は34401Aのマニュアルを見てください。34401Aの電源オンにした時にディスプレイにRS-232と出る場合はRS232Cで通信する設定になっています。 pyserialは標準のライブラリーではないので、pipかanacondaでのインストールが必要です。以前anacondaいくつかトラブルがあったので、今回はpipでインストールしています。 簡単なプログラムを置いておきます。 簡単なサンプルプログラムを置いておきます。 [[download:https://mkanzaki.sakura.ne.jp/codes/34401A.py]] これは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()をしています。 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-*を実行して番号を確認した方がいいようです。