Swing ActiveXコントロール
|
この章ではSECSのミニホストを作成しながらプログラミングについて解説していくことにします。開発する言語はVisual Basicを使用します。
|
ミニホストの仕様
作成するミニホストの仕様は以下のようなものとし、通信相手は一般的なウェハ検査装置とします。
- 装置に対してオンライン移行、レシピ指定、測定開始、データ受信を行うことができます。
-
送信できるメッセージは以下のもののみとします。
S1F13W
S2F41W
S6F12
-
受信できるメッセージは以下のもののみとします。
S1F14
S2F42
S6F11W
- 装置の初期設定はすでに設定されているものとします。
- ストリーム9やファンクション0の処理は行わない。
- T3タイムアウトの監視はしない。
|
ミニホストを作ってみよう
-
新規プロジェクトを作成する
以下のようなダイアログボックスが現れたら『Standard EXE』を選択します。
-
Swing ActiveXコントロールの挿入
メニューから『プロジェクト』―『コンポーネント』を選択します。
Swing ActiveX Control moduleにチェックマークを付け、OKボタンを押します。
Swing ActiveXコントロールがツールボックスに追加されるのに気が付くはずです。
-
コントロールの貼り付け
フォームにSwingSecsI、SwingSecsIIコントロールを貼り付けてみましょう。SwingSecsIIは2つ貼り付けて配列にしておくと便利です。こうすることで受信と送信のメッセージを変数のように別々に扱うことができるからです。
またボタン、ラベル、テキストなどを図のように配置しておきます。ボタンも配列にしておくとすっきりしたプログラムとなります。
プログラミングスタイルまで押し付けようとは考えていませんので、このあたりは各人の好みで自由にアレンジしてもいっこうに構いません。
-
ポートをオープンする
ポートのオープン処理はFormLoadイベント中に記述しましょう。
こうすることでアプリケーション起動時にすぐ通信が可能となります。
.Active = True
If Not .Active Then
MsgBox "エラー:通信ポートをオープンできません!"
End If
実務アプリケーションを作成する場合は『オープン』ボタンなどを追加し、これを押すことで初めてオープンするようにした方がいいでしょう。
オープンに成功するとは限りませんし、いきなりオープンしたくない場合もあるかもしれないからです。
-
オンライン移行を送信する
オンライン移行コマンドを送信するにはボタンのハンドラの中からSendメソッドを使います。
配列にしておいたSwingSecsIIコントロールはインデックス0を受信用として、インデックス1を送信用として使用することにします。
ホストから装置にS1F13を投げる場合は空のリストを送信してやります。
.List = "s1f13w{}"
SwingSecsI1.Send .Msg
SwingSecsIコントロールのSendメソッドには引数としてSwingSecsIIコントロールのMsgプロパティを渡してやります。
-
レシピ指定を送信する
レシピ指定はS2F41でPP-SELECTを送信します。
.List = "s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + Text1.Text + "'>}}}"
SwingSecsI1.Send .Msg
-
測定をかける
測定開始はS2F41でSTARTを送信します。
.List = "s2f41w{<A'START'>{{}}}"
SwingSecsI1.Send .Msg
-
装置イベントを読む
受信したメッセージはReadイベントで報告されます。
このイベントハンドラの始めの部分でSwingSecsIIコントロールに受信した内容を渡してやります。
これにより他のプロパティの内容を参照することができるようになります。
.Msg = pszMsg
装置からはS6F11でイベントが送られてくるものとします。
全てのイベントを拾わず以下のCEIDだけとします。
10 | レシピ指定に成功 |
11 | レシピ指定に失敗 |
20 | 測定完了 |
30 | 測定データ |
CEIDは"2"のノード位置に格納されてきます。
この値が何かによってそれぞれの処理を記述することになります。
'CEID .Pointer = "2"
Select Case CInt(.Value)
Case 10
MsgBox "レシピ指定に成功した"
Case 11
MsgBox "レシピ指定に失敗した"
Case 20
MsgBox "測定が完了した"
Case 30
'測定データ
End Select
S6F11は返答を期待していますのでバイナリ0の2次メッセージを送信します。
.List = "s6f12<b 0>"
.Reply pszMsg
SwingSecsI1.Send .Msg
このほかにS1F14とS2F42も受信しますが、同様に記述してやればよいでしょう。
-
実行
以上でミニホストは完成です。
シンプルではあるがホストとしての最低限の機能は持っています。
にも関わらずプログラムのリストは僅か55行足らずです。
同じ機能のソフトウェアをコントロールを使わずに自分でスクラッチから作成することを考えてみれば、いかに工数を短縮できたかが分かるというものです。
Option Explicit
Private Sub Command1_Click(Index As Integer)
With SwingSecsII1(1)
Select Case Index
Case 0
'Attempt online
.List = "s1f13w{}"
Case 1
'Select recipe
.List = "s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + Text1.Text + "'>}}}"
Case 2
'Start measurement
.List = "s2f41w{<a'START'>{{}}}"
End Select
SwingSecsI1.Send .Msg
End With
End Sub
Private Sub Form_Load()
With SwingSecsI1
.Active = True
If Not .Active Then
MsgBox "Error : Cannot open serial port!"
End If
End With
End Sub
Private Sub SwingSecsI1_Read(ByVal pszMsg As String)
With SwingSecsII1(0)
.Msg = pszMsg
If .Stream = 1 And .Function = 14 Then
'S1F14
MsgBox "You are online"
End If
If .Stream = 6 And .Function = 11 Then
'S6F11
SwingSecsII1(1).List = "s6f12<b 0>"
SwingSecsII1(1).Reply pszMsg
SwingSecsI1.Send SwingSecsII1(1).Msg
'CEID
.Pointer = "2"
Select Case CInt(.Value)
Case 10
MsgBox "Recipe selected"
Case 11
MsgBox "Recipe selection failure"
Case 20
MsgBox "Measurement completed"
Case 30
'Measurement data
End Select
End If
End With
End Sub
|
|