LabVIEW程序風(fēng)格協(xié)定I
好的程序,必須具有統(tǒng)一的風(fēng)格。
項(xiàng)目開(kāi)發(fā)中,經(jīng)常存在多人共同開(kāi)發(fā)同一程序的情況。風(fēng)格不一致,導(dǎo)致的結(jié)果是程序可讀性差,難于維護(hù)。為了避免這些問(wèn)題,做為一個(gè)系統(tǒng)軟件工程工作者,需要在工程項(xiàng)目開(kāi)始之前有一套團(tuán)隊(duì)成員彼此遵守的開(kāi)發(fā)風(fēng)格指導(dǎo)。
工程項(xiàng)目的成功與否,一下幾個(gè)方面是必須注意的:
簡(jiǎn)潔整齊的界面
團(tuán)隊(duì)開(kāi)發(fā)人員易讀的Block Diagram
整個(gè)項(xiàng)目開(kāi)發(fā)文檔
根據(jù)經(jīng)驗(yàn),需要在一下幾方面進(jìn)行統(tǒng)一的規(guī)定
I. 目錄結(jié)構(gòu)
II. 前端面板風(fēng)格
III.結(jié)構(gòu)圖形風(fēng)格
IX. 圖標(biāo)和連接塊風(fēng)格
X 菜單格式
XI 模塊定義
XII 整體結(jié)構(gòu)樣式
I.目錄結(jié)構(gòu)
把VI組織到文件系統(tǒng)中可以反映工程項(xiàng)目的等級(jí)結(jié)構(gòu)。把最高一層VI直接放在根目錄下。如程序放在D:Program中放主程序main.vi。把子VI放在子目錄中,并注意歸類,歸類必須反映所有組成模塊的特性,如設(shè)備驅(qū)動(dòng),程序配置,文件I/O等等。
整個(gè)工程建立一個(gè)目錄,并給該目錄一個(gè)有意義的名字,如下圖1所示。保存主VI在該目錄下,子VI放在子目錄下。如果子VI還有子VI,在其下面繼續(xù)建立子目錄。
當(dāng)建立目錄后,把各個(gè)VI和子VI規(guī)范化。什么樣的VI放在什么樣的目錄下。圖1給出了一個(gè)參考目錄。
圖1 參考目錄結(jié)構(gòu)
命名VI,VI庫(kù)以及目錄的時(shí)候,盡量避免使用不被所有文件系統(tǒng)所接受的字符,比如“/”,“”,“:”“~”。
避免在整個(gè)程序結(jié)構(gòu)中使用相同的文件名。因?yàn)樵趦?nèi)存中一次只能有一個(gè)給定的名字。如果內(nèi)存中存在某個(gè)文件名的VI,而又試圖去載入另外一個(gè)具有相同文件的VI,VI會(huì)提示你是否替換已存在的VI。這樣會(huì)導(dǎo)致整個(gè)程序出現(xiàn)難以預(yù)料的問(wèn)題。如果打算備份VI文件的話,請(qǐng)務(wù)必確定把他們備份到正常搜索結(jié)構(gòu)之外,以便LabVIEW不會(huì)錯(cuò)誤在內(nèi)存中調(diào)用這些VI。
避免在整個(gè)程序結(jié)構(gòu)中使用相同的文件名。因?yàn)樵趦?nèi)存中一次只能有一個(gè)給定的名字。如果內(nèi)存中存在某個(gè)文件名的VI,而又試圖去載入另外一個(gè)具有相同文件的VI,VI會(huì)提示你是否替換已存在的VI。這樣會(huì)導(dǎo)致整個(gè)程序出現(xiàn)難以預(yù)料的問(wèn)題。如果打算備份VI文件的話,請(qǐng)務(wù)必確定把他們備份到正常搜索結(jié)構(gòu)之外,以便LabVIEW不會(huì)錯(cuò)誤在內(nèi)存中調(diào)用這些VI。
II.前端面板風(fēng)格
前面板必須組織合理并且易用,因?yàn)橛脩羰紫瓤吹降木褪乔岸嗣姘?。在設(shè)計(jì)前端面板時(shí),時(shí)刻記住它會(huì)面對(duì)兩種使用者,最終用戶和開(kāi)發(fā)人員。最終用戶看到的VI將是只能被其看到的前端界面,開(kāi)發(fā)人員卻能看到更多的VI,某些VI并不在程序運(yùn)行中顯示出來(lái)。
字體和文字特征
不要使用太多的字體或字體樣式。把VI字體限制在三個(gè)以內(nèi)-Application,System,dialog-除非你需要對(duì)界面進(jìn)行特殊的修飾,不得不使用特殊的字體。
對(duì)這三種標(biāo)準(zhǔn)字體實(shí)際顯示是根據(jù)操作系統(tǒng)平臺(tái)的不同而不同的。例如,當(dāng)使用Windows時(shí),偏好和顯卡驅(qū)動(dòng)設(shè)置會(huì)影響到字體的大小。根據(jù)這些不同,在不同的系統(tǒng)上文字可能顯示的更大或者更小。為了避免或者彌補(bǔ)這一情況,盡力給字體一些空間,并且在控件的快捷菜單中選中Size to Text選項(xiàng)。使用回車符來(lái)進(jìn)行多行輸入,盡力避免調(diào)整文字框大小。
為了避免由于在不同平臺(tái)上標(biāo)簽的相互重疊,在控件間預(yù)留額外的空隙。例如,如果標(biāo)簽在控件的左邊,調(diào)整標(biāo)簽到左邊并且在其右邊預(yù)留一些空間。如果你居中標(biāo)簽在控件之上或之下,同樣對(duì)標(biāo)簽也要居中。字體在前面板是最不好調(diào)整的,所以盡量在開(kāi)始的時(shí)候就在目標(biāo)機(jī)上進(jìn)行字體位置的設(shè)置。
顏色
很多開(kāi)發(fā)者為了是界面更加漂亮,在沒(méi)有美術(shù)基礎(chǔ)之上,添加過(guò)多的顏色。如果做的好,能給用戶帶來(lái)清晰明了的指示。但實(shí)際情況往往相反。所以建議美術(shù)功底不深的開(kāi)發(fā)人員盡量少使用過(guò)多的顏色來(lái)修飾界面。顏色轉(zhuǎn)移用戶對(duì)重要的信息的注意。比如,黃色,綠色,亮橙色的背景會(huì)使得用戶不易看清紅色警示。
WarningWarningWarning
另外一個(gè)問(wèn)題是一些用戶平臺(tái)沒(méi)有開(kāi)發(fā)人員所用平臺(tái)那么多顏色。少使用顏色,增加黑色,白色,灰色的使用幾率。以下是一些在使用顏色時(shí)簡(jiǎn)單指導(dǎo):
1)不要使用那些和設(shè)備指示一樣或相近的顏色。人對(duì)某些顏色往往時(shí)不敏感的,這樣會(huì)造成識(shí)別上的失誤,可能導(dǎo)致嚴(yán)重后果。同樣的,多曲線圖顯示白色或黑色的背景上會(huì)失去某些曲線的信息。使用不同的線型來(lái)替代不同的顏色表示不同曲線。
2)對(duì)前面板背景色和用戶控件前景色盡力使用system顏色,或者symbolic顏色。System顏色會(huì)根據(jù)不同計(jì)算機(jī)上系統(tǒng)顏色來(lái)進(jìn)行調(diào)整。以獲得最佳的顯示效果。
3)背景盡量使用淺灰色,白色,或者柔和的顏色。
取色器第一排包括不太顯眼的顏色適合用在前面板背景和一般的控件上。第二排顏色包括更亮的顏色,可用在需要重要突出的控件上。當(dāng)個(gè)控件特別重要時(shí)候,選擇明亮顯眼的顏色,例如錯(cuò)誤提示。
4)使用協(xié)調(diào)的顏色。
5)及時(shí)在不同平臺(tái)上檢查VI的顏色的協(xié)調(diào)性。
圖形和自定義控件
你可以通過(guò)導(dǎo)入圖形來(lái)提高前面板的功能。你可以導(dǎo)入位圖,Windows圖形文件,文本控件來(lái)做為前面板的背景,pict rings中的項(xiàng)目,以及做為自定義控件和指示器的一部分,如下圖2所示。
圖2 在Pict Ring中使用導(dǎo)入圖片的例子
當(dāng)你在另外一個(gè)平臺(tái)上載入導(dǎo)入的圖片時(shí),請(qǐng)記得注意看看是否正常顯示。
導(dǎo)入過(guò)多的圖形圖片會(huì)是系統(tǒng)顯示更新速度受到一定影響。確保你沒(méi)有把指示器和控制控件放在圖形控件上。那樣的話,控件在指示器更新數(shù)值后并不會(huì)重畫。
提示 如果你必須在控件下面使用大圖片作為背景,好的辦法就是把它分割為好幾部分,分別導(dǎo)入。太大的圖片通常會(huì)花去過(guò)多的時(shí)間重畫。
布局
前面板界面布局盡可能的簡(jiǎn)潔。例如,可是使用菜單來(lái)減少簇的使用。在用戶直接面對(duì)的最上層VI,把最重要的控件放在最顯眼的位置。使用排列和分布下拉菜單來(lái)統(tǒng)一整個(gè)界面的布局。
避免控件與控件相互重疊,包括他們標(biāo)簽,數(shù)字顯示,以及其他一些部位,除非你想從重疊中達(dá)到某種特殊效果。重疊會(huì)使得控件在重畫時(shí)出現(xiàn)閃爍的現(xiàn)象。
使用修飾,如下圖所示。用簇把相關(guān)信息都集中起來(lái)。但不要用簇來(lái)美化界面。
圖4 幫助說(shuō)明色彩設(shè)置
大小和位置
前面板對(duì)大多數(shù)用戶可能使用的標(biāo)準(zhǔn)分辨率必須有所適應(yīng)。盡量使窗口趨于小型化,前提是不要使控件過(guò)于擁擠而犧牲了簡(jiǎn)潔的界面。如果VI在通用用戶顯示器上顯示,而用戶大多用的都是高分辨率的情況,那就可以設(shè)計(jì)一個(gè)較大的界面。如果是開(kāi)發(fā)商用程序,一定要記住有些顯示器會(huì)有分辨率限制,特別是LCD顯示器和觸摸屏。
前面板應(yīng)該開(kāi)在屏幕的左上角,這樣可以便于小屏幕的用戶使用。在好幾個(gè)界面同時(shí)出現(xiàn)并可以同時(shí)操作的時(shí)候,注意不要使一個(gè)界面全部覆蓋下一個(gè)界面,至少讓用戶能看到每個(gè)界面的某一小塊,便于能都直接調(diào)出該界面。前面板在打開(kāi)的時(shí)候使其居于屏幕中心。居中能是的不同分辨率下的用戶都能很容易的看到前面板。該設(shè)置在VI properties->Window Appearance->Cutomize Window Appearance->Auto Center。前面提到的屏幕位置設(shè)置可通過(guò)設(shè)置VI的Panel Bounds來(lái)達(dá)到。
標(biāo)簽
在Context Help窗口顯示標(biāo)簽作為連接塊的一部分。如果缺省值是重要的信息,把值放在用標(biāo)簽表示的名字旁邊的括弧中。如果可能的話盡量把單位也包括在其中。連接快終端的必須,推薦,可選三個(gè)設(shè)置會(huì)影響到Context Help窗口中輸入輸出的外觀。
控制和指示的名字需要文字來(lái)描述其作用。如果控制對(duì)用戶來(lái)說(shuō)是可見(jiàn)的,可用Captions(標(biāo)題說(shuō)明)來(lái)顯示更長(zhǎng)的描述信息,這樣可使用較短的標(biāo)簽。這樣可節(jié)省Block diagram珍貴的空間。例如,當(dāng)Ring或者Slide有電壓,歐姆,和電流三個(gè)選項(xiàng),需要選擇一個(gè)作為他們的可見(jiàn)名字。可用Caption來(lái)表示“選擇單位”。并且在程序中可用屬性節(jié)點(diǎn)來(lái)改變Captions的值。注意在程序運(yùn)行中,Caption的值是可以更改的,而標(biāo)簽則不行。
對(duì)于布爾控件,給每個(gè)狀態(tài)一個(gè)確定的名字來(lái)表示。對(duì)于Checkboxes和Radio按鈕,用戶可以點(diǎn)擊控件的布爾文字,而布爾控件的值相應(yīng)的作出改變。布爾控件中的Free Labels可以使得每個(gè)變換的意思明了,如圖5所示。
圖5 Free Label
路徑和字符
當(dāng)指定文件和文件夾路徑時(shí),使用路徑控件或者指示器。路徑控件和指示器工作原理同字符類似,但是LabVIEW根據(jù)你使用的平臺(tái)的標(biāo)準(zhǔn)語(yǔ)法來(lái)格式化路徑。取保你在文件路徑控件的瀏覽按鈕中正確設(shè)置了瀏覽選項(xiàng)。例如,如果用戶需要選擇文件夾,務(wù)必使在瀏覽選項(xiàng)對(duì)話框中的選擇模式選項(xiàng)設(shè)成現(xiàn)有目錄(Existing dir)。
在Block diagram中使用路徑常量和路徑數(shù)據(jù)類型來(lái)表示一個(gè)常數(shù)路徑值。路徑常量和數(shù)據(jù)類型使用平臺(tái)制定的符號(hào)來(lái)表示路徑,不像字符串常量和數(shù)據(jù)類型。
枚舉類型控件和Ring控件
你可以在程序運(yùn)行中改變一個(gè)枚舉類型控件的字符串標(biāo)簽,因?yàn)樽址畼?biāo)簽是數(shù)據(jù)類型的一部分。當(dāng)使用枚舉類型控件,務(wù)必進(jìn)行控件類型定義。建立類型定義可以避免你每次在枚舉類型控件中增加和刪除一條項(xiàng)目時(shí)候從新書寫代碼。
枚舉類型控件使得Block diagram代碼更易閱讀,因?yàn)楫?dāng)你連接一個(gè)枚舉類型控件至Case結(jié)構(gòu)時(shí),其字符串標(biāo)簽會(huì)顯示在選中標(biāo)簽中。
Ring控件在前面板中能和用戶交互,這是很有用的,你可以編程改變字符串標(biāo)簽的值。你可能想要使用Ring控件來(lái)替代一個(gè)布爾控件,因?yàn)槿绻銢Q定改變控件來(lái)表達(dá)兩個(gè)以上的選項(xiàng),在Ring控件中你能很容易的添加選項(xiàng)。
缺省值和范圍
為了避免用戶輸入錯(cuò)誤的數(shù)據(jù),你可以在Block diagram中檢查數(shù)據(jù)的可靠性,或者右鍵單擊控件,選擇數(shù)據(jù)范圍來(lái)設(shè)置控件值的范圍大小在指定的范圍:最小值,最大值和增加幅度。
給控件設(shè)置合理的缺省值。一個(gè)VI在以缺省值運(yùn)行的時(shí)候應(yīng)避免出錯(cuò)。切記把缺省值寫在控件標(biāo)簽的括弧中。在沒(méi)有特殊原因的情況下,不要為如Graphs,數(shù)組,字符串指示器設(shè)置缺省值,這樣在保存VI的時(shí)候會(huì)浪費(fèi)磁盤控件。
靈活的使用缺省值。在像寫字符到文件這類高級(jí)文件VI的情況的時(shí)候,缺省值是一個(gè)空的路徑,它會(huì)強(qiáng)制顯示一個(gè)文件對(duì)話框。這樣可以省掉使用布爾開(kāi)關(guān)。
屬性節(jié)點(diǎn)
使用屬性節(jié)點(diǎn)能讓用戶在前面板更多的反饋,使得VI易用性增強(qiáng)。以下是使用屬性節(jié)點(diǎn)來(lái)改善程序的例子:
1)把文本焦點(diǎn)設(shè)置到主要的,最常用的控件上。
2)禁止或隱藏當(dāng)前沒(méi)有使用或者非法的控件。
3)通過(guò)加亮控件來(lái)指導(dǎo)用戶使用程序。
4)出現(xiàn)錯(cuò)誤的時(shí)候可通過(guò)改變窗口顏色來(lái)提醒用戶。
你可以通過(guò)使用控件reference來(lái)修改前面板控件。使用控件refnum控件來(lái)傳遞前面板控件的references給其他VI。在你傳遞完一個(gè)控件reference給子VI后,使用屬性節(jié)點(diǎn)和調(diào)用節(jié)點(diǎn)來(lái)讀寫屬性和調(diào)用前面板控件的方法??丶eferences減少了Block diagram的混亂。
鍵盤導(dǎo)航
一些用戶更樂(lè)于使用鍵盤。在某些環(huán)境下,例如工廠,只有鍵盤可用。及時(shí)鼠標(biāo)可用,盡量給你的VI設(shè)置鍵盤快捷方式。鍵盤快捷方式使VI使用更加方便。
注意前面板上按鈕的key navigation選項(xiàng)。為按鈕設(shè)置Tab順序,順序按照從左到右從上到下的原則。把“回車鍵”設(shè)為前面板的缺省鍵盤快捷方式,通常一般是“確認(rèn)”按鈕。然而,如果前面板有多行字符串控件,你也許不會(huì)使用回車鍵作為你的缺省鍵盤快捷方式。
如果前面板有“取消”按鈕,可設(shè)
同時(shí)也要考慮到使用鍵焦點(diǎn)來(lái)程序設(shè)置在開(kāi)啟前面板時(shí)哪個(gè)控件獲得焦點(diǎn)。
對(duì)話框
對(duì)話框用來(lái)有效的獲得用戶的設(shè)置和配置信息。在對(duì)話框中使用對(duì)話框控件來(lái)提示用戶配置和設(shè)定選項(xiàng)??紤]使用tab控件,這樣可以使得在小的區(qū)域內(nèi)顯示更多的內(nèi)容,并且減少了界面混亂的可能性。
當(dāng)前許多程序使用對(duì)話框來(lái)顯示提示信息給用戶,但是決不要過(guò)多的使用這類對(duì)話框。使用狀態(tài)欄來(lái)顯示不是太重要的警告信息。
測(cè)控程序界面
測(cè)控程序的界面,目前位置沒(méi)有統(tǒng)一的約定,但是在眾多的測(cè)控程序,我們可以總結(jié)出一套大家能普遍遵守的界面布局格式。
圖6 程序主界面
一般在主界面,把重要幾組數(shù)據(jù)用Chart的形式實(shí)時(shí)的顯示出來(lái)。Chart右邊列出這幾組數(shù)據(jù)的具體數(shù)值,一般用Table或者M(jìn)ulticolumn Listbox來(lái)顯示。其中如果有多組數(shù)據(jù)無(wú)法同時(shí)顯示,可使用Tab控件。這樣能在主界面上顯示較多的信息。界面的左下角為測(cè)試信息一欄,這里由用戶輸入。程序的右下部為控制部分,一些簡(jiǎn)單的控制按鈕可以放在這里,便于用戶操控。最下面一排可以顯示一些狀態(tài)信息。