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