當(dāng)前位置:首頁(yè) > 測(cè)試測(cè)量 > 測(cè)試測(cè)量
[導(dǎo)讀]LabVIEW做為一個(gè)編程開(kāi)發(fā)平臺(tái),和其它的文本編程環(huán)境一樣,當(dāng)我們編寫的程序變得很大時(shí),為了能在調(diào)試的時(shí)候快速的定位問(wèn)題,也為了能在最終用戶使用時(shí),對(duì)于突發(fā)的錯(cuò)誤或者可預(yù)知的錯(cuò)誤能夠通過(guò)一定的處理進(jìn)行糾正或

LabVIEW做為一個(gè)編程開(kāi)發(fā)平臺(tái),和其它的文本編程環(huán)境一樣,當(dāng)我們編寫的程序變得很大時(shí),為了能在調(diào)試的時(shí)候快速的定位問(wèn)題,也為了能在最終用戶使用時(shí),對(duì)于突發(fā)的錯(cuò)誤或者可預(yù)知的錯(cuò)誤能夠通過(guò)一定的處理進(jìn)行糾正或關(guān)閉應(yīng)用程序,避免錯(cuò)誤的進(jìn)一步發(fā)生。這就需要LabVIEW開(kāi)發(fā)人員在開(kāi)發(fā)應(yīng)用程序時(shí),能夠合理的使用一種錯(cuò)誤處理策略。這篇文章中,我們將會(huì)給大家介紹一些LabVIEW中的基本的和高階的錯(cuò)誤處理技巧,提高應(yīng)用程序魯棒性。 默認(rèn)的,LabVIEW是會(huì)進(jìn)行自動(dòng)錯(cuò)誤處理的。這表現(xiàn)在當(dāng)程序執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤時(shí)(如加載文件失?。?,程序會(huì)掛起,LabVIEW會(huì)自動(dòng)彈出錯(cuò)誤對(duì)話框,并高亮導(dǎo)致錯(cuò)誤產(chǎn)生的子VI或函數(shù)模塊。在LabVIEW中可以通過(guò):1)工具>>選項(xiàng)>>程序框圖>>錯(cuò)誤處理:該分支下有兩個(gè)選項(xiàng)可以決定是否使能自動(dòng)錯(cuò)誤處理;2)對(duì)于單個(gè)VI,文件>>VI屬性>>執(zhí)行:該分支下可以選擇是否對(duì)當(dāng)前VI關(guān)閉自動(dòng)錯(cuò)誤處理。 如果希望程序在執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤時(shí)能給出更有意義的提示信息,我們可以使用自定義錯(cuò)誤處理。首先評(píng)估一下該應(yīng)用中,有可能會(huì)出現(xiàn)哪些錯(cuò)誤,并給這個(gè)錯(cuò)誤賦特定的錯(cuò)誤代碼(error code)和描述信息(description)。LabVIEW預(yù)留了以下錯(cuò)誤代碼供用戶自定義錯(cuò)誤使用:-8999到-8000,5000到9999,500000到599999。比如:在一個(gè)數(shù)據(jù)采集應(yīng)用中,需要監(jiān)測(cè)外部信號(hào)的幅值,當(dāng)幅值大于8V時(shí),我們可以定義該錯(cuò)誤碼為6000,并通過(guò)General Error Handler函數(shù)彈出相應(yīng)對(duì)話框。(參考basic error handling.vi)圖1.通用錯(cuò)誤處理 上述這種方式,如果程序很大時(shí),為了不遺漏掉各部分可能產(chǎn)生的錯(cuò)誤,我們需要不斷的放置General Error Handler函數(shù),并給它不斷的配置“用戶自定義代碼”和“用戶自定義描述信息”,時(shí)間長(zhǎng)了,就難于維護(hù),而且很難面面俱到,而且增大代碼的體積和占用配圖的空間。有沒(méi)有一種全局的方式呢?答案是肯定的,在LabVIEW中通過(guò):工具>>高級(jí)>>編輯錯(cuò)誤代碼,彈出錯(cuò)誤代碼編輯對(duì)話窗口,可以新建或修改現(xiàn)有的文件。在錯(cuò)誤編輯窗口中可以添加自定義錯(cuò)誤代碼和相應(yīng)的文本描述信息。如果是新建的文件,點(diǎn)擊Save按鈕時(shí)會(huì)彈出對(duì)話框提示保存,文件名稱必須是xxx-errors.txt,xxx是用戶可以自由命名部分。xxx-errors.txt文件的存放目錄必須在:盤符:Program FilesNational InstrumentsLabVIEW 2011user.liberrors目錄下(這里以LabVIEW 2011為例,其中盤符為L(zhǎng)abVIEW所在的安裝目錄),如果沒(méi)有errors目錄,可以手動(dòng)創(chuàng)建。xxx-errors.txt文件在LabVIEW關(guān)閉并重啟后才生效。圖2. 錯(cuò)誤代碼編輯對(duì)話窗口 到這里的時(shí)候,如果只是一個(gè)人在孤獨(dú)的寫程序,那么通過(guò)xxx-errors.txt文件對(duì)自定義錯(cuò)誤代碼進(jìn)行管理就基本上能滿足一個(gè)LabVIEW開(kāi)發(fā)者在同一臺(tái)計(jì)算機(jī)上的要求了。但是在很多情況下,我們開(kāi)發(fā)的應(yīng)用程序最終可能會(huì)在其它計(jì)算機(jī)上部署或運(yùn)行,或者要共享給其他開(kāi)發(fā)人員,那怎么使得xxx-errors.txt得以復(fù)用。 如果是把源代碼共享給另一個(gè)開(kāi)發(fā)人員,只需要從原來(lái)的計(jì)算機(jī)上將xxx-errors.txt文檔拷貝到對(duì)方計(jì)算機(jī)上的相應(yīng)目錄:盤符:Program FilesNational InstrumentsLabVIEW 2011user.liberrors下即可。如果是生成Executable文件,那么在Executable的屬性配置窗口的高級(jí)頁(yè)面中,勾選上“拷貝錯(cuò)誤代碼文件”,這樣在生成Executable時(shí),會(huì)自動(dòng)將”盤符:Program FilesNational InstrumentsLabVIEW 2011user.liberrors”下所有的xxx-errors.txt復(fù)制到”C:Program FilesNational InstrumentsSharedLabVIEW Run-Time2011errors”目錄下(這里以LabVIEW 2011為例,該路徑為L(zhǎng)abVIEW Run-Time的目錄)。圖3. Executable的屬性配置窗口 但這只是在原來(lái)的計(jì)算機(jī)上做了一次復(fù)制,要在目標(biāo)計(jì)算機(jī)上運(yùn)行,除了拷貝Executable文件,必須將xxx-errors.txt文件手動(dòng)拷貝到目標(biāo)計(jì)算機(jī)的LabVIEW Run-time目錄下。大家可能會(huì)有疑問(wèn),要是這樣的話,那圖3中的勾選項(xiàng)還有什么用!確實(shí),如果只是在目標(biāo)機(jī)上運(yùn)行Executable,是否勾選上都無(wú)所謂。但是當(dāng)我們勾選上之后,進(jìn)一步生成安裝文件時(shí),在安裝文件的屬性配置窗口的附加安裝頁(yè)面中,勾選上LabVIEW Run-time Engine,這樣安裝文件中將會(huì)包含LabVIEW Run-time Engine,而xxx-errors.txt在之前生成Executable時(shí)已經(jīng)拷貝到LabVIEW Run-time Engine目錄下了,也將包含在Installer中,所以在目標(biāo)計(jì)算機(jī)上安裝Installer時(shí),就不再需要手動(dòng)拷貝xxx-errors.txt文件了。 好了,到這里為止?;A(chǔ)知識(shí)我們介紹完了,接下來(lái)我們介紹對(duì)于可預(yù)見(jiàn)的錯(cuò)誤,是否可以選擇直接忽略,或者前幾次嘗試忽略直到該特定錯(cuò)誤出現(xiàn)很多次后才通知用戶需要糾正該錯(cuò)誤了;是否可以對(duì)重要的錯(cuò)誤進(jìn)行存檔;當(dāng)主VI中多個(gè)線程時(shí),如果某一個(gè)線程出錯(cuò),如何保證其它線程進(jìn)行適當(dāng)?shù)氖瘴埠笸瑯觾?yōu)雅的退出,避免一錯(cuò)再錯(cuò)。這里我編寫了一個(gè)參考VI,我們將詳細(xì)介紹:圖4.項(xiàng)目文件概覽 打開(kāi)Error Handling in LabVIEW.vi的程序框圖,其包含三個(gè)循環(huán),分別是Producer loop,Consumer loop,Display Loop。Producer loop用于響應(yīng)用戶事件,并通過(guò)隊(duì)列通知Consumer loop執(zhí)行相應(yīng)的操作;Display loop用于對(duì)前面板顯示控件進(jìn)行更新。圖5.項(xiàng)目原理圖 Error Handling in LabVIEW.vi中關(guān)于錯(cuò)誤處理部分最核心的VI是Error Module.vi。它其實(shí)是一個(gè)功能全局變量,包含Initialize,Handle Errors和Report Errors三個(gè)分支。Initialize分支中定義好哪些錯(cuò)誤代碼是直接被忽略的,哪些錯(cuò)誤代碼是允許出現(xiàn)若干次,并且為了實(shí)現(xiàn)在主VI Error Handling in LabVIEW.vi的任何一個(gè)循環(huán)出現(xiàn)錯(cuò)誤時(shí),所有的其它循環(huán)也能夠退出,在Initialize分支中將分別獲取三個(gè)循環(huán)中的相應(yīng)隊(duì)列引用或用戶事件引用。圖6.Error Module模塊圖7. Initialize分支 先介紹一下Error Handling Info簇控件,它包含兩個(gè)數(shù)組。數(shù)組Ignore中定義的Error Code即我們希望Error Module.vi直接忽略的;Retry是簇?cái)?shù)組,每個(gè)簇中包含三個(gè)元素:Code即我們希望出錯(cuò)后重試的代碼,Retry times為允許出錯(cuò)的次數(shù),Current Iteration記錄了該特定錯(cuò)誤已經(jīng)發(fā)生的次數(shù)(在主VI中不要設(shè)置,讓它為0)。我們希望當(dāng)Current Iteration < Retry times時(shí),如果該錯(cuò)誤出現(xiàn),我們可以忽略該錯(cuò)誤,但是Current Iteration值加1。對(duì)于本次測(cè)試,主VI給Error Module.vi的傳遞的參數(shù)如下,我們將在后面看到,5556的錯(cuò)誤將被直接忽略,而5557的錯(cuò)誤第三次出現(xiàn)時(shí)程序?qū)棾鰧?duì)話框提示出錯(cuò)。圖8. Error Handling Info簇控件信息 Error Module.vi中最重要的是Handle Errors分支,簡(jiǎn)單的說(shuō),它其實(shí)是包含兩層條件結(jié)構(gòu)嵌套,三種處理情況。1)錯(cuò)誤直接被忽略;2)錯(cuò)誤符號(hào)Retry的條件;3)錯(cuò)誤不能被預(yù)處理,將錯(cuò)誤存檔。圖9. Handle Errors分支 當(dāng)錯(cuò)誤不能被預(yù)處理時(shí),將錯(cuò)誤存檔后,我們調(diào)用General Error Handler函數(shù),這樣就會(huì)彈出錯(cuò)誤對(duì)話框,對(duì)話框中包含xxx-errors.txt文件中定義好的描述信息。除了將錯(cuò)誤存檔,在程序中同時(shí)通過(guò)元素入隊(duì)列、產(chǎn)生用戶事件使得主VI中的Consumer loop,Display loop和Producer loop都能夠優(yōu)雅的退出。 接下來(lái)我們來(lái)看一下程序的測(cè)試:圖10.主VI前面板1.點(diǎn)擊Acquire按鈕,將獲取波形;2.點(diǎn)擊Generate error for consumer,將使得Consumer loop產(chǎn)生error 5555,由于5555不包含在預(yù)處理的情況中,Error Module.vi的Handle Errors分支將該錯(cuò)誤存檔并彈出錯(cuò)誤對(duì)話框,同時(shí)其它循環(huán)通過(guò)元素入隊(duì)列,產(chǎn)生用戶事件而退出,整個(gè)程序停止運(yùn)行;3.重新運(yùn)行程序,點(diǎn)擊Generate error for Ignore按鈕,可以看到,程序?qū)⒗^續(xù)正常運(yùn)行,完全忽略該錯(cuò)誤;4.點(diǎn)擊Generate error for Retry按鈕,當(dāng)點(diǎn)擊第三次時(shí),才彈出錯(cuò)誤對(duì)話框,程序停止運(yùn)行。如下圖所示:圖11. 錯(cuò)誤代碼5557重復(fù)出現(xiàn)3次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