學術專區 關於NI NI活動訊息 NI Developer Zone 技術支援服務 使用者解決方案 產品與服務 連絡NI MyNI

4. 找出錯誤並處理

NI LabVIEW 軟體具備強大的除錯工具,可協助使用者找出程式碼中的問題並對症下藥。軟體錯誤通常可分為 2 種:程式無法執行,或產生錯誤結果/行為。接著將協助使用者找出此 2 種錯誤。


詳細說明

下載詳細說明 PDF 檔


若 LabVIEW 無法執行 VI,則會將 Run 箭頭轉為破碎圖示以提醒使用者,Error List 視窗亦將列出 VI 錯誤的原因。第二種錯誤往往較難以發現,但 LabVIEW 具備多種輔助工具,可讓使用者更輕鬆觀看程式碼執行時的情況。

修復破碎的 VI

若 VI 無法執行,則為破碎或無法執行的 VI。若使用者所建立或編輯的 VI 發生錯誤,將顯示破碎的  Run  箭頭按鈕。
一般情況下,此代表必要輸入尚未接線,或接線已中斷。可按下破碎的  Run  箭頭按鈕即可觀看  Error List  視窗。 Error List  視窗將列出錯誤並說明問題。使用者可對錯誤連點滑鼠 2 次,即可直接前往錯誤處。

回到頂端

尋找 VI 破碎的原因

警示功能並無法阻止使用者執行 VI。此功能僅協助使用者避免 VI 的可能問題。當然任何錯誤均可中斷 VI。在確實執行 VI 之前,必須解決所有錯誤。點選破碎的 Run 按鈕,或點選  View » Error List  即可了解 VI 錯誤的原因。Error List 視窗將列出所有錯誤。Items with Errors 區塊將列出記憶體中的所有項目名稱,如發生錯誤的 VI 與專案函式庫。若有超過 2 個以上的項目為相同名稱,則此區塊將顯示各個項目的特定應用實例。

Errors and Warnings 區塊將將針對使用者於 Items with Errors 區塊中所選的 VI,列出其錯誤與警示。 Details  區塊則說明錯誤,另有特定條件下的錯誤修正建議。點選  Help  按鈕即可於
LabVIEW Help  中顯示相關主題,以詳細說明錯誤並可逐步修正。
點選  Show Error  按鈕,或對錯誤說明連按滑鼠 2 次,即可反白強調程式圖或人機介面的錯誤所在。


圖 1. Error List 對話框範例

常見的 VI 破碎原因

下列為使用者編輯 VI 卻發生錯誤的常見原因:

- 由於資料形態不符或有未連接的端點,程式圖將因此產生斷線。可參閱 LabVIEW Help 中的 Correcting Broken Wires,以進一步了解連接斷線的資訊。
- 必要的程式圖端點尚未接線。可參閱 LabVIEW Help 中的 Using Wires to Link Block Diagram Objects,以進一步設定必要的輸出與輸入。
- subVI 發生錯誤;或當使用者將 subVI 圖示置於 VI 程式圖之後,卻又編輯了接頭面板。

修復錯誤動作

若 VI 可執行卻產生錯誤結果,就可能是程式碼發生功能錯誤。LabVIEW 多項工具可協助分析 VI 並未正確運作之處。

回到頂端

程式圖工具列



當執行 VI 時,出現在程式圖工具列上的按鈕,即可用於 VI 除錯。下列工具列即出現於程式圖上。

當執行 VI 時,可點選  Highlight Execution  按鈕以顯示程式圖的執行動畫。另可注意程式圖的資料流動情況。同樣按鈕再按 1 次,即可停止此功能。

此執行作業的強調功能,即透過連線之間移動的泡泡 (Bubble),顯示在節點之間的資料移動情況。另可搭配單步進 (Single-stepping) 功能,以觀看資料數值是如何穿過 VI 並於節點之間移動。

注意: Highlight Execution 可能大幅降低 VI 執行的速度。


圖 2.  Highlight Execution 使用中的範例

點選  Retain Wire Values  按鈕,即可於執行流程的各個點中儲存接線數值,因此若於接線上放置探針 (Probe),可迅速取得「穿過接線」的最新資料數值。若要取得接線數值,必須成功執行 VI 至少 1 次。

