《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測(cè)試測(cè)量 > 業(yè)界動(dòng)態(tài) > LabVIEW 8.5助力大型應(yīng)用程序的開發(fā)

LabVIEW 8.5助力大型應(yīng)用程序的開發(fā)

2008-12-29
作者:周 斌

??? 摘 要: 介紹了LabVIEW 8.5有助于大型程序開發(fā)的新特性,包括狀態(tài)圖" title="狀態(tài)圖">狀態(tài)圖模塊,、對(duì)多核技術(shù)" title="多核技術(shù)">多核技術(shù)的支持,、功能增強(qiáng)的項(xiàng)目管理等,。
??? 關(guān)鍵詞: LabVIEW 8.5,;狀態(tài)圖模塊,;多核,;項(xiàng)目管理

?

??? 從1986年誕生至今,,NI LabVIEW作為測(cè)試測(cè)量和控制行業(yè)的標(biāo)準(zhǔn)軟件平臺(tái),,一直致力于簡(jiǎn)化自動(dòng)化測(cè)試和儀器控制的實(shí)現(xiàn)過程,,使工程師和科學(xué)家們可以專注自己專業(yè)的研究領(lǐng)域,而不是將大量的時(shí)間和成本放在系統(tǒng)底層通訊和算法的實(shí)現(xiàn)上,,從而實(shí)現(xiàn)效率的最大化,。另一方面,隨著測(cè)控系統(tǒng)" title="測(cè)控系統(tǒng)">測(cè)控系統(tǒng)的日趨大型化和復(fù)雜化,,很多工程師們開始使用LabVIEW來開發(fā)大型的應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序,。因此,簡(jiǎn)化大型或復(fù)雜的測(cè)控系統(tǒng)的搭建和開發(fā)過程,,成為了LabVIEW致力實(shí)現(xiàn)的又一個(gè)目標(biāo),。
??? 2年前,LabVIEW 8推出的項(xiàng)目(Project)工具使工程師們能夠從整體項(xiàng)目的角度進(jìn)行開發(fā),,為想要開發(fā)大型應(yīng)用程序的LabVIEW用戶們提供了強(qiáng)有力的支持:在一個(gè)項(xiàng)目中,,開發(fā)人員可以將多個(gè)程序文件有機(jī)地整合在一起,并附帶相關(guān)的文檔及配置文件,。此外,,由于LabVIEW和硬件的良好的連接性,項(xiàng)目中還可對(duì)多個(gè)硬件平臺(tái)進(jìn)行集中管理,,實(shí)現(xiàn)分布式智能控制,。可以說,,當(dāng)時(shí)的LabVIEW已經(jīng)具備了開發(fā)大型應(yīng)用程序的條件,。隨后的LabVIEW 8.2開始支持面向?qū)ο蟮木幊谭绞健6ツ?月推出的LabVIEW 8.5更是提供了多個(gè)嶄新工具來協(xié)助工程師輕松而高效地實(shí)現(xiàn)大型系統(tǒng)的構(gòu)架和開發(fā),。
  因此,,本文將深入討論如何使用這些新工具在LabVIEW平臺(tái)下實(shí)現(xiàn)更高效和快捷的大型程序的開發(fā)。
