1. HOME
  2. ブログ
  3. IT技術
  4. Pythonでオシロスコープの波形データを自動転送してみた!
Pythonでオシロスコープの波形データを自動転送してみた!

Pythonでオシロスコープの波形データを自動転送してみた!

Python + PyVISA でオシロスコープの波形データを自動転送してみよう!

前回は、PyVISA でオシロスコープを制御したり、画面キャプチャをPCに転送する方法を紹介しました。

しかし、PyVISA でできることはこれだけではありません。

オシロスコープでできる基本操作は、PyVISA を使えば全てカバーできるんです。

今回は、PyVISA のさらなる活用例として、波形データを PC に自動転送する方法をご紹介します!

前回の記事はこちら!

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


Python で波形データを取得するメリット

オシロスコープで視覚化された電気信号は、一般的に「波形(データ)」と呼ばれます。

この波形品質を確認するには、オシロスコープ内蔵の画面カーソルや、測定機能を使用するのが一般的なのですが…。

オシロスコープで波形データを確認するのは面倒?

以下のように、オシロスコープの機能だけでは不便なところも多いのです。

  1. 測定値の取り込みには別の手段が必要
  2. 波形の積分など、一般的な測定値を超えた値は未対応
  3. 波形データから区間を分割し、範囲ごとに測定するには煩雑すぎる

こんな時は、波形データを直接解析するのがベストです。

Python ならデータの取得と解析が一括でできる

そこで役立つのが Python です。

Python を使えば、波形データの取得と解析を一括で行うことができます。

もともと Python は数値解析や大量データの処理に強いので、こういう用途にはうってつけと言えるでしょう。

環境構築

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

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

筆者の実行環境

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

前提

あらかじめ、オシロスコープ上に転送したい波形を表示させておきましょう。

表示するチャンネルはどこでも構いません。

Python で波形データを取得する流れ

  1. PyVISA でオシロスコープを接続
  2. 波形データを保存
  3. 保存した波形データの転送

①PyVISA でオシロスコープを接続

前回同様、オシロスコープのアドレスを ResourceManager を使って取得し、接続まで進めてください。

②波形データの保存

接続がすんだら、ここからがいよいよ本題です!

チャンネルを指定して、波形データをオシロスコープの内蔵 HD に保存する処理を行います。

その前に、取得したいチャンネルがアクティブ状態(画面に表示されているか)かを確認してみましょう。

指定したチャンネルがアクティブ状態か確認してみる

****にチャンネル数(1~4)を入力してコードを実行すると、1か0が表示されるはずです。

1であればアクティブ状態で、0であれば非アクティブということになります。

VISA のコマンド構造について

VISA のコマンドは「画面表示」「波形属性」「ファイル操作」などの大きな項目から、それぞれの構成要素に下っていく構造になっています。

例えばチャンネル1の場合、 DISplay:GLObal:CH1:STATE? を送ることになりますね。

構成要素ごとに「:」で区切るのは、C++のクラス変数や構造体のメンバ変数をイメージすれば良いでしょう。

最後の「STATE」は状態を表しているため、前項の「CH1」の画面表示有無を示しています。

波形データの保存

次に、波形データを保存していきましょう。

画面キャプチャの時と同様に、SAVE コマンドを使い、今回は WAVEform で波形データを保存しました。

また、コマンド OPC を使って、処理が終了するまでウェイトを行っています。

波形データは容量が大きいことが多いので、ここできちんとウェイトを行っておきましょう!

③保存した波形データの転送

最後に、波形データを PC へ転送します。

やることは画面キャプチャの時とほぼ同じですが、ファイル名には「csv」を指定します。

VISA の FILESystem:READFile と PyVISA の read_raw は、バイナリデータとして読み出す挙動となっているため、ファイル形式は全く関係ありません。

例えるなら、Windows でファイルのコピー・ペーストを行っているだけ、という感じですね。

オシロスコープの接続を切る

続いて、テンポラリファイルを削除し、オシロスコープとの接続を切れば完了です。

これで PC 上に csv 形式の波形データが転送されたので、excel で開くも、Python でデータ解析をするも、自由にできるようになりました。

応用例:アクティブなチャンネルを自動検出し、波形データを転送

ただし、これではチャンネル1つ分しか転送できません。

複数のチャンネルを転送する場合は必然的に上記の作業を繰り返すわけですが、コードをいちいち変えるのも、csv ファイルが増えていくのも面倒ですよね?

そこで、今回は応用例として、以下のようなコードをご紹介します。

  1. アクティブなチャンネルを自動検出して、波形データを自動転送
  2. 生成されたチャンネル個別の csv ファイルを結合し、単一ファイルへ

これを使えば、オシロスコープに表示するチャンネルがいくつあっても自動で転送し、1つのコンパクトな csv ファイルに変換してくれます。

使用するモジュールは、2次元データ処理に特化した「Pandas」です。

コード

注意!

CSV_HEADER_ROWS = 7はcsv ファイルのヘッダ情報が含まれている行数、 CSV_SKIP_ROWS = 9はデータの格納が始まっている行数です。

アドレスやチャンネル数と同じく、オシロスコープによって違う場合があるので、適宜調整してください。

さいごに

今回は、PyVISA を使って、Python でオシロスコープの波形データを PC に自動転送する方法を紹介しました。

今回はデータの取得までですが、次回はいよいよ「データ解析」について解説していきます。

次回もがんばっていきましょう!

記事を書いた人

\ 3度のメシより技術が好き /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

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


書いた人はこんな人

ライトコード社員ブログ
ライトコード社員ブログ
「好きなことを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡本社、東京オフィスの2拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もりは大歓迎!
また、WEBエンジニアとモバイルエンジニアも積極採用中です!

ご応募をお待ちしております!

関連記事

採用情報

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

バックエンドエンジニア

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

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

\ 世界を変える…! /

Androidエンジニア

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

iOSエンジニア