このブログはもともとcimetrix.comに掲載されていました。
装置にSECS/GEMインターフェースを追加することは、自動化の第一歩です。適切なツールセットがなければ、これは圧倒的な作業に思えるかもしれません。CIMConnect™ツールキットは、開発者やインテグレーターにSECS/GEMインターフェースを迅速に作成する能力と、それを完璧に仕上げられる力を提供します。
はじめに
最近、Cimetrix CIMConnectツールキットを紹介されました。ハンズオン形式のクライアント向けトレーニングイベントに参加する機会を得ました。SECS/GEMに関する知識はほとんどありませんでしたが、3日間でCIMConnectを用いたSECS/GEMインターフェース実装の基礎を習得し、この非常に有益な体験のハイライトを共有したいと思います。
CIMConnectとは何ですか?
CIMConnectは、開発者が装置制御アプリケーションからSECS/GEMインターフェースを実装・管理するための堅牢なソフトウェア開発キットを提供します。CIMConnectは常に最新のSEMI規格に対応しているため、GEM準拠インターフェースの作成プロセスが簡素化されます。CIMConnectをインストールすると、開発とテストを容易かつ効率的に行うための複数のツールが付属します。
CIMConnect サンプルプロジェクト
CIMConnectサンプルは、SECS/GEMアプリケーションの実働例を提供します。サンプルプロジェクトはC#、VB.NET、C++で利用可能です。トレーニングで使用したC#サンプルを参照します。
このサンプルは「既知の良好な」環境を提供し、基本要素を整備することで開発を加速する手段となります。これにより、SECS/GEM接続の側面を疑うことなく、アプリケーション内で作業対象の範囲に集中してデバッグすることができました。
C# サンプル機能
- 処理シミュレーション:サンプルは装置の動作をシミュレートするループを提供します。これにはイベントのトリガーと変数値の更新が含まれます。
- EMServiceの初期化:サンプルがコンパイルされ実行されると、CIMConnectが初期化され、GEM通信が開始されます。
- GEMオペレータ制御:GEM通信状態はGEMステートマシンを用いてリアルタイムで表示されます。通信はサンプルのユーザーインターフェースから制御可能です。
- マルチスレッドの例:データは別々のスレッドで処理されます。これは優れた手法であり、ユーザーインターフェースの応答性を維持しつつ、データを非同期で効率的に処理することを可能にします。
- 遅延GEM通信初期化:これは初期化中に機器の準備完了を待機する概念を示すものです。
- トリガーイベント:イベントはプロセスシミュレーションループからトリガーされます。イベントがトリガーされると、関連する変数が更新されます。
- 変数の値の取得と設定:このサンプルでは、様々なデータ型の変数の値をプログラムで取得および設定する複数の例を提供します。
- アラームの設定と解除:ユーザーインターフェースのチェックボックスを切り替えることで、例としてあるアラームを設定および解除できます。
- ターミナルサービス:ターミナルサービスは、機器ユーザーインターフェースにリアルタイムメッセージを表示することで、効果的なログ記録の例を示しています。
- リモートコマンド:このサンプルでは、ホストからSECS-IIメッセージを送信することで、ユーザーが処理シミュレーションの開始と停止を実行できます。
トレーニングプロセス
トレーニングは非常に双方向性が高く、講師が新しいトピックを実演した後、受講生が実際に試す時間を設けます。新しい機能を試す際には、まずボタンやチェックボックスを作成して機能が動作することを確認するのが有益だと気づきました。次に、その機能をアプリケーションに組み込みます。各プロセスをこの2つのステップに分割することで、曖昧さが解消され、不要なデバッグ作業を回避できます。
ペースはクライアントが設定しました。講師は必要に応じて支援を提供しました。トレーニングはカリキュラムに沿って行われますが、各セッションはトレーニングを依頼したクライアントのニーズに合わせてカスタマイズされています。
私の申請書
トレーニング前にC#アプリケーションを作成していました。このアプリケーションはXMLレシピを読み込み、ウェーハ処理をシミュレートするものでした。トレーニング中に修正可能な動作するアプリケーションがあったことは非常に有益でした。なぜなら、それは現実世界の実践的な実装を模倣していたからです。
SECS/GEMインターフェースの追加
最初のステップはCIMConnectの初期化でした。サンプルプロジェクトから初期化関数を抽出することで、このステップは簡略化されました。CIMConnectが初期化されたことを確認できた後、SECS/GEM機能の追加に進むことができました。
API呼び出し
私のアプリケーションはCIMConnectに対してAPI呼び出しを送信し、コールバックを受信します。各呼び出しがカスタマイズを可能にするため、当初はAPI呼び出しの理解がやや困難でした。
ラッパー関数
サンプルプロジェクトは、API呼び出しを実装するいくつかの便利なラッパー関数を提供します。API呼び出しのオーバーヘッドはラッパー内部で処理されます。ラッパー関数を使用する利点は、開発者がAPI呼び出しが正しくないかどうかではなく、結果が自身の期待と一致するかに集中できることです。
APIを呼び出すためのラッパー関数の使用に成功した後、私は独自のラッパー関数を修正し作成し始めました。最終的には、APIを直接呼び出すことに慣れました。
機器構成
CIMConnectでは、設定ファイル内でイベント、アラーム、変数、その他の属性を静的に定義できます。私のファイルでは、アプリケーションに関連する複数の変数を作成しました。後になって、アプリケーションが代わりに動的に項目を定義できることを知りました。また、アプリケーションは設定された属性をプログラムで上書きすることも可能です。これらの機能は、わずかな差異を持つ複数の機器タイプを製造する企業にとって有益だと考えます。
イベントとアラームの追加
最初に作成したイベントは、FOUPがロードポートに着地した際にホストに通知するものでした。SendCollectionEventWithData()ラッパー関数を使用してイベントをトリガーし、設定ファイルで事前に定義した変数をインクリメントしました。この変数は入力ポートに着地したFOUPの数をカウントするために使用されました。
AlarmSET()およびAlarmClear()関数を使用して、3つのアラームを作成しました。EMOボタンなどのハードウェアがなかったため、各アラームの動作を切り替えるためにチェックボックスを使用しました。
SECS/GEMインターフェースを備えた私のアプリケーション。
CIMConnect コントロールパネルを使用した開発
CIMConnect コントロールパネルは、CIMConnect の内部動作を観察する方法を提供するグラフィカルユーザーインターフェイスユーティリティです。
開発中、私は頻繁にコントロールパネルを使用しました。アプリケーション内の各チェックボックスを切り替えるたびに、アラームの状態変化を監視できました。イベント履歴とアラーム履歴はリアルタイムで更新されました。アプリケーションを頻繁に変更する必要なく、コントロールパネルから変数値を変更したりイベントをトリガーしたりし、ホスト上で結果を確認できました。
アプリケーションのGEM制御を使用しながら、コントロールパネル上でGEM通信ステータスの変化を確認しました。また、コントロールパネルでステータスを変更すると、アプリケーション側でもその変化を確認できました。

