ここではHSMS のミニホストを作成しながらプログラミングについて解説していくことにします。
|
ミニホストの仕様
作成するミニホストの仕様は以下のようなものとし、通信相手は一般的なウェハ検査装置とします。
|
プロジェクトの作成
-
Visual Studio 2017を起動し、Fileメニューから「New」 - 「Project...」をクリックします。
-
Visual C#のWindows Forms Applicationを選択し、プロジェクト名とフォルダを指定します。ここではプロジェクト名をSavoyTutorialCS2008とします。入力が完了したらOKボタンをクリックします。
-
新規のプロジェクトが作成されました。
|
ツールボックスへSavoyを追加
|
フォームにSavoyを配置
-
下記のようにSavoyHsms、SavoySecsIIをフォームに配置します。
-
Openボタンをクリックしたら、SavoyHsmsの通信設定画面が表示されるようにします。その後OKボタンが押されたら接続するようにします。設定内容はSavoy.iniファイルに保存され、次回から設定の入力は不要です。
|
private void button1_Click(object sender, EventArgs e)
{
// Setup
hsms.LoadIniFile();
if (hsms.Setup(""))
{
// If OK button was pressed, establish connection
hsms.Connect = true;
}
}
|
-
Onlineボタンをクリックしたら、S1F13を送信するようにします。
|
private void button2_Click(object sender, EventArgs e)
{
// Send S1F13
outmsg.SML = "s1f13w{}";
hsms.Send(outmsg.Msg);
}
|
-
PP Selectボタンをクリックしたら、リモートコマンドでPP-SELECTを送信するようにします。
|
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);
}
|
-
PP Startボタンをクリックしたら、リモートコマンドでSTARTを送信するようにします。
|
private void button4_Click(object sender, EventArgs e)
{
// Send S2F41 Start
outmsg.SML = "s2f41w{<a'START'>{{}}}";
hsms.Send(outmsg.Msg);
}
|
|
イベントの処理
SavoyHsmsからのイベントを処理します。
-
Connectedイベントが来たら、セレクト要求を送信するようにします。
|
private void hsms_Connected(object sender, AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent e)
{
// Connected
// Send select request
outmsg.SML = "Select.req";
hsms.Send(outmsg.Msg);
}
|
-
Receivedイベントが来たら、メッセージ内容を解析するためにSavoySecsIIに渡します。
|
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;
|
|
全ソースコード
以上でミニホストの完成です。このプロジェクトはゼロからスクラッチで作った訳ですが、空白行やコメントを入れてもたったの83行しかありません。実際に自分で書いたコードの行数は、コメントを除くとなんと30行です。他社製品にあるような訳の分からない設定
ファイルもデータファイルも書きませんでした。このような驚異的なまでの簡単さは、他社では真似のできない芸当です。
|
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;
}
}
}
}
|
|