前言
通過上一個文章的介紹,我們發現LabVIEW自帶的錯誤管理依舊比較基礎,如果需要對錯誤進行很好的管理,則需要進一步的進行程序編寫。
用於在程序設計的過程中,為了保證程序的健壯性,我們需要
1.忽略一些
不需要的
錯誤
2.對特定的一些錯誤做額外的處理
3.將一些有可能為以后工作所需要的錯誤進行記錄
上個文章中,小黑學習了Error Ring,並且了解了錯誤的一些處理,今天小黑帶大家看看SEH錯誤處理工具包的內容。
什么是SEH
SEH的全稱是Structured Error Handler (SEH) Library,
庫提供了一種組織和管理錯誤的機制。
1.SEH包括一個可配置的Express VI,可幫助處理特定錯誤;
2.SEH建立了
傳輸錯誤的通信機制,中央錯誤處理程序的模板;
3.
SEH建立了
各種支持的VI和實用程序,便於對錯誤進行集中管理。
如何使用SEH
在特定錯誤容易出現的地方,可以放置Express VI,用於捕獲這些錯誤,在錯誤最容易出現的地方捕獲這些錯誤有以下幾點明顯的好處:
1.錯誤捕獲的時候接近錯誤源頭,你可以避免由於錯誤在線程中專遞導致最終錯誤無法辨別。由於LabVIEW中的產生錯誤的代碼可以在很多位置使用而且相同的錯誤可以在不同的地方產生,如果不對錯誤的源頭記錄,往往還需要花費大量的時間去定位錯誤的位置。
2.捕獲錯誤接近錯誤源頭可以有助於錯誤修正措施的編寫。例如:有些錯誤重復檢測的時候,最好的方式是直接檢測並且處理。
特定錯誤搜集功能
How To Use
1.將Express VI放置於錯誤產生的位置

2.雙擊該VI彈出配置對話框(這里左側的工具欄稍微有些錯位...)

3.點擊加號,可以新增錯誤,在錯誤輸入對話框,可以定義單個的錯誤,或者是一個錯誤的范圍

點擊右鍵菜單也可以添加和刪除Code

4.Input的Tab頁面配置
在這個頁面可以勾選Detect Warning,用於檢測警告

通常錯誤簇可以定義警告和普通錯誤

5.Action的配置頁面

名稱 | 說明 | 備注 |
Retry | 確定特定錯誤處理程序是否應嘗試重新執行代碼 | 請參閱重試部分 |
Number of Retries | 確定重試代碼的次數 | 此選項僅在啟用重試時可見 |
Infinite | 表示重試次數沒有限制 | 此選項僅在啟用重試時可見 |
Call VI | 從內存中調用VI | 請參閱實時錯誤處理程序部分 |
VI To Call | 確定應該調用哪個VI,鍵入VI名稱 | 參閱調用VI部分 |

名稱 | 說明 | 備注 |
Notify | 將錯誤傳送到中央錯誤處理程序 | 參閱錯誤通信部分 |
Priority | 確定應處理通知的順序, 較低優先級號碼具有較高的優先級,0是最高優先級 | |
Classify | 對通知進行分類。 請注意,此分類僅適用於通知,不適用於錯誤輸出。 | 請參閱分類錯誤部分 |
Classification | 錯誤類型的字符串描述。 請注意,在實時版本的庫中,字符串必須為四個或更少的字符 | 有關詳細信息,請參閱分類錯誤部分。 |

名稱 | 說明 | 備注 |
Clear Error | 清除錯誤 | |
Convert to Warning | 將錯誤轉換為警告 | |
Classification | 錯誤類型的字符串描述 | 有關詳細信息,請參閱分類錯誤部分。 |

點擊保存和加載,可以快速的配置一些已經有的模板
常規用法
1.忽略錯誤
當需要用戶選擇一些文件的時候,如果用戶取消,則會提示43的錯誤,通常我們會對這個錯誤進行處理,所以使用SEH工具包,直接忽略這個目標錯誤即可

2.重試
重試功能可以允許你在出現一些錯誤的時候,重新運行程序,並且定義執行幾次錯誤
在使用時,通常要與Clear Error一同使用,以便下一次的運算可以在無錯誤的情況下運行

3.轉換為警告
這個地方可以產生錯誤,並將錯誤轉換為警告。主要用在將錯誤的布爾由真轉換為假,這樣可以用於保存和顯示錯誤,但是不影響后續代碼的執行。

4.分類錯誤
SEH工具包可以對錯誤進行分類處理,幫助建立中心錯誤處理管理。由於即使是相同的錯誤,也會出現不同的處理方法,所以需要對錯誤進行分類處理。
例如:同樣是文件不存在,如果是關鍵的配置文件不存在,則需要提示並且終止運行,而日志文件不存在,我們只需要重新創建一個即可。
錯誤可以同時使用Classify Error VI或者使用Express VI來分類

使用分類會在錯誤信息中,增加一個*Error Class = XXX*的信息,用於分類錯誤

5.Call VI

需要注意的是
1. 這里VI必須是內存中的VI,否則會報錯;這里可以將需要調用的VI以靜態引用的方式放在程序框圖中,確保VI可以加載
2. 調用的VI相當於一個執行腳本,不會彈出前面板,所以不要調用一些需要UI處理的腳本,只適合做一些簡單的操作
6.Error Communication 錯誤通訊
在通訊頁面,可以將錯誤發送到中央處理循環

SEH工具,使用功能全局變量進行通訊。功能全局變量初始化的時候,你可以定義錯誤的優先級,定義 每一個優先級的錯誤個數

功能全局變量實現一個簡單的優先級隊列。 優先級隊列是一個隊列,其中每個入隊單元被賦予優先級,並且高優先級元素總是在低優先級元素之前從隊列中返回。 具有相同優先級的兩個元素將以先入先出(FIFO)的方式返回,就像普通隊列一樣。 為了提高性能,SEH通信機制的優先級以相反的順序實現,0是優先級最高的優先級。

您可以通過調用SEH Get Next錯誤從通信系統出現錯誤

7.Central Error Handler 【中央錯誤處理程序】