CIMConnect コントロールパネル 1.15.0
GEM Host Messengerによるホストテスト
CIMConnectにはGEM Host Messengerが付属しており、これはユーザーが装置との間でSECS-IIメッセージを送受信できるホストアプリケーションです。 GEM HostMessengerを使用することで 、私は自身のアプリケーションと容易に接続できました。GEM Host Messengerはメッセージを表示し、読みやすい形式にデコードします。
S2F21メッセージ「START」と「STOP」を送信することで、アプリケーションの処理を制御できました。かつてはスタンドアロンだったアプリケーションが遠隔操作される様子を見て、非常に満足しました。

ジェムホストメッセンジャー 1.0.0
ヘルプドキュメント、ツール、およびサポート
CIMConnectは詳細なヘルプファイルと開発者ガイドを提供しています。広範なCIMConnectライブラリで利用可能な様々な機能の詳細を知るために、私は頻繁にこれらを参照していました。
結論
CIMConnectにより、SECS/GEMインターフェースを迅速に開発し、既存プログラムへ実装することが可能となりました。CIMConnectのトレーニングでは、SECS/GEMに不慣れな開発者でもわずか3営業日で基礎を習得できます。これは単純な例ではありますが、CIMConnectにはあらゆる規模のプロジェクトを推進する力と機能性が備わっています。