一直線カレンダー

« 2010年3月 »
12345678910111213141516171819202122232425262728293031

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

20100303A.png
続いてTCPSocket1に対してプログラムを記述します。
TCPSocket1やTimer1といったパーツはプログラムをビルドした場合、その機能は画面上に出て見えるものではありません。こういったパーツはウィンドウ上に乗せた配置をしなくても大丈夫です。
今回はウィンドウの外の左下に配置しています。TCPSocket1はTCP/IP接続をするためのパーツです。REALBasicではこういったパーツをウインドウに配置するだけで機能するようになっています。TCPSocket1では接続するIP AddressとPort番号を指定しなくてはなりません。


IP AddressはWindow1の「IPField」というTextFieldで指定したものを設定するようにWindow2のOpenのエリアにプログラムを記述しました。同じくPort番号もImagePro HD/INDIE400-HDは「10001」なのでWindow2のOpenのエリアにプログラムを記述しました。

20100303B.pngTCPSocket1をダブルクリッククリックしてConnectedのエリアに

StaticText1.Text = "Connected : " + Window1.IPField.Text

と記述します。TCPSocket1のConnectedエリアはTCP接続が確立したときに動作するプログラムを記述する場所です。TCP接続が確立したことを表すことで このソフトウェアとImagePro HD/INDIE400-HDが接続されていることがわかるようにします。
ここではStaticText1というテキストを表示するパーツを使用します。接続すると「Connected」と表示され さらに接続をしたImagePro HD/INDIE400-HDのIP Addressを表示するような記述をしています。
こういうプログラムの記述はImagePro HD/INDIE400-HDへの制御コマンド送信とは直接関係がないと言えます。しかし上手く制御が出来ないトラブルが起きたとき、ソフトウェアとImagePro HD/INDIE400-HDの接続が出来ていないのか それ以外の原因なのかを知るのに役にたちます。また実際に「Connected」と表示されると安心感があります。

20100303C.png続いてTCPSocket1のConnectedエリアの下にあるDataAvailableエリアへの記述をします。

TextArea1.Text = TextArea1.Text + Me.ReadAll(Encodings.WindowsANSI)

と記述します。TextArea1は今回ImagePro HD/INDIE400-HDから送られてくる情報を表示するために 配置したパーツです。
DataAvailableエリアはTCPSocket1を通して送られてくる情報を管理する場所です。このプログラムはDataAvailableに何か情報がきたらTextArea1へ書き出しをするように命令しています。Me.ReadAllのMeは自分自身のことをさします。TCPSocket1.ReadAllと書いても問題ありません。ReadAllという命令はDataAvailableに来た情報を 読み出してDataAvailableの中身を空にします。DataAvailableにたくさんの情報が集まり過ぎるとバッファオーバーフローという状態になり起動しているパソコンが不安定になります。
DataAvailableに情報が来たらすぐに他の場所に移して、DataAvailableは常に空にしておくようなプログラムが望ましいです。
(Encodings.WindowsANSI)は今回に関してはあまり重要ではありません。ImagePro HD/INDIE400-HDから送られてくる情報は ASCIIコードと呼ばれる文字列です。WindowsANSIもASCIIコードを拡張しているので問題ありません。他にはUTF8、UTF16、UCS4、ASCII、MacRoman、MacJapanese、WindowsLatin1などもあります。

20100303D.pngでは最後にBevelButton1にImagePro HD/INDIE400-HDを制御させるコマンドを送信する部分を記述します。
Window2のBevelButton1ボタンをダブルクリックしてActionエリアを開きます。このActionエリアにプログラムを記述することでボタンを押したときに動作するプログラムを書くことができます。
ここで記述するプログラムは

TCPSocket1.Write "VIEWR 1" + Chr(13)
TextArea1.Text = ""


の2行です。TCPSocket1.WriteとはTCPSocket1に対して書き出す(Write)と命令しています。書き出すという言い方は日本語ですと少しヘンですがここでは送信するという言い方のほうがしっくりします。
実際に送信するコマンドはここでは"VIEWR 1" + Chr(13)となります。
「VIEWR 1」はImagePro HD/INDIE400-HDのZOOM/PAN機能を使用してメモリーした、メモリー1を呼び出すためのコマンドです。 + Chr(13)はASCIIコードでキャリッジリターンを意味しています。キャリッジリターンは改行のことでここでは「VIEWR 1」の後に続いて改行コードを送信するということになります。
映像機器を制御する場合、制御コマンドと改行コードを続けて送ることは暗黙のルールみたいになっています。
2行目のTextArea1.Text = ""は映像機器からの返事を表示するTextArea1のテキスト表示をリセットするために命令を記述します。

BevelButton1にコマンドを送るためのプログラムを記述しました。
同じようにBevelButton2、BevelButton3、BevelButton4にもそれぞれメモリー2、メモリー3、メモリー4を呼び出すプログラムをそれぞれのActionエリアに記述します。

BevelButton2のAction プラグラム

TCPSocket1.Write "VIEWR 2" + Chr(13)
TextArea1.Text = ""



BevelButton3のAction プラグラム

TCPSocket1.Write "VIEWR 3" + Chr(13)
TextArea1.Text = ""



BevelButton4のAction プラグラム

TCPSocket1.Write "VIEWR 4" + Chr(13)
TextArea1.Text = ""


以上でImagePro HD/INDIE400-HDのビューメモリーを呼び出すプログラムが出来ました。
プログラムの記述が間違っていなければ、REALBasicの「実行」ボタンを押すとソフトウェアが起動します。
このプログラムを単体のアプリケーションとする場合は「ビルド」ボタンを押すだけでコンパイルされたソフトウェアが生成されます。