點選  Step Into  按鈕即可開啟節點並暫停。當再次點選  Step Into  按鈕,隨即恢復執行第一次作業,並將暫停 subVI 或架構的下一次作業。另可按下 <Ctrl> 與鍵盤的向下箭頭。Single-stepping 將逐一完成 VI 的各個節點。當準備執行完畢,各個解點均將開始閃爍。

點選  Step Over  按鈕以執行節點,並可暫停下一個節點。另可按下 <Ctrl> 與鍵盤的向右箭頭。若逐一完成各個節點,則不需 Single-stepping 亦可執行節點。

點選  Step Out  按鈕,可結束目前節點的執行狀態並暫停。當 VI 結束執行,亦無法點選  Step Out  按鈕。另可按下 <Ctrl> 與鍵盤的向上箭頭。在結束節點之後,即可完成節點的 Single-stepping,再瀏覽至下一個節點。

若 VI 產生警示,且使用者在 Error List 視窗中勾選 Show Warnings,隨即產生 Warning 按鈕。警示代表程式圖發生潛在問題,但並不會中斷 VI 的執行。

在 VI 執行時,Probe 工具可檢查接線上的中間值。若目前使用多項作業的複雜程式圖,且任何 1 組作業均可能回傳錯誤資料時,即可使用 Probe 工具。若 Probe 工具搭配前述的執行強調 (Execution highlighting)、單步進 (Single-stepping)、斷點 (Breakpoint) 功能,即可找出錯誤資料。若找出資料,則 Probe 工具將於 Execution Highlighting 與 Single-stepping 期間,或於暫停斷點期間,立刻在  Probe Watch 視窗 中更新並顯示資料。若因單步進或斷點而暫停執行節點,則可探測剛執行過的接線,以找出穿過該接線的值。

回到頂端

處理 LabVIEW 中的錯誤

不論使用者有多相信自己所建立的 VI,仍往往無法預測錯誤發生。但由於尚無錯誤檢查機制,使用者僅能發現 VI 無法正常運作。而錯誤檢查功能可讓使用者得知錯誤原因。

自動處理錯誤

所有錯誤均有相對應的數字代碼與訊息。

依預設值,當 VI 暫停執行時,LabVIEW 將自動處理錯誤、強調顯示發生錯誤的 subVI 或函式,並蹦現錯誤對話框。

若要對現有 VI 停用自動錯誤處理功能,可點選  File » VI Properties ,再點選  Category  下拉式功能表上的 Execution。若要停用空白或新 VI 的自動錯誤處理功能,可點選  Tools » Options  ,再點選  Category  清單上的  Block Diagram 。若要停用 VI 內 subVI 或函式的自動錯誤處理功能,可將其 error out 參數接至其他 subVI/函式的 error in 參數,或可接至  error out  指示元。

手動處理錯誤

使用者亦可選擇其他錯誤處理方式。若程式圖上的 I/O VI 暫停,則使用者可能不希望整個應用停止,並能顯示錯誤對話框。另可讓 VI 在特定時間後重新嘗試啟動。而這時可透過 LabVIEW 的程式圖,設定 VI 的錯誤處理功能。

可使用  Dialog & User Interface  面板上的 LabVIEW 的錯誤處理 VI 與函式,讓大多數 VI/函式 的 Error in 與 Error out  參數去管理錯誤即可。舉例來說,若 LabVIEW 發生錯誤,則使用者可透過不同的對話框顯示錯誤訊息。使用錯誤處理功能搭配除錯工具,即可尋找並管理錯誤。

當執行任何輸出/輸入 (I/O) 時,亦應考量可能的錯誤。大多數的 I/O 均可回傳錯誤訊息。這些訊息包含 VI 的錯誤檢查功能 (特別是 I/O 作業,如檔案、序列、儀控、通訊、資料擷取),並可正確處理錯誤。

使用 LabVIEW 的錯誤處理 VI、函式、參數,以管理錯誤。另可透過程式設計進而修復錯誤,並將 subVI/函式的  error out  輸出,接至 Clear Errors VI 的  error in  輸入,即可清除這些錯誤。使用錯誤處理功能搭配除錯工具,即可尋找並管理錯誤。

回到頂端

錯誤叢集

透過錯誤叢集的控制元與指示元,即可於 subVI 中建立 Error 輸出與輸入。

