Python, PyVISAでTOS5301からデータを取得する方法【①PCと機器との通信方法】

なぜ測定機器からデータを取得するのにPCやプログラミング(Python, PyVISA)を使わないといけないのか?

 

なぜかと言うと、この手の機器にはOSが入っていなく、機器側にはデータの外部出力というメニューが用意されていません。(外部出力端子がついているだけ、ケーブルすら付属していない)

 

したがって、PCをプライマリ機、測定機器をセカンダリ機として、なんらかのプログラミング言語でPCから指示出しをしてあげる必要があります。

 

まず今回はPythonとPyVISAモジュールを使い、query("*IDN?")というコマンドで機種名を取得してみます。

 

環境


・windows10
Python 
・Vidual Studio Code

 

準備するもの(ハード)


・安全試験器 菊水電子工業 TOS5301
https://kikusui.co.jp/w2-2/safety-tester/voltage-testers/tos5301/

 

USB2.0ケーブル (Type-A オス − USB Type-B オス)
https://www.buffalo.jp/product/detail/bsuab210bk.html

 

インストールするもの

・フロントエンド pyVISA
pip install pyvisa

 

・バックエンド NI-VISA
https://www.ni.com/ja-jp/support/downloads/drivers/download.ni-visa.html#460225

 

※PyVISA-py(デフォルトのバックエンド)やKI-VISA(メーカー公式のバックエンド)では、なぜか重要なコマンドが利用できませんでした。
私がトライした限り、全てのコマンドが利用できるのはNI-VISAだけでした。2023年7月現在、windows11まで対応しています。

 

・USBケーブルのドライバー
https://ftdichip.com/drivers/
"Click here to download the Windows 7 to Windows 11 ..."のhereのリンクからダウンロードして、zipファイルを解凍することでインストールできます。


PCと測定機器を通信して機種名を取得するPythonコード


#測定器と通信する準備
import pyvisa

import sys

 

#グローバル変数としてinst, rmを作成
rm = ""
inst = ""

#=======実際の処理=============
rm = pyvisa.ResourceManager()
ports = rm.list_resources()

if len(ports) == 0:
    print("エラー: COMポートがありません")
else:
    #前面のUSBポートにケーブルが刺さった状態で、COMポート番号を自動で取得してオープンする
    port = ports[0]
    inst = rm.open_resource(port)
    #タイムアウトを設定する
    inst.timeout = 5000
    #クエリコマンドで機種名を取得する
    try:
        idn = inst.query("*IDN?")
        if len(idn) <= 5:
            print("エラー: 試験機側の通信設定が正しくありません")
            #COMポートを閉じる
            inst.close()
            sys.exit()
        elif len(idn) > 6:
            print(idn)        
    except:
        print("エラー: 本体の電源がOFF、または通信パラメータの設定が正しくありません")
        inst.close()  
        sys.exit()

 

VSCodeデバッグ機能で動作確認する

メニューバーの「実行」→「Start Debugging」→Select a debug configurationで「Pythonを選択する」

で、コードのデバッグができます。

 

正常に通信できていると、上記コードで"KIKUSUI TOS〇〇"のような機種名をターミナルに表示することができます。