← 回開源作品

SECS/GEM Host + Equipment Simulator

用 C# / .NET 8 從零實作的 SECS/GEM 設備與主機模擬器。三層協定都是自己寫的, 不是包裝現成的 SECS library。

C# .NET 8HSMS (E37)SECS-II (E5)GEM (E30)Blazor ServerxUnit
MIT
授權
26
測試全綠
3 / 3
場景驗證
~25
對 SxFy 訊息
在 GitHub 上看原始碼

為什麼做這個

SECS/GEM 是半導體設備的通訊標準,但公開的參考實作極少 —— 業界大多買商用套件, 把協定當黑箱用。我過去的專案也是這樣:用商用 library 做應用層,能交付, 但「協定本身怎麼運作」有一塊始終是別人幫我處理掉的。

所以我把三層都自己寫一遍。這個專案要回答的問題很具體: 如果不靠現成套件,我能不能讓一個 Host 和一台 Equipment 在真實 TCP 上完整對話完一輪 GEM 流程 —— 從連線交握、報表定義、事件回報,到警報與遠端命令。

實作了什麼

HSMS — SEMI E37

連線狀態機(NotConnected → Connected → Selected)、Select / Deselect / Separate / Linktest 控制訊息、T3–T8 逾時計時器、封包長度前綴的串流組裝。

SECS-II — SEMI E5

全格式碼(List / Binary / Boolean / ASCII / 各長度整數與浮點)編解碼,含巢狀 List。對畸形輸入做長度與格式驗證,不讓壞封包打穿上層。

GEM — SEMI E30

通訊與控制狀態模型、報表定義鏈(S2F33 定義 → S2F35 連結 → S2F37 啟用 → S6F11 事件)、設備常數讀寫、主機遠端命令、警報 S5F1、錯誤訊息 S9/S10。

架構

SecsGem.Core

協定引擎:HSMS / SECS-II / GEM 三層與狀態機,不依賴任何 SECS 商用套件。

SecsGem.Scenarios

JSON 場景 schema 與斷言引擎,把「這段對話該長什麼樣」寫成可執行的檔案,並產出 HTML 報告。

SecsGem.Verify

Headless CLI:跑完場景以結束碼回報成敗,可直接掛進 CI。

SecsGem.Web

Blazor Server 即時觀測介面:一邊跑 Host / Equipment,一邊看訊息與狀態變化。

怎麼證明它會動

協定實作最容易的自我欺騙,是「我覺得它對」。所以驗證分三層,每一層都留下可以打開來看的檔案。

1. 26 個測試,其中 15 個跑真實 TCP

11 個單元測試涵蓋編解碼與狀態機轉換;15 個整合測試不是 mock —— 它們真的開 socket, 讓 Host 與 Equipment 在 127.0.0.1 上互連, 跑完整的交握與訊息往返。mock 過得了的錯誤,真 socket 過不了。

2. 場景驗證:3 個場景、16 個步驟全數通過

場景寫成 JSON:每一步要送什麼、期待收到什麼、哪些欄位要成立,都是可執行的斷言。 跑完產出 HTML 報告,含完整訊息追蹤。下面是場景 02(報表定義與事件報表)的實際追蹤, 直接取自報告:

方向 訊息 說明
H→E Select.req
E→H Select.rsp
H→E S1F13 W 建立通訊
E→H S1F14
H→E S2F33 W 定義報表 RPTID1 = [DVID10, SVID1]
E→H S2F34
H→E S2F35 W 連結 CEID101 → RPTID1
E→H S2F36
H→E S2F37 W 啟用 CEID101
E→H S2F38
E→H S6F11 W 設備觸發事件,主機收到報表
H→E S6F12
H→E Separate.req
E→H Separate.req
看完整驗證報告

3. 50 輪對抗式審核,186 項發現

我對這份程式碼跑了 50 輪刻意找碴的審查,累積 186 項發現。重點不在數字, 在於後續怎麼處理:多數「高嚴重度」發現其實是審查者誤解 SEMI 規範 (例如 Separate.req 本來就沒有回應訊息,那不是 bug)。 帳本把每一項的判定與理由都留著 —— 站得住腳的缺陷照列,站不住的也寫清楚為什麼不改。

看審核帳本

即時觀測介面

Blazor Server 介面:左側為訊息追蹤,右側顯示 GEM 通訊狀態、控制狀態與事件

Blazor Server 介面:Host 與 Equipment 同時跑在本機,訊息與狀態變化即時顯示。

這個專案不能證明什麼

寫得出來跟能上線是兩件事。以下是我知道的邊界:

  • 這是模擬器,不是量產機台的 driver。它用來驗證協定理解與對接行為,不等於通過產線考驗。
  • 沒有跑過 SEMI 官方認證測試套件。「通過驗證」指的是自己寫的場景與斷言,不是第三方認證。
  • 目前沒有 CI workflow。測試與場景驗證都是本機手動觸發,報告不是自動產生的。
  • 所有整合測試跑在單機 loopback(127.0.0.1),沒有跨網段、沒有真實產線的網路條件。

這是第二版

第一版是 WPF 桌面程式,只做到 SECS-II 層。做完才發現真正的難點不在編解碼, 而在「怎麼知道它是對的」—— 一個沒有自動驗證的模擬器,跟一份會動的猜測沒有差別。

所以重寫:協定引擎與 UI 拆開、場景驗證獨立成一層、加上可以掛 CI 的 headless CLI。 這一版的價值不只是多實作了 GEM,而是把「驗證」變成專案的一部分而不是事後補的。

如果你的設備要做 SECS/GEM 對接,或是想找人幫忙看現有實作哪裡不對,歡迎來信聊聊。

談談你的案子