???????????????????????? 狀態(tài)圖(Statechart)模塊
??? 在開發(fā)大型程序之前,,對(duì)系統(tǒng)進(jìn)行整體架構(gòu)設(shè)計(jì)是必不可少的過程,,而將系統(tǒng)的架構(gòu)轉(zhuǎn)換為實(shí)際可運(yùn)行的代碼的過程看似簡(jiǎn)單,其實(shí)會(huì)花費(fèi)開發(fā)者不少的精力和時(shí)間,。此外,,在開發(fā)后期,,開發(fā)者們還會(huì)面臨需要根據(jù)實(shí)際情況對(duì)程序的結(jié)構(gòu)進(jìn)行頻繁修改的局面。因此,,一個(gè)好的系統(tǒng)架構(gòu)" title="系統(tǒng)架構(gòu)">系統(tǒng)架構(gòu)方式或工具可以起到事半功倍的效果,。
?? ?LabVIEW 8.5新引入了一個(gè)功能強(qiáng)大的全新工具——NI LabVIEW狀態(tài)圖模塊。有了這個(gè)基于LabVIEW平臺(tái)的新功能,,工程師們就能更快捷地設(shè)計(jì)出高層抽象的系統(tǒng)架構(gòu),,并可以將狀態(tài)圖自動(dòng)生成LabVIEW代碼,從而直接運(yùn)行,。
??? 例如,,要實(shí)現(xiàn)一個(gè)如圖1所示的簡(jiǎn)單的數(shù)據(jù)采集系統(tǒng),需要能夠根據(jù)用戶按下的不同按鈕來進(jìn)行相應(yīng)的操作:在配置狀態(tài)下按Acquisition鍵開始采集信號(hào),,在采集時(shí)按Pause鍵則暫停,,在任何時(shí)候按Stop鍵停止整個(gè)采集系統(tǒng)。
?? ?這樣的要求雖然不算復(fù)雜,,但是如果純粹進(jìn)行編程,,還是需要花費(fèi)不少的時(shí)間;而相比之下,,使用狀態(tài)圖就能夠在很短的時(shí)間內(nèi)實(shí)現(xiàn),。圖1的右邊部分就是播放器的狀態(tài)圖,通過簡(jiǎn)單的幾個(gè)狀態(tài)和狀態(tài)間切換的設(shè)置,,就能夠既直觀而又輕松地予以實(shí)現(xiàn),。

?

?

圖1 使用LabVIEW狀態(tài)圖實(shí)現(xiàn)數(shù)據(jù)采集


??? 測(cè)控系統(tǒng)日益復(fù)雜,有時(shí)就需要在傳統(tǒng)的有限狀態(tài)機(jī)基礎(chǔ)上再添加層次性,、并發(fā)性以及狀態(tài)間轉(zhuǎn)換的全面行為定義,。在1980年,以色列魏茲曼科學(xué)研究所的David Harel在設(shè)計(jì)一個(gè)復(fù)雜的航空系統(tǒng)時(shí)發(fā)明了狀態(tài)圖,。在90年代,,狀態(tài)圖被引入U(xiǎn)ML規(guī)范,從而被廣泛地用于嵌入式系統(tǒng)的建模,。
??? 狀態(tài)圖的層次性允許編程人員可以定義所謂的“超狀態(tài)”,,即將一個(gè)子狀態(tài)嵌套在另一個(gè)狀態(tài)中。超狀態(tài)同時(shí)封裝了出,、入動(dòng)作和過渡,。舉例來說,從超狀態(tài)的單個(gè)過渡,,代表了從每個(gè)超狀態(tài)所包含的子狀態(tài)的過渡,。這一特點(diǎn)極大地簡(jiǎn)化了框圖的設(shè)計(jì)和開發(fā)。在圖2中,標(biāo)有“Error”的過渡轉(zhuǎn)換,,可以在系統(tǒng)處于液罐控制的四個(gè)狀態(tài)中的任一狀態(tài)時(shí)發(fā)生,。

?

?

圖2 LabVIEW狀態(tài)圖模塊支持層次性、并發(fā)性和全面動(dòng)作


??? 并發(fā)性也是狀態(tài)圖所具有的特點(diǎn)之一,,它是指兩個(gè)甚至多個(gè)狀態(tài)都能在同一時(shí)刻被激活,即處于“與狀態(tài)”,。當(dāng)描述同一框圖所表示的系統(tǒng)中的獨(dú)立函數(shù)時(shí),,與狀態(tài)是非常有用的。圖2中描述的系統(tǒng)可以同時(shí)處于灌注(Filling)和采集(Acquire)的狀態(tài),。由于LabVIEW軟件固有的并行處理特點(diǎn),,狀態(tài)圖的并發(fā)性特點(diǎn)在LabVIEW 環(huán)境下非常適合。
?? ?除此之外,,狀態(tài)圖第三個(gè)重要的特點(diǎn)就是可以用動(dòng)作和轉(zhuǎn)換來定義全面行為,。每個(gè)狀態(tài)除定義了編程人員為響應(yīng)特殊事件所配置的動(dòng)作外,還定義了進(jìn)入和退出動(dòng)作,。用戶可以為每個(gè)已定義的行為編寫LabVIEW 數(shù)據(jù)流代碼,。而過渡轉(zhuǎn)換也是以同樣的方式工作,在已配置的觸發(fā)信號(hào)產(chǎn)生時(shí)或者LabVIEW 保護(hù)碼值為“真”時(shí)被執(zhí)行,。
?? ?開發(fā)LabVIEW狀態(tài)圖非常簡(jiǎn)單,,只需要4個(gè)步驟,如圖3所示,。首先在LabVIEW 狀態(tài)圖模塊中創(chuàng)建系統(tǒng)相應(yīng)的狀態(tài)和狀態(tài)間的轉(zhuǎn)移,;然后再定義狀態(tài)中的動(dòng)作,包括何時(shí)進(jìn)入,、退出,、警戒等,也可以自己開發(fā)LabVIEW代碼來設(shè)計(jì)自定義觸發(fā)來確定什么時(shí)候發(fā)生狀態(tài)轉(zhuǎn)移,;接下來只需要按下“生成”鍵即可自動(dòng)生成包含狀態(tài)圖邏輯的子VI,;最后將這些子VI嵌入到LabVIEW程序中就完成了整個(gè)開發(fā)的過程。

