你可能聽過這則開頭是「當我前往聖艾夫斯時,遇見了一位有七位妻子的男人」的腦筋急轉彎。詩中接著描述,每位妻子各有七個麻袋,每個麻袋裡各有七隻貓,以此類推。最後便提出了這個問題:「到底有多少人正前往聖艾夫斯?」關於這個腦筋急轉彎,常見的誤解是:要解答這個問題,必須將所有項目相乘,結果會得到一個巨大的數字。
Cimetrix 在協助應用程式開發人員將設備資料擷取(EDA)/介面 A 標準整合至其設備控制應用程式方面,擁有豐富的經驗。偶爾我們會遇到某種設備類型,其製程模組數量極多,且每個製程模組又包含大量例外情況。在 EDA Freeze II 中,一個例外情況同時由例外定義和例外實例來表示。針對需要建立包含大量例外情況的模型,有哪些可行的方案?
好
最直接的方法是針對每個例外實例定義一個例外,如下列 EDA 設備模型所示:

然而,採用這種方法時,若每個模組有 5000 個例外,200 個模組將產生 100 萬個例外實例,並對應 100 萬個例外定義。部署和維護此模型所需的系統資源非常龐大。
更好
EDA 允許多個例外實例參照單一例外定義。以下模型展示了此方法:

在此範例中,我們可以看到該流程模組有十個例外實例,但目前僅有一組例外定義。採用這種方法,假設每個模組有 5000 個例外實例,即使有 200 個模組,總計仍會產生 100 萬個例外實例,但此時我們只需 200 個例外定義(每個模組一個)。這雖然是顯著的減少,但數量依然相當龐大。
最棒的
對於擁有眾多製程模組,且每個模組都包含大量例外情況的設備,最佳做法是為每個模組僅定義少數幾種明確的例外情況,然後使用暫存參數(或資料變數)來標示問題的實際原因。以下模型展示了這種做法可能的樣貌:

上述模型中的流程模組僅有一個例外。暫態參數 AlarmCode 將包含觸發該例外的原因相關資訊。若需更多資訊(例如子錯誤代碼、描述等),亦可設定多個例外參數。
EDA 標準參考了四種例外嚴重性等級——資訊、警告、錯誤和致命。若我們針對每種嚴重性等級建立一個例外定義,且每個模組的例外實例數不超過四個,則可得知,一個包含 200 個模組的模型將有四個例外定義,而例外實例數的上限為 800 個。
這種例外整合方法透過降低模型的複雜度與大小,使設備製造商與工廠雙雙受益。
上述腦筋急轉彎的答案是:只有一個人要去聖艾夫斯——那就是我。你不必花費大量時間和精力去推算另一群人中有多少人、多少隻貓等等,因為他們正朝著相反的方向行進!同樣地,如果你在 EDA 中整合例外處理機制,就無需耗費大量時間和系統資源來處理過多的例外情況。