IoTで使うPython入門 Step4-Python3ソケット①DMM 34461A測定器のIDを取得
2020年4月でPython2.7の新規リリースが終了しました。ここでは、Python3.6を利用します。プラットホームはWindows10のPCで、エディタMuを利用します。
PCと接続する測定器はKeysightのDMM 34461Aで、インターフェースはLANです。
●測定器のIDを取得する
IPv4でアクセスします。測定器のIDを取得するコマンドは*IDN?で、SCPI(”スキッピ”、Standard Commands for Programmable Instruments)言語のひとつです。機種によってSCPIコマンドは異なりますが、
コマンド | 内 容 |
---|---|
*IDN? | 測定器のIDを取得するコマンド。測定器は、以下のようなフォーマットの文字列で情報を返す。 <製造業者>,<モデル番号>,<シリアル番号>,<ファームウェアのリビジョン> |
*RST |
測定器をリセットするコマンド。リセットには以下の動作が含まれる。
|
*TST? | 測定器に対して内部セルフ・テストを実行させ、テスト結果を返すコマンド。正常時には「0」が返り、異常時には、エラー・コードが返る |
*OPC | 動作完了コマンド。実行待ちの動作がすべて終了したら、スタンダード・イベント・ステータス・レジスタのビット0をセットする。そのため、動作完了を確認するには、スタンダード・イベント・ステータス・レジスタのビットを確認する |
*OPC? | 動作完了クエリ・コマンド。実行待ちの動作がすべて終了したら、「1」を返す。用い方の例としては、測定器の設定コマンドを一連送った後、*OPC?を送れば、測定器の設定が終了した場合に、「1」が返るので、これを見て、次の測定へ移る。実行待ち動作に時間がことが予想される場合には、*OPC?のタイムアウト設定を長めに設定しておく |
*CLS | ステータス・クリア。ステータス・レジスタをクリアする。ステータス・レジスタを用いる場合、事前にレジスタ内のビットをクリアするのに用いる |
*STB? | ステータス・バイトを読み取るコマンド |
*TRG | トリガ・コマンド |
は、ほぼ共通です。
(参考)測定器を制御する測定器コマンド(共通コマンド、SCPIコマンド)
ipAddr はIPv4のIPアドレスです。DHCPサーバによってIPアドレスが変わるため、機種固有のmDNSアドレスを使っています。型番+シリアル番号の一部+.localの組み合わせです。5025は、計測器用の古くから使われているポートです。
import socket ipAddr = "K-34461A-16054.local" ports = 5025 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((ipAddr, ports)) s.send(b'*IDN?\n') print('ID: ' + str(s.recv(256)))
実行結果です。
s.recv(256)はバイト列で得られますから、下記の方法でデコードしても文字列になります。
print('ID: ' + s.recv(256).decode("utf-8"))
print('ID: ' + s.recv(256).decode())
(※)s.connectはs.bindでも動きます。bindはサーバ用で、connectはクライアントのプログラムで使われます。
(※)KeysightはHP(Hewlett-Packard)の計測器関係が分かれた会社。ひとつ前の会社名はAgilent で、化学分析機器関連の会社として存続している。