?

?

????????? 設(shè)計(jì)狀態(tài)的轉(zhuǎn)換???????????? 設(shè)計(jì)轉(zhuǎn)換動(dòng)作?????????生成狀態(tài)圖子VI????????? 嵌入到LabVIEW程序框圖

?

圖3 四步驟輕松開發(fā)LabVIEW狀態(tài)圖


??? 當(dāng)狀態(tài)圖設(shè)計(jì)完成后,,LabVIEW可以在一系列的硬件平臺(tái)中部署狀態(tài)圖代碼,,包括臺(tái)式機(jī)、人機(jī)界面(HMI),、可編程自動(dòng)化控制器(PAC)如NI CompactRIO及PXI,、NI硬件中的FPGA以及任何32位單片機(jī)。這個(gè)能部署到多種硬件的特性使得LabVIEW狀態(tài)圖模塊成為設(shè)計(jì)和部署嵌入式系統(tǒng)的最佳工具,。
??? 目前的測(cè)控系統(tǒng)規(guī)模和復(fù)雜程度已遠(yuǎn)超過幾年前,,系統(tǒng)架構(gòu)代碼量以及后期的調(diào)試成本都呈指數(shù)增長(zhǎng),這給予了開發(fā)人員持續(xù)的壓力。LabVIEW 8.5這一全新的模塊則為架構(gòu)復(fù)雜的大型程序提供了有利的工具,,協(xié)助工程師輕松應(yīng)對(duì)挑戰(zhàn),。
????????????????????????????? 對(duì)多核技術(shù)的支持
??? 可以想象,應(yīng)用程序規(guī)模的日益增大導(dǎo)致開發(fā)人員對(duì)于CPU處理器的運(yùn)算速度的要求也越來越高,。由于能量消耗和熱量發(fā)散的限制,,處理器速度的發(fā)展近年來遇到了瓶頸,通過增加時(shí)鐘速度來提高性能已經(jīng)不再可行,,芯片制造商開始轉(zhuǎn)向全新的芯片結(jié)構(gòu),,即多核技術(shù)。
??? 以往,,當(dāng)電腦升級(jí)到一個(gè)更快速的CPU后,,也就意味著每一條獨(dú)立指令的運(yùn)行速度都會(huì)加快。如今使用多核之后,,如果想繼續(xù)提高性能,,開發(fā)者就需要設(shè)計(jì)應(yīng)用程序,為每個(gè)核分配工作——本質(zhì)上就是開發(fā)一個(gè)并行應(yīng)用程序來取代順序應(yīng)用程序,。
??? 然而,,這對(duì)于許多習(xí)慣于開發(fā)單線程應(yīng)用的開發(fā)者來說是一個(gè)極大的挑戰(zhàn)。如果工程師使用的是串行的編程語言,,如C語言,,那么在進(jìn)行多線程應(yīng)用軟件的編寫時(shí),需要專門的語義創(chuàng)建和管理線程,,并且在線程安全方式下進(jìn)行數(shù)據(jù)的傳送,。
??? 相比之下,NI LabVIEW就非常適合于創(chuàng)建并行的多線程應(yīng)用,。首先,,相比文本編程語言的自上而下的順序結(jié)構(gòu),由于LabVIEW是基于數(shù)據(jù)流的編程方式,,其本身就是一種并行的編程結(jié)構(gòu),;早在LabVIEW? 5.0時(shí)LabVIEW就支持多線程:在程序編寫完畢后,LabVIEW編譯器可以自動(dòng)識(shí)別線程并創(chuàng)建線程到不同的任務(wù)和循環(huán)上,,再由操作系統(tǒng)分配到不同的核上運(yùn)行,。
??? LabVIEW的未來版本還將針對(duì)多核技術(shù)提供更多特性:如可以將嵌入式實(shí)時(shí)應(yīng)用自動(dòng)地劃分為多個(gè)線程,并將它們映射到多個(gè)處理核之中,,這也被稱為對(duì)稱多線程處理技術(shù),,從而使設(shè)計(jì)人員可以自動(dòng)將均衡的任務(wù)量分配到各個(gè)核上;同時(shí),,工程師也可以根據(jù)自身需求手動(dòng)設(shè)置線程運(yùn)行在特定的核上,,例如將那些對(duì)時(shí)間確定性要求苛刻的采集與控制任務(wù)放在單獨(dú)的核上運(yùn)行,,而將對(duì)確定性要求不高的界面響應(yīng)、數(shù)據(jù)錄入等任務(wù)放在另外一個(gè)核上運(yùn)行,。
?? ?綜上所述,,使用多核技術(shù)已經(jīng)成為工程師開發(fā)大型復(fù)雜的測(cè)控系統(tǒng)的必要條件,而LabVIEW 8.5則可以讓用戶更方便和更直接地享受到多核給系統(tǒng)性能帶來的直線提升,。
????????????????????????????? 功能增強(qiáng)的項(xiàng)目管理
??? 系統(tǒng)架構(gòu)和程序設(shè)計(jì)是開發(fā)大型應(yīng)用程序的核心,,但是開發(fā)人員也需要一個(gè)載體能夠全面管理項(xiàng)目中的所有資源。前文已經(jīng)提到,,LabVIEW 8中首次引入的LabVIEW項(xiàng)目極大地幫助了編程人員進(jìn)行大型應(yīng)用程序的開發(fā),,但是經(jīng)驗(yàn)豐富的LabVIEW程序員依然渴望更多更強(qiáng)的新功能以解決他們?cè)陂_發(fā)過程中所遇到的挑戰(zhàn)。
?? ?以前,,工程師在開發(fā)過程中會(huì)遇到下面兩個(gè)挑戰(zhàn):首先,隨著應(yīng)用程序大小的增長(zhǎng),,使得查看和管理硬盤中所有與開發(fā)工程相關(guān)的文件變得愈加困難,;其次,在多個(gè)程序版本存放在同一個(gè)本地硬盤時(shí),,在程序員未知的情況下,,有時(shí)候VI會(huì)自動(dòng)鏈接到不需要的或者舊版本的子VI中,這種情況被稱為交叉連接(cross-linking),。
??? 因此,,為了響應(yīng)開發(fā)者的要求,在LabVIEW8.5中針對(duì)項(xiàng)目管理增添了兩大新功能,,從而解決了這兩大挑戰(zhàn),。
????????????????????? 同步LabVIEW項(xiàng)目文件夾至本地硬盤
?? ?對(duì)于那些熟悉LabVIEW項(xiàng)目的開發(fā)人員而言,當(dāng)使用LabVIEW 8.5中的項(xiàng)目瀏覽器時(shí)會(huì)馬上發(fā)現(xiàn)一個(gè)明顯的變化:新增加了選項(xiàng)卡視圖(圖4),。開發(fā)者們通過項(xiàng)目選項(xiàng)卡,,既可以使用以前版本的LabVIEW已經(jīng)存在和熟悉的LabVIEW項(xiàng)目組件,也可以在新增的文件選項(xiàng)卡中交互式地查看和改變LabVIEW項(xiàng)目中所有文件的位置,。

