この短い記事では、Visual C#を使用してSecsToHost.Netを機器アプリケーションソフトウェアに統合する方法を紹介します。.
機器コントローラにSECS/GEM機能を追加することは、複雑である必要はありません。SECS/GEMは SecsToHost.Net, つまり、3つの簡単なステップ(最小限のコーディングで)を踏めば、1時間もかからずに達成できるということだ!
ステップ#1 - ダイナミックコンフィグレーション
モデルビルダ(SDK に付属)を使用して、装置のパラメータ(ステータス変数、ディスクリート変数、装置定数 / 設定など)、イベント、アラーム、リモート / ホストコマンドなどを追加または定義します。.
GEMデータ項目はいくつでも追加でき、これらの設定はEquipmentTemplate.xmlファイルに保存されます。(ファイル名は変更可能)
この記事の例に従うには、これらのGEMデータ項目を定義する必要があります:
1.
ステータス変数:"圧力 "と "温度 "を追加"
2.
CEID:"SensorDataChanged "を追加。"
3.
アラーム:"Alarm1 "を追加"
すべてのGEMデータ項目IDは自動的に生成される
ステップ#2 - SecsToHost.Net DLLをアプリケーションに統合する
ステップ1で必要なGEMデータ項目をすべて定義したら、これらのDLLをプロジェクトリファレンスに追加します。.
ステップ 1 で生成した EquipmentTemplate.xml で GEMController オブジェクトを初期化します。.
private GEMController gemController;
private void InitializeSecsToHost() { GEMController = new GEMController(); gemController = new GEMController()
gemController = new GEMController();
try {
// 通信状態の遷移イベントを購読します
gemController.CommunicationStateChanged += OnCommunicationStateChanged;
// GEMコントロールの状態遷移イベントを購読する
gemController.ControlStateChanged += OnControlStateChanged;
// Hostから送信されたGEMリモートコマンドを受信します (S2F21, S2F41, S2F49)
gemController.RemoteCommandIn += OnRemoteCommandIn;
// GEM Recipe Download Inquireを受信する(S7F1)
gemController.RecipeDownloadInquired += OnRecipeDownloadInquired;
// Hostから送信されたGEMレシピダウンロード(S7F3)を受信する
gemController.RecipeDownloadReceived += OnRecipeDownloadReceived;
// GEM レシピのアップロードリクエストを受信します (S7F5)
gemController.RecipeUploadRequested += OnRecipeUploadRequested;
// Hostから送信されたGEM Terminal Message(S10F3)を受信します。
gemController.TerminalMessageReceived += OnTerminalMessageReceived;
// GEM Controller を初期化します。
gemController.Initialize("EquipmentTemplate.xml", @"C:¥EquipmentTemp");
}
catch (Exception ex) { {.
Logger("Error: Failed to initialize SecsToHost.Net");
}
}</xmp
上記のgemController.Initializeメソッドは、EquipmentTemplate.xmlファイルを取り込み、実行時にGEMデータアイテムをロードします。.
機器のパラメータ値が変更されるたびに、 gemController.SetAttribute メソッドをコールして値を更新します。.
例えば、パラメータ「圧力」と「温度」を更新します:
//SVIDを更新:Pressure
gemController.SetAttribute("Pressure", AttributeType.SV, "89");
// SVID:温度を更新
gemController.SetAttribute("Temperature", AttributeType.SV, "122.8");.
//ホストに対してCEID: SensorDataChangedイベント通知を行う
gemController.SendCollectionEvent("SensorDataChanged");。
ホストにアラームを発生またはアラーム通知を消去する:
// Raise ALID: Alarm1: アラームセット通知をホストに送信する
gemController.SetAlarm("Alarm1");
// ALID: Alarm1 をクリアする: ホストにアラームクリア通知を送信する
gemController.ClearAlarm("Alarm1");。
//ホストから送信されたGEMレシピダウンロード(S7F3)を購読する
gemController.RecipeDownloadReceived += OnRecipeDownloadReceived; </xmp
OnRecipeDownloadReceivedイベントハンドラでrecipeIdとrecipeBodyパラメータを取得します:
private void OnRecipeDownloadReceived(object sender, RecipeEventArgs e) { 次のようにします。
string recipeId = e.RecipeId;
byte[] binPPBody = e.GetRecipeBody();
// ホストに S7F4 ack を送信する。
e.SetReply(ACKC7.Accepted);
}</xmp
ステップ#3 - SWIFTシミュレータでGEMアプリケーションをテストする
SWIFTシミュレータは、SDKに付属するもう一つのユーティリティで、HOSTのシミュレーションに使用できます。.
SWIFT シミュレータを HOST として実行し、新しく作成した GEM アプリケーションをテストします:
GEMアプリケーションがこれらのコードを呼び出したら:
//SVIDを更新:Pressure
gemController.SetAttribute("Pressure", AttributeType.SV, "89");
// SVID:温度を更新
gemController.SetAttribute("Temperature", AttributeType.SV, "122.8");.
SWIFTシミュレータで、“圧力(SVID: 1016) ”と “温度(SVID: 1017) ”の値を問い合わせるためにS1F3を送信すると、GEMControllerはシームレスにS1F4を返信します。.

