一直線カレンダー

« 2010年2月 »
12345678910111213141516171819202122232425262728

REALBasicで制御ソフトウェアを開発する(第三回)

20100223A.pngでは実際にImagePro HD/INDIE400-HDにコマンドを送るためのウィンドウを作ります。
「Window1」のタブから「プロジェクト」タブに切り替えます。タブのすぐ下「ウィンドウを追加」ボタンを押して新しいウィンドウ「Window2」を設定します。
このプロジェクトタブでは、このソフトウェアの全体を管理します。ソフトウェアのシンボルマークとなるアイコンやコンパイルされるソフトウェアの名前、プロパティで表示されるソフトウェアの説明、ヴァージョン情報などソフトウェアとしての体裁を管理するためのタブとなっています。


20100223B.png
Window2が設定されましたら「Window2」タブを選んでWindow2にパーツを置いていきます。今回使うパーツは8個です。
図のようにレイアウトしながらパーツを並べていきます。パーツの役目としまして

StaticText1:ImagePro HD/INDIE400-HDとの接続がされているかを表示する
BevelButton1:メモリー1を呼び出すコマンド送信ボタン
BevelButton2:メモリー2を呼び出すコマンド送信ボタン
BevelButton3:メモリー3を呼び出すコマンド送信ボタン
BevelButton4:メモリー4を呼び出すコマンド送信ボタン
TextArea1:ImagePro HD/INDIE400-HDからの返事を表示する
TCPSocket1:TCP/IP接続をする時に使用するパーツ
Timer1:一定間隔でプログラムを繰り返すパーツ。今回はTCP/IPで接続を繰り返します。

となります。

20100223C.png

BevelBottun1、BevelBottun2、BevelBottun3、BevelBottun4はそれぞれのCaption欄に「メモリー1」「メモリー2」「メモリー3」「メモリー4」と入力しておきます。





20100223D.pngではプログラムを記述していきます。
まずWindow2上のパーツの載っていない場所でダブルクリックします。Window2のOpen時に動作させるためのプログラムを記述します。

TCPSocket1.ADDRESS = Window1.IPField.Text
TCPSocket1.Port = 10001
TCPSocket1.Connect
TCPSocket1.Listen
StaticText1.Text = "UNConnect : " + Window1.IPField.Text


と5行のプログラムです。
TCPSocket1.ADDRESS = Window1.IPField.Textというのは
Window2のパーツ、「TCPSocket1」に対してWindow1で指定したIPアドレスを渡すためのものです。ソフトウェアが実際に起動してWindow2が表示されるとWindow1は消えたように見えますが実際には表示されていないだけで裏で動いています。なのでWindow1のIPField.Textを参照してTCPSocket1のIPアドレスへ渡すことが可能となっています。

TCPSocket1.Port = 10001 はポート番号の指定をするために記述します。ImagePro HD/INDIE400-HDの取扱説明書を読むと工場出荷時のポートが「10001」となっています。

TCPSocket1.Connect
はImagePro HD/INDIE400-HDとTCPSocket1を接続させるための命令です。TCPSocket1は自動的に接続はしません。接続のためのコマンドを記述し実行させてはじめて接続をします。
ただ実際にはImagePro HD/INDIE400-HD側の問題やLANケーブルが接続されていない場合なども考えられるためTimer1というパーツ側で接続の監視をするプログラムを記述する必要があります。

TCPSocket1.Listen は接続した機器からの返事をTCPSocket1を通して受信をするための命令です。

StaticText1.Text = "UNConnect : " + Window1.IPField.Text はWindow2の「StaticText1」のテキスト表示を指定するための命令です。UNConnectは未接続のことを意味します。つまり基本的に接続が出来ていない状態をここでは表示するように指定しています。
実際に接続ができればこのStaticText1の表示はConnectに変わるようにTimer1で指定するのです。

20100223E.pngつぎにTimer1をダブルクリックしてActionに下記のように記述します。

if TCPSocket1.IsConnected = False Then
StaticText1.Text = "UNConnect : " + Window1.IPField.Text

TCPSocket1.Connect
End if


これは4行のプログラムです。この if から始まるプログラムは条件分岐の基本文法で「もしこういう条件ならこうする」という意味の文法です。

if TCPSocket1.IsConnected = False Then は「もしTCPSocket1が接続 = 否 ならば」と訳すことができます。続いて

StaticText1.Text = "UNConnect : " + Window1.IPField.Text
はWindow2のOpenにも記述したものと同じものです。なぜOpenで記述したプログラムを繰り返すのでしょうか。
これは一度ImagePro HD/INDIE400-HDと接続ができてStaticText1の表示がConnectに変わったあとに、接続が切れた場合にこの記述が必要になります。Timer1は標準値で1秒に1回プログラムをくり返します。制御の場合、常に接続がされているかを確認する必要があります。

TCPSocket1.Connect
3行目のプログラムもWindow2のOpenにあるプログラムです。このifの文法では「もしTCPSocket1が接続 = 否 ならば」という条件なので再度接続を試みるようなプログラムを記述しています。

End if
はif文法の終を示す記述です。この End if を忘れるとif文法が終わったことになりません。

このTimer1ではImagePro HD/INDIE400-HDとの接続を監視して、接続されていない場合 接続をするようにくり返すプログラムが記述されています。

次回につづく。