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

Dorian.Core が追加されました。Dorian は .NET 6 と 7 に対応するようになりました。

Savoy ActiveXコントロール   




パンフレット

日本語

Savoy サンプル - ミニホスト (Visual C# 2008)

ここではHSMS のミニホストを作成しながらプログラミングについて解説していくことにします。


ミニホストの仕様

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

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


    Select.req
    Select.rsp
    S1F13
    S2F41
    S6F12


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


    Select.req
    Select.rsp
    S1F14
    S2F42
    S6F11


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

プロジェクトの作成

  1. Visual Studio 2017を起動し、Fileメニューから「New」 - 「Project...」をクリックします。


  2. Visual C#のWindows Forms Applicationを選択し、プロジェクト名とフォルダを指定します。ここではプロジェクト名をSavoyTutorialCS2008とします。入力が完了したらOKボタンをクリックします。


  3. 新規のプロジェクトが作成されました。



ツールボックスへSavoyを追加

この作業は1回だけ行えば、次回からは不要です。
  1. Toolboxの余白部分を右クリックし、メニューからChoose Itemsを選んでクリックします。次の画面が表示されるまでに、1分以上かかる場合があります。




  2. COM Componentsタブを選択し、一覧からSavoy ActiveX Control moduleにチェックマークをつけます。そしてOKボタンをクリックします。




  3. Savoyがツールボックスに追加されますので、将来探しやすくなるようTabを追加して整理しておきます。




フォームにSavoyを配置

  1. 下記のようにSavoyHsms、SavoySecsIIをフォームに配置します。




  2. Openボタンをクリックしたら、SavoyHsmsの通信設定画面が表示されるようにします。その後OKボタンが押されたら接続するようにします。設定内容はSavoy.iniファイルに保存され、次回から設定の入力は不要です。

    Visual C#

    private void button1_Click(object sender, EventArgs e)
    {
      // Setup
      hsms.LoadIniFile();
      if (hsms.Setup(""))
      {
        // If OK button was pressed, establish connection
        hsms.Connect = true;
      }
    }



  3. Onlineボタンをクリックしたら、S1F13を送信するようにします。

    Visual C#

    private void button2_Click(object sender, EventArgs e)
    {
      // Send S1F13
      outmsg.SML = "s1f13w{}";
      hsms.Send(outmsg.Msg);
    }



  4. PP Selectボタンをクリックしたら、リモートコマンドでPP-SELECTを送信するようにします。

    Visual C#

    private void button3_Click(object sender, EventArgs e)
    {
      // Send S2F41 PP-Select
      outmsg.SML = "s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + textBox1.Text + "'>}}}";
      hsms.Send(outmsg.Msg);
    }



  5. PP Startボタンをクリックしたら、リモートコマンドでSTARTを送信するようにします。

    Visual C#

    private void button4_Click(object sender, EventArgs e)
    {
      // Send S2F41 Start
      outmsg.SML = "s2f41w{<a'START'>{{}}}";
      hsms.Send(outmsg.Msg);
    }



イベントの処理

SavoyHsmsからのイベントを処理します。
  1. Connectedイベントが来たら、セレクト要求を送信するようにします。

    Visual C#

    private void hsms_Connected(object sender, AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent e)
    {
      // Connected
      // Send select request
      outmsg.SML = "Select.req";
      hsms.Send(outmsg.Msg);
    }



  2. Receivedイベントが来たら、メッセージ内容を解析するためにSavoySecsIIに渡します。

    Visual C#

    private void hsms_Received(object sender, AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent e)
    {
      inmsg.Msg = e.lpszMsg;



  3. 返信の必要なデータメッセージを受け取ったら、適当な返事を返信します。

    Visual C#

    switch(inmsg.SType)
    {
    case 0:
      // Data message
      if(inmsg.Wbit && (inmsg.Function % 2)!=0)
      {
        // Need to reply something...
        outmsg.SML = "<b 0>";
        outmsg.Reply(e.lpszMsg);
        hsms.Send(outmsg.Msg);
      }
      break;



  4. セレクト要求を受け取ったら、セレクト応答を返信します。

    Visual C#

    case 1:
    // Select request
    outmsg.SML = "Select.rsp";
    outmsg.Reply(e.lpszMsg);
    hsms.Send(outmsg.Msg);
    break;



全ソースコード

以上でミニホストの完成です。このプロジェクトはゼロからスクラッチで作った訳ですが、空白行やコメントを入れてもたったの83行しかありません。実際に自分で書いたコードの行数は、コメントを除くとなんと30行です。他社製品にあるような訳の分からない設定 ファイルもデータファイルも書きませんでした。このような驚異的なまでの簡単さは、他社では真似のできない芸当です。

Visual C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SavoyTutorialCS2008
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      // Setup
      hsms.LoadIniFile();
      if (hsms.Setup(""))
      {
        // If OK button was pressed, establish connection
        hsms.Connect = true;
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      // Send S1F13
      outmsg.SML = "s1f13w{}";
      hsms.Send(outmsg.Msg);
    }

    private void button3_Click(object sender, EventArgs e)
    {
      // Send S2F41 PP-Select
      outmsg.SML = "s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + textBox1.Text + "'>}}}";
      hsms.Send(outmsg.Msg);
    }

    private void button4_Click(object sender, EventArgs e)
    {
      // Send S2F41 Start
      outmsg.SML = "s2f41w{<a'START'>{{}}}";
      hsms.Send(outmsg.Msg);
    }

    private void hsms_Connected(object sender, AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent e)
    {
      // Connected
      // Send select request
      outmsg.SML = "Select.req";
      hsms.Send(outmsg.Msg);
    }

    private void hsms_Received(object sender, AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent e)
    {
      inmsg.Msg = e.lpszMsg;
      switch(inmsg.SType)
      {
      case 0:
        // Data message
        if(inmsg.Wbit && (inmsg.Function % 2)!=0)
        {
          // Need to reply something...
          outmsg.SML = "<b 0>";
          outmsg.Reply(e.lpszMsg);
          hsms.Send(outmsg.Msg);
        }
        break;
      case 1:
        // Select request
        outmsg.SML = "Select.rsp";
        outmsg.Reply(e.lpszMsg);
        hsms.Send(outmsg.Msg);
        break;
      }
    }
  }
}

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