34401Aをpythonで制御 の変更点


#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-*を実行して番号を確認した方がいいようです。