LabVIEW程序的調(diào)試方式
圖 7 Breakpoint Manager對話框
1.4高亮工具(Highlight)
高亮工具是LabVIEW相對于傳統(tǒng)的文本式語言的IDE環(huán)境所獨(dú)有的調(diào)試工具,也是數(shù)據(jù)流程序設(shè)計思想的一種體現(xiàn)。打開工具欄中的Highlight工具(如圖 8所示)并單擊“Run”按鈕,程序開始在Highlight模式下運(yùn)行。此時根據(jù)數(shù)據(jù)流的運(yùn)行順序,LabVIEW將在各個節(jié)點(diǎn)的輸入和輸出的端子上顯示當(dāng)前端子上的數(shù)據(jù),并且以小圓點(diǎn)的方式顯示數(shù)據(jù)流的執(zhí)行方式。程序員可以比較清楚地觀察到數(shù)據(jù)流的走向以及源代碼的執(zhí)行情況,這極大地方便了LabVIEW開發(fā)者對某部分代碼的詳細(xì)調(diào)試。圖 8 Highlight工具
對初學(xué)者而言,這種調(diào)試方式無疑是直觀和清楚的。但是同時對一些VI也會帶來一些影響,如某些對時間有著嚴(yán)格控制的VI。由于在Highlight模式中,LabVIEW會減慢程序執(zhí)行的速度,因此有些與時間有關(guān)的事件或者Bug會被掩蓋和忽略。這也是為什么有時候程序在Highlight模式下運(yùn)行正常,而回到普通模式時卻無法返回正確的結(jié)果。此時,就需要使用Breakpoint和Probe工具(下一小節(jié)介紹)聯(lián)合調(diào)試,找到程序出現(xiàn)問題的原因。
1.5探針工具(Probe)
探針并不是LabVIEW所特有的調(diào)試工具,在很多的文本式語言的IDE中都存在著Watch窗口用來實(shí)時監(jiān)視某些變量的值,LabVIEW中的探針與此類似,也是用來實(shí)時監(jiān)測程序背面板中任一連接線(不是任一節(jié)點(diǎn))上的值。右擊源代碼中任一連線處,選擇Probe菜單項(xiàng)將彈出當(dāng)前位置的探針,如圖 9所示。LabVIEW會自動判斷當(dāng)前位置的數(shù)據(jù)類型從而調(diào)用不同的探針以顯示當(dāng)前位置的數(shù)據(jù)。當(dāng)VI的背面板關(guān)閉時,那么該VI中所有的探針窗口也會自動關(guān)閉。運(yùn)行VI,當(dāng)運(yùn)行到探針的位置時將在探針窗口中立即顯示當(dāng)前的值。
圖 9 Probe工具
為了定位到錯誤源或者找到某一時刻的運(yùn)行結(jié)果,往往程序員需要配合斷點(diǎn)和探針工具,在適當(dāng)?shù)奈恢迷黾訑帱c(diǎn),而適當(dāng)?shù)奈恢眉尤胩结??;蛘咧苯釉O(shè)置探針工具,讓探針捕獲到某一特定的條件是程序暫停運(yùn)行。如在圖 9中,選擇Custom Probe>>Conditional String Probe菜單項(xiàng)將彈出圖 10所示的探針窗口。在Condition頁中,可以設(shè)置程序暫停的條件。當(dāng)滿足該條件時,程序?qū)⒘⒓丛诋?dāng)前探針位置暫停。
圖 10 Conditional String Probe
從圖 9和圖 10可以看出,探針的主要功能就是將當(dāng)前連線上的數(shù)據(jù)以控件(Indicator)的形式表示出來。由于在LabVIEW中,數(shù)據(jù)的顯示方式是可以自定義的,如使用Type Def.控件修改某些控件的外觀或者將String控件以****的密碼方式顯示,因此LabVIEW提供了自定義探針技術(shù)允許程序員根據(jù)實(shí)際情況使用任意預(yù)定義的探針。
在圖 9的快捷菜單中選擇Custom Probe>>New…菜單項(xiàng),將彈出圖 11所示的自定義探針向?qū)А3绦騿T可以選擇從現(xiàn)有的探針文件(從后面可以看出,事實(shí)上也是一個vi文件)新建探針或者直接新建一個空的探針。選擇“Create a new probe”項(xiàng)。
圖 11 Create New Probe_1
單擊Next按鈕進(jìn)入圖 12所示的界面。Filename表示探針文件的名字;Window title and shortcut menu name表示探針VI的標(biāo)題欄名字同時也是使用探針時出現(xiàn)在快捷菜單中的名字;Directory to save the probe表示探針的存儲位置。
圖 12 Create New Probe_2
單擊Save按鈕,LabVIEW會自動生成圖 13所示的探針VI。不要刪除界面上的任何控件:
- String型控件表示探針位置當(dāng)前的數(shù)值;
- Boolean型控件表示條件斷點(diǎn),當(dāng)該值被設(shè)置為TRUE時,程序?qū)⒃诋?dāng)前的斷點(diǎn)處暫停。
圖 13 String Probe_Custom.vi
本例將修改String Probe_Custom.vi(下載)使得程序以不同的方式顯示String的值,并且設(shè)置為當(dāng)值為“Hello”時暫停程序運(yùn)行。如圖 14所示,加入適當(dāng)?shù)拇a,并調(diào)整Probe的前面板窗口大?。ㄟ@也是最終探針的顯示大?。?。
圖 14 修改后的String Probe_Custom.vi
新建一個VI,并加入一個String控件,此時在右鍵快捷菜單中選擇Custom Probe>> My First String Probe菜單項(xiàng),如圖 15所示。
圖 15 調(diào)用String Probe_Custom探針
此時,LabVIEW會自動調(diào)用String Probe_Custom.vi,并以探針窗口的樣式顯示,如圖 16所示。在運(yùn)行VI前修改Display Style中的值并運(yùn)行VI,那么String顯示框?qū)⒆詣右韵鄳?yīng)的方式顯示數(shù)值。
圖 16 String Probe_Custom探針窗口
從上面的調(diào)用過程可以看出,LabVIEW中的探針實(shí)際上是對VI的調(diào)用。因此,在編輯探針VI時需要遵循以下的原則:
- 不要在探針VI中加入任何等待或長時間執(zhí)行的代碼,如循環(huán)、事件、隊(duì)列等,否則LabVIEW在運(yùn)行時會自動掛起。
- 不要修改探針VI的默認(rèn)屬性,如設(shè)置為Modal等。但是可以修改它的標(biāo)題欄和大小。
LabVIEW提供了一種工具允許程序中的連接線保留上一次的運(yùn)行值。單擊圖 17中的“Retain Wire Values”按鈕打開該工具,此時LabVIEW將保留當(dāng)前VI上一次的運(yùn)行值。當(dāng)VI運(yùn)行完成后,再次添加探針,則探針會自動立即顯示該位置上一次的運(yùn)行值。當(dāng)然,這也會影響程序運(yùn)行的效率,因此當(dāng)VI退出內(nèi)存時,LabVIEW會自動關(guān)閉該工具。
圖 17 Retain Wire Values工具
1.6VI窗口管理(VI Windows)
在調(diào)試過程中,為了追蹤子VI的運(yùn)行狀態(tài),經(jīng)常需要打開很多的VI窗口。往往在關(guān)閉這些窗口時反復(fù)地按下“Ctrl + W”鍵,LabVIEW提供了同時關(guān)閉這些VI的方法。單擊Windows>>All Windows…(快捷點(diǎn)是Ctrl + Shift + W)菜單項(xiàng),將彈出圖 18所示的VI窗口管理對話框。選擇需要關(guān)閉的窗口(可以使用Ctrl鍵或Shift鍵多選),單擊“Close Windows”按鈕就可以關(guān)閉選擇的窗口。圖 18 VI窗口管理
【小技巧】
在LabVIEW中,按下Ctrl + Tab鍵能夠在不同的LabVIEW窗口之間切換(Windows的Alt + Tab鍵是在所有的窗口之間切換)。
評論