「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
半導体関連のソフトウェア開発では、SEMI(※1)で制定しているSEMIスタンダード(※2)に準拠した実装を行うこともあります。
今回の技術レポートでは、過去の開発実績の中から、SEMIスタンダードに準拠したソフトウェア開発の事例をもとに、SECSによるホスト−装置間の通信を実装した例を紹介します。
本実装例では、横河電機社製FA-M3R(※3)を用い、ラダープログラムにてSECS通信を実装しています。
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通信
SECS-Iでは、ENQ、ACKといったASCII制御コードを用いてホスト−装置間でハンドシェイクを行います。
図4は、ホストから装置へデータを送信する場合の正常時のシーケンスです。
図4. SECS-I通信正常パターン
この一連のシーケンスをトランザクションと呼びます。
トランザクションはホスト先行、装置先行の両方の場合があります。
要求が衝突した場合の対処や、通信タイムアウトといった異常処理についてもスタンダードで方針が示されています。
「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. 階層間インタフェース
半導体加工装置に対して「品種切替」要求を出す場合を例に、次章より各階層の動作を説明します。
搬送制御を行う中で「品種切替」が必要となった場合に、「SECS-IIメッセージ層」に対して「品種切替」要求を出します。
上位層より受けた「品種切替」を行うには、半導体加工装置との通信仕様により、以下のようなトランザクションを順番に行う必要がありました。
本階層では、上記1.〜3.それぞれのSECS-IIメッセージを生成し、順番に「SECS-I層」にメッセージ送信指示を出していきます。
上位層よりメッセージ送信指示を受けたら、SECS-Iで定められたプロトコルに沿って装置側と通信を行います。
ENQ、ACK、上位からもらったメッセージデータといった、RS-232Cで送信可能なデータを生成し「RS-232C通信層」に指示を出します。
「SECS-I通信層」からの指示を受けて、ラダー通信モジュールに対して送信要求を出します。
ラダー通信モジュールF3RZ82-0Fを用いることで、細かな通信処理は全てモジュールが行ってくれるため、本階層のプログラムは非常にシンプルに組むことができます。
具体的には、送信の場合には、該当するラダー通信モジュールの送信バッファに値をセット後、送信要求リレーをONし送信完了リレーがONすることを待つ。また、受信の場合には、常時受信完了リレーを監視しONになったタイミングで受信バッファからデータを読み出し、上位層へ受信完了を伝える。という手法となります。
SEMIスタンダードで規定されているSECSプロトコルは、業界のあらゆる装置の通信について当てはまるように規定されています。
そのため、細かなところまで規定せず「推奨されるが要求はされない」といったアプリケーション側で取り決めなければならない箇所も存在します。
このような箇所熟知し、通信相手との仕様認識に相違が発生しないように開発を進める必要があります。
「4. SECS通信処理部の設計」に記載したように、各処理で階層化を行うことで、実績のあるラダープログラムのコンポーネントとして再利用可能な形で蓄積することができます。今回の例の「RS-232C通信層」はSECS通信に限らず、ラダー通信モジュールを用いたあらゆるシリアル通信案件に活用することができます。
また、「SECS-I通信層」についても、送受信するSECS-IIメッセージが何であっても問題無いように設計していますので、SECS通信を行う他の案件でも実績のあるコンポーネントをして活用することができます。
今回紹介した事例以外にも、半導体関連装置の開発ではしばしばSEMIスタンダードに準拠したソフトウェア開発を行うことがあります。
本事例のようなプログラム資産を有効活用し、また品質の良いコンポーネントを蓄積していくことで、今後も低価格で高品質なソフトウェアの開発に努めていきたいと思います。
(M.S.)
「SEMIジャパンホームページ」http://www.semi.org/
関連ページへのリンク
関連するソフテックだより