1. HOME
  2. ブログ
  3. IT技術
  4. Pythonを使ってオシロスコープを遠隔操作したり、画面キャプチャをしてみよう
Pythonを使ってオシロスコープを遠隔操作したり、画面キャプチャをしてみよう

Pythonを使ってオシロスコープを遠隔操作したり、画面キャプチャをしてみよう

python でオシロスコープを操作しよう!

オシロスコープなどの計測器は「NI-VISA」という通信規格に対応しています。

NI-VISA を使えば、PC から簡単にオシロスコープを制御したり、データ転送することができます。

今回は「PyVISA」モジュールを使い、オシロスコープを操作する Python プログラムを作ってみましょう!

準備

PyVISA とは?

「PyVISA」は、NI-VISA を通して、Python コード上で計測器を制御するモジュールです。

【PyVISA 公式サイト】
https://pyvisa.readthedocs.io/en/latest/index.html

おなじみの pip を使えば、簡単にインストールできます。

インストールが必要なもの

  1. Python の開発環境
  2. PyVISA モジュール
  3. NI-VISA

この中で、NI-VISA のインストールには注意が必要です。

公式サイトの最新バージョンでは Full 版しかダウンロードできませんが、バージョンを17.5まで落とせば Runtime 版をダウンロードできます。

最低限 NI-VISA のドライバが使えればいいので、他の機能はインストール不要ということです。

筆者の実行環境

  1. Python(3.6)
  2. Spyder(3.2.6)
  3. PyVISA(1.9.1)
  4. オシロスコープ(Tektronix 社 MSO58 シリーズ)

①PyVISA でオシロスコープのアドレスを取得する

それではさっそく、Python でコードを書いていきましょう!

PC とオシロスコープを接続

まずは、Python を通して PC とオシロスコープを接続する処理を行います。

ResourceManager が、PC と計測器をつなぐクラスです。

このスクリプトを実行する前に、オシロスコープと PC が USB ケーブルで接続されているか確認してください。

オシロスコープのアドレスを取得

実行すると…

このような表示がされます。

この 'USB0::~' がオシロスコープのアドレスで、この値を使うことで通信の確立を行います。

※接続した USB の端子の箇所によっては、USB1 や USB2 となったりもします。

②オシロスコープと接続し、遠隔操作する

オシロスコープのアドレスが分かったら、次は接続です。

さっき取得したアドレスを、括弧内に入力することを忘れずに!

実行し、下記のようなコードが表示されれば接続成功です。

接続されているオシロスコープの情報が表示されていますね(__はシリアル番号の略です)。

この .query は、オシロスコープに NI-VISA コマンドを送信し、戻り値を要求しています。

NI-VISA のコマンドに「?」が付いているのも、戻り値を要求するコマンドだからです。

接続に失敗した場合

万が一接続に失敗すると、このような表示がされます。

こんな時には、下記の方法を試してみてください。

  1. rm.close()で ResourceManager のクローズ処理を実行
  2. USB ケーブルを再接続
  3. オシロスコープを再起動

オシロスコープを遠隔操作してみよう

接続に成功したら、下記のコマンドを実行してみましょう。

オシロスコープの測定が停止したことが分かります。

次は、下記のコマンドです。

今度は逆に、オシロスコープの測定が再開します。

これで、PC 上からオシロスコープの測定開始・停止ができるようになりました。

PyVISA は命令するだけ

PyVISA で行っていることは、 .write のコマンドで()内の NI-VISA コマンドをオシロスコープに命令するだけです。

.query と異なり、戻り値を要求せず、命令を実行するだけなので、NI-VISA のコマンドにも「?」は付いていません。

③オシロスコープの画面をキャプチャして、PC に送信

次に、測定停止中のオシロスコープの画面をキャプチャして、PC に送信するコードを書いてみましょう。

上記コードの原理を説明すると、こんな感じです。

  1. 画面キャプチャをしたら、オシロスコープの内蔵ハードディスクに「Temp.png」として保存するよう命令
  2. コマンド OPC.queryで送信し続け、1が返ってくるまで Wait
  3. オシロスコープの内蔵ハードディスクから、PC へ画像ファイルを転送

処理が全て終わったら、オシロスコープとの接続をクローズすることを忘れずに!

応用例:タイマー制御の自動キャプチャ

最後に、ひとつ応用例をご紹介します!

「Python のタイマー制御により、自動でオシロスコープの RUN/STOP と画面キャプチャを行う」というものです。

オシロスコープに一切触れることなく、数秒単位で波形画面を次々に取得できますよ。

繰り返しの回数や時間間隔は、使いやすいようにカスタマイズしてください。

さいごに

Python の良いところは、デバッガなしでも、コードの途中で処理が実行できるところだと思います。

特に NI-VISA コマンドは使ってみないとわからないものも多いので、Python との相性は良さそうですね。

次回は「オシロスコープの波形データを自動転送」する方法をご紹介します。

お楽しみに!

次回の記事はこちら!

こちらの記事もオススメ!


書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア