SECS(SEMI Equipment Communications Standard)とは、SEMIスタンダードの中で、半導体製造装置とホスト間のメッセージ交換に関する通信インタフェースを定義しているものです。SECSは、図1のように階層的なプロトコルになっています。
 |
| 図1. SECSプロトコル階層 |
SECS-Iは、ホストと装置間のメッセージ交換に必要な、コネクタ、信号レベル、データレート、プロトコルを規定しており、RS-232Cを採用しています。
 |
| 図2. SECS-I通信 |
交換するメッセージの内容についてはSECS-IではなくSECS-IIで定義されています。つまり、SECS-IIで定義されているメッセージを、SECS-Iのプロトコルに従って送受信することでホスト−装置間で通信を行うことになります。
SECS-Iと同階層に、HSMS(High-Speed SECS Message Service)というスタンダードも存在します。これは、Ethernet(TCP/IP)を採用し、より高速なメッセージ交換を実現するためのスタンダードです。比較的低速なSECS-Iの代わるものとして制定されています。
 |
| 図3. HSMS通信 |
(1) SECS-Iプロトコル概要
SECS-Iでは、ENQ、ACKといったASCII制御コードを用いてホスト−装置間でハンドシェイクを行います。
図4は、ホストから装置へデータを送信する場合の正常時のシーケンスです。
 |
| 図4. SECS-I通信正常パターン |
●データを送りたいホストは、装置に対してENQを送信します。
●ENQを受けた装置は、ホストからのデータを受信可能であればEOTを送信します。
●ホストはEOTを受けてDATAを送信します。
●装置は正常にDATAを受信し内容に問題が無ければACKを送信します。もし受信したDATAの内容に異常があればNAKを返します。
この一連のシーケンスをトランザクションと呼びます。
トランザクションはホスト先行、装置先行の両方の場合があります。
要求が衝突した場合の対処や、通信タイムアウトといった異常処理についてもスタンダードで方針が示されています。
(2) SECS-IIメッセージ概要
「2.1 SECS-Iプロトコル概要」の説明にある、「DATA」に相当する部分をSECS-IIで定義しています。
DATAは図5に示すような構成になっています。
 |
| 図5. メッセージ構成 |
ヘッダの部分で、何のメッセージであるかをストリームとファンクションという概念で示しています。
ストリーム(S)は、関連した処理をグループ化した区分のようなものです。ストリームの中に、何の処理であるかを示すファンクション(F)が属しています。
例えば、「S1F1」はホストから装置に対する「オンライン確認要求」を表します。
また、1回のトランザクションで複数に分割したメッセージが送信可能ですので、ヘッダの中には、最後のメッセージであるかを表すフラグも持っています。そのほか様々なステータスが定義されています。
データの構造は、各ファンクションで異なった構造をしており、それぞれSEMIスタンダード内で定義されています。それらは全て型と値の組み合わせとなっており、C言語でいう構造体のような構造となっています。データを入れ子構造にすることも可能であり、柔軟なフォーマットとなっています。
今回取り上げる開発事例は図6のような構成でした。
 |
| 図6. システム構成 |
私がソフトウェアを担当した半導体製品の搬送を行う装置と、他社製の半導体製品を加工する装置をRS-232Cで接続し、SECS通信によってメッセージ交換を行いました。
半導体搬送装置側がマスターとなり、装置状態の取得や、品種切り替え指示などをSECS通信にて行いました。
半導体搬送装置は横河電機社製FA-M3Rを使用し、図7に示すようにラダー通信モジュール(F3RZ82-OF)を用い、ラダープログラムによりSECS通信を実装しました。
 |
| 図7. PLC構成 |
本事例はSECS通信処理部の設計概要を紹介します。
SECSのプロトコル階層に合わせ、図8のような階層分けを行いました。
 |
| 図8. プログラム階層 |
また、各階層は図9のようなインタフェースで処理を行います。
 |
| 図9. 階層間インタフェース |
半導体加工装置に対して「品種切替」要求を出す場合を例に、次章より各階層の動作を説明します。
(1) アプリケーション層
搬送制御を行う中で「品種切替」が必要となった場合に、「SECS-IIメッセージ層」に対して「品種切替」要求を出します。
(2) SECS-IIメッセージ制御層
上位層より受けた「品種切替」を行うには、半導体加工装置との通信仕様により、以下のようなトランザクションを順番に行う必要がありました。
1. 装置がオンラインであるかの確認
2. 切替たい品種に切替え可能であるかの確認
3. 品種切替可能なら切替え指示
本階層では、上記1.〜3.それぞれのSECS-IIメッセージを生成し、順番に「SECS-I層」にメッセージ送信指示を出していきます。
(3) SECS-I通信層
上位層よりメッセージ送信指示を受けたら、SECS-Iで定められたプロトコルに沿って装置側と通信を行います。
ENQ、ACK、上位からもらったメッセージデータといった、RS-232Cで送信可能なデータを生成し「RS-232C通信層」に指示を出します。
(4) RS-232C通信層
「SECS-I通信層」からの指示を受けて、ラダー通信モジュールに対して送信要求を出します。
ラダー通信モジュールF3RZ82-0Fを用いることで、細かな通信処理は全てモジュールが行ってくれるため、本階層のプログラムは非常にシンプルに組むことができます。
具体的には、送信の場合には、該当するラダー通信モジュールの送信バッファに値をセット後、送信要求リレーをONし送信完了リレーがONすることを待つ。また、受信の場合には、常時受信完了リレーを監視しONになったタイミングで受信バッファからデータを読み出し、上位層へ受信完了を伝える。という手法となります。
「4. SECS通信処理部の設計」に記載したように、各処理で階層化を行うことで、実績のあるラダープログラムのコンポーネントとして再利用可能な形で蓄積することができます。今回の例の「RS-232C通信層」はSECS通信に限らず、ラダー通信モジュールを用いたあらゆるシリアル通信案件に活用することができます。
また、「SECS-I通信層」についても、送受信するSECS-IIメッセージが何であっても問題無いように設計していますので、SECS通信を行う他の案件でも実績のあるコンポーネントをして活用することができます。
今回紹介した事例以外にも、半導体関連装置の開発ではしばしばSEMIスタンダードに準拠したソフトウェア開発を行うことがあります。
本事例のようなプログラム資産を有効活用し、また品質の良いコンポーネントを蓄積していくことで、今後も低価格で高品質なソフトウェアの開発に努めていきたいと思います。