這篇部落格文章最初發表於 cimetrix.com
為設備新增 SECS/GEM 介面是自動化的第一步。若沒有適當的工具集,這項工作可能會讓人感到難以應付。CIMConnect™ 工具包讓開發人員和系統整合商能夠快速建立 SECS/GEM 介面,並具備將其完善至最佳狀態的能力。
引言
最近,我接觸到了 Cimetrix 的 CIMConnect 工具包。我有幸參加了一場實作導向的客戶培訓活動。儘管我對 SECS/GEM 的了解甚少,但在短短三天內,我便學會了如何使用 CIMConnect 實作 SECS/GEM 介面的基礎知識,並希望分享這段極為正面的體驗中的幾個重點。
什麼是 CIMConnect?
CIMConnect 提供一套強大的軟體開發套件,協助開發人員在其設備控制應用程式中實作並管理 SECS/GEM 介面。CIMConnect 始終與所需的 SEMI 標準最新版本保持同步,這簡化了建立符合 GEM 規範之介面的流程。安裝 CIMConnect 後,其內建的多項工具能讓開發與測試過程變得簡單且高效。
CIMConnect 範例專案
CIMConnect 範例提供了一個可運作的 SECS/GEM 應用程式範例。範例專案提供 C#、VB.NET 及 C++ 三種語言版本。我將以 C# 範例為例進行說明,因為這是我在培訓期間所使用的語言。
此範例提供了一個「已知正常運作」的環境,透過處理各項基本要素,有助於加速開發進度。這讓我能夠專注於除錯應用程式中正在處理的部分,而不必費心質疑 SECS/GEM 的連線問題。
C# 範例功能
- 處理模擬:此範例提供了一個用於模擬設備運作的迴圈,其中包含觸發事件及更新變數值等操作。
- EMService 初始化:當範例編譯並執行時,系統會初始化 CIMConnect 並啟動 GEM 通訊。
- GEM 操作控制:GEM 的通訊狀態會透過 GEM 狀態機即時顯示。可透過 Sampler 的使用者介面控制通訊。
- 多執行緒範例:資料在各自的執行緒中進行處理。這是一種良好的實作做法,能讓使用者介面保持響應性,同時有效率地以非同步方式處理資料。
- 延遲 GEM 通訊初始化:此處示範了在初始化過程中等待設備就緒的概念。
- 觸發事件:事件由流程模擬迴圈觸發。當事件被觸發時,相關變數便會隨之更新。
- 取得與設定變數值:此範例提供了多個範例,展示如何透過程式方式取得與設定不同資料類型的變數值。
- 設定與清除警示:可透過在使用者介面中切換核取方塊,來設定或清除一個示例警示。
- 終端服務:終端服務透過在設備使用者介面上顯示即時訊息,展示了有效記錄的實例。
- 遠端指令:此範例允許使用者透過從主機發送 SECS-II 訊息,來啟動及停止處理模擬。
培訓流程
這項培訓具有高度互動性;講師會先示範新主題,接著讓學員有時間親自嘗試。當需要嘗試新功能時,我發現先建立一個按鈕或核取方塊來確認新功能是否正常運作,這項做法頗有幫助。接著,我將該功能整合到應用程式中。將每個流程拆解成這兩個步驟,不僅能消除模糊不清之處,還能避免不必要的除錯工作。
培訓的進度由客戶決定。講師會視需要提供協助。雖然培訓遵循既定課程大綱,但每場課程都會根據提出培訓需求的客戶需求量身訂製。
我的申請
在培訓開始前,我已開發了一款 C# 應用程式。該應用程式會讀取 XML 製程配方,並模擬晶圓加工流程。在培訓期間能有一款可運作且可進行修改的應用程式,對我而言極具助益,因為它模擬了實際應用中的實務情境。
新增 SECS/GEM 介面
第一步是初始化 CIMConnect。透過從範例專案中萃取初始化函式,這一步驟得以簡化。確認 CIMConnect 已初始化後,我便能繼續進行 SECS/GEM 功能的加入。
API 呼叫
我的應用程式會向 CIMConnect 發送 API 呼叫,並接收來自 CIMConnect 的回呼。由於每個呼叫都允許進行客製化,因此起初這些 API 呼叫頗難理解。
封裝函式
範例專案提供了一個實用且實用的封裝函式,用以實作 API 呼叫。API 呼叫所產生的開銷會在封裝函式內部處理。使用封裝函式的優勢在於,開發人員可以專注於結果是否符合預期,而非需要擔心 API 呼叫是否出錯。
在成功運用封裝函式來呼叫 API 之後,我開始修改並自行編寫封裝函式。最終,我已經能夠游刃有餘地直接呼叫 API 了。
設備配置
CIMConnect 允許您在配置檔案中靜態定義事件、警報、變數及其他屬性。在我的檔案中,我建立了多個與我的應用程式相關的變數。後來我才得知,我的應用程式其實可以改為動態定義這些項目。此外,我的應用程式還能透過程式方式覆寫已配置的屬性。我認為這些功能將對生產多種型號、規格略有差異的設備的公司有所助益。
新增事件與警報
我所建立的第一個事件,是用來通知主機何時有 FOUP 降落在裝載埠上。我使用 SendCollectionEventWithData() 封裝函式來觸發該事件,並將先前在配置檔案中定義的變數加一。這個變數為我提供了降落在輸入埠上的 FOUP 數量。
我利用 AlarmSET() 和 AlarmClear() 函式,建立 3 個警報。由於手邊沒有 EMO 按鈕這類硬體設備,因此我使用核取方塊來切換各警報的行為。
我的應用程式,具備 SECS/GEM 介面。
使用 CIMConnect 控制面板進行開發
CIMConnect 控制面板是一款圖形化使用者介面工具,可讓使用者觀察 CIMConnect 的內部運作情況。
在開發過程中,我經常使用控制面板。當我在應用程式中切換每個核取方塊時,可以即時觀察警報狀態的變化。事件記錄和警報記錄會提供即時更新。我能夠透過控制面板變更變數值並觸發事件,並在主機上驗證結果,而無需不斷修改應用程式。
當我使用應用程式中的 GEM 控制元件時,我觀察到控制面板上的 GEM 通訊狀態發生了變化。我也可以在控制面板上變更狀態,並觀察該狀態在應用程式中的變化。

CIMConnect 控制面板 1.15.0
使用 GEM Host Messenger 進行主機測試
CIMConnect 隨附 GEM Host Messenger,這是一款主機應用程式,可讓使用者與設備之間傳送及接收 SECS-II 訊息。透過 GEM Host Messenger,我能夠輕鬆地將其與我的應用程式連接。GEM Host Messenger 會將訊息顯示出來,並解碼成易於閱讀的格式。
我可以向 S2F21 傳送「START」和「STOP」訊息,藉此控制應用程式的運作。看到我原本獨立運行的應用程式能被遠端控制,這種感覺非常令人滿足。

Gem Host Messenger 1.0.0
說明文件、工具與支援
CIMConnect 提供了一份詳盡的說明文件和開發者指南。我發現自己經常參考這些文件,以了解 CIMConnect 龐大函式庫中各項功能的詳細資訊。
結論
CIMConnect 讓我能夠快速開發一個 SECS/GEM 介面,並將其整合到現有的程式中。透過 CIMConnect 的培訓,即使是不熟悉 SECS/GEM 的開發人員,也能在短短 3 個工作天內掌握基礎知識。雖然這只是個簡單的範例,但 CIMConnect 具備足夠的效能與功能,足以支援任何規模的專案。