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 のミニホストを作成しながらプログラミングについて解説していくことにします。 Visual Basic 2008とC# 2008では、作成手順やソースコードは極めて似ていましたが、VC++ 2008の場合は少し異なります。


ミニホストの仕様

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

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


    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++のMFC Applicationを選択し、プロジェクト名とフォルダを指定します。 ここではプロジェクト名をSavoyTutorialVC2008とします。 入力が完了したらOKボタンをクリックします。


  3. ウェルカム画面が表示されます。 Nextボタンをクリックします。



  4. Dialog basedを選択し、Use Unicode librariesのチェックははずします。 他の設定はデフォルトのままで構わないので、Finishボタンをクリックします。



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



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

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




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




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




フォームにSavoyを配置

  1. 下記のようにSavoyHsms、SavoySecsIIをダイアログリソースに配置します。




  2. 変数として割り当てます。 SavoyHsmsオブジェクトを選択して右クリックし、Add Variableをクリックします。




  3. Variable typeをCSavoyHsmsに変更し、.h fileと.cpp fileもそれぞれSavoyHsms.h、SavoyHsms.cppとします。 Variable nameはm_hsmsとし、Finishボタンをクリックします。




  4. 同様にSavoySecsIIにも変数を割り当てます。 Variable typeをCSavoySecsIIに変更し、.h fileと.cpp fileもそれぞれSavoySecsII.h、SavoySecsII.cppとします。 Variable nameはm_inmsgおよびm_outmsgとします。




  5. レシピ名はCString型の変数とし、m_strPPIDとします。




ラッパークラスの置き換え

Visual C++ 2008はActiveXコントロールのラッパークラス作成に関する、いくつかの問題があります。 このためJazz Softでは不具合対策用のラッパークラスを提供しています。 ラッパークラスはVisual C++ 6.0でも作成可能ですが、enumが反映されません。
  1. Visual C++ 2008を終了し、プロジェクトをいったん閉じます。

  2. SavoyHsms.h、SavoyHsms.cpp、SavoySecsII.h、SavoySecsII.cppを上書きします。

  3. 再びVisual C++ 2008を起動し、プロジェクトを読み込み直します。

ボタンの処理

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

    Visual C++

    void CSavoyTutorialVC2008Dlg::OnBnClickedButton1()
    {
      // Setup
      m_hsms.LoadIniFile();
      if(m_hsms.Setup(""))
      {
        // If OK button was pressed, establish connection
        m_hsms.SetConnect(true);
      }
    }



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

    Visual C++

    void CSavoyTutorialVC2008Dlg::OnBnClickedButton2()
    {
      // Send S1F13
      m_outmsg.SetSml("s1f13w{}");
      m_hsms.Send(m_outmsg.GetMsg());
    }



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

    Visual C++

    void CSavoyTutorialVC2008Dlg::OnBnClickedButton3()
    {
      // Send S2F41 PP-Select
      UpdateData();
      m_outmsg.SetSml("s2f41w{<a'PP-SELECT'>{{<a'PPID'><a'" + m_strPPID + "'>}}}");
      m_hsms.Send(m_outmsg.GetMsg());
    }



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

    Visual C++

    void CSavoyTutorialVC2008Dlg::OnBnClickedButton4()
    {
      // Send S2F41 Start
      m_outmsg.SetSml("s2f41w{<a'START'>{{}}}");
      m_hsms.Send(m_outmsg.GetMsg());
    }



イベントの処理

SavoyHsmsからのイベントを処理します。 イベントハンドラは、プロパティウィンドゥから作成できます。


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

    Visual C++

    void CSavoyTutorialVC2008Dlg::ConnectedSavoyhsmsctrl1(LPCTSTR lpszIPAddress, long lPortNumber)
    {
      // Connected
      // Send select request
      m_outmsg.SetSml("Select.req");
      m_hsms.Send(m_outmsg.GetMsg());
    }



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

    Visual C++

    void CSavoyTutorialVC2008Dlg::ReceivedSavoyhsmsctrl1(LPCTSTR lpszIPAddress, long lPortNumber, LPCTSTR lpszMsg)
    {
      m_inmsg.SetMsg(lpszMsg);



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

    Visual C++

      switch(m_inmsg.GetSType())
      {
      case 0:
        // Data message
        if(m_inmsg.GetWbit() && m_inmsg.GetFunction()%2)
        {
          // Need to reply something...
          m_outmsg.SetSml("<b 0>");
          m_outmsg.Reply(lpszMsg);
          m_hsms.Send(m_outmsg.GetMsg());
        }
        break;



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

    Visual C++

      case 1:
        // Select request
        m_outmsg.SetSml("Select.rsp");
        m_outmsg.Reply(lpszMsg);
        m_hsms.Send(m_outmsg.GetMsg());
        break;
      }
    }



全ソースコード

以上でミニホストの完成です。 全ソースコードはいくつかのファイルで構成されますので、ここでは載せないことにします。

このプロジェクトはゼロからスクラッチで作った訳ですが、ソフトの中心であるSavoyTutorialVC2008Dlg.cppファイルは、空白行やコメントを入れてもたったの231行しかありません。 実際に自分で書いたコードの行数は、コメントを除くとなんと31行です。 他社製品にあるような訳の分からない設定ファイルもデータファイルも書きませんでした。 このような驚異的なまでの簡単さは、他社では真似のできない芸当です。
お問い合わせ   JazzSoft@live.com
  Copyright © 1997 - 2024 Jazz Soft, Inc.