SECS/GEM 通訊協定的 Python 實作範例與教學專案,包含實際設備連線測試功能。
本專案提供完整的 SECS/GEM (Semiconductor Equipment Communications Standard/Generic Equipment Model) 通訊協定實作範例,包含基礎、進階和實際測試三個層次的程式,適合用於半導體設備自動化、製程執行系統 (MES) 整合等應用。
- 完整的 SECS-II 訊息編碼/解碼實作
- HSMS (High-Speed SECS Message Services) 通訊協定支援
- GEM 狀態機模擬
- 多種 SECS 訊息類型範例 (Stream 1, 2, 5, 6, 7)
- 清晰的事件與鬧鈴處理機制
- 實際設備連線測試支援 (aim_secs_test.py)
SecsGem-Eap-App/
├── Secs_gem_example.py # 基礎 SECS/GEM 範例
├── Gem_advanced_example.py # 進階 GEM 狀態機範例
├── aim_secs_test.py # AIM CECS 模擬器連線測試程式
├── README.md # 專案說明文件
├── docs/ # 文件目錄
│ ├── aim_secs_test.md
│ ├── event_handler_verification_guide.md
│ └── s1f16_oflack_fix_report.md
├── test_case/ # 測試案例
│ ├── aim_default_smd.md
│ └── aim_default_smd.txt
└── logs/ # 日誌目錄
展示基本的 SECS-II 訊息格式和 S1F1/S1F2 通訊流程。
核心類別:
-
SecsDataType(Secs_gem_example.py:11)- 定義 SECS-II 資料型態列舉
- 支援 LIST, BINARY, ASCII, 整數型態 (I1-I8, U1-U8), 浮點數 (F4, F8)
-
SecsMessage(Secs_gem_example.py:29)- SECS-II 訊息類別
- 提供訊息編碼 (
encode) 與解碼 (decode) 功能 - 支援多種資料型態的編碼
-
SecsEquipment(Secs_gem_example.py:211)- 模擬 SECS 設備
- 實作常用訊息建立方法:
create_s1f1(): 建立 Are You There 請求create_s1f2(): 建立 Are You There 回應create_s1f13(): 建立通訊請求create_s1f14(): 建立通訊確認
示範場景:
- S1F1/S1F2: 設備狀態查詢
- S1F13/S1F14: 建立通訊連線
完整的設備與主機通訊模擬,包含 GEM 狀態管理。
核心類別:
-
狀態列舉
EquipmentState(Gem_advanced_example.py:11): 設備狀態 (OFFLINE, ATTEMPT_ONLINE, HOST_OFFLINE, ONLINE)ProcessState(Gem_advanced_example.py:20): 製程狀態 (IDLE, SETUP, EXECUTING, PAUSE)ControlState(Gem_advanced_example.py:28): 控制狀態
-
SecsItem(Gem_advanced_example.py:37)- SECS 資料項目的簡化表示
- 支援格式代碼: A(ASCII), L(List), U1-U4, I1-I4, F4/F8
-
GemEquipment(Gem_advanced_example.py:78)- 完整的 GEM 設備模擬器
- 管理設備狀態、狀態變數 (SVID)、事件、鬧鈴
- 實作訊息處理方法:
handle_s1f13_establish_communications(): 建立通訊handle_s1f17_request_online(): 設備上線handle_s2f13_equipment_constant_request(): 查詢設備常數handle_s2f31_date_time_request(): 時間同步generate_s6f11_event_report(): 產生事件報告generate_s5f1_alarm_report(): 產生鬧鈴報告
-
HostController(Gem_advanced_example.py:214)- 主機控制器模擬
- 提供各種主機命令發送功能
示範場景:
- 建立通訊連線 (S1F13/F14)
- 設備上線 (S1F17/F18)
- 查詢設備常數 (S2F13/F14)
- 時間同步 (S2F31/F32)
- 事件報告 (S6F11/F12)
- 鬧鈴報告 (S5F1)
- 遠端命令 (S2F41/F42)
使用 secsgem 套件連接 AIM CECS 模擬器進行實際 SECS/GEM 通訊測試。
核心類別:
-
AimGemHost(aim_secs_test.py:228)- 繼承自 secsgem.gem.GemHostHandler
- AIM CECS 模擬器專用的 GEM 主機處理器
- 實作訊息處理方法:
s1f13_handler(): 處理建立通訊請求s1f17_handler(): 處理請求上線s6f11_handler(): 處理事件報告s5f1_handler(): 處理鬧鈴報告
-
AimSecsTest(aim_secs_test.py:380)- AIM CECS SECS/GEM 連線測試類別
- 提供完整測試流程:
setup(): 建立 HSMS 連線設定connect(): 建立連線test_s1f1_are_you_there(): 測試 S1F1/S1F2test_s1f13_establish_communications(): 測試 S1F13/S1F14test_s1f17_request_online(): 測試 S1F17/S1F18run_all_tests(): 執行所有測試
支援的測試項目:
- Stream 1: S1F1/F2, S1F3/F4, S1F11/F12, S1F13/F14, S1F15/F16, S1F17/F18
- Stream 2: S2F13/F14, S2F15/F16, S2F17/F18, S2F29/F30, S2F31/F32, S2F33/F34, S2F35/F36, S2F37/F38, S2F41/F42
- Stream 5: S5F1/S2, S5F3/F4, S5F5/F6, S5F7/F8
- Stream 6: S6F11/F12, S6F15/F16
- Stream 7: S7F1/F2, S7F19/F20
依賴套件:
- secsgem: SECS/GEM 通訊套件
- asyncio: 異步程式支援
- Python 3.7+
- 基礎與進階範例:無外部依賴 (使用標準函式庫)
- AIM CECS 測試程式:需要安裝 secsgem 套件
# 使用 uv 執行 (推薦)
uv run python Secs_gem_example.py
# 或使用標準 Python
python Secs_gem_example.py輸出示例:
============================================================
SECS/GEM 通訊協定展示
============================================================
場景 1: 主機詢問設備是否在線 (S1F1/S1F2)
------------------------------------------------------------
主機 → 設備: S1F1W SystemBytes=1
訊息內容: (空訊息)
編碼後長度: 16 bytes
十六進位: 0000001000000000000000000000000001000...
# 使用 uv 執行 (推薦)
uv run python Gem_advanced_example.py
# 或使用標準 Python
python Gem_advanced_example.py輸出示例:
======================================================================
GEM (Generic Equipment Model) 通訊流程模擬
======================================================================
設備: Etcher-3000 (EQP001)
主機: MES-HOST
初始設備狀態: EQUIPMENT_OFFLINE
======================================================================
階段 1: 建立通訊連線 (Establish Communications)
======================================================================
...
# 首先安裝 secsgem 套件
pip install secsgem
# 或使用 uv
uv pip install secsgem
# 執行測試程式
uv run python aim_secs_test.py說明:
- 此程式會連接到 AIM CECS 模擬器 (預設位於 localhost:5000)
- 執行完整的 SECS/GEM 通訊測試流程
- 測試結果會輸出到 console,並可選擇性記錄到 logs/ 目錄
- Stream: 訊息類別 (1-127)
- Function: 特定功能 (1-255)
- 偶數 Function 通常是回覆訊息
常見 Stream 類型:
- Stream 1: 設備狀態與控制
- Stream 2: 設備控制與資料
- Stream 5: 鬧鈴管理
- Stream 6: 資料收集與事件報告
- Stream 7: 製程程式管理
- Stream 10: 終端服務
- 設定為 1 表示需要回覆
- 設定為 0 表示不需要回覆
- 用於追蹤請求和回覆的配對
- 回覆訊息必須使用相同的 System Bytes
- LIST: 項目清單
- ASCII: 文字字串
- BINARY: 二進位資料
- U1/U2/U4/U8: 無符號整數
- I1/I2/I4/I8: 有符號整數
- F4/F8: 浮點數
- BOOLEAN: 布林值
設備狀態轉換:
EQUIPMENT_OFFLINE → ATTEMPT_ONLINE → HOST_OFFLINE → ONLINE_REMOTE
- CEID (Collection Event ID): 事件識別碼
- ALID (Alarm ID): 鬧鈴識別碼
- SVID (Status Variable ID): 狀態變數識別碼
- ECID (Equipment Constant ID): 設備常數識別碼
① 建立通訊 (S1F13/F14)
└─> 驗證通訊能力
② 設備上線 (S1F17/F18)
└─> 設備進入可控制狀態
③ 狀態查詢 (S1F1/F2)
└─> 確認設備狀態
④ 資料收集 (S6F11/F12)
└─> 主動報告設備狀態
⑤ 遠端控制 (S2F41/F42)
└─> 主機發送控制命令
- 即時監控設備狀態
- 自動化製程控制
- 異常事件追蹤
- 生產履歷記錄
- 設備參數管理
GitHub: https://github.com/bparzella/secsgem
特色:
- 完整的 SECS/GEM 實作
- 支援 HSMS 和 SECS-I
- 提供 GEM 狀態機
- 生產級可用
安裝:
pip install secsgemC# 套件 (可用 pythonnet 呼叫)
特色:
- 高效能 HSMS 實作
- 適合工業應用
- SEMI E5: SECS-II
- SEMI E30: GEM (Generic Equipment Model)
- SEMI E37: HSMS (High-Speed SECS Message Services)
- SEMI E40: Processing Jobs
- SEMI E90: Substrate Tracking
歡迎提交 Issue 和 Pull Request!
本專案僅供學習與教育用途使用。
本專案為示範性質,實際生產環境建議使用成熟的 SECS/GEM 套件 (如 secsgem)。
Last Updated: 2025-01-16