?

?

圖4 全新的選項(xiàng)卡視圖允許用戶自由選擇不同的瀏覽方式


??? 開發(fā)者從LabVIEW 8引入項(xiàng)目管理之后就一直希望能夠定義LabVIEW項(xiàng)目文件夾與硬盤文件夾之間更為明確的關(guān)系,。因此,LabVIEW 8.5開始允許開發(fā)者同步LabVIEW項(xiàng)目文件夾至硬盤上的目錄,,從而簡(jiǎn)化了對(duì)同一應(yīng)用程序的所有文件的管理,。這里所說的“同步”是指這些新的LabVIEW項(xiàng)目文件夾將會(huì)基于它們相應(yīng)的物理目錄中的內(nèi)容而不斷地更新。
??? 這些自動(dòng)同步的LabVIEW項(xiàng)目文件夾可以即時(shí)地反映開發(fā)者在硬盤中所進(jìn)行的任何操作(包括添加,、移動(dòng)或刪除文件等),。但是,在使用自動(dòng)同步的項(xiàng)目文件夾后,,由于文件夾中的內(nèi)容總是精確地匹配其物理目錄的結(jié)構(gòu),,從而導(dǎo)致開發(fā)者不能脫離硬盤上的文件層次結(jié)構(gòu)來對(duì)文件實(shí)現(xiàn)自定義的虛擬的組織活動(dòng)。但是,在LabVIEW 8.5中,,這樣的情況是不會(huì)發(fā)生的,,因?yàn)橛脩艨梢栽谕粋€(gè)項(xiàng)目中同時(shí)使用自動(dòng)同步的文件夾和虛擬文件夾,從而結(jié)合兩種方式以實(shí)現(xiàn)最大化的靈活性,。
???????????????????????????????? 去除交叉連接現(xiàn)象
??? 為了更清晰地說明交叉連接是什么,,先舉一個(gè)簡(jiǎn)單的例子:如果開發(fā)者移動(dòng)了硬盤上某個(gè)VI的路徑,那么在下次需要它時(shí)LabVIEW就必須搜索并重新連接倒那個(gè)丟失的VI,。在某種情況下,,LabVIEW可能會(huì)錯(cuò)誤地連接到同一個(gè)代碼的早期版本或另一個(gè)分支,或者是具有同樣名稱的不同VI,,從而導(dǎo)致不可預(yù)料的行為發(fā)生,,這種情況是很難進(jìn)行定位和調(diào)試的。LabVIEW 8.5提供了新的工具以幫助開發(fā)者防止交叉連接的發(fā)生,。
??? 第一個(gè)工具就是新增的文件選項(xiàng)卡,,利用文件選項(xiàng)卡,開發(fā)者可以直觀地確認(rèn)存在于廢棄目錄中不必要的VI并且其他文件不會(huì)錯(cuò)誤地包含在某個(gè)特定的LabVIEW項(xiàng)目中,。其次,,LabVIEW項(xiàng)目還提供了其他的警告和調(diào)試工具來幫助開發(fā)者了解和防止交叉連接。當(dāng)LabVIEW檢測(cè)到一個(gè)可能的交叉連接情況時(shí),,它將會(huì)通過在LabVIEW項(xiàng)目中的VI名稱后面顯示“沖突”(Conflict)來警告開發(fā)人員(圖5),。這一信息意味著LabVIEW已檢測(cè)到在同一個(gè)LabVIEW項(xiàng)目中多于一個(gè)具有相同名稱的VI被調(diào)用。此時(shí)開發(fā)者就可以通過工具欄中的一個(gè)新對(duì)話框來解決這個(gè)沖突,,它可以幫助開發(fā)者采取一種自上而下的方式來引用正確的文件,。

