テクシオ・テクノロジーによるおじさんのためのIOT講座


(2) PythonによるVISAプログラミング



Pythonはプログラミングのための参考資料やサンプルが豊富にありますが、人口知能やWebアプリケーション、統計処理についてが多く、通信を使って計測機器などを制御する例はそれほど多くありません。

本ページではGUIの作成とボタン処理を行うGUIライブラリ(Tkinter)、通信を行うVISAライブラリ (PyVISA)、一定周期で処理を行うインターバル動作、変数の共用を行うグローバル指定を説明いたします。

環境の準備などの手順はここでは扱いません、Python本体の他に様々な開発ツールがありますのでインターネットで検索してPython3 の実行環境をそろえてください。また、ファイル処理やグラフ出力などはインターネットに豊富にサンプルがありますので必要に応じて追加してみてください。



今回作成するPython/Tkinter でのGUI表示


Pythonでの画面の構成としては、ボタン10個、ドロップダウンリストテキストボックス3個、ラベル 2個で、処理としてはボタンのほかに単純なインターバルでの動作の時計更新も盛り込んであります。



1.初めに必要なライブラリとグローバル変数を登録します。
  
   ライブラリ登録はimportで行います、visaまたはpyvisaとtkinterを使います。
   Pythonの変数は何も指定しないとローカル変数になるようなので、リソース
   マネージャ用の変数rmと計測器用の変数instrを宣言します。複数の機器を
   制御する場合は、instr1、instr2など変数を増やすことで対応します。

2.画面のパーツを登録します。
  
   画面パーツはgrid で配置を行っています。画面の解像度や分解能、OSの種類によって
   サイズが変わってしまう症状があります。
   複数の環境で利用する場合はかなり余裕を持った配置が必要になります。
   細かいサイズ・位置を指定したい場合はplace などを使用してください。

   ボタンやコンボボックスなどのイベントはここで登録しますが、種類によって登録
   方法が異なります。

3.イベントの処理を登録します。
  
   ボタンの有効・無効は['state']で切替えます。

   テキストの取得はget()、削除はdelete()、追加はinsert ()を使用します。

   指定時間後にイベントを発生させる場合はafter()を使用します、ここでは1000ms
   後に自分自身を指定しているので1秒ごとに処理が行われます。

   デバイスを指定するinstrは、それぞれの処理でグローバル宣言をしておかないと、
   ローカル変数が割り当てられ正しく動作しなくなりますので注意してください。

4.VISA特有の処理を登録します。
  
   計測機との通信は
    (1)初めにリソースを取得します。(グローバル変数で登録済)
    (2)リソースからデバイス一覧を取得します。
    (3)制御したいデバイスを見つけます。
   の順番で開始します。

   リソースが無いなどのエラーが発生した場合の対応をtry/exceptで記述しています。

   終了時はアプリケーションを終了すればリソースは開放されますが、終了前に
   リソースを開放します。

5.RS-232C通信とSocket通信では追加の設定を行います。
  
   デバイス名の先頭にASRLの文字がある場合がRS-232C、最後にSOCKETの文字が
   ある場合がSocket通信となります。ここでは送受信のデリミタを指定し、
   RS-232Cではさらにボーレートを指定します。

6.まとめ
  実用アプリケーションには至っていませんが、アプリの最低限の内容を取り上げました。
   ・Python3に対応しています、Python2で使用する場合は多少の修正が必要です。
   ・GUIは標準のTkinterを使用し、画面配置は単純なgridを利用しました。
   ・GUIのボタンやテキストなどの最低限の扱いを記述しました。
   ・簡単なインターバル処理の方法を記述しました。
   ・通信はPyVISAを使用しました。
   ・最低限のエラー処理を記述しました。
   ・グローバル変数の利用方法を記述しました。
   ・機器を増やす場合は機器のグローバル変数を追加して対応します。

  後は使う方が必要なものを追加してご利用ください。

目次に戻る



ソースコードのダウンロード  本資料のダウンロード

©Copyright 2020 TEXIO TECHNOLOGY All Rights Reserved.