Jazz Soft お問い合わせ   JazzSoft@live.com     日本語   英語  日本語  中国語(繁体字)  中国語(簡体字)
工場自動化と歩留り管理ソリューション 
Skip Navigation Linksホーム > 製品一覧 > Swing > サンプル > ホスト(Visual Basic 2008)

Jazz Softは2024年、日本からニューヨークに移転しました。

Swing ActiveXコントロール   



プログラミングガイド ~ ミニホストの作成(Visual Basic 2008編)

この章ではSECSのミニホストを作成しながらプログラミングについて解説していくことにします。開発する言語はVisual Basicを使用します。


ミニホストの仕様

作成するミニホストの仕様は以下のようなものとし、通信相手は一般的なウェハ検査装置とします。

  • 装置に対してオンライン移行、レシピ指定、測定開始、データ受信を行うことができます。
  • 送信できるメッセージは以下のもののみとします。

    S1F13W
    S2F41W
    S6F12

  • 受信できるメッセージは以下のもののみとします。

    S1F14
    S2F42
    S6F11W

  • 装置の初期設定はすでに設定されているものとします。
  • ストリーム9やファンクション0の処理は行わない。
  • T3タイムアウトの監視はしない。

ミニホストを作ってみよう

  1. 新規プロジェクトを作成する
    Visual Basicを立ち上げ、メニューから[File] - [New] - [Project]を選択します。



    "Windows Forms Application"を選択します。



    下記のようにプロジェクトが作成されました。




  2. Swing ActiveXコントロールの挿入
    ツールボックスを右クリックし、ポップアップメニューから"Choose Items..."を選択します。



    "COM Components"タブに切り替え、Swing ActiveXコントロールにチェックし、OKボタンを押します。



    ツールボックスにSwing ActiveXコントロールが現れます。




  3. コントロールの貼り付け
    フォームにSwingSecsI、SwingSecsIIコントロールを貼り付けてみましょう。SwingSecsIIは2つ貼り付けておくと便利です。こうすることで受信と送信のメッセージを変数のように別々に扱うことができるからです。またボタン、ラベル、テキストなども図のように配置しておきます。



    プログラミングスタイルまで押し付けようとは考えていませんので、このあたりは各人の好みで自由にアレンジしてもいっこうに構いません。


  4. ポートをオープンする
    ポートのオープン処理はFormLoadイベント中に記述しましょう。 こうすることでアプリケーション起動時にすぐ通信が可能となります。


    .Active = True
    If Not .Active Then
      MsgBox "Error : Cannot open serial port!"
    End If


    実務アプリケーションを作成する場合は『オープン』ボタンなどを追加し、これを押すことで初めてオープンするようにした方がいいでしょう。 オープンに成功するとは限りませんし、いきなりオープンしたくない場合もあるかもしれないからです。


  5. オンライン移行を送信する
    オンライン移行コマンドを送信するにはボタンのハンドラの中からSendメソッドを使います。ホストから装置にS1F13を投げる場合は空のリストを送信してやります。


    .List = "s1f13w{}"
    AxSwingSecsI1.Send(.Msg)


    SwingSecsIコントロールのSendメソッドには引数としてSwingSecsIIコントロールのMsgプロパティを渡してやります。


  6. レシピ指定を送信する
    レシピ指定はS2F41でPP-SELECTを送信します。


    .List = "s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + TextBox1.Text + "'>}}}"
    AxSwingSecsI1.Send(.Msg)



  7. 測定をかける
    測定開始はS2F41でSTARTを送信します。


    .List = "s2f41w{<A'START'>{{}}}"
    AxSwingSecsI1.Send(.Msg)



  8. 装置イベントを読む
    受信したメッセージはReadイベントで報告されます。 このイベントハンドラの始めの部分でSwingSecsIIコントロールに受信した内容を渡してやります。 これにより他のプロパティの内容を参照することができるようになります。


    .Msg = e.pszMsg


    装置からはS6F11でイベントが送られてくるものとします。 全てのイベントを拾わず以下のCEIDだけとします。

    CEIDDescription
    10Recipe selected.
    11Recipe selection failure.
    20Measurement completed.
    30Measurement 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も受信しますが、同様に記述してやればよいでしょう。


  9. 実行
    以上でミニホストは完成です。 シンプルではあるがホストとしての最低限の機能は持っています。 にも関わらずプログラムのリストは僅か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

お問い合わせ   JazzSoft@live.com
  Copyright © 1997 - 2024 Jazz Soft, Inc.