?

?

圖5 LabVIEW 8.5去除交叉連接現(xiàn)象


?? ?LabVIEW一直積極響應(yīng)使用者的反饋來實(shí)現(xiàn)持續(xù)的創(chuàng)新和發(fā)展,從而給予工程師和科學(xué)家們更完美的編程體驗(yàn),。這次新增的項(xiàng)目管理功能則更進(jìn)一步地使開發(fā)人員管理和組織項(xiàng)目資源變得更加簡(jiǎn)便和安全,。
??? 縱觀目前測(cè)試測(cè)控領(lǐng)域的發(fā)展趨勢(shì),產(chǎn)品的功能集成化,、協(xié)議的多樣化致使系統(tǒng)開發(fā)人員已經(jīng)無法通過簡(jiǎn)單的,、單線程的程序來滿足要求,大型的應(yīng)用系統(tǒng)開發(fā)成為了必然的發(fā)展趨勢(shì),。作為圖形化的編程開發(fā)平臺(tái),,全新的NI LabVIEW 8.5所提供的多種新特性幫助了工程師更有效地來進(jìn)行系統(tǒng)的架構(gòu)、開發(fā)以及管理,,大大減少了開發(fā)時(shí)間和成本,,成為測(cè)量測(cè)試和自動(dòng)化開發(fā)平臺(tái)的不二之選。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。