陳光紅 唐浩凱 張茂麗 王子豪
摘要:條件結(jié)構(gòu)是LABVIEW中的重要結(jié)構(gòu),是條件控制跳轉(zhuǎn)結(jié)構(gòu),根據(jù)輸入的條件執(zhí)行子程序。以條件結(jié)構(gòu)為項(xiàng)目載體,通過對(duì)4個(gè)任務(wù)的LABVIEW編程實(shí)現(xiàn),囊括了條件結(jié)構(gòu)分支選擇器可接受的5種數(shù)據(jù)類型:布爾型、數(shù)值型、枚舉型、字符串型、錯(cuò)誤簇,講解了編程過程中的易錯(cuò)點(diǎn),總結(jié)了條件結(jié)構(gòu)的使用注意事項(xiàng),并進(jìn)行了教學(xué)反思,以期學(xué)生對(duì)LABVIEW的條件結(jié)構(gòu)理解更深刻,對(duì)虛擬儀器課程更感興趣,能夠在更多的場(chǎng)合想到應(yīng)用條件結(jié)構(gòu),解決實(shí)際問題。
關(guān)鍵詞:條件結(jié)構(gòu);LABVIEW;分支選擇器;虛擬儀器
中圖分類號(hào):G642? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)21-0127-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
虛擬儀器技術(shù)是利用高性能的模塊化硬件,結(jié)合高效靈活的軟件來完成各種測(cè)試、測(cè)量和自動(dòng)化應(yīng)用[1],如劉榮譽(yù)等研究的基于LABVIEW的PCB平面繞組力矩電機(jī)狀態(tài)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[2]、雷淑芳等研究的基于LabVIEW的點(diǎn)型感煙火災(zāi)探測(cè)器標(biāo)定控制系統(tǒng)[3]。LABVIEW(實(shí)驗(yàn)室虛擬儀器工程平臺(tái))是NI公司開發(fā)的軟件,它是一種圖形化的編程語言。對(duì)于高職學(xué)生來說,接觸過幾門編程語言,如C語言、VHDL語言、Python語言等,對(duì)于代碼語言學(xué)習(xí)起來有一些難度,而對(duì)于LABVIEW語言因?yàn)楸容^直觀、形象,上手比較快,學(xué)習(xí)操作的興趣也比較高。LABVIEW中的結(jié)構(gòu)包括FOR循環(huán)、WHILE循環(huán)、條件結(jié)構(gòu)、順序結(jié)構(gòu)、事件結(jié)構(gòu)等,可以實(shí)現(xiàn)循環(huán)控制、條件分支控制和順序控制等。
條件結(jié)構(gòu)是LABVIEW“結(jié)構(gòu)”選板中一個(gè)重要的結(jié)構(gòu),在需要經(jīng)過判斷后有多個(gè)分支時(shí)使用較方便。但是學(xué)生對(duì)于條件結(jié)構(gòu)的適用場(chǎng)景、具體的操作細(xì)節(jié)還有一些疑問,筆者在教學(xué)過程中發(fā)現(xiàn)有些錯(cuò)誤是學(xué)生經(jīng)常會(huì)犯或不注意的,導(dǎo)致程序無法運(yùn)行,自己又找不到問題所在,從而無法完成要實(shí)現(xiàn)的功能。
條件結(jié)構(gòu)與順序結(jié)構(gòu)、事件結(jié)構(gòu)類似之處是都屬于層次結(jié)構(gòu),層次結(jié)構(gòu)指按照一定規(guī)則分為幾種情況,分別進(jìn)行層次顯示,不同的數(shù)據(jù)進(jìn)入不同的層次中,進(jìn)行不同的設(shè)計(jì)[4]。
條件結(jié)構(gòu)如圖1所示,它由結(jié)構(gòu)框架、條件選擇端口、選擇器標(biāo)簽、遞增/遞減箭頭組成[1]。條件結(jié)構(gòu)在使用時(shí)要注意,“?”即條件選擇端口分支選擇器必須要有輸入數(shù)據(jù)與之相連,分支選擇器默認(rèn)是布爾型的,輸入數(shù)據(jù)可以是布爾型、數(shù)值型、字符串型、枚舉類型或錯(cuò)誤簇。連線至條件選擇器的數(shù)據(jù)類型決定了可輸入條件選擇器標(biāo)簽的分支。根據(jù)輸入數(shù)據(jù)的值,選擇要執(zhí)行的分支。選擇器標(biāo)簽的個(gè)數(shù)可以根據(jù)實(shí)際需要來確定,在選擇器標(biāo)簽上選擇在前面添加分支或在后面添加分支,就可以增加選擇器標(biāo)簽的個(gè)數(shù)[4]。條件結(jié)構(gòu)默認(rèn)有兩個(gè)分支:真、假分支,當(dāng)多于兩個(gè)分支時(shí),需在選擇器值處進(jìn)行編輯、添加分支。
下面通過一些任務(wù)來說明:何時(shí)選擇使用條件結(jié)構(gòu)、條件結(jié)構(gòu)如何去編寫程序框圖、條件結(jié)構(gòu)的輸入輸出如何賦值等,以幫助學(xué)生解決使用條件結(jié)構(gòu)時(shí)經(jīng)常遇到的問題。
1 條件結(jié)構(gòu)分支選擇器可接受的數(shù)據(jù)
條件結(jié)構(gòu)的分支選擇器接線端可接受五種數(shù)據(jù)類型:布爾、錯(cuò)誤簇、整數(shù)、枚舉和字符串。下面以任務(wù)的形式來說明各種數(shù)據(jù)類型在使用時(shí)的易錯(cuò)點(diǎn)和注意事項(xiàng)。
1.1布爾型
任務(wù)1:求函數(shù)[fx=x-1,x≥0x+2,x<0 ]的函數(shù)值
這是一個(gè)分段函數(shù),先判斷x的范圍,需要分成兩個(gè)分支,默認(rèn)的條件結(jié)構(gòu)里真、假兩個(gè)分支夠用。
需要注意的是:分支不一定要使用輸入數(shù)據(jù)或提供輸出數(shù)據(jù),但只要有一個(gè)分支提供輸出數(shù)據(jù),所有分支條件都必須與輸出通道連接,否則會(huì)使隧道為空心狀。如只在真分支里編程后、當(dāng)假分支里為空時(shí),隧道右端顯示空心小方塊,菜單里運(yùn)行箭頭是斷的,會(huì)有出錯(cuò)提示“隧道未賦值”,無法運(yùn)行程序。 這是因?yàn)?,條件結(jié)構(gòu)的執(zhí)行是根據(jù)外部控制條件,從其所有的子框架中選擇其一執(zhí)行的,子框架的選擇不分彼此,所以每個(gè)子框架都必須連接一個(gè)數(shù)據(jù)。對(duì)于一個(gè)框架通道,子框架如果沒有連接數(shù)據(jù),則在根據(jù)控制條件執(zhí)行時(shí),框架通道就沒有向外輸出數(shù)據(jù)的來源,程序就會(huì)出錯(cuò)[4]。在假分支里編程后調(diào)試,當(dāng)輸入任一非負(fù)數(shù)如4,運(yùn)行結(jié)果為3;當(dāng)輸入一負(fù)數(shù)如-4,運(yùn)行結(jié)果為-2。與分段函數(shù)表達(dá)式值相符。
此題與分支選擇器相連的是布爾量,“?”顯示為綠色。判斷的條件就是x是否大于零,“是”對(duì)應(yīng)真分支,“否”對(duì)應(yīng)假分支,分成兩個(gè)分支。
借助條件結(jié)構(gòu)不但可以求兩個(gè)分支的函數(shù)值,還可以求多個(gè)分支的函數(shù)值,需將各個(gè)分支的范圍先設(shè)置好,輸入給條件分支選擇器。
1.2枚舉型
任務(wù)2:某酒店各天的特價(jià)菜如圖2所示,請(qǐng)編程實(shí)現(xiàn)在前面板輸出指定星期特價(jià)菜
此任務(wù)有7種情況,7個(gè)分支,條件結(jié)構(gòu)默認(rèn)的兩個(gè)分支不夠用,可用組合框控件將一周7天分別從星期日到星期六列舉出來。先將組合框進(jìn)行編輯,將條件結(jié)構(gòu)分支選擇器與“星期”枚舉控件相連后,對(duì)條件結(jié)構(gòu)各個(gè)分支的值分別編輯,使之與枚舉控件的值對(duì)應(yīng)。
這里容易出錯(cuò)的是,星期日等的雙引號(hào)不是輸進(jìn)去的,回車后會(huì)自動(dòng)加雙引號(hào);要將任一分支設(shè)為默認(rèn)分支,否則會(huì)提示出錯(cuò) “條件結(jié)構(gòu):部分選擇器值無對(duì)應(yīng)分支”,要注意的是“默認(rèn)”二字并不是自己輸進(jìn)去的,而是在某一分支上右擊后選擇:本分支設(shè)置為默認(rèn)分支。
將每個(gè)分支進(jìn)行編程運(yùn)行的結(jié)果如圖3,以星期日的特價(jià)菜為例。
此題與分支選擇器相連的“星期”是組合框,屬于字符串型,“?”顯示為粉色。組合框也可換成字符串控件或枚舉控件,只是字符串控件在調(diào)試運(yùn)行時(shí)需手動(dòng)輸入“星期日”等,枚舉控件與組合框類似,也需先編輯,將所有的情況列舉出來。
在此任務(wù)中LABVIEW條件結(jié)構(gòu)實(shí)現(xiàn)的功能類似于C語言中的switch開關(guān)選擇語句,switch語句在程序中執(zhí)行時(shí)依次將switch后面的“表達(dá)式”與case后面的“常量表達(dá)式”進(jìn)行比較,如果“表達(dá)式”與“常量表達(dá)式”相等,則執(zhí)行“常量表達(dá)式”后面的“語句塊”,然后執(zhí)行break跳出switch語句;如果沒有任何一個(gè)“常量表達(dá)式”與“表達(dá)式”相等,則執(zhí)行default后面的“語句塊n+1”[5]。C語言代碼編程時(shí)需要注意很多的規(guī)則。LABVIEW作為圖形化語言,相對(duì)比較簡(jiǎn)單,點(diǎn)擊組合框右邊的下拉箭頭或者枚舉左邊的上下箭頭可以選擇星期_,程序框圖中的字符串常量對(duì)應(yīng)星期_的特價(jià)菜。
借助條件結(jié)構(gòu)還可以設(shè)計(jì)如水果計(jì)價(jià)系統(tǒng)、蔬菜計(jì)價(jià)系統(tǒng)等,將需要計(jì)價(jià)的物品一一列舉出來,告知每種物品的單價(jià),利用單價(jià)*重量=總價(jià)。如超市的稱重計(jì)價(jià)系統(tǒng)就是利用類似的方法。
1.3數(shù)值型
任務(wù)3: 在氣象部門,通常以陽歷3~5月為春季,6~8月為夏季,9~11月為秋季,12月~來年2月為冬季。請(qǐng)使用條件結(jié)構(gòu),從鍵盤輸入一個(gè)月份,在前面板上輸出對(duì)應(yīng)的季節(jié)(春、夏、秋、冬)。
分析:本題四季需4個(gè)分支,注意每個(gè)分支的值如何給,可以將每個(gè)季節(jié)的月份都列舉出來[5],中間用英文的逗號(hào)隔開,如春季對(duì)應(yīng)的是3,4,5;也可以用3..5表示范圍為3到5的數(shù),包含3和5,此種用法要注意中間用兩個(gè)英文狀態(tài)的點(diǎn)、包含端點(diǎn)值,當(dāng)表示一個(gè)范圍時(shí)此種方法使用較方便。冬季是當(dāng)年的12月份到來年的2月份,如用12..2表示,系統(tǒng)會(huì)自動(dòng)改成2..12,同時(shí)報(bào)錯(cuò),提示“選擇器值被多個(gè)分支使用,該值可能位于某個(gè)分支的值域內(nèi)”。這是因?yàn)?..12表示從2到12,將其他分支的值也包含進(jìn)來了,出現(xiàn)了某些值處于多個(gè)分支中。
修改后輸入月份如3運(yùn)行的季節(jié)為“春”;輸入月份6運(yùn)行的季節(jié)為“夏”;輸入月份10運(yùn)行的季節(jié)“秋”;輸入月份12運(yùn)行的季節(jié)“冬”。此題,在條件結(jié)構(gòu)外還加了while循環(huán),如圖4所示,這樣可以連續(xù)輸入月份,調(diào)試運(yùn)行。當(dāng)需要多次、重復(fù)查看結(jié)果時(shí),可在外面加while循環(huán),當(dāng)按下“停止”按鈕時(shí)循環(huán)停止執(zhí)行,當(dāng)需看清運(yùn)行結(jié)果時(shí),可以加上等待函數(shù)控制間隔時(shí)間,這里賦值為1000,單位為毫秒,意為間隔1s。
此題與分支選擇器相連的是數(shù)值型的數(shù)據(jù),在選擇器標(biāo)簽中可輸入單個(gè)值或數(shù)值列表和范圍。LABVIEW的條件結(jié)構(gòu)接受整型數(shù)據(jù),“?”顯示為藍(lán)色。
需要注意的是,當(dāng)輸入數(shù)值型數(shù)據(jù)時(shí),需要輸入整型數(shù),若輸入浮點(diǎn)型數(shù)值,如小數(shù)3.5,則選擇器值處會(huì)顯示紅色,提示出錯(cuò)“條件結(jié)構(gòu)中某些分支的選擇器值無法轉(zhuǎn)換至與該選擇器相同的數(shù)據(jù)類型”。
借助此題的思路還可以處理那些需要進(jìn)行分類的任務(wù),如將成績(jī)進(jìn)行分類,85-100的記為A、70-84的記為B、60-69的記為C、0-59的記為D等。可以用條件結(jié)構(gòu)4個(gè)分支來對(duì)應(yīng)表示各段分?jǐn)?shù),選擇器標(biāo)簽處用數(shù)值范圍來表示,如85-100,用85..100。
1.4 錯(cuò)誤簇
任務(wù)4:當(dāng)錯(cuò)誤輸入狀態(tài)為√時(shí),產(chǎn)生60-100之間的隨機(jī)整數(shù)作為考試成績(jī)輸出;當(dāng)錯(cuò)誤輸入狀態(tài)為Ⅹ時(shí),考試成績(jī)輸出為0。
分析:錯(cuò)誤輸入狀態(tài)有√和Ⅹ兩種,當(dāng)將錯(cuò)誤輸入簇與分支選擇器相連后,分支選擇器值自動(dòng)出現(xiàn)“無錯(cuò)誤”和“錯(cuò)誤”兩種,并且“錯(cuò)誤”分支顯示為紅色,“無錯(cuò)誤”分支顯示為綠色,如圖5所示。
編程后運(yùn)行結(jié)果如圖6所示。當(dāng)狀態(tài)為√時(shí),可能每次運(yùn)行結(jié)果不同,這是因?yàn)楫a(chǎn)生的結(jié)果是隨機(jī)數(shù),但其范圍限定在60-100。
錯(cuò)誤簇[6]是LabVIEW中的一個(gè)特殊的數(shù)據(jù)類型,通過按名稱解除捆綁函數(shù)對(duì)錯(cuò)誤簇進(jìn)行解綁會(huì)發(fā)現(xiàn),錯(cuò)誤簇是由布爾量、數(shù)值量和字符串組成。該簇是由一個(gè)表示狀態(tài)的布爾變量(狀態(tài))、一個(gè)表示錯(cuò)誤代碼的32位整型變量(代碼)以及一個(gè)說明錯(cuò)誤原因的字符串變量(源)組成的。錯(cuò)誤簇用于傳遞LABVIEW代碼運(yùn)行期間的出錯(cuò)信息,特別是在文件的讀取與存儲(chǔ)時(shí)用上錯(cuò)誤簇和簡(jiǎn)易錯(cuò)誤處理器,可以傳遞并收集錯(cuò)誤,最后統(tǒng)一做出處理。
此題與分支選擇器相連的是錯(cuò)誤簇,“?”顯示為黃色。
這里的error in錯(cuò)誤簇是模擬在此之前的程序運(yùn)行過程中是否已經(jīng)產(chǎn)生了錯(cuò)誤,若已經(jīng)產(chǎn)生了錯(cuò)誤則進(jìn)入“錯(cuò)誤”幀,執(zhí)行其中的程序;若未產(chǎn)生錯(cuò)誤,則進(jìn)入“無錯(cuò)誤”幀,執(zhí)行相應(yīng)的程序。
在C語言中,當(dāng)輸入數(shù)據(jù)不規(guī)范時(shí),有try-catch-finally異常處理語句來捕獲異常[5]。如,要求一個(gè)數(shù)的平方根,當(dāng)輸入的數(shù)小于0時(shí),拋出異常提示數(shù)值不在正確范圍內(nèi),并提示用戶輸入正確范圍的值,直到輸入正確的值為止。在LABVIEW中,可以方便地用彈出式對(duì)話框和字符串來提示出錯(cuò)信息和錯(cuò)誤處理方式,還可以用警示燈亮來提示出錯(cuò)等,配合條件結(jié)構(gòu)來完成相應(yīng)的任務(wù),處理起來,更形象、直觀。
2 總結(jié)
在使用條件結(jié)構(gòu)時(shí),需先根據(jù)任務(wù)分析共需分成幾種情況,就是對(duì)應(yīng)的有幾個(gè)分支,若超過兩個(gè)分支則默認(rèn)的真、假兩個(gè)分支不夠用,需進(jìn)行添加、編輯分支。每個(gè)分支里需編寫程序框圖執(zhí)行相應(yīng)的任務(wù),如數(shù)值運(yùn)算、顯示字符串、布爾量等。條件結(jié)構(gòu)的分支選擇器能連接數(shù)值型、布爾型、字符串型、枚舉型、 錯(cuò)誤簇五種數(shù)據(jù);條件結(jié)構(gòu)在數(shù)值型、字符串型、枚舉型數(shù)據(jù)輸入時(shí),可以添加多個(gè)分支;條件結(jié)構(gòu)必須要設(shè)一個(gè)默認(rèn)分支,否則條件分支會(huì)提示出錯(cuò);注意用英文的逗號(hào);條件結(jié)構(gòu)可以與While循環(huán)等嵌套使用。
3 結(jié)語
條件結(jié)構(gòu)并不是LABVIEW中特有的結(jié)構(gòu),在其他語言如C語言、VHDL語言等中也有,但是LABVIEW的條件結(jié)構(gòu)與其他語言的條件結(jié)構(gòu)相比,簡(jiǎn)單明了、結(jié)構(gòu)簡(jiǎn)單,可以相當(dāng)于其他語言的if…else、case、switch等語句[7],在教學(xué)時(shí)可以引導(dǎo)學(xué)生用對(duì)比的方法學(xué)習(xí),同時(shí)要做到舉一反三,能夠?qū)⑺鶎W(xué)的遷移到其他任務(wù)中,解決類似的問題。
參考文獻(xiàn):
[1] 劉科,宋秦中.虛擬儀器應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2018.
[2] 劉榮譽(yù),石利霞,王勁松,等.基于LabVIEW的PCB平面繞組力矩電機(jī)狀態(tài)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].長(zhǎng)春理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2021,44(6):27-32.
[3] 雷淑芳.基于LabVIEW的點(diǎn)型感煙火災(zāi)探測(cè)器標(biāo)定控制系統(tǒng)[D].合肥:合肥工業(yè)大學(xué),2021.
[4] 毛瓊,王敏.LabVIEW 2018虛擬儀器程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2018.
[5] 王騫,陳宇,管馬舟.C#程序設(shè)計(jì)經(jīng)典300例[M].北京:電子工業(yè)出版社,2013.
[6] 章佳榮,王璨,趙國(guó)宇.精通LabVIEW虛擬儀器程序設(shè)計(jì)與案例實(shí)現(xiàn)[M].北京:人民郵電出版社,2013.
[7] 彭勇,潘曉燁,謝龍漢.LabVIEW虛擬儀器設(shè)計(jì)及分析[M].北京:清華大學(xué)出版社,2011.
【通聯(lián)編輯:光文玲】