Pythonでオシロスコープの画面キャプチャアプリ

アイキャッチ

作ったものと簡単な経緯

オシロスコープの画面キャプチャしてPCに保存するアプリをPythonで作りました。

今いる会社ではUSBメモリにスクショを抜いてるみたいなんですが、いろいろ手間なのでUSBケーブル1本で保存できるアプリを自作しました。
最近では許可されたUSBメモリしかPCに挿せないということもありますし。

同じ機能は、有償のメーカー純正アプリにはあります。

実際に実装したのは画面キャプチャだけですが、VISAライブラリ経由でそれ以外の制御も可能だと思います。

ポイント

ポイントは4つです。

  1. Python用ライブラリ(pyVISA)のインストール
  2. VISAバックエンドのインストール
  3. VISAアドレスの確認
  4. 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です。
Connection Expert

VB用のマニュアルですが、PDFファイルの5ページ目に説明があります。
キーサイト Visual Basic.net による測定機制御 (VISA COM ライブラリ編)

アプリ設計

処理の流れ

  1. 測定機を開く(測定機に接続する)
  2. コマンドを送信する
  3. コマンドの応答を取得する(スクリーンキャプチャもこの処理)
  4. 測定機を閉じる(接続を終了する)
  5. 取得したキャプチャ画像をファイルとして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 からキャプチャしようとしたけど、うまく動きませんでした(たぶんこの機種は一般的な処理フローで取得できる)。こちらも必要になったときにバージョンアップします。

スポンサーリンク




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です