Error in 與 Error out 叢集將提供下列資訊要件:

- status  屬於 Boolean 值,可於錯誤發生時回報 TRUE。

- code  則為 32 位元具正負號的整數,即以數字呈現錯誤。若是不為零的錯誤代碼搭配 FALSE 狀態,則屬於警示而非錯誤。

- source  為字串,可表示錯誤發生的位置。

LabVIEW 中的錯誤處理,則是跟隨資料流模型。如同資料數值可流經 VI,錯誤資訊亦可。將錯誤資訊從 VI 起頭接至末端。而 VI 末端可納入錯誤處理 VI (如 Simple Error Handler.vi),以了解 VI 是否運作無誤。另可使用各個 VI 中的 error in 與 error out 叢集,以將錯誤資訊傳送過 VI。

當 VI 執行時,LabVIEW 將於各個執行節點測試錯誤。若 LabVIEW 並未發現錯誤,則節點將正常執行。若 LabVIEW 確實測得錯誤,則節點會將錯誤傳送至下個節點,而不會執行該部分的程式碼。下個節點亦將執行相同動作。直到執行流程的末端,LabVIEW 即回報錯誤。

了解錯誤

當錯誤發生時,可對叢集邊框按下滑鼠右鍵,再點選 Explain Error 即可開啟 Explain Error 對話框。Explain Error 對話框將提供該錯誤的相關資訊。若 VI 發生警示而非錯誤,則按下滑鼠右鍵所出現的功能表,將提供 Explain Warning 選項。

另可點選  Help » Explain Error  功能表,即可開啟  Explain Error  對話框。

回到頂端

使用 While Loop 搭配錯誤處理功能

另透過條件端點,可將錯誤叢集接至 While Loop 或 For Loop 的條件端點,即可停止迴圈循環。若將錯誤叢集接至條件端點,則僅有錯誤叢集的 True 或 False 狀態參數值,會傳送至端點。若發生錯誤,則迴圈隨即停止。在具備條件端點的 For Loop 中,亦可將單一數值接至計數端點,或自動檢索輸入陣列,以設定迴圈循環的最大值。For Loop 將不斷執行,直到錯誤發生或完成特定循環值。

若將錯誤叢集接至條件端點,則功能表上的 Stop if True 與 Continue if True,將更改為 Stop on Error 與 Continue while Error。

圖 3  則同時使用了錯誤叢集與停止按鈕,以決定停止迴圈的時機。因為使用者可依需求而停止迴圈,也可依錯誤發生而停止迴圈,所以此為停止大多數迴圈的最佳方式。


圖 3.  停止 While Loop

回到頂端

Module Quiz:找出錯誤並處理

完成簡易測驗,看看自己是否了解「LabVIEW 找出錯誤並處理」影片中的概念。

  1. 若 Run 箭頭為破碎箭頭,則 VI 發生錯誤。若要觀看錯誤,可點選 _________ 即可蹦現 Error List 對話框。
    Abort 按鈕
    Step Into
    Pause 按鈕
    破碎的 Run 箭頭

     
  2. 若要於程式圖上觀看「Error List 對話框所列的特定錯誤」,可點選 ________ 按鈕。
    Close
    Show Error
    Help
    Minimize

     
  3. 若要減緩 LabVIEW 程式的執行速度,可於程式圖中啟動 ___________。如此可顯示資料的移動情形。
    Highlight Execution
    Breakpoints
    Retain Wire Values
    Run Continuously

     
  4. 若錯誤叢集的狀態為 TRUE,則可往往可透過 __________   函式退出迴圈。
    Bundle
    Unbundle
    Bundle by Name
    Unbundle by Name

     

Cumulative Test:
LabVIEW Basics

接受 LabVIEW Basics Test,測出自己對 LabVIEW 基本了解程度。建議先完成 LabVIEW Basic Concepts 中的 7 大區塊之後,再接受此測驗。本測驗共有 20 題多重選擇題。

開始

Cumulative Exercise:
LabVIEW Basics

完成 LabVIEW Basics Exercise,以了解自己對 LabVIEW 環境的熟悉程度。建議先完成 LabVIEW Basic Concepts 中的 7 大區塊之後,再接受此測驗。此習題將透過 LabVIEW 而建構計算機。

開始