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

測定器をリセットするコマンド。リセットには以下の動作が含まれる。

  • 機器を決められた状態にセットする(決められた状態は、各測定器によって異なる)
  • 実行待ち動作の中止
  • 前に受け取った*OPC、*OPC?コマンドのクリア
*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 で、化学分析機器関連の会社として存続している。