??? 摘 要: 介紹了LabVIEW 8.5有助于大型程序開發的新特性,包括狀態圖" title="狀態圖">狀態圖模塊、對多核技術" title="多核技術">多核技術的支持、功能增強的項目管理等。
??? 關鍵詞: LabVIEW 8.5;狀態圖模塊;多核;項目管理
?
??? 從1986年誕生至今,NI LabVIEW作為測試測量和控制行業的標準軟件平臺,一直致力于簡化自動化測試和儀器控制的實現過程,使工程師和科學家們可以專注自己專業的研究領域,而不是將大量的時間和成本放在系統底層通訊和算法的實現上,從而實現效率的最大化。另一方面,隨著測控系統" title="測控系統">測控系統的日趨大型化和復雜化,很多工程師們開始使用LabVIEW來開發大型的應用程序" title="應用程序">應用程序。因此,簡化大型或復雜的測控系統的搭建和開發過程,成為了LabVIEW致力實現的又一個目標。
??? 2年前,LabVIEW 8推出的項目(Project)工具使工程師們能夠從整體項目的角度進行開發,為想要開發大型應用程序的LabVIEW用戶們提供了強有力的支持:在一個項目中,開發人員可以將多個程序文件有機地整合在一起,并附帶相關的文檔及配置文件。此外,由于LabVIEW和硬件的良好的連接性,項目中還可對多個硬件平臺進行集中管理,實現分布式智能控制。可以說,當時的LabVIEW已經具備了開發大型應用程序的條件。隨后的LabVIEW 8.2開始支持面向對象的編程方式。而去年8月推出的LabVIEW 8.5更是提供了多個嶄新工具來協助工程師輕松而高效地實現大型系統的構架和開發。
因此,本文將深入討論如何使用這些新工具在LabVIEW平臺下實現更高效和快捷的大型程序的開發。
???????????????????????? 狀態圖(Statechart)模塊
??? 在開發大型程序之前,對系統進行整體架構設計是必不可少的過程,而將系統的架構轉換為實際可運行的代碼的過程看似簡單,其實會花費開發者不少的精力和時間。此外,在開發后期,開發者們還會面臨需要根據實際情況對程序的結構進行頻繁修改的局面。因此,一個好的系統架構" title="系統架構">系統架構方式或工具可以起到事半功倍的效果。
?? ?LabVIEW 8.5新引入了一個功能強大的全新工具——NI LabVIEW狀態圖模塊。有了這個基于LabVIEW平臺的新功能,工程師們就能更快捷地設計出高層抽象的系統架構,并可以將狀態圖自動生成LabVIEW代碼,從而直接運行。
??? 例如,要實現一個如圖1所示的簡單的數據采集系統,需要能夠根據用戶按下的不同按鈕來進行相應的操作:在配置狀態下按Acquisition鍵開始采集信號,在采集時按Pause鍵則暫停,在任何時候按Stop鍵停止整個采集系統。
?? ?這樣的要求雖然不算復雜,但是如果純粹進行編程,還是需要花費不少的時間;而相比之下,使用狀態圖就能夠在很短的時間內實現。圖1的右邊部分就是播放器的狀態圖,通過簡單的幾個狀態和狀態間切換的設置,就能夠既直觀而又輕松地予以實現。
?
?
圖1 使用LabVIEW狀態圖實現數據采集
??? 測控系統日益復雜,有時就需要在傳統的有限狀態機基礎上再添加層次性、并發性以及狀態間轉換的全面行為定義。在1980年,以色列魏茲曼科學研究所的David Harel在設計一個復雜的航空系統時發明了狀態圖。在90年代,狀態圖被引入UML規范,從而被廣泛地用于嵌入式系統的建模。
??? 狀態圖的層次性允許編程人員可以定義所謂的“超狀態”,即將一個子狀態嵌套在另一個狀態中。超狀態同時封裝了出、入動作和過渡。舉例來說,從超狀態的單個過渡,代表了從每個超狀態所包含的子狀態的過渡。這一特點極大地簡化了框圖的設計和開發。在圖2中,標有“Error”的過渡轉換,可以在系統處于液罐控制的四個狀態中的任一狀態時發生。
?
?
圖2 LabVIEW狀態圖模塊支持層次性、并發性和全面動作
??? 并發性也是狀態圖所具有的特點之一,它是指兩個甚至多個狀態都能在同一時刻被激活,即處于“與狀態”。當描述同一框圖所表示的系統中的獨立函數時,與狀態是非常有用的。圖2中描述的系統可以同時處于灌注(Filling)和采集(Acquire)的狀態。由于LabVIEW軟件固有的并行處理特點,狀態圖的并發性特點在LabVIEW 環境下非常適合。
?? ?除此之外,狀態圖第三個重要的特點就是可以用動作和轉換來定義全面行為。每個狀態除定義了編程人員為響應特殊事件所配置的動作外,還定義了進入和退出動作。用戶可以為每個已定義的行為編寫LabVIEW 數據流代碼。而過渡轉換也是以同樣的方式工作,在已配置的觸發信號產生時或者LabVIEW 保護碼值為“真”時被執行。
?? ?開發LabVIEW狀態圖非常簡單,只需要4個步驟,如圖3所示。首先在LabVIEW 狀態圖模塊中創建系統相應的狀態和狀態間的轉移;然后再定義狀態中的動作,包括何時進入、退出、警戒等,也可以自己開發LabVIEW代碼來設計自定義觸發來確定什么時候發生狀態轉移;接下來只需要按下“生成”鍵即可自動生成包含狀態圖邏輯的子VI;最后將這些子VI嵌入到LabVIEW程序中就完成了整個開發的過程。
?
?
????????? 設計狀態的轉換???????????? 設計轉換動作?????????生成狀態圖子VI????????? 嵌入到LabVIEW程序框圖
?
圖3 四步驟輕松開發LabVIEW狀態圖
??? 當狀態圖設計完成后,LabVIEW可以在一系列的硬件平臺中部署狀態圖代碼,包括臺式機、人機界面(HMI)、可編程自動化控制器(PAC)如NI CompactRIO及PXI、NI硬件中的FPGA以及任何32位單片機。這個能部署到多種硬件的特性使得LabVIEW狀態圖模塊成為設計和部署嵌入式系統的最佳工具。
??? 目前的測控系統規模和復雜程度已遠超過幾年前,系統架構代碼量以及后期的調試成本都呈指數增長,這給予了開發人員持續的壓力。LabVIEW 8.5這一全新的模塊則為架構復雜的大型程序提供了有利的工具,協助工程師輕松應對挑戰。
????????????????????????????? 對多核技術的支持
??? 可以想象,應用程序規模的日益增大導致開發人員對于CPU處理器的運算速度的要求也越來越高。由于能量消耗和熱量發散的限制,處理器速度的發展近年來遇到了瓶頸,通過增加時鐘速度來提高性能已經不再可行,芯片制造商開始轉向全新的芯片結構,即多核技術。
??? 以往,當電腦升級到一個更快速的CPU后,也就意味著每一條獨立指令的運行速度都會加快。如今使用多核之后,如果想繼續提高性能,開發者就需要設計應用程序,為每個核分配工作——本質上就是開發一個并行應用程序來取代順序應用程序。
??? 然而,這對于許多習慣于開發單線程應用的開發者來說是一個極大的挑戰。如果工程師使用的是串行的編程語言,如C語言,那么在進行多線程應用軟件的編寫時,需要專門的語義創建和管理線程,并且在線程安全方式下進行數據的傳送。
??? 相比之下,NI LabVIEW就非常適合于創建并行的多線程應用。首先,相比文本編程語言的自上而下的順序結構,由于LabVIEW是基于數據流的編程方式,其本身就是一種并行的編程結構;早在LabVIEW? 5.0時LabVIEW就支持多線程:在程序編寫完畢后,LabVIEW編譯器可以自動識別線程并創建線程到不同的任務和循環上,再由操作系統分配到不同的核上運行。
??? LabVIEW的未來版本還將針對多核技術提供更多特性:如可以將嵌入式實時應用自動地劃分為多個線程,并將它們映射到多個處理核之中,這也被稱為對稱多線程處理技術,從而使設計人員可以自動將均衡的任務量分配到各個核上;同時,工程師也可以根據自身需求手動設置線程運行在特定的核上,例如將那些對時間確定性要求苛刻的采集與控制任務放在單獨的核上運行,而將對確定性要求不高的界面響應、數據錄入等任務放在另外一個核上運行。
?? ?綜上所述,使用多核技術已經成為工程師開發大型復雜的測控系統的必要條件,而LabVIEW 8.5則可以讓用戶更方便和更直接地享受到多核給系統性能帶來的直線提升。
????????????????????????????? 功能增強的項目管理
??? 系統架構和程序設計是開發大型應用程序的核心,但是開發人員也需要一個載體能夠全面管理項目中的所有資源。前文已經提到,LabVIEW 8中首次引入的LabVIEW項目極大地幫助了編程人員進行大型應用程序的開發,但是經驗豐富的LabVIEW程序員依然渴望更多更強的新功能以解決他們在開發過程中所遇到的挑戰。
?? ?以前,工程師在開發過程中會遇到下面兩個挑戰:首先,隨著應用程序大小的增長,使得查看和管理硬盤中所有與開發工程相關的文件變得愈加困難;其次,在多個程序版本存放在同一個本地硬盤時,在程序員未知的情況下,有時候VI會自動鏈接到不需要的或者舊版本的子VI中,這種情況被稱為交叉連接(cross-linking)。
??? 因此,為了響應開發者的要求,在LabVIEW8.5中針對項目管理增添了兩大新功能,從而解決了這兩大挑戰。
????????????????????? 同步LabVIEW項目文件夾至本地硬盤
?? ?對于那些熟悉LabVIEW項目的開發人員而言,當使用LabVIEW 8.5中的項目瀏覽器時會馬上發現一個明顯的變化:新增加了選項卡視圖(圖4)。開發者們通過項目選項卡,既可以使用以前版本的LabVIEW已經存在和熟悉的LabVIEW項目組件,也可以在新增的文件選項卡中交互式地查看和改變LabVIEW項目中所有文件的位置。
?
?
圖4 全新的選項卡視圖允許用戶自由選擇不同的瀏覽方式
??? 開發者從LabVIEW 8引入項目管理之后就一直希望能夠定義LabVIEW項目文件夾與硬盤文件夾之間更為明確的關系。因此,LabVIEW 8.5開始允許開發者同步LabVIEW項目文件夾至硬盤上的目錄,從而簡化了對同一應用程序的所有文件的管理。這里所說的“同步”是指這些新的LabVIEW項目文件夾將會基于它們相應的物理目錄中的內容而不斷地更新。
??? 這些自動同步的LabVIEW項目文件夾可以即時地反映開發者在硬盤中所進行的任何操作(包括添加、移動或刪除文件等)。但是,在使用自動同步的項目文件夾后,由于文件夾中的內容總是精確地匹配其物理目錄的結構,從而導致開發者不能脫離硬盤上的文件層次結構來對文件實現自定義的虛擬的組織活動。但是,在LabVIEW 8.5中,這樣的情況是不會發生的,因為用戶可以在同一個項目中同時使用自動同步的文件夾和虛擬文件夾,從而結合兩種方式以實現最大化的靈活性。
???????????????????????????????? 去除交叉連接現象
??? 為了更清晰地說明交叉連接是什么,先舉一個簡單的例子:如果開發者移動了硬盤上某個VI的路徑,那么在下次需要它時LabVIEW就必須搜索并重新連接倒那個丟失的VI。在某種情況下,LabVIEW可能會錯誤地連接到同一個代碼的早期版本或另一個分支,或者是具有同樣名稱的不同VI,從而導致不可預料的行為發生,這種情況是很難進行定位和調試的。LabVIEW 8.5提供了新的工具以幫助開發者防止交叉連接的發生。
??? 第一個工具就是新增的文件選項卡,利用文件選項卡,開發者可以直觀地確認存在于廢棄目錄中不必要的VI并且其他文件不會錯誤地包含在某個特定的LabVIEW項目中。其次,LabVIEW項目還提供了其他的警告和調試工具來幫助開發者了解和防止交叉連接。當LabVIEW檢測到一個可能的交叉連接情況時,它將會通過在LabVIEW項目中的VI名稱后面顯示“沖突”(Conflict)來警告開發人員(圖5)。這一信息意味著LabVIEW已檢測到在同一個LabVIEW項目中多于一個具有相同名稱的VI被調用。此時開發者就可以通過工具欄中的一個新對話框來解決這個沖突,它可以幫助開發者采取一種自上而下的方式來引用正確的文件。
?
?
圖5 LabVIEW 8.5去除交叉連接現象
?? ?LabVIEW一直積極響應使用者的反饋來實現持續的創新和發展,從而給予工程師和科學家們更完美的編程體驗。這次新增的項目管理功能則更進一步地使開發人員管理和組織項目資源變得更加簡便和安全。
??? 縱觀目前測試測控領域的發展趨勢,產品的功能集成化、協議的多樣化致使系統開發人員已經無法通過簡單的、單線程的程序來滿足要求,大型的應用系統開發成為了必然的發展趨勢。作為圖形化的編程開發平臺,全新的NI LabVIEW 8.5所提供的多種新特性幫助了工程師更有效地來進行系統的架構、開發以及管理,大大減少了開發時間和成本,成為測量測試和自動化開發平臺的不二之選。