雖然NI LabVIEW軟件長期以來一直幫助工程師和科學家們快速開發功能測量和控製應用,但不是所有的新用戶都會遵循LabVIEW編程的最佳方法。 LabVIEW圖(tu)形(xing)化(hua)編(bian)程(cheng)比(bi)較(jiao)獨(du)特(te),因(yin)為(wei)隻(zhi)需(xu)看(kan)一(yi)眼(yan)用(yong)戶(hu)的(de)應(ying)用(yong)程(cheng)序(xu),就(jiu)馬(ma)上(shang)可(ke)以(yi)發(fa)現(xian)用(yong)戶(hu)是(shi)否(fou)遵(zun)循(xun)編(bian)碼(ma)的(de)最(zui)佳(jia)方(fang)法(fa)。有(you)些(xie)用(yong)戶(hu)會(hui)犯(fan)這(zhe)些(xie)錯(cuo)誤(wu)是(shi)因(yin)為(wei)他(ta)們(men)沒(mei)有(you)真(zhen)正(zheng)理(li)解(jie)LabVIEW框圖數據流背後的原理,而有些用戶則是不知道哪些特性可提高LabVIEW編程質量。
本文介紹了經驗欠缺的LabVIEW程序員最經常犯的一些編程錯誤,同時也提供了采用正確LabVIEW編程方法的建議。

圖 1. LabVIEW新手典型“傑作”
過度使用平鋪式順序結構
許多LabVIEW新手並不完全了解“數據流”執行背後的概念,而這些概念卻是LabVIEW編bian程cheng的de基ji礎chu。其qi中zhong一yi個ge現xian象xiang是shi用yong戶hu往wang往wang在zai程cheng序xu框kuang圖tu中zhong過guo度du使shi用yong平ping鋪pu式shi順shun序xu結jie構gou。用yong戶hu經jing常chang依yi賴lai平ping鋪pu式shi順shun序xu結jie構gou來lai實shi現xian程cheng序xu框kuang圖tu的de代dai碼ma串chuan行xing執zhi行xing,而er不bu是shi使shi用yong數shu據ju流liu和he節jie點dian之zhi間jian的de連lian線xian。

圖 2. 用戶往往過度依賴平鋪式順序結構,而沒有充分理解數據流編程概念。
數據流編程是指隻有在所需的數據輸入全部到達時,框圖上的節點(子VI、本原、結構等)才開始執行。 這對於使用LabVIEW的程序員來說非常有用,因為獨立的進程本身就可以實現並行運行,而命令式語言卻需要額外的設置才能實行並行執行。隨著計算機CPU的不斷增多,LabVIEW可(ke)自(zi)動(dong)分(fen)解(jie)並(bing)行(xing)流(liu)程(cheng),提(ti)高(gao)代(dai)碼(ma)性(xing)能(neng),而(er)無(wu)需(xu)用(yong)戶(hu)編(bian)寫(xie)任(ren)何(he)額(e)外(wai)代(dai)碼(ma)。而(er)強(qiang)行(xing)使(shi)用(yong)平(ping)鋪(pu)式(shi)順(shun)序(xu)結(jie)構(gou)來(lai)執(zhi)行(xing)程(cheng)序(xu)框(kuang)圖(tu)不(bu)僅(jin)會(hui)限(xian)製(zhi)並(bing)行(xing)運(yun)行(xing),還(hai)會(hui)喪(sang)失(shi)這(zhe)一(yi)優(you)勢(shi)。限(xian)製(zhi)程(cheng)序(xu)框(kuang)圖(tu)中(zhong)不(bu)必(bi)要(yao)的(de)結(jie)構(gou)有(you)助(zhu)於(yu)提(ti)高(gao)整(zheng)體(ti)可(ke)讀(du)性(xing)和(he)保(bao)持(chi)更(geng)簡(jian)潔(jie)的(de)框(kuang)圖(tu)。
錯誤連線可以有效地實現程序框圖上的數據流,而不需要依靠平鋪式順序結構,此外錯誤連線還有助於實現錯誤處理策略。
何時應該使用平鋪式順序結構?
tongguopingpushishunxujiegoulaizhixingchengxukuangtuyouzhuyudaimaxingnengdejizhunceshi。tongguoshiyongkuangjianeijuyoushijianjishuqideshunxujiegou,ninkeyijuedinglianggeshijianjishuqizhijiandaimazhixingsuohuafeideshijian。zheshiyibanshujuliuzhixingsuowufashixiande。

圖 3. 平鋪式順序結構和時間計數器VI有助於代碼的基準測試。
關於數據流編程的更多信息,請訪問在線自學培訓(ni.com/self-paced-training)LabVIEW核心課程1的“數據流”。購買LabVIEW或具有標準服務項目(ni.com/ SSP)會員資格的用戶可以免費參加在線自學培訓。
錯誤使用局部變量
LabVIEWbianchengzhonglingyigechangjiandecuowushiguodushiyongjububianliang。jububianliangshigongxiangneicunzhongdeyigequyu,yongyuzaijisuanjichengxubutongbufenzhijianchuandishuju。juyubianliangtongchangyongyuwenbenbianchengyuyan,juyoufeichangqiangdadegongneng,danruguochuxianjingzhengtiaojian,jiuhuichanshengwenti。
對於其他編程語言來說,通過變量傳遞數據是必需的,而LabVIEW則提供了一種數據流方法,可將數據從程序的一個部分移動到另一個部分。LabVIEWguyoudebingxingxingjizhijuedingzheyonghubunengguodushiyongbianliang,yinweitongyishijianneitongchanghuiyouduogebutongdeweizhidechengxufangwengongxiangneicun。ruguoguodushiyongbianliang,zehuichuxianmougedu/寫操作贏了“競爭”,而其他操作則輸了“競爭”,丟失數據的操作會被忽視,因此在LabVIEW中過度使用變量可能會最終導致數據丟失。
您可以通過多種方法安全地將數據從LabVIEW程序的一個部分傳遞到另一個部分,包括連線、隊列、事件、通知、功能全局變量等等。每個機製都是針對特定情況設計的,但都具有消除競爭條件的功能。
關於在LabVIEW程序內正確移動數據的更多信息,請訪問在線自學培訓(ni.com/self-paced-training)LabVIEW核心課程1的“局域變量”和LabVIEW核心課程2的“通知、隊列和事件”。
忽略代碼模塊化
通常情況下,新LabVIEW用戶創建的是“即寫即忘”應(ying)用(yong)程(cheng)序(xu)去(qu)完(wan)成(cheng)簡(jian)單(dan)的(de)任(ren)務(wu),而(er)沒(mei)有(you)考(kao)慮(lv)到(dao)以(yi)後(hou)是(shi)否(fou)會(hui)用(yong)到(dao)這(zhe)些(xie)代(dai)碼(ma)。隨(sui)著(zhe)編(bian)程(cheng)工(gong)作(zuo)越(yue)來(lai)越(yue)多(duo),他(ta)們(men)會(hui)發(fa)現(xian)自(zi)己(ji)一(yi)遍(bian)又(you)一(yi)遍(bian)地(di)重(zhong)寫(xie)同(tong)一(yi)段(duan)代(dai)碼(ma)。而(er)如(ru)果(guo)在(zai)編(bian)程(cheng)同(tong)時(shi)創(chuang)建(jian)一(yi)個(ge)可(ke)複(fu)用(yong)於(yu)其(qi)他(ta)應(ying)用(yong)的(de)模(mo)塊(kuai)化(hua)子(zi)VI,就可以節省大量的開發時間。
如(ru)果(guo)您(nin)知(zhi)道(dao)代(dai)碼(ma)的(de)特(te)定(ding)部(bu)分(fen)將(jiang)會(hui)重(zhong)用(yong)於(yu)同(tong)一(yi)應(ying)用(yong)程(cheng)序(xu),或(huo)感(gan)覺(jiao)該(gai)部(bu)分(fen)代(dai)碼(ma)可(ke)能(neng)會(hui)用(yong)於(yu)未(wei)來(lai)的(de)應(ying)用(yong)程(cheng)序(xu),那(na)麼(me)您(nin)應(ying)該(gai)花(hua)一(yi)點(dian)時(shi)間(jian)將(jiang)該(gai)部(bu)分(fen)代(dai)碼(ma)變(bian)成(cheng)一(yi)個(ge)子(zi)VI。如果要使某部分代碼成為一個子VI,您需要做的主要是添加一個文檔、使用“接線端”、禁用某些VI屬性。創建子VI的最簡單方法之一是高亮標記程序框圖中的某部分代碼,然後從菜單欄中選擇“編輯>>創建子VI”。這樣這部分代碼就會放到一個單獨的VI,然後使用“接線端”。您仍然需要為圖標添加說明,並將文檔記述添加到程序框圖和VI屬性中,然後取消某些VI設置,但“編輯>>創建子VI”可幫助您很好地了解代碼的模塊化功能。

圖 4. 采用正確的LabVIEW代碼模塊化操作可以幫助您節省大量開發時間。
代碼模塊化時必須取消的一項設置是“允許調試”。 您可在“VI屬性(文件>>VI屬性)”下的“執行”目錄中找到此選項。代碼完全正常運行無需再使用高亮執行等調試功能時,在執行設置中取消“允許調試”,然後再次運行VI。這樣做的好處是由於在編譯過程中進行了優化,應用程序的運行速度可能加快,而且由於啟動調試的代碼被關閉,VI所占的磁盤物理空間也相應減少了。
關於代碼模塊化的更多信息,請訪問在線自學培訓LabVIEW核心課程1的“理解模塊化”。
創建龐大繁瑣的程序框圖
許多新LabVIEW用(yong)戶(hu)都(dou)會(hui)把(ba)程(cheng)序(xu)框(kuang)圖(tu)編(bian)寫(xie)得(de)非(fei)常(chang)繁(fan)瑣(suo)龐(pang)大(da)。對(dui)於(yu)一(yi)些(xie)複(fu)雜(za)的(de)應(ying)用(yong)程(cheng)序(xu),我(wo)們(men)難(nan)免(mian)需(xu)要(yao)編(bian)寫(xie)較(jiao)大(da)的(de)程(cheng)序(xu)框(kuang)圖(tu),但(dan)龐(pang)大(da)的(de)程(cheng)序(xu)框(kuang)圖(tu)從(cong)一(yi)定(ding)程(cheng)度(du)上(shang)也(ye)可(ke)以(yi)表(biao)明(ming)該(gai)程(cheng)序(xu)缺(que)乏(fa)編(bian)程(cheng)架(jia)構(gou)。如(ru)果(guo)沒(mei)有(you)一(yi)個(ge)基(ji)本(ben)的(de)架(jia)構(gou),要(yao)長(chang)期(qi)維(wei)護(hu)該(gai)程(cheng)序(xu)是(shi)非(fei)常(chang)困(kun)難(nan)的(de),而(er)且(qie)如(ru)果(guo)以(yi)後(hou)要(yao)添(tian)加(jia)新(xin)功(gong)能(neng)也(ye)會(hui)非(fei)常(chang)困(kun)難(nan)。正(zheng)如(ru)隻(zhi)有(you)一(yi)個(ge)好(hao)的(de)框(kuang)架(jia)才(cai)能(neng)建(jian)造(zao)一(yi)棟(dong)結(jie)構(gou)合(he)理(li)的(de)房(fang)子(zi),一(yi)個(ge)好(hao)的(de)編(bian)程(cheng)架(jia)構(gou)可(ke)以(yi)為(wei)您(nin)構(gou)建(jian)應(ying)用(yong)程(cheng)序(xu)提(ti)供(gong)了(le)一(yi)個(ge)安(an)全(quan)可(ke)靠(kao)的(de)框(kuang)架(jia)。
幾乎所有的程序員都會發現常見的框架中,軟件架構是非常有用的。實際上LabVIEW中的許多架構,如生產者/消費者和狀態機,與其他編程語言非常相似。
了解LabVIEW的架構可以縮短開發時間和提高應用程序的可擴展性。 LabVIEW 2012包bao含han了le模mo板ban和he項xiang目mu範fan例li,使shi理li解jie架jia構gou變bian得de更geng加jia容rong易yi。模mo板ban解jie釋shi了le不bu同tong的de架jia構gou及ji應ying用yong。項xiang目mu範fan例li則ze是shi基ji於yu模mo板ban的de更geng大da型xing應ying用yong程cheng序xu,演yan示shi了le如ru何he使shi用yong模mo板ban來lai應ying對dui實shi際ji的de挑tiao戰zhan。您nin可ke以yi將jiang硬ying件jian加jia入ru到dao範fan例li項xiang目mu中zhong,或huo者zhe需xu要yao時shi可ke將jiang項xiang目mu範fan例li作zuo為wei一yi個ge整zheng體ti應ying用yong程cheng序xu,同tong時shi項xiang目mu範fan例li具ju有you開kai放fang性xing且qie文wen檔dang記ji述shu也ye很hen完wan整zheng,所suo以yi您nin可ke針zhen對dui具ju體ti應ying用yong進jin行xing自zi定ding義yi。

圖 5. LabVIEW 2012中的模板和項目範例使得理解軟件架構變得非常輕鬆。
關於LabVIEW架構的更多信息,請訪問在線自學培訓(ni.com/self-paced-training) for LabVIEW核心課程2的“設計模式”。
不重視文檔記錄
優you秀xiu的de代dai碼ma文wen檔dang可ke以yi有you效xiao地di幫bang助zhu他ta人ren理li解jie自zi己ji寫xie的de程cheng序xu。遺yi憾han的de是shi,許xu多duo程cheng序xu員yuan通tong常chang在zai開kai發fa周zhou期qi末mo期qi功gong能neng開kai發fa結jie束shu之zhi後hou才cai開kai始shi進jin行xing文wen檔dang撰zhuan寫xie。這zhe使shi得de用yong於yu對dui代dai碼ma進jin行xing文wen檔dang記ji錄lu的de時shi間jian變bian得de非fei常chang少shao。正zheng確que的de做zuo法fa應ying該gai是shi在zai開kai發fa過guo程cheng中zhong就jiu需xu抽chou出chu時shi間jian來lai開kai始shi進jin行xing文wen檔dang記ji錄lu。文wen檔dang對dui於yu編bian程cheng人ren員yuan自zi身shen也ye非fei常chang有you用yong,尤you其qi是shi當dang他ta們men過guo段duan時shi間jian回hui來lai看kan代dai碼ma卻que不bu記ji得de當dang初chu他ta們men為wei什shen麼me選xuan擇ze某mou些xie代dai碼ma時shi。程cheng序xu員yuan經jing常chang會hui一yi邊bian喝he著zhe咖ka啡fei,一yi邊bian熬ao夜ye編bian程cheng,這zhe往wang往wang會hui出chu現xian“短暫失憶”。而文檔則可以幫助程序員進行回憶。
一般情況下,相對於基於文本的程序,LabVIEW的圖形化特性使得程序閱讀更為容易,但是有效的文檔記錄可以減少“解碼”程cheng序xu所suo需xu的de時shi間jian。添tian加jia文wen檔dang注zhu釋shi到dao程cheng序xu框kuang圖tu的de最zui簡jian單dan方fang式shi是shi使shi用yong自zi由you標biao簽qian。您nin可ke以yi在zai框kuang圖tu的de空kong白bai位wei置zhi雙shuang擊ji左zuo鍵jian,並bing輸shu入ru文wen字zi,添tian加jia注zhu釋shi。然ran後hou,使shi用yong箭jian頭tou標biao記ji來lai指zhi向xiang自zi由you標biao簽qian引yin用yong的de特te定ding代dai碼ma。如ru果guo需xu要yao添tian加jia圖tu片pian,則ze可ke將jiang它ta們men複fu製zhi到dao剪jian貼tie板ban,然ran後hou粘zhan貼tie到dao程cheng序xu框kuang圖tu中zhong。物wu理li係xi統tong圖tu片pian和he數shu學xue公gong式shi均jun有you助zhu於yu清qing晰xi說shuo明ming程cheng序xu框kuang圖tu內nei的de代dai碼ma上shang下xia文wen。
圖 6.架構正確且文檔記錄充分的代碼不僅可幫助其他人理解您的代碼,也可幫助您更好地理解自己的代碼。
對(dui)代(dai)碼(ma)進(jin)行(xing)文(wen)檔(dang)記(ji)錄(lu)不(bu)僅(jin)隻(zhi)是(shi)針(zhen)對(dui)複(fu)用(yong)程(cheng)序(xu)庫(ku),而(er)應(ying)該(gai)是(shi)針(zhen)對(dui)每(mei)一(yi)個(ge)程(cheng)序(xu)。當(dang)一(yi)個(ge)人(ren)需(xu)要(yao)為(wei)其(qi)他(ta)人(ren)講(jiang)解(jie)時(shi),他(ta)對(dui)該(gai)主(zhu)題(ti)將(jiang)會(hui)有(you)更(geng)深(shen)刻(ke)的(de)理(li)解(jie)。文(wen)檔(dang)記(ji)錄(lu)從(cong)本(ben)質(zhi)上(shang)看(kan)就(jiu)是(shi)在(zai)迫(po)使(shi)程(cheng)序(xu)員(yuan)進(jin)行(xing)講(jiang)解(jie),以(yi)幫(bang)助(zhu)他(ta)們(men)更(geng)好(hao)地(di)了(le)解(jie)自(zi)己(ji)的(de)代(dai)碼(ma)。
關於文檔記述的更多信息,請訪問在線自學培訓LabVIEW核心課程1的“對代碼進行文檔記錄”。
LabVIEW旨在幫助工程師和科學家更成功地應對全球最嚴峻的挑戰。LabVIEW社(she)區(qu)擁(yong)有(you)龐(pang)大(da)的(de)工(gong)程(cheng)師(shi)和(he)科(ke)學(xue)家(jia)會(hui)員(yuan),為(wei)其(qi)提(ti)供(gong)了(le)一(yi)個(ge)有(you)效(xiao)的(de)平(ping)台(tai)來(lai)與(yu)他(ta)人(ren)分(fen)享(xiang)知(zhi)識(shi)。如(ru)果(guo)您(nin)願(yuan)意(yi)分(fen)享(xiang)自(zi)己(ji)所(suo)犯(fan)過(guo)的(de)新(xin)手(shou)錯(cuo)誤(wu),請(qing)發(fa)布(bu)到(dao)bit.ly/lvrookiemistakes。
|