這篇部落格文章最初發表於 cimetrix.com
您是否曾遇到過這樣的狀況:正在使用的應用程式突然關閉,重啟後才發現所有工作成果都遺失了?(如果還沒有,那麼總有一天會遇到!)這篇部落格文章將探討 Cimetrix® CimControlFramework 是如何處理這種情況的。
什麼是持久化?為什麼應該使用它?
問題:
在執行任何應用程式時,總是存在執行中斷的風險:例如應用程式過早關閉、電腦斷電,或是程式運作異常。通常,程式會在記憶體中儲存代表該應用程式截至當下為止之關鍵資料與狀態的資訊。 當執行過程意外中斷時,截至該時刻所累積的所有資訊都面臨遺失且無法恢復的風險,因為記憶體中的資料本質上並不具持久性。程式終止後,儲存於記憶體中的任何資料都會消失。
解決方案:
一種典型的解決方案是在關鍵資料產生或變更時,立即將資料寫入磁碟。通常會將此類資料儲存於一個或多個檔案中,以實現完整的持久儲存機制。這能有效使每個資料項目都具有「持久性」,確保即使程式終止,關鍵資訊也不會遺失。如此一來,當應用程式重新啟動時,即可透過讀取持久性檔案,將每個資料項目恢復至其最後儲存的值,從而從意外終止的情況中恢復。
CCF 中的持久性:
以下章節將說明 CCF 中兩個關於持久性的例子。
NVS(非揮發性儲存裝置)
當「工具監督程式」應用程式或 GEM 主機變更某個持久變數的值時,新值會儲存於 CCF 的 NVS 設施中的對應檔案中。當「工具監督程式」重新啟動時,系統會在設備應用程式的初始化過程中讀取 NVS 檔案中的值,並將其套用至受影響的變數。
物料追蹤
CCF 產品包含針對材料(基板)的資料持久化功能,因此即使設備應用程式終止運作,系統仍會載入並在圖形使用者介面(GUI)上顯示有關材料及其最後已知移動軌跡的持久化資訊。
「物料追蹤」套件提供了一項特定服務,用以儲存設備內物料的當前狀態。啟用此功能後,每次物料移動都會被記錄到磁碟上的「物料地圖」檔案中。
系統亦提供一個維護圖形使用者介面(GUI)畫面,讓使用者能夠辨識已不存在的物料,或是位置與上次儲存時不同的物料。此外,系統還提供一項將物料移出設備的功能,以利進行回收作業。


工作資料的持久化
現在讓我們來探討如何實作工作資料持久化的功能。工作資料是一組值,用以指示設備如何移動及處理每項物料。工作主要分為兩種類型:控制工作與製程工作。
- 製程工作:將物料清單與配方進行關聯。
- 控制作業:一組製程作業。其中亦包含物料目的地資訊。
在 CCF 中實作工作資料持久化:
1. 應保存哪些資料
Cimetrix CIM300 產品(已安裝 CCF)負責管理 ProcessJobs 和 ControlJobs 的 SEMI E39 物件生命週期。CCF 會在執行時建立與工作相關的資料,並將這些資料儲存於 ControlJobData 和 ProcessJobData 類別中。此外,物件的屬性與狀態也應予以持久化,以便日後還原。 CCF 與 CIM300 都會維護一份已實例化的 ControlJobs 和 ProcessJobs 清單。
CCF 反對序列化/反序列化

CIM300 物件與用於序列化/反序列化的 API

2. 建立一個持久化套件
CCF 包含一個「物料追蹤」套件,該套件旨在為物料和位置提供持久化儲存功能。讓我們定義一個類似的程式碼套件,其中包含一個類別(AllJobs),該類別將存放要寫入磁碟的序列化字串。
2.a 何時將 ALLJobs 資料寫入磁碟:
- 在 SerializedJobsChanged 事件中(若尚未處理,請新增處理程式)
- 在嘗試載入後立即於啟動時執行,以強制首次寫入持久化檔案。
- 當 CIM300 發出任何 CIM40 回呼時
- 在任何來自 CIM300 的 CIM94 回調中
- 關於 SchProcessJob 的實例化
下圖說明了持久化資料是如何寫入的。
2.b 何時應從磁碟讀取 ALLJobs 資料:
- 在 Tool Supervisor 啟動時,於呼叫 StartFactoryAutomation() 之後,但呼叫 EquipmentControlSystem() 之前。
下圖說明了如何讀取並套用已儲存的資料。

結論
資料持久化是任何應用程式中至關重要的一環,旨在防止在發生意外終止時,重要資訊遺失。透過將資料立即寫入磁碟中的持久化檔案,應用程式便能從這些情況中恢復,並將資料還原至上次儲存的值。以 Cimetrix CCF 軟體為例,其透過 NVS 及物料追蹤功能來實現資料持久化,確保即使在應用程式終止後,變數與物料移動的資料仍能被儲存並可進行視覺化呈現。