作ったものと簡単な経緯
オシロスコープの画面キャプチャしてPCに保存するアプリをPythonで作りました。
今いる会社ではUSBメモリにスクショを抜いてるみたいなんですが、いろいろ手間なのでUSBケーブル1本で保存できるアプリを自作しました。
最近では許可されたUSBメモリしかPCに挿せないということもありますし。
同じ機能は、有償のメーカー純正アプリにはあります。
実際に実装したのは画面キャプチャだけですが、VISAライブラリ経由でそれ以外の制御も可能だと思います。
目次[隠す]
- 1. 作ったものと簡単な経緯
- 2. ポイント
- 3. 対象機器・環境
- 4. 環境構築
- 4-1. pyVISA
- 4-2. VISAバックエンド
- 5. VISAアドレス確認
- 6. アプリ設計
- 7. 動作確認
- 8. まとめ
ポイント
ポイントは4つです。
- Python用ライブラリ(pyVISA)のインストール
- VISAバックエンドのインストール
- VISAアドレスの確認
- Pythonアプリ設計
上の2つがPCと測定機をつなぐ手順、下の2つがPythonのアプリ設計関係の手順です。
対象機器・環境
測定機
- オシロスコープ (Tektronix MSO4000シリーズ)
アプリ環境
- Windows 10 Pro
- Python 3.7.5 (Anaconda仮想環境)
- pyVISA
- Keysight IO Libraries Suite (VISAバックエンド)
環境構築
AnacondaとPythonのインストール~仮想環境への移動は省略します。
ここでは、PythonのVISAライブラリと、測定機用のVISAライブラリについて書きます。
pyVISA
Pythonから測定機を制御するためのライブラリです。詳しくは本家サイトを参照。
pipでインストールできます。
pip install pyvisa
pyVISAに加えて、バックエンドが必要になります。
VISAバックエンド
pyVISAだけでは動かず、VISAのバックエンドが必要だとエラーが出ます。
ライブラリは各社からリリースされています。どれか1つをインストールしておくとよいです。下記は一例です。
- キーサイト (IO Libraries suite)
- テクトロニクス (TekVISA)
- National Instruments (NI-VISA)
僕は無償のKeysight IO Libraries Suiteをインストールしました。キーサイトのライブラリですが、テクトロのオシロスコープがちゃんと見えます。
このライブラリをインストールすると、Serial, USB, GPIB, Ethernetで測定機と通信することができます。
VISAアドレス確認
Keysight IO Libraries Suiteの場合の確認方法です。
通知領域にあるKeysight IO Libraries Suiteのアイコンをダブルクリック、または右クリック→Connection Expertか、スタートメニューからConnection Expertを起動する。
- 起動直後のWelcomeウィンドウは不要なので閉じます。
- 左側で接続方法を選択。展開された中から対象の測定機を選択します。過去に接続した測定機の情報も保存されるようです。
- 右側にその測定機の情報が表示されます(シリアルナンバーは隠しました)。アプリからの接続に必要なのはVISA Addressです。
VB用のマニュアルですが、PDFファイルの5ページ目に説明があります。
キーサイト Visual Basic.net による測定機制御 (VISA COM ライブラリ編)
アプリ設計
処理の流れ
- 測定機を開く(測定機に接続する)
- コマンドを送信する
- コマンドの応答を取得する(スクリーンキャプチャもこの処理)
- 測定機を閉じる(接続を終了する)
- 取得したキャプチャ画像をファイルとしてPCに保存する
- 保存先ファイル名はコマンドライン引数で指定する
- 保存先ファイルが既に存在する場合は上書き確認する
サンプルプログラム
テクトロニクスのFAQにサンプルコードがありました。これを参考にコーディングしました。
コーディング
今回使用したコマンド等、ポイントだけ書いておきます。ソースコード全体はGitHubにアップしています。
# pyVISAライブラリのインポート
import visa
# テクトロニクスの測定機を対象にします。(0x0699はテクトロニクスのID)
if ‘0x0699’ in osc:
# タイムアウトを5秒に設定
myFieldFox.timeout = 5000
# 測定機のレジスタを初期化する
myFieldFox.write(“*CLS”)
# 測定機の情報を取得して、取得内容を表示する
myFieldFox.write(“IDN?”)
print(“IDN? -> ” + myFieldFox.read())
# キャプチャ画像を一度測定機のローカルドライブに保存する
# そのための保存先を指定
myFieldFox.write(‘SAVE:IMAGe \”Temp.png\”‘)
# スクリーンショットを取得
myFieldFox.query(‘*OPC?’)
# 測定機内に一時的に保存した画像を、1024×1024ピクセルのサイズでPC側から取得する
myFieldFox.write(‘FILESystem:READFile \”Temp.png\”‘)
imgData = myFieldFox.read_raw(1024*1024)
# PCにファイルとして保存する
file = open(fileName, ‘wb’)
file.write(imgData)
file.close()
# 測定機内の一時ファイルを削除する
myFieldFox.write(‘FILESystem:DELEte \”Temp.png\”‘)
動作確認
測定機とPCをUSBケーブルで接続します。測定機側はDeviceと書かれているコネクタ(USB-B)につなぎます。
python oscillo_tek.py
引数無しでアプリを実行すると、カレントディレクトリに “MSO4034_%Y%m%d_%H%M%S.png” というファイルが作られます。
まとめ
Pythonを使ってオシロスコープの画面をキャプチャできました。ソースコードはGitHubにあります。
用意したのは次のとおり。
- pyVISA
- VISAバックエンド
- USBケーブル (または、イーサネット、GPIB、RS232C)
VISAに対応している測定機ならメーカーが異なっても、正しいコマンドを送ればキャプチャできます(Tektronix MSO4000シリーズ以外は未確認)。
キーサイトのDSO-X 6004Aが社内にあるので、必要に迫られたらアプリをアップデートしようと思います。
テクトロニクス MSO4000シリーズは特殊で、測定機のローカルドライブに画像を一時保存する必要があります。同じテクトロニクスの DPO2024B からキャプチャしようとしたけど、うまく動きませんでした(たぶんこの機種は一般的な処理フローで取得できる)。こちらも必要になったときにバージョンアップします。
コメントを残す