目次
コンテナ上のJupyter NotebookからRIGOLの機器を動かす
前回、SynologyのNAS上に構成したDockerコンテナのJupyter NotebookからRIGOLの機器にLAN接続するまでの手順を説明しました。
今回の記事では、プログラミングマニュアルのコマンドをPythonで実行して、実際に機器の遠隔制御や状態取得等を行う方法について解説します。
機器制御に関してはC言語ベースのMFCアプリケーションやLabVIEWによるグラフィック言語で組む方も多いと思いますが、Jupyter Notebook環境であれば低コストに実行環境が構築でき、Jupyterによる強力な分析機能も持っているので容易に機器制御とデータ解析を実現できます。
Pythonなので組込周りのの方にはあまり馴染みは無い言語ではあるものの、機器制御と簡単な制御、ファイル出力くらいならC言語に触れられる方であれば問題なく動かせるレベルです。
制御コマンドはプログラミングマニュアルを参考に記述
基本的な使用方法については、Jupyter Notebook上にPythonとVISAに基づく記述を行い、query関数とwrite関数でプログラミングマニュアルにあるコマンドを投げて機器制御を行います。
プログラミングマニュアルは、RIGOLの公式ページ上で機器ごとに公開しているので、それを参照しながらコマンドとコードを合わせていきます。例えば、直流電源装置 DP900シリーズの出力制御のOUTPutコマンドはこんな感じで書かれています。
基本的な環境構築については、前回の記事で解説しているのでそれを参照してもらえればOKです。今回の解説では、同一のLAN内にRIGOL機器とNASのDockerコンテナに構成したJupyter Notebookで作業を行います。
1行目はpyvisaライブラリをインポートして、open_resourceの引数に機器のIPアドレスを記述して+IDN?コマンドで接続確認を表示するようにしておきます。
import pyvisa
inst = pyvisa.ResourceManager().open_resource('TCPIP::***.***.***.***::INSTR')
print(inst.query('*IDN?').strip())
制御を行う機器の指定は、機器のアドレスを格納したオブジェクト変数を使い分けて決定します。上のコマンドの場合、inst変数で指定しているアドレスの機器を遠隔制御することになります。
機器制御に関しては、write関数でコマンドを投げることで実現します。コマンドに関しては機器のプログラミングマニュアルにコマンドとその動作が記載されているので、必要に応じたコマンドを入力します。
例えば、直流電源装置のCH1の出力状態をONにする場合、以下のOUTPutコマンドを以下のように実行すればOKです。
inst.write('OUTP CH1,ON')
このコマンドでは、inst変数に格納されているIPアドレスに対応する機器へコマンドを送信しています。ちなみにOUTPutコマンドはOUTPとして省略しています。
機器状態の取得や測定値の参照に関しては、コマンドに疑問符をつけてquery関数を使用すると値が返っています。それを変数に格納したりprint関数に投げることで結果出力が可能になります。
例えば、直流電源装置のCH1の出力状態を確認するにはOUTP?コマンドを使用します。
print(inst.query('OUTP? CH1').strip())
この場合、print関数によって返り値が表示され、出力がOFF状態であれば0が表示され、ONであれば1が表示されます。
さらに、CH1の出力電流を参照したい場合にはMEASコマンドにCURR?オプションを付けてCH1を指定します。
print(inst.query('MEAS:CURR? CH1').strip())
このコマンドを実行すると、直流電源装置がコマンドを受け取った時点の電流値を表示します。
実際にON/OFF制御をしてみる
コマンドを解説しているだけでは味気ないので、実際にJupyter Notebook上でコードを実行して機器を遠隔制御してみます。
実践では、機器のIPアドレスを入力して、出力状態を取得した後に出力をON状態にして、再度出力状態の取得の4つのコードを実行します。実際のコードは下記になります。
import pyvisa
inst = pyvisa.ResourceManager().open_resource('TCPIP::192.168.***.***::INSTR')
print(inst.query('*IDN?').strip())
print(inst.query('OUTP? CH1').strip())
inst.write('OUTP CH1,ON')
print(inst.query('OUTP? CH1').strip())
そして、これらのコードを順番に実行した時の動画が以下になります。
ちょっと分かり難いんですが、3コード目の’OUTP CH1,ON’を実行した時にDP900には触れてませんがCH1出力ボタンが黄色く光って出力状態に変わっていることが分かると思います。
こんな感じでupyter NotebookでもLAN経由で機器の沿革制御と状態取得が確認できたので、あとは条件分岐などを書き込んだコードを書けば測定試験の自動化なども実現できるようになりました。
次回は、直流電源装置と電子負荷を連動させて自動的にバッテリーの充放電サイクル試験を行う方法について解説します。