1.はじめに
パソコンとシリアル通信で制御可能なデバイスが持ち込まれました。
10~15年前、MATLABやScilabのGUIを使いシリアル通信で外部制御するプログラムを作成していました。
しばらくScilabのGUIは使っていませんでしたが、簡単に思い出せると思い試行錯誤を始めました。
4時間ほどguiBuilderを使ってみましたが思い出せません。
12~13年前、個人事業をしながら書いていたBLOG記事に中に、Scilab GUIに関する記事をまとめてあったのでHDDの中から探し出しました。
なお、法人事業との区別をつけるため、当時のBLOG記事は非公開にしてあります。
また画いたころより、ずいぶんScilabのバージョンも上がりましたし、著作権の管理団体も変わりました。
当時と変わらない部分は残し、変わった部分や補足が必要な部分は補足しました。
2.Scilab GUIの例題
2.1 例題の内容を説明
- シリアルポート(COMポート)の回線接続・切断の切換えをScilabのGUI画面で行えるようにする。
- 今回の例題ではプッシュ・ボタンを使い、ボタンの状態(接続、切断)を確認できるGUI画面を作成する。
説明図は、ボタンの近くに設けたエディットボックスをLEDに見立て、回線の状態に応じて色が変わるようにしています。
接続時には緑色、切断時には赤色です。
2.2 GUIによる制御内容
プッシュ・ボタンの操作でシリアル通信の接続、切断を行うためのフローチャートです。
フラグのON (=1), OFF (=0)で、シリアル回線の接続と切断を判断します。
そのため、フラグを”sw_flg”という変数をグローバル変数として設定します。
ここでは変数を定義するだけなので、必ず、”sw_flg = 0″で、初期化してください。
また、Scilabの中で、シリアル回線の記録するハンドル変数(h_com)についても、同様にグローバル変数として設定します。
2.3 プッシュ・ボタンの仕様
試作する実験装置のスイッチ類で、NKKスイッチズ株式会社 様には、いつもお世話になっています。
そのNKKスイッチズ㈱ 様 が取り扱っている商品に、照光式押しボタンスイッチ(UB2-2シリーズ)というのがあります。
このスイッチは、スイッチの状態に応じで照光色が変わります。
このスイッチの仕様を参考にScilabのGUIでプッシュ・ボタンの状態を可視化できるようにしてみたいと思います。
2.4 Scilab / guibuilderによるGUI画面の作成
guibuilderがインストールされ、立ち上げまではできるものとして説明していきます。
下図に使われているguibuilderは10年ほど前のものですが、現在のバージョンとあまり変わらないので使っています。
コンポーネントパネルから”PushButton”をクリックし、Tab名とStringを入力し、デザインパネル上にプッシュ・ボタンを作成します。
この時、Tagは、”pb_serial”、Stringは、”接続”とします。
また、ボタンの機能を説明するため、コンポーネントパネルの”Text”をクリックし、Tagは、”txt_comment”、Stringは、”シリアル通信”としてテキストを作成します。
2.5 プッシュ・ボタンのプロパティを設定
プッシュ・ボタンの背景色を赤色にするため、プロパティを設定します。
プッシュ・ボタンのプロパティ設定画面を開いたら、”Backgroundcolor”の値を設定してください。
ここでは、[R(赤),G(緑),B(青)]と、右側から、赤色、緑色、青色の諧調を入力するようになっています。
諧調の範囲は、(0.0~1.0)の間です。
透明にする場合、[-1, -1, -1]として設定します。
設定完了後にプロパティ画面を閉じると、デザインパネル上のボタンが赤色に変化します。
以上で、GUI上の準備は完了です。
ご自身の能力に応じて、例題の内容に追加したり、変更を加えても構いません。
よろしければ、Scilabのコードを次のように生成します。
コンポーネントパネルに”Generate”というメニュー(右側)があります。
この中の、”Generate GUI Code”をクリックし、Scilabのコードファイルを作成します。
guibuilderで作成したGUI画面が、figuire()やuicontrol()に変換されます。
この後、GUIのプッシュボタンを押した時に実行される制御内容をCallbackとしてプログラムを作成していきます。
2.6 グローバル変数の設定
2.2節で説明されているフローチャートから、次の変数をプログラム内のどの関数からも読み出せるようにグローバル変数として設定します。
- 回線接続/切断を識別するフラグ変数。
- 接続時にScilabが管理するハンドルを保存する変数。
以前のScilabですと、変数として設定すると暗黙の条件として初期値(=0)として設定されていました。
現在のバージョンでは何も設定されません。
初期値として、”sw_flg = 0″を設定してください。
2.7 Callback関数の編集(グローバル変数の設定)
guibuilderから出力されるGUI コードは、各GUIオブジェクトを示すuicontrol()が中心になります。
マウスでクリック等のイベントが発生した場合、そのイベントに対する処理を行う部分をCallbackと呼びます。
今回、シリアル通信回線を接続する時にプッシュ・ボタンをマウスでクリックするイベントが発生します。
その時の処理をpb_serial_Callback()という関数が用意されているので、そこにプログラムを書いていきます。
まず、最初に書き込むことは、グローバル変数になります。
2.8 Callbackの編集 (接続・切断処理の編集)
以下に示されるプログラムをCallback関数の中に書いてください。
なお、例として示してある画像は、お使いの環境にょって判読しづらい場合があるかもしれません。
以下に、コードをコピーしておきます。
// 接続処理(sw_flg=0)の場合 //
if(sw_flg == 0) then
h_com = openserial(5,”9600,n,8,1″);
set(handles.pb_serial,’String’,”切断”);
set(handles.pb_serial,’BackgroundColor’,[0.0,1.0,0.0]);
sw_flg = 1;
// 切断処理(sw_flg = 1)の場合 //
elseif (sw_flg == 1) then
closeserial(h_com);
set(handles.pb_serial,’String’,”接続”);
set(handles.pb_serial,’BackgroundColor’,[1.0,0.0,0.0]);
sw_flg = 0;
end
注意点としては、お使いのパソコンの環境により、シリアルポート(comポート)の番号が異なります。
ここでは、”com5″を使っていますが、皆様がお使いの環境、すべてに宛はなるわけではありません。
h_com = openserial( XXXX<comポート番号> , “9600,n,8,1”);
今回の例では、”com5″が相当するため、”5″としています。
ご注意願います。
2.9 Scilab GUI例題の実行結果
以上の過程を経た例題を実行した結果です。
(シリアル回線の接続)
赤色の接続ボタンをクリックすると、シリアル回線が接続されプッシュ・ボタンの色が緑色に変化します。
同時にボタンの表記が”接続”から”切断”に変化します。
(シリアル回線の切断)
緑色の切断ボタンをクリックすると、シリアル回線が切断されプッシュ・ボタンの色が赤色に変化します。
同時にボタンの表記が”切断”から”接続”に変化します。
3. おわりに
この例題を見直して、Scilab GUIのプログラムを思い出しました。
基本はGUI上のオブジェクトに生じたイベント・ドリブンのプログラムになることです。
最近、イベント・ドリブンとなるプログラムを作成していなかったので、思い出せなかったはずです。
未公開にしたBLOGの中には、今でも使える有益な記事があります。
必要に応じて、再検証しながら公開したいと思います。