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

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

2008-12-29
作者:周 斌

??? 摘 要: 介紹了LabVIEW 8.5有助于大型程序開(kāi)發(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)過(guò)程,使工程師和科學(xué)家們可以專注自己專業(yè)的研究領(lǐng)域,而不是將大量的時(shí)間和成本放在系統(tǒng)底層通訊和算法的實(shí)現(xiàn)上,從而實(shí)現(xiàn)效率的最大化。另一方面,隨著測(cè)控系統(tǒng)" title="測(cè)控系統(tǒng)">測(cè)控系統(tǒng)的日趨大型化和復(fù)雜化,很多工程師們開(kāi)始使用LabVIEW來(lái)開(kāi)發(fā)大型的應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序。因此,簡(jiǎn)化大型或復(fù)雜的測(cè)控系統(tǒng)的搭建和開(kāi)發(fā)過(guò)程,成為了LabVIEW致力實(shí)現(xiàn)的又一個(gè)目標(biāo)。
??? 2年前,LabVIEW 8推出的項(xiàng)目(Project)工具使工程師們能夠從整體項(xiàng)目的角度進(jìn)行開(kāi)發(fā),為想要開(kāi)發(fā)大型應(yīng)用程序的LabVIEW用戶們提供了強(qiáng)有力的支持:在一個(gè)項(xiàng)目中,開(kāi)發(fā)人員可以將多個(gè)程序文件有機(jī)地整合在一起,并附帶相關(guān)的文檔及配置文件。此外,由于LabVIEW和硬件的良好的連接性,項(xiàng)目中還可對(duì)多個(gè)硬件平臺(tái)進(jìn)行集中管理,實(shí)現(xiàn)分布式智能控制??梢哉f(shuō),當(dāng)時(shí)的LabVIEW已經(jīng)具備了開(kāi)發(fā)大型應(yīng)用程序的條件。隨后的LabVIEW 8.2開(kāi)始支持面向?qū)ο蟮木幊谭绞?。而去?月推出的LabVIEW 8.5更是提供了多個(gè)嶄新工具來(lái)協(xié)助工程師輕松而高效地實(shí)現(xiàn)大型系統(tǒng)的構(gòu)架和開(kāi)發(fā)。
  因此,本文將深入討論如何使用這些新工具在LabVIEW平臺(tái)下實(shí)現(xiàn)更高效和快捷的大型程序的開(kāi)發(fā)。
???????????????????????? 狀態(tài)圖(Statechart)模塊
??? 在開(kāi)發(fā)大型程序之前,對(duì)系統(tǒng)進(jìn)行整體架構(gòu)設(shè)計(jì)是必不可少的過(guò)程,而將系統(tǒng)的架構(gòu)轉(zhuǎn)換為實(shí)際可運(yùn)行的代碼的過(guò)程看似簡(jiǎn)單,其實(shí)會(huì)花費(fèi)開(kāi)發(fā)者不少的精力和時(shí)間。此外,在開(kāi)發(fā)后期,開(kāi)發(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ù)用戶按下的不同按鈕來(lái)進(jìn)行相應(yīng)的操作:在配置狀態(tài)下按Acquisition鍵開(kāi)始采集信號(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)圖,通過(guò)簡(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)作和過(guò)渡。舉例來(lái)說(shuō),從超狀態(tài)的單個(gè)過(guò)渡,代表了從每個(gè)超狀態(tài)所包含的子狀態(tài)的過(guò)渡。這一特點(diǎn)極大地簡(jiǎn)化了框圖的設(shè)計(jì)和開(kāi)發(fā)。在圖2中,標(biāo)有“Error”的過(guò)渡轉(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)換來(lái)定義全面行為。每個(gè)狀態(tài)除定義了編程人員為響應(yīng)特殊事件所配置的動(dòng)作外,還定義了進(jìn)入和退出動(dòng)作。用戶可以為每個(gè)已定義的行為編寫LabVIEW 數(shù)據(jù)流代碼。而過(guò)渡轉(zhuǎn)換也是以同樣的方式工作,在已配置的觸發(fā)信號(hào)產(chǎn)生時(shí)或者LabVIEW 保護(hù)碼值為“真”時(shí)被執(zhí)行。
?? ?開(kāi)發(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)入、退出、警戒等,也可以自己開(kāi)發(fā)LabVIEW代碼來(lái)設(shè)計(jì)自定義觸發(fā)來(lái)確定什么時(shí)候發(fā)生狀態(tài)轉(zhuǎn)移;接下來(lái)只需要按下“生成”鍵即可自動(dòng)生成包含狀態(tài)圖邏輯的子VI;最后將這些子VI嵌入到LabVIEW程序中就完成了整個(gè)開(kāi)發(fā)的過(guò)程。

?

?

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

?

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

?

?

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


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

?

?

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


?? ?LabVIEW一直積極響應(yīng)使用者的反饋來(lái)實(shí)現(xiàn)持續(xù)的創(chuàng)新和發(fā)展,從而給予工程師和科學(xué)家們更完美的編程體驗(yàn)。這次新增的項(xiàng)目管理功能則更進(jìn)一步地使開(kāi)發(fā)人員管理和組織項(xiàng)目資源變得更加簡(jiǎn)便和安全。
??? 縱觀目前測(cè)試測(cè)控領(lǐng)域的發(fā)展趨勢(shì),產(chǎn)品的功能集成化、協(xié)議的多樣化致使系統(tǒng)開(kāi)發(fā)人員已經(jīng)無(wú)法通過(guò)簡(jiǎn)單的、單線程的程序來(lái)滿足要求,大型的應(yīng)用系統(tǒng)開(kāi)發(fā)成為了必然的發(fā)展趨勢(shì)。作為圖形化的編程開(kāi)發(fā)平臺(tái),全新的NI LabVIEW 8.5所提供的多種新特性幫助了工程師更有效地來(lái)進(jìn)行系統(tǒng)的架構(gòu)、開(kāi)發(fā)以及管理,大大減少了開(kāi)發(fā)時(shí)間和成本,成為測(cè)量測(cè)試和自動(dòng)化開(kāi)發(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)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。