LabVIEW程序風(fēng)格協(xié)定II
Block diagram是其他人看懂VI如何工作的主要途徑,因此它常常需要我們遵循一些簡(jiǎn)單的步驟來(lái)使Block diagram組織性更強(qiáng),更易閱讀。
VI的Block diagram的樣式是非常重要的就如前面板的樣式一樣。用戶可能看不到Block diagram,但是其他的開(kāi)發(fā)人員可能看到。一個(gè)計(jì)劃好的,格調(diào)一致的Block diagram是很容易理解以及便于修改的。
連線技術(shù)
你可以使用在工具條上的下拉菜單來(lái)排列分配目標(biāo)對(duì)象在Block diagram中的對(duì)稱位置。當(dāng)對(duì)象被整齊的排列分配好后,你可以使用直線來(lái)連接這些對(duì)象。使用直線連接可使得Block diagram更易閱讀。
下面一些好的提示,告訴你如何使得Block diagram更加整潔:
1)避免把線置于Block diagram中如子VI或結(jié)構(gòu)對(duì)象之下,因?yàn)?strong>LabVIEW可能隱藏一些結(jié)果線的片斷。你所畫(huà)的線務(wù)必要讓你清楚的看到它是否正確的連接到終端上。
2)盡可能少加彎曲,縮短線長(zhǎng)。避免把線拉的太長(zhǎng),這樣不容易閱讀。
3)刪掉無(wú)關(guān)緊要的線。
4)在你使用連線來(lái)傳遞數(shù)據(jù)的時(shí)候避免使用局部變量。每個(gè)讀取數(shù)據(jù)的局部變量都會(huì)建立一個(gè)數(shù)據(jù)的拷貝。
5)在數(shù)據(jù)沒(méi)有被用于結(jié)構(gòu)之中,不要把線連通結(jié)構(gòu)。
6)使平行的線間空隙均勻。
內(nèi)存和速度優(yōu)化
優(yōu)化LabVIEW VI的使用和運(yùn)行時(shí)間,你有很多需要做。當(dāng)程序有大量的數(shù)組或者嚴(yán)格時(shí)間限制的時(shí)候,優(yōu)化顯得尤為重要。
雖然優(yōu)化是一個(gè)非常棘手的題目,以下可以作為程序的一些基本的優(yōu)化操作:
1)如果在While loop中速度不是很重要的,添加一個(gè)等待功能塊,可以避免拖慢其他任務(wù)。一般來(lái)說(shuō),LabVIEW會(huì)以最快的循環(huán)速度來(lái)運(yùn)行While loop中的代碼,這樣會(huì)很耗費(fèi)系統(tǒng)資源,從而使得其他一些代碼得不到最有效的執(zhí)行。這樣會(huì)看上去電腦運(yùn)行的非常慢,及時(shí)它僅僅實(shí)在運(yùn)行幾個(gè)簡(jiǎn)單的循環(huán)。
用Wait(ms)功能塊來(lái)加入稍許的延遲可以幫助電腦正常運(yùn)行循環(huán)以外的其他任務(wù),而不影響循環(huán)的正常工作。一般設(shè)置一個(gè)50到100ms的延遲完全足夠了,但是程序中的其他一些因素可能影響到延遲。延遲不合任何數(shù)據(jù)發(fā)生關(guān)系,如圖6所示。
圖11 While Loop 50毫秒延遲
如要完全避免這一問(wèn)題,使用事件結(jié)構(gòu)。事件結(jié)構(gòu)不會(huì)消耗處理器資源,它會(huì)等待用戶界面事件發(fā)生后才進(jìn)行相應(yīng)的動(dòng)作。
2)如果可能,盡量避免在循環(huán)中使用建立數(shù)組功能塊來(lái)建立數(shù)組,因?yàn)楣δ軌K會(huì)不停的調(diào)用LabVIEW的內(nèi)存管理器。建立數(shù)組一個(gè)更有效的方法是使用自動(dòng)索引或者數(shù)組大小預(yù)定義并使用數(shù)組元素替換功能塊來(lái)添加數(shù)據(jù)到其中。在字符串處理時(shí)同樣會(huì)有這樣的問(wèn)題存在,因?yàn)樵趦?nèi)存中LabVIEW是把字符串按照字符數(shù)組來(lái)處理的。
3)盡可能珍惜使用全局和局部變量。你可以使用全局和局部變量來(lái)有效的書(shū)寫(xiě)VI。然而,如果你濫用全局或局部變量,特別是數(shù)據(jù)類(lèi)型,會(huì)增加VI的內(nèi)存使用量并影響性能的表現(xiàn)。
除此之外,你同一個(gè)程序中同時(shí)讀寫(xiě)全局變量的時(shí)候可能碰到紊亂的情況。這些紊亂的情況在調(diào)試的時(shí)候很難被發(fā)現(xiàn),因?yàn)橥粋€(gè)全局變量在不同的VI中沒(méi)有數(shù)據(jù)關(guān)聯(lián)。
考慮使用功能全局變量來(lái)替代全局變量。功能性全局變量不會(huì)建額外的數(shù)據(jù)拷貝,并且允許如初始化,讀寫(xiě)和置空等操作。
4)選擇合適的數(shù)據(jù)類(lèi)型數(shù)組來(lái)操作數(shù)據(jù),對(duì)于控制程序在內(nèi)存中使用量控制來(lái)說(shuō)是很重要的。例如,如果你有100000個(gè)擴(kuò)展精度的浮點(diǎn)數(shù)組,但是實(shí)際上只需要以單精度浮點(diǎn)值來(lái)進(jìn)行存儲(chǔ),這樣會(huì)出現(xiàn)內(nèi)存不夠使用的情況。使用單精度浮點(diǎn)值數(shù)組進(jìn)行儲(chǔ)存,可以有效的減少內(nèi)存的使用量。下表可以看出不同數(shù)據(jù)類(lèi)型占用內(nèi)存的情況。
5)避免強(qiáng)迫數(shù)值類(lèi)型轉(zhuǎn)換的情況出現(xiàn),可以有效的降低內(nèi)存的使用量和速度。強(qiáng)迫類(lèi)型轉(zhuǎn)換出現(xiàn)會(huì)使得LabVIEW在轉(zhuǎn)換過(guò)程中再?gòu)?fù)制一份數(shù)據(jù)。特別是在你的數(shù)組特別大的時(shí)候,其效果更為明顯。
6)前面板指示器數(shù)據(jù)的頻繁更新會(huì)影響到VI的性能,特別是如果你在用圖形或者圖表顯示數(shù)據(jù)的時(shí)候尤為明顯。為了優(yōu)化這些VI,在前面板上只顯示必要的信息,并且只有在更新數(shù)據(jù)和指示器中數(shù)據(jù)不同時(shí)候才進(jìn)行數(shù)據(jù)的刷新。
大小和位置
Block diagram窗口的大小會(huì)影響你LabVIEW代碼的可讀性。不要讓Block diagram窗口的大于你的屏幕尺寸。在確保LabVIEW代碼能顯示完的情況下,盡量縮小Block diagram窗口的尺寸。如果代碼大于窗口大小的話,會(huì)很難于閱讀,因?yàn)檫@不得不使使用者來(lái)回拉動(dòng)滾動(dòng)條。如果代碼實(shí)在太多了,而一個(gè)屏幕不能顯示完的話,建議只在一個(gè)方向上進(jìn)行滾動(dòng)(推薦滾動(dòng)方向?yàn)樽笥曳较?,因?yàn)長(zhǎng)abVIEW為數(shù)據(jù)流格式傳輸數(shù)據(jù),推薦的格式也是從左到右,所以我們也建議程序代碼太大的情況下,左右移動(dòng)為好,見(jiàn)下條規(guī)則)。
從左到右布局
LabVIEW使用從左到右的布局,所以Block diagram也需要遵循這一規(guī)則。因?yàn)槌绦蛑械脑夭荒軟Q定執(zhí)行的順序,所以要避免從右到左的連接。只有連線和結(jié)構(gòu)可以決定執(zhí)行的順序。
Block Diagram注釋
對(duì)程序進(jìn)行修改和維護(hù)的開(kāi)發(fā)者需要一個(gè)對(duì)block diagram好的文檔說(shuō)明。沒(méi)有這個(gè),修改代碼是一件十分耗時(shí)和容易造成新的錯(cuò)誤根源。以下是一些對(duì)Block diagram注釋的建議。
1)使用注釋來(lái)幫助解釋Block diagram代碼的作用是什么。LabVIEW代碼雖然是圖形化的,但是它沒(méi)有自注釋功能。在功能面板上的自由標(biāo)簽可做block diagram注釋之用,加上一定的背景顏色,可達(dá)到注釋的效果。
2)不要在功能塊和子VI調(diào)用上顯示標(biāo)簽,因?yàn)樗麄兛赡軙?huì)很大,而且顯得十分笨拙。開(kāi)發(fā)者可通過(guò)Context Help窗口看到功能塊或者子VI的名字。
3)在連線上使用自由標(biāo)簽來(lái)確定他們作用。貼上標(biāo)簽的連線對(duì)于來(lái)自shift register和跨越了整個(gè)block diagram的長(zhǎng)線線條來(lái)說(shuō)十分有用。
4)在結(jié)構(gòu)上使用標(biāo)簽來(lái)確定結(jié)構(gòu)的主要功能。
5)使用標(biāo)簽來(lái)顯示常量的特性和功能。
6)在調(diào)用庫(kù)功能節(jié)點(diǎn)時(shí)候使用標(biāo)簽可以明確功能節(jié)點(diǎn)的作用和調(diào)用者路徑。
7)用注釋來(lái)解釋Block diagram中運(yùn)算法則的功能。如果使用某本書(shū)或者參考資料的運(yùn)算法則,可用注釋來(lái)提供這些參考的信息。
調(diào)用庫(kù)功能節(jié)點(diǎn)和代碼接口節(jié)點(diǎn)
包括調(diào)用庫(kù)功能節(jié)點(diǎn)和代碼接口節(jié)點(diǎn)(CINs)的VI是根據(jù)平臺(tái)而定的。使用調(diào)用庫(kù)功能節(jié)點(diǎn)來(lái)調(diào)用共享庫(kù)的VI由平臺(tái)而定,如果你在不同的平臺(tái)下調(diào)用,可能你的到的結(jié)果是完全不同。如果你把包含調(diào)用庫(kù)功能節(jié)點(diǎn)的VI移植到其他平臺(tái)上,你必須更新節(jié)點(diǎn)調(diào)用共享庫(kù)所用到的目錄路徑。
如果你寫(xiě)的VI含有CINs,對(duì)于不同的平臺(tái)你需要不同的VI版本,因?yàn)椴煌钠脚_(tái)編譯的CINs可能不同。當(dāng)你移植包含CINs的VI到其他平臺(tái)時(shí),你必須重新在信的平臺(tái)上重新編譯代碼,并重新把它加載到CIN中去。
如果VI包括調(diào)用庫(kù)功能節(jié)點(diǎn)或者CIN,你又想在不同的平臺(tái)上使用該VI,一定要考慮提供不同版本的VI來(lái)適應(yīng)不同平臺(tái)的調(diào)用需要。
類(lèi)型定義
當(dāng)你在超過(guò)一個(gè)地方使用同樣的唯一的控件或者當(dāng)你有非常的數(shù)據(jù)結(jié)構(gòu)需要在幾個(gè)VI間傳遞的時(shí)候,請(qǐng)使用類(lèi)型定義。使用類(lèi)型定義控件,LabVIEW會(huì)在各個(gè)VI間自動(dòng)把改變傳遞到控件或者數(shù)據(jù)結(jié)構(gòu)中。
順序結(jié)構(gòu)
少使用順序結(jié)構(gòu),因?yàn)樗麄儠?huì)隱藏代碼。盡量靠數(shù)據(jù)流來(lái)控制運(yùn)行的順序,而不是用順序結(jié)構(gòu)。當(dāng)你在順序結(jié)構(gòu)中用到順序局部變量時(shí),你會(huì)破壞從左到右的數(shù)據(jù)流規(guī)范。為了幫助控制數(shù)據(jù)流,你可以使用錯(cuò)誤簇。
如果你必須使用順序結(jié)構(gòu),盡量使用Flat順序結(jié)構(gòu),它不會(huì)隱藏任何代碼。如果你在VI中使用Stacked順序結(jié)構(gòu),一定要把最重要的一幀顯示出來(lái)。
IX.圖標(biāo)和連接板風(fēng)格
在為VI建立圖標(biāo)和連接塊時(shí)使用好的風(fēng)格技術(shù)對(duì)那些VI的使用者來(lái)說(shuō)是非常有益的。
圖標(biāo)
圖標(biāo)是VI在面板和Block diagram中VI的代表。當(dāng)子VI擁有設(shè)計(jì)好的圖標(biāo),開(kāi)發(fā)者可以很好的理解子VI的意思,而不需要過(guò)多的文檔描述。
在建立圖標(biāo)時(shí),使用一下建議:
1)為每個(gè)VI分別建立一個(gè)有意義的圖標(biāo)。LabVIEW庫(kù)中有許多設(shè)計(jì)好的圖標(biāo),通過(guò)圖標(biāo)可以很容易理解程序的功能用途;在可用的地方使用他們作為原型。如果你沒(méi)有圖片,文字也是可以用來(lái)表達(dá)的。如果你局部化應(yīng)用程序,同樣務(wù)必局部化圖標(biāo)中的文字。
提示 在文字圖標(biāo)中8p的小字體看上去是最舒服的。
2)建立圖標(biāo)的時(shí)候不要使用口語(yǔ)化的文字??谡Z(yǔ)化的文字是很難翻譯的。翻譯不好可能導(dǎo)致用戶對(duì)圖標(biāo)錯(cuò)誤的理解。例如,一個(gè)數(shù)據(jù)采集的VI使用一副樹(shù)枝圖片或者伐木工人的圖片,則不好表示其意思。
3)為關(guān)聯(lián)的VI建立統(tǒng)一的樣式。這能幫助使用者直觀上上層VI和被調(diào)用子VI之間的關(guān)系。
4)如果需要打印用,則需要使用黑白圖標(biāo)。不是每個(gè)用戶都有彩色打印機(jī)。
5)建立圖標(biāo)使用尺寸為32×32象素。小于該尺寸的圖標(biāo)在選擇和連接的時(shí)候看上去會(huì)很難使用??瓷先ヒ埠懿皇娣?。
6)確保子VI圖標(biāo)在Block diagram上是可見(jiàn)的。右鍵點(diǎn)擊子VI,選擇可是項(xiàng)目》終端。確保終端選項(xiàng)沒(méi)有被選中。子VI圖標(biāo)比Block diagram上的連接塊更有用。
圖標(biāo)形象例子