這篇部落格文章最初發表於 cimetrix.com
不僅在開發階段,甚至在生產階段測試支援 GEM 標準的設備之介面功能,皆能帶來可量化的效益。GEM 標準中有部分內容並未明確規範,導致不同設備的實作方式可能有所差異。因此,設備製造商應編寫針對特定設備的測試程序,這些測試將在設備的整個使用壽命期間持續發揮價值。
處理狀態模型
GEM 項目中幾乎總是會有所變化的,就是設備的處理狀態模型。我將使用 Cimetrix GEM 測試工具 EquipmentTest,示範如何針對設備的處理狀態建立自訂測試。您可透過我們的網站申請EquipmentTest的試用版。
E30 標準提供了一個「處理狀態圖」與「狀態轉換表」的範例。
流程狀態要求
雖然實作方式可能有所不同,但只要不違反標準即可;然而,「處理狀態」章節中列出了以下要求,若要使介面符合標準,必須遵循這些要求:
SEMI E030-00-0520
說明:
在 GEM 實作中,處理狀態(INIT、IDLE、SETUP 等)的範例並非絕對必要。然而,設備製造商必須識別設備的狀態,並參照這些範例進行文件記錄。
SEMI E030-00-0520
說明:
- 在處理狀態模型中,每個狀態轉換都必須對應一個收集事件。
- 必須提供以下狀態變數:
- ProcessState
- 前一處理狀態
- 每當發生任何狀態轉換時,都必須更新 ProcessState 和 PreviousProcessState 這兩項狀態變數的值
假想範例:自動販賣機
雖然自動販賣機上極不可能實作 GEM 介面,但這是一個廣為人知的系統,在學術界常被用作狀態機的教學範例。因此,我們也將同樣以這台假想的、符合 GEM 規範的自動販賣機作為範例。
為保持簡潔所做的假設
- 這台自動販賣機採用非接觸式支付,並會在交易開始時預先授權 5.00 美元。
- 自動販賣機對其所含商品一無所知,僅知曉商品的位置與價格。
- 所有商品均有現貨。
繪製圖表
當您的 GEM 文件定稿時,流程狀態圖應採用哈雷爾(Harel)記法。為了便於腦力激盪,我在此使用了一個簡單的 UML 圖。
在建立圖表時,請先辨識所有可能的 GEM 狀態、轉換/收集事件、變數、警報及錯誤。
| 各州 | 變數 | 警報/錯誤 |
| 初始化中 | 先前與當前的流程狀態 | 配藥_錯誤 |
| 待付款 | 已選取地點 | 餘額不足 |
| Wait_Selection | 可用貨幣 | 讀卡錯誤 |
| 發放_項目 | 計費貨幣 | |
| 交易_完成 |

過渡表
請注意,上圖中每個狀態轉換均以紅色標示,例如 T1。
每個狀態轉換都必須記錄在「轉換表」中。該「轉換表」對於設計有效的測試至關重要。
| # | 當前狀態 | 觸發器 | 新州 | 動作 | 評論 |
| T1 | 初始化中 | 自動販賣機已初始化 | 待付款 | 無 | 更新事件與變數 |
| T2 | 待付款 | 授權失敗 | 待付款 | 無 | 更新事件與變數 |
| T3 | 待付款 | 授權成功 | Wait_Selection | 無 | 更新事件與變數 |
| T4 | Wait_Selection | 餘額不足 | 交易已完成 | 無 | 更新事件與變數 |
| T5 | Wait_Selection | 已選取並發放的項目 | 發放_項目 | 無 | 更新事件與變數 |
| T6 | 發放_項目 | 使用者希望有更多項目 | Wait_Selection | 無 | 更新事件與變數 |
| T7 | 發放_項目 | 使用者不希望有更多項目 | 交易已完成 | 無 | 更新事件與變數 |
| T8 | 交易已完成 | 設備正為下一筆交易做準備 | 初始化中 | 無 | 更新事件與變數 |