メインコンテンツまでスキップ

SECS/GEM HSMS ドライバ

概要

半導体 fab 装置通信の標準規格 (SEMI E5/E30/E37)。HSMS = SECS-II over TCP。equipment ↔ host 間の S/F (Stream/Function) メッセージ交換により、装置状態 / alarm / event report を収集する。

項目
opc_typeSECSGEM
実装クラス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 イベントの非同期受信) は今後のフェーズで対応。


クラス構成

クラス役割
SECSGEMDriverTCP / Select handshake / read・write ディスパッチ / バックグラウンド Linktest
HsmsHeader14 バイトのフレームヘッダ (length BE 32 + sessionId 16 + W-bit・stream + function + pType + sType + sysbytes BE 32)
HsmsMessageencode/decode + select_req(1) / select_rsp(2) / linktest_req(5) / data(0) helper
SecsItemSECS-II item エンコーダ/デコーダ — format byte (6-bit code + 2-bit length-byte count) + length + value
SecsCommon標準メッセージビルダ — S1F1, S1F2, S2F41, S5F1, S6F11
SecsAddressS<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-timeoutTCP connect タイムアウト (ms)5000
options.read-timeoutread SO タイムアウト (ms)10000
options.linktest-intervalLinktest 周期 (ms、0=off)30000

タグ plc_address 形式

表記意味
S1F1"Are You There" — body なし、reply expected
S1F2:0reply List の 0 番目の子要素 (例: MDLN)
S1F2:11 番目の子要素 (例: SOFTREV)
S1F13Establish Communications Request
S2F41Host Command Send (write 専用)
S5F1 / S6F11Alarm 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 dataS6F11 event report の非同期受信 — 単一 receive のみで、非同期 push handler なし。
  • Deselect / Reject / Separate sType。
  • データメッセージ → ConcurrentMap キャッシュ — 現状 read は呼び出しごとに新規 transaction を発行。

テストカバレッジ

test/java/plantpulse/driver/protocol/secsgem/

テスト検証内容
HsmsHeaderTest14 バイトヘッダ + sType 分岐の round-trip
HsmsMessageTestselect_req/rsp/linktest/data の encode-decode
SecsItemTestL/A/B/Bool/I/U/F item codec の双方向 (1/2/3-byte length)
SecsCommonTestS1F1/S1F2/S2F41/S5F1/S6F11 のビルド/パース
SecsAddressTestS<n>F<m>[W] パーサ
SECSGEMDriverTest / SecsGemSpecTestmock 装置による 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 の収集程度を推奨。