ド素人がpythonでオシロスコープを制御してみた
はじめに
こんにちは。連日不穏なニュースも多いですが、いかがお過ごしでしょうか。
初記事です。この暇な日々を虚無に過ごさないため、技術記事を書いてみることにしました。
機械科で研究室も制御系ではないですが、実験で使うオシロスコープを制御できたらいいなー、ということでいろいろ調べたので忘備録がてら書き殴ります。
私のような超初心者でも理解できるように、探しても出てこなかったレベルの初歩の初歩の躓き部分から書きました。
理解の不十分・間違い等ありましたらコメント頂きたいです。
用意したもの
・PC(Windows10)
・anaconda3環境(python3.7)
・pyvisa環境
・Tera term(通信テスト用)
・RS232Cケーブル
・オシロスコープ(今回は研究室に転がっていたIWATSU DS-8812)
手順0 ソフトの用意
各ソフトをインストールしましょう。そんなんわかるわ!って方は手順1へ。
・anacondaの導入
これは詳しい解説が無限に転がっているので省略します。
・pyvisa環境の導入
こちらのサイト(https://qiita.com/ryota23/items/cebaae35f1ed15d1d1fd)を参考にインストールします。pipを2回するだけ。
・Tera termの導入
おなじみTera term。久しぶりに使ったけど偉大だなぁ。感謝の気持ちを忘れずこちらからDLしましょう。(https://ja.osdn.net/projects/ttssh2/)
手順1 オシロスコープとパソコンの接続
各部の設定
オシロスコープのUTILITIESボタンを押し、InterfaceをRS232cに設定します。
オシロスコープ側の設定はこれだけです。この画面から動いてしまうとPCからの信号が無視されてしまうっぽい...?(未検証)
RS232Cケーブルを介してオシロスコープとパソコンとを接続します。ケーブルのドライバインストールを忘れずに。
接続確認
Windows標準のDevice manegerからRS232Cケーブルが使用しているCOMportを確認します。
Tera termを起動し、使用Portを先ほど確認した番号にします。
Tera termの設定→端末から、ローカルエコーをON、送受信をCR/LFとします。(図1)
(ローカルエコー:自分が出した信号を表示してくれる。便利。)
通信速度はこのオシロスコープだとデフォルトでは9600らしいので、それに従います。
共通コマンド「*IDN?」を送信し、図2のように接続情報が帰ってくれば、接続完了です!手順2に進みましょう。
手順2 pyvisaでの通信テスト
pyvisaとは?
VISA:
Virtual Instrument Software Architectureの略。PCと測定機器でデータをやり取りするときいい感じに信号を変換してくれる。
これをpythonでできるようにしたのがpyvisaです。
こちらのユーザーガイド(https://pyvisa.readthedocs.io/en/stable/introduction/index.html)を読みつつ、プログラムを打ち込みます。今回は手順1で行った接続情報の確認までをpythonで再現します。
import visa
rm = visa.ResourceManager('C:/Windows/System32/visa32.dll')#dllfileの場所指定
my_instruments_list = rm.list_resources()#listに接続機器一覧を出力している
print(my_instruments_list)
my_instrument = rm.open_resource(my_instruments_list[0])
print(my_instrument.query("*IDN?"))#IDN?を(ASCIIで)送信した時の返事をprint
プログラムの解説
大体注釈の通りです。dllファイルがない場合、ここら辺(https://www.ni.com/ja-jp/support/downloads/drivers/download.ni-visa.html#346210)からダウンロード可能。
visa.ResourceManager()の中身を指定しなくても動く場合がありますが、pythonファイルがある場所によってはエラーを吐く場合があります。私はpython関係はDドライブに入れている為、このように直接指定しました。
実行結果
無事接続情報をprintできました!
これからの展望
とりあえず、pythonを用いて信号の送受信ができました。実際に電気信号を測定してそのデータの処理もできるはずです。気が向いたら追記します。