Skip to content

sprigga/SecsGem-Eap-App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SecsGem-Eap-App

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/                       # 日誌目錄

檔案說明

1. Secs_gem_example.py - 基礎 SECS/GEM 範例

展示基本的 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: 建立通訊連線

2. Gem_advanced_example.py - 進階 GEM 狀態機範例

完整的設備與主機通訊模擬,包含 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)

    • 主機控制器模擬
    • 提供各種主機命令發送功能

示範場景:

  1. 建立通訊連線 (S1F13/F14)
  2. 設備上線 (S1F17/F18)
  3. 查詢設備常數 (S2F13/F14)
  4. 時間同步 (S2F31/F32)
  5. 事件報告 (S6F11/F12)
  6. 鬧鈴報告 (S5F1)
  7. 遠端命令 (S2F41/F42)

3. aim_secs_test.py - AIM CECS 模擬器連線測試

使用 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/S1F2
      • test_s1f13_establish_communications(): 測試 S1F13/S1F14
      • test_s1f17_request_online(): 測試 S1F17/S1F18
      • run_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 套件

安裝與執行

1. 基礎範例

# 使用 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...

2. 進階範例

# 使用 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)
======================================================================
...

3. AIM CECS 測試程式

# 首先安裝 secsgem 套件
pip install secsgem

# 或使用 uv
uv pip install secsgem

# 執行測試程式
uv run python aim_secs_test.py

說明:

  • 此程式會連接到 AIM CECS 模擬器 (預設位於 localhost:5000)
  • 執行完整的 SECS/GEM 通訊測試流程
  • 測試結果會輸出到 console,並可選擇性記錄到 logs/ 目錄

SECS/GEM 協定重點概念

1. Stream 和 Function 編號

  • Stream: 訊息類別 (1-127)
  • Function: 特定功能 (1-255)
  • 偶數 Function 通常是回覆訊息

常見 Stream 類型:

  • Stream 1: 設備狀態與控制
  • Stream 2: 設備控制與資料
  • Stream 5: 鬧鈴管理
  • Stream 6: 資料收集與事件報告
  • Stream 7: 製程程式管理
  • Stream 10: 終端服務

2. W-bit (Wait bit)

  • 設定為 1 表示需要回覆
  • 設定為 0 表示不需要回覆

3. System Bytes

  • 用於追蹤請求和回覆的配對
  • 回覆訊息必須使用相同的 System Bytes

4. 資料型態

  • LIST: 項目清單
  • ASCII: 文字字串
  • BINARY: 二進位資料
  • U1/U2/U4/U8: 無符號整數
  • I1/I2/I4/I8: 有符號整數
  • F4/F8: 浮點數
  • BOOLEAN: 布林值

5. GEM 狀態模型

設備狀態轉換:

EQUIPMENT_OFFLINE → ATTEMPT_ONLINE → HOST_OFFLINE → ONLINE_REMOTE

6. 重要識別碼

  • 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)
   └─> 主機發送控制命令

實務應用

  • 即時監控設備狀態
  • 自動化製程控制
  • 異常事件追蹤
  • 生產履歷記錄
  • 設備參數管理

推薦的 Python SECS/GEM 套件

1. secsgem

GitHub: https://github.com/bparzella/secsgem

特色:

  • 完整的 SECS/GEM 實作
  • 支援 HSMS 和 SECS-I
  • 提供 GEM 狀態機
  • 生產級可用

安裝:

pip install secsgem

2. secs4net

C# 套件 (可用 pythonnet 呼叫)

特色:

  • 高效能 HSMS 實作
  • 適合工業應用

參考資源

開發與貢獻

歡迎提交 Issue 和 Pull Request!

授權

本專案僅供學習與教育用途使用。

注意事項

本專案為示範性質,實際生產環境建議使用成熟的 SECS/GEM 套件 (如 secsgem)。


Last Updated: 2025-01-16

About

半導體製造設備自動化通訊標準 (dev)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages