SECS/GEM HSMS ドライバ
概要
半導体 fab 装置通信の標準規格 (SEMI E5/E30/E37)。HSMS = SECS-II over TCP。equipment ↔ host 間の S/F (Stream/Function) メッセージ交換により、装置状態 / alarm / event report を収集する。
| 項目 | 値 |
|---|---|
opc_type | SECSGEM |
| 実装クラス | plantpulse.driver.protocol.secsgem.SECSGEMDriver |
| ライブラリ | 独自 Java 実装 (外部依存なし) |
| read | ⚠️ 一次 (Select handshake + S1F1/S1F2 等 fixture レベル) |
| write | ⚠️ 一次 (S2F41 Host Command Send のみ) |
| セキュリティ | なし |
| デフォルトポート | 5000 (TCP) |
HSMS Select.req/rsp ハンドシェイク + バックグラウンド Linktest + SECS-II item codec (List/Binary/Boolean/ASCII/I1-8/U1-8/F4/F8) + 標準メッセージビルダ (S1F1/S1F2/S2F41/S5F1/S6F11) までを検証済み。Read/Write のディスパッチは動作するが、本格的な fab tool 統合 (SECS-I serial 変種、GEM state model、SVID/ECID/CEID ネゴシエーション、S2F23 trace、S5/S6 イベントの非同期受信) は今後のフェーズで対応。
クラス構成
| クラス | 役割 |
|---|---|
SECSGEMDriver | TCP / Select handshake / read・write ディスパッチ / バックグラウンド Linktest |
HsmsHeader | 14 バイトのフレームヘッダ (length BE 32 + sessionId 16 + W-bit・stream + function + pType + sType + sysbytes BE 32) |
HsmsMessage | encode/decode + select_req(1) / select_rsp(2) / linktest_req(5) / data(0) helper |
SecsItem | SECS-II item エンコーダ/デコーダ — format byte (6-bit code + 2-bit length-byte count) + length + value |
SecsCommon | 標準メッセージビルダ — S1F1, S1F2, S2F41, S5F1, S6F11 |
SecsAddress | S<n>F<m>[W] アドレスパーサ (W = reply expected) |
Wire フォーマット
HSMS frame (총 length = 4 + 10 + payload):
byte 0..3 Length (BE 32) — 10 + payload
byte 4..5 Session ID (BE 16) — 컨트롤 메시지는 0xFFFF
byte 6 W-bit | Stream (7-bit)
byte 7 Function (8-bit)
byte 8 pType — 항상 0
byte 9 sType — 0=Data, 1=Select.req, 2=Select.rsp, 5=Linktest.req, 6=Linktest.rsp, ...
byte 10..13 System bytes (BE 32) — transaction id
byte 14.. SECS-II payload
SECS-II item:
Format byte (6-bit code + 2-bit length-bytes-count) + length(1..3) + value
code: L=0x00, B=0x08, Bool=0x09, A=0x10, F8=0x14, F4=0x15,
I8=0x18 I1=0x19 I2=0x1A I4=0x1B,
U8=0x1C U1=0x1D U2=0x1E U4=0x1F (모두 BE)
ハンドシェイク (connect()): Select.req(sysbytes) → Select.rsp の sType=2 + status=0 を検証。
以降はオプション linktest-interval (デフォルト 30 秒) ごとに Linktest.req を送信。
OPC 登録オプション
| フィールド | 意味 | デフォルト |
|---|---|---|
opc_agent_ip / opc_agent_port | 装置 IP / ポート | port が 0 の場合は 5000 |
options.connect-timeout | TCP connect タイムアウト (ms) | 5000 |
options.read-timeout | read SO タイムアウト (ms) | 10000 |
options.linktest-interval | Linktest 周期 (ms、0=off) | 30000 |
タグ plc_address 形式
| 表記 | 意味 |
|---|---|
S1F1 | "Are You There" — body なし、reply expected |
S1F2:0 | reply List の 0 番目の子要素 (例: MDLN) |
S1F2:1 | 1 番目の子要素 (例: SOFTREV) |
S1F13 | Establish Communications Request |
S2F41 | Host Command Send (write 専用) |
S5F1 / S6F11 | Alarm Report / Event Report (受信側) |
W サフィックス (S1F1W) は reply 期待を明示する。read ディスパッチでは S1F1 のみ body を自動生成し、それ以外は body なし + W-bit=true で送信する。
write は S2F41 のみ対応: address.value を HCS command 文字列として使用し、parameter は空 list とする。
未対応範囲
- SECS-I (RS-232 binary) 変種 — HSMS over TCP のみ対応。
- GEM state model — Communications / Control / Processing / Spooling の自動化は未実装。
- VID/ECID/CEID ネゴシエーション — S2F13 / S2F33 / S2F37 のイベント link/enable シーケンス自動化なし。
- S2F23 trace data、S6F11 event report の非同期受信 — 単一 receive のみで、非同期 push handler なし。
- Deselect / Reject / Separate sType。
- データメッセージ → ConcurrentMap キャッシュ — 現状 read は呼び出しごとに新規 transaction を発行。
テストカバレッジ
test/java/plantpulse/driver/protocol/secsgem/
| テスト | 検証内容 |
|---|---|
HsmsHeaderTest | 14 バイトヘッダ + sType 分岐の round-trip |
HsmsMessageTest | select_req/rsp/linktest/data の encode-decode |
SecsItemTest | L/A/B/Bool/I/U/F item codec の双方向 (1/2/3-byte length) |
SecsCommonTest | S1F1/S1F2/S2F41/S5F1/S6F11 のビルド/パース |
SecsAddressTest | S<n>F<m>[W] パーサ |
SECSGEMDriverTest / SecsGemSpecTest | mock 装置による Select + read シーケンス |
参考
- SEMI E5 — SECS-II Message Content.
- SEMI E30 — Generic Equipment Model (GEM).
- SEMI E37 — High-Speed SECS Message Services (HSMS).
- コード:
plantpulse-edge-driver/src/plantpulse/driver/protocol/secsgem/. - 運用: 本格的な fab tool 統合は今後のフェーズ — 一次実装では装置 connect / S1F1 ping / アラーム list の収集程度を推奨。