NI LabVIEW是一類圖形化數(shù)據(jù)流編程環(huán)境。 使用LabVIEW中的數(shù)據(jù)流時,您能通過創(chuàng)建展現(xiàn)數(shù)據(jù)如何在函數(shù)(所知的虛擬儀器,或稱VI)間移動的程序框圖,界定代碼中的執(zhí)行流程。 然而,借助LabVIEW,您能夠在單一應(yīng)用程序中結(jié)合除了圖形數(shù)據(jù)流(G)之外的更多種類的編程方式。 利用這種靈活性來選用您中意的工具,從而創(chuàng)建算法并且解決各類工程問題。
定義編程方法
“編程方法”一詞囊括:不同的編程語言、運算模型、抽象級別、與現(xiàn)有代碼交互的方式、表示算法的途徑。 過去幾年,National Instruments在LabVIEW通信中加入多種接口和方法,以提供更多的編程方法。
您能編寫多種方法,并將其作為熟悉的G數(shù)據(jù)流語言導(dǎo)入相同的程序框圖。 LabVIEW編譯所有這些針對合適硬件對象的方式;這些硬件對象的范圍涵蓋:臺式計算機、實時操作系統(tǒng)、現(xiàn)場可編程門陣列(FPGA)、移動設(shè)備和嵌入式處理器(如:ARM)。
?
圖1. LabVIEW圖形化系統(tǒng)設(shè)計平臺提供諸多選擇。
深入了解獲得支持的對象和平臺。
發(fā)送并接收不同編程方法間的信息,可通過LabVIEW輕松實現(xiàn)。 數(shù)據(jù)???是將不同語言和計算模式黏連在一起的膠合劑。 信息和數(shù)據(jù)值能夠輕松地從自定義用戶界面(已知的前面板)、網(wǎng)絡(luò)接口、分析庫、數(shù)據(jù)庫和I/O,被傳送至使用G的不同語言或界面。
用G進(jìn)行的編程
當(dāng)NI在1986年引入LabVIEW 1.0時,數(shù)據(jù)流作為基本的LabVIEW編程方式是原創(chuàng)而且惟一的編程途徑。不同于順序類型的編程,數(shù)據(jù)流程序里的數(shù)據(jù)流動反映了操作執(zhí)行的時間與順序。 在C和C++等順序語言里,源代碼中的命令順序(相對于數(shù)據(jù)的可用性)決定著執(zhí)行時的順序。
G依照數(shù)據(jù)流模式運行函數(shù)與基元,或稱VI。當(dāng)所有輸入俱在時,程序框圖函數(shù)或節(jié)點運行。 節(jié)點運行結(jié)束時,將數(shù)據(jù)提供給輸出接線端并將輸出數(shù)據(jù)傳送給數(shù)據(jù)流路徑中的下一個節(jié)點。
圖2. 在該模型中,A和B被加入,結(jié)果乘以C并得以顯示。
圖2中的圖形化代碼表現(xiàn)了數(shù)學(xué)公式如何能被G代表。該框圖包含2個節(jié)點(1個加節(jié)點和1個乘節(jié)點),并具有3個數(shù)值輸入(A、B和C)。 首先,加入A和B。 在提供兩個輸入前,乘節(jié)點一直不執(zhí)行,因此它仰賴加節(jié)點完成并提供A + B的結(jié)果;然后,它才計算結(jié)果——(A+B)*C。
雖然有可能明確界定G中的變量,G代碼和其他語言之間最明顯的一處差異在于:功能上等同于傳統(tǒng)變量的是一條連線。 連線沒有在函數(shù)間傳遞變量,而界定著接納值的函數(shù)。 其他熟知的編程概念(如:While循環(huán)、For循環(huán)、條件代碼、回調(diào)函數(shù)和數(shù)字邏輯)都是G數(shù)據(jù)流編程語言的部件。
更深入了解圖形化編程。
使用基于配置的編程
2003年,National Instruments發(fā)布了NI LabVIEW 7 Express,它具備Express VI——一種用來進(jìn)一步簡化常用編程任務(wù)和算法創(chuàng)建的新技術(shù)。 不同于傳統(tǒng)的VI,Express VI通過提供基于配置的編程方式,對任務(wù)加以抽象。
?
圖3. 這里有出現(xiàn)在選板上的Express VI,被率先放在程序框圖上的1個Express VI,用圖標(biāo)代表的1個Express VI。
LabVIEW用大型藍(lán)色圖標(biāo)區(qū)分Express VI。 當(dāng)您將1個Express VI放在程序框圖上時,會出現(xiàn)1個對話框以便您配置函數(shù)的執(zhí)行方式。 完成配置后,LabVIEW開發(fā)環(huán)境為您編寫必要的代碼(用Express VI代表)。 您能查看并修改該代碼,而且您只需雙擊Express VI圖標(biāo)就能修改Express VI配置。
將讀取實際信號的任務(wù)納入軟件考慮范疇,用于分析。 憑借針對數(shù)千類儀器的自帶驅(qū)動與支持,LabVIEW的設(shè)計使得與硬件I/O集成簡單輕松。 然而,即便是一項需要一批VI執(zhí)行的任務(wù)也能被簡化為單個Express VI。 DAQ Assistance Express VI可促進(jìn)您選擇自己希望往返傳送和接受I/O的通道,并配置參數(shù)(如:采樣率、終端配置、標(biāo)尺、觸發(fā)和同步)。 保存配置前,您還能在界面中預(yù)覽數(shù)據(jù)。
?
圖4. DAQ Assistant Express VI令配置定時與通道參數(shù)異常簡單。
?
?
圖5. DAQ Assistant Express VI功能上等同于G代碼。
Express VI不提供與VI一樣的低層輸入控件,這就是您為何更喜歡用VI完整編寫代碼的原因。有興趣學(xué)習(xí)低層結(jié)構(gòu)的新用戶,可通過右單擊Express VI并選擇打開前面板(Open Front Panel),輕松地將Express VI轉(zhuǎn)化為內(nèi)部的G代碼。 普通VI能夠完成Express VI做的任何事。LabVIEW專業(yè)版開發(fā)系統(tǒng)還納入1項工具來創(chuàng)建自定義Express VI。
結(jié)合.m文件格式
憑借LabVIEW MathScript RT模塊,您能導(dǎo)入、編輯并且執(zhí)行.m文件,一種針對數(shù)值分析、信號處理和高等數(shù)學(xué)的通用編程方式。 通過將它們與配有G的VI結(jié)合,您能將這些腳本構(gòu)建至運行在臺式計算機以及確定性實時硬件上的獨立可執(zhí)行程序。
結(jié)合LabVIEW中的MathScript有多種方式。 對于幫助下載、保存、開發(fā)并執(zhí)行.m文件腳本的交互界面,您能使用MathScript窗口,如圖6所示。
?
圖6. 利用MathScript窗口,交互式開發(fā)文本算法。
將.m文件腳本部署為LabVIEW應(yīng)用程序的部件并結(jié)合圖形化與文本編程,可用MathScript節(jié)點。 借助MathScript節(jié)點,如圖7中顯示的程序框圖上的藍(lán)色結(jié)構(gòu),您能夠通過LabVIEW圖形化程序運行.m文件腳本。 您能使用MathScript節(jié)點將文本算法插入VI,然后使用LabVIEW圖形化編程環(huán)境并通過添加旋鈕、滑動桿、按鈕、圖表和其他用戶輸入控件與顯示控件來裝配文本。 MathScript節(jié)點可利用用戶自定義函數(shù);這些函數(shù)既能接受應(yīng)用程序的其他部分定義,也能從磁盤加載。
?
圖7. MathScript節(jié)點能夠輕松連接G編程與.m腳本。
LabVIEW MathScript RT模塊無需更多第三方軟件,就將自帶的.m文件腳本支持加入LabVIEW。 因為您能使用MathScript節(jié)點納入并且運行.m腳本,所以您能使用流行的編程方式,同時仍舊利用LabVIEW與I/O的緊密集成、交互式用戶界面和此處描述的其他方式。
借助面向?qū)ο箝_發(fā)
面向?qū)ο笫且活惪缭綇V大編程語言的流行編程方式。 它允許各類相似卻不同的項目,被代表為軟件中的一類對象。 類的定義包括:各個對象的特性和類能夠完成的行為,通常將他們稱為屬性和方法。 類能夠擁有繼承這些屬性與動作的子類,而您能添加更多特征或者重寫現(xiàn)有類。
?
圖8. 面向?qū)ο蟛捎靡粋€類(例如這一個)及其相關(guān)屬性與方式VI。
LabVIEW開發(fā)者如果更適宜面向?qū)ο蟮木幊谭绞?,可在LabVIEW 8.2或更高版本中定義一個類。 在LabVIEW中采用類的首要優(yōu)勢是:
封裝: 封裝就是將數(shù)據(jù)和方法合并到一個類中,類中數(shù)據(jù)僅可由類成員VI訪問。通過封裝可創(chuàng)建模塊化代碼塊,以便輕松更新或修改代碼而不影響應(yīng)用程序中其他部分的代碼。
繼承: 通過“繼承”可在現(xiàn)有類的基礎(chǔ)上創(chuàng)建新類。 若創(chuàng)建一個新的LabVIEW類并將它設(shè)置為繼承另一個類的數(shù)據(jù)及成員VI,這個新類可使用它繼承的類中“公共”及“保護(hù)”型的成員VI。 這個新類還可添加自己的數(shù)據(jù)和成員VI以豐富其功能
動態(tài)分配: 有時也可在類層次結(jié)構(gòu)的多個VI中定義同名的方法。 這些方法稱為動態(tài)分配方法,因為直到運行才可確定LabVIEW調(diào)用的是哪一個VI。
這些面向?qū)ο蟮奶卣鲝娀僮?,使得代碼更加可讀、可擴(kuò)展并且限制訪問明確獲得準(zhǔn)許的VI中的信息。 這種開發(fā)方式是另一類采用G來代表算法與操作的途徑,因此讓您能夠靈活選擇您更加適宜也是最適合應(yīng)用的設(shè)計與方法。
建模和仿真程序框圖
如果您在設(shè)計一類能夠被微分方程描述的復(fù)雜系統(tǒng),在軟件中進(jìn)行物理系統(tǒng)的仿真和建模是一種流行方式。 借助它,您能夠分析模型從而了解動態(tài)系統(tǒng)的特征并且創(chuàng)建能夠?qū)崿F(xiàn)理想行為的控制器。
圖9中的控制和仿真循環(huán)實現(xiàn)了微分方程根據(jù)常微分求解的確定性執(zhí)行——其中許多都存在于LabVIEW中。 這種編程方式采用一種看起來酷似G、但作為信號流被更好表達(dá)的數(shù)據(jù)流。 如圖9所示,您能夠?qū)⒒谀P偷木幊谭绞脚c其他方式(包括:G和MathScript節(jié)點)結(jié)合。
?
圖9. 這個仿真程序框圖展現(xiàn)了:信號流、硬件I/O和MathScript節(jié)點。
控制和仿真循環(huán)支持的函數(shù),有助您將離散線性時間不變(LTI)系統(tǒng)模型部署至NI實時硬件。 您能使用這些函數(shù),在傳遞函數(shù)、零點—極點—增益或狀態(tài)空間模型中,界定離散控制器模型。 通過時間和頻率分析工具(如:時間階躍響應(yīng)或伯德圖),您能交互式地分析開環(huán)和閉環(huán)行為。 您還能采用內(nèi)置工具轉(zhuǎn)換在MathWorks, Inc. Simulink?軟件中開發(fā)的模型,以搭配LabVIEW。多虧LabVIEW Real-Time模塊,這些動態(tài)系統(tǒng)無需任何中間步驟就能被部署至硬件目標(biāo),這非常適合快速控制原型和硬件在環(huán)應(yīng)用。
搭配狀態(tài)圖的文檔編制
NI LabVIEW狀態(tài)圖模塊提供狀態(tài)圖;狀態(tài)圖屬于高層設(shè)計文檔,有助您用圖解釋系統(tǒng)功能。 結(jié)合LabVIEW圖形化數(shù)據(jù)流來定義各狀態(tài)的行為時,狀態(tài)圖(statechart diagram)可作為可執(zhí)行規(guī)范運行。 狀態(tài)圖通過擴(kuò)展經(jīng)典狀態(tài)圖加入并發(fā)(concurrency)與層次結(jié)構(gòu),以便您能表述包含并行任務(wù)的系統(tǒng)。 此外,狀態(tài)圖還納入一種正規(guī)方式來響應(yīng)事件,從而理想地描述反應(yīng)系統(tǒng)。 這特別適合設(shè)計嵌入式設(shè)備、控制系統(tǒng)和復(fù)雜的用戶界面。
?
圖10. LabVIEW狀態(tài)圖模塊采用狀態(tài)圖來圖解系統(tǒng)功能。
您往往可以創(chuàng)建高層程序框圖來闡釋應(yīng)用程序中不同系統(tǒng)和子系統(tǒng)之間的工作關(guān)系。 例如,應(yīng)用程序可能具有相互獨立的進(jìn)程,各進(jìn)程負(fù)責(zé)數(shù)據(jù)采集、數(shù)據(jù)輸出、網(wǎng)絡(luò)通信、數(shù)據(jù)記錄和更新用戶界面等任務(wù)。 這些通常被用來斷定在不同系統(tǒng)上提供并共享哪些信息,以及指定系統(tǒng)執(zhí)行次序的邏輯。 您能輕松將這些程序框圖轉(zhuǎn)譯為LabVIEW狀態(tài)圖表程序框圖,從而在軟件中輕松開發(fā)實際系統(tǒng)。
狀態(tài)圖運算模型能夠繁復(fù)地進(jìn)行復(fù)雜的應(yīng)用開發(fā)。 狀態(tài)圖特別適用于事件響應(yīng)方面的應(yīng)用(如復(fù)雜的用戶界面等),和用于實現(xiàn)動態(tài)系統(tǒng)控制器、機器控制邏輯和數(shù)字通信協(xié)議的高級狀態(tài)機。
了解NI LabVIEW狀態(tài)圖模塊。
編寫面向FPGA終端的VHDL
您能采用LabVIEW FPGA模塊來編寫運行在采用G的FPGA上的代碼。然而,和使用之前的編程方式一樣,您可能希望復(fù)用現(xiàn)有代碼或者靈活選擇執(zhí)行方式。 大多數(shù)FPGA在采用VHDL進(jìn)行編程,VHDL是一種基于文本的數(shù)據(jù)流描述語言。 借助組件級IP (CLIP)節(jié)點,無需重新在圖形化語言中編寫已有的VHDL IP即可將VHDL導(dǎo)入VI。
CLIP節(jié)點提供的框架,可將外部FPGA IP導(dǎo)入LabVIEW FPGA模塊。 CLIP XML文件通常用來將現(xiàn)有IP接口映射至能夠在VI程序框圖采用的值,但LabVIEW包含一個可自動創(chuàng)建該接口的CLIP導(dǎo)入向?qū)А?它列示了LabVIEW項目中方便您拖曳至程序框圖并在FPGA上使用的IP的輸入與輸出,如圖11所示。
?
圖11. 該LabVIEW狀態(tài)圖表程序框圖展現(xiàn)了CLIP節(jié)點。
由于NI將Xilinx FPGA和Xilinx工具鏈作為LabVIEW FPGA模塊的部件,您能輕松使用Xilinx內(nèi)核生成器(CORE Generator)來創(chuàng)建兼容的內(nèi)核。 您還能使用Xilinx嵌入式開發(fā)套件來創(chuàng)建各類軟性微處理器。 此外,許多第三方IP供應(yīng)商可提供各類信號處理、總線解決方案或特定應(yīng)用的內(nèi)核。
更深入了解NI LabVIEW FGPA模塊和CLIP節(jié)點。?
結(jié)合基于C的語法
您能夠在多種技術(shù)中擇取一種,將接受順序執(zhí)行的文本語法納入VI程序框圖。 公式節(jié)點提供一類在線結(jié)構(gòu),支持一種類似傳統(tǒng)C編程的語法。 類似C,每行以分號終止而且變量必須具有一個指定的范圍。
內(nèi)嵌C節(jié)點類似于針對底層編程和頭文件的具備額外支持與功能的公式節(jié)點,省去了函數(shù)調(diào)用的開銷(overhead)。 您能采用針對各類C代碼的內(nèi)嵌C節(jié)點(包括:裝配指令),并且定義它語法上存在于C文件內(nèi)的波形括號之間。
內(nèi)嵌C節(jié)點只適合采用生成的C代碼的對象。 內(nèi)嵌C節(jié)點不支持Windows桌面對象。
連接構(gòu)建的程序集
若不將源代碼導(dǎo)入LabVIEW程序框圖,您可能希望在其他環(huán)境中調(diào)入構(gòu)建的程序集或者復(fù)用構(gòu)建的LabVIEW應(yīng)用程序。 在LabVIEW中編寫的應(yīng)用程序,能夠輕松復(fù)用通過其他語言或編程方式開發(fā)的現(xiàn)有代碼與算法。 此外,您或許需要通過LabVIEW代碼(這包括上面討論過的編程方式)構(gòu)建匯編,從而接受不同環(huán)境的調(diào)用。
LabVIEW提供針對兩種情形的多項解決方案。 LabVIEW能夠調(diào)用DLL或共享庫里的外部代碼或者通過ActiveX或.NET接口顯露的代碼。 此外,您能通過構(gòu)建LabVIEW DLL或共享庫,或通???采用ActiveX,復(fù)用其他編程語言中的LabVIEW代碼。
如果您具備現(xiàn)有C代碼并且需要在LabVIEW中加以復(fù)用,有一項技術(shù)可用來將代碼構(gòu)建為DLL并且采用“調(diào)用庫函數(shù)節(jié)點”對其進(jìn)行調(diào)用。 事實上,基于C應(yīng)用程序架構(gòu),您能采用簡單的LabVIEW并行編程來并行運行兩個或更多現(xiàn)有的C例程,舍棄了基于C的多線程編程的更多復(fù)雜性。 為了輕松導(dǎo)入外部庫,LabVIEW納入“導(dǎo)入共享庫向?qū)А?,從而自動?chuàng)建或更新針對Windows .dll文件、Mac OS .framework文件或Linux .so文件函數(shù)的LabVIEW包裝VI項目庫。
還可以結(jié)合System Exec.vi連接命令行;它提供特定操作系統(tǒng)的界面,用以調(diào)用可執(zhí)行文件和其他內(nèi)置庫。
利用靈活式編程
將多種編程方法結(jié)合在單一的開發(fā)環(huán)境中,就能復(fù)用由其他語言開發(fā)的現(xiàn)有代碼和算法。 還可以搭配低層代碼來結(jié)合簡單的高度抽象,以便更好地顯示和控制應(yīng)用程序。 這些抽象層用簡單易讀的形式代表極為復(fù)雜的操作,卻能接受對應(yīng)用行為和硬件接口進(jìn)行低層控制的函數(shù)的耦合。 憑借與I/O的緊密集成,您能將這些方式與實際信號結(jié)合從而利用最新的硬件技術(shù),如:多核CPU、FPGA和嵌入式處理器。
可通過多種方式解決各類問題——LabVIEW還能讓您靈活選擇多種編程方式。
Simulink? 是MathWorks, Inc.公司的注冊商標(biāo)。
ARM, Keil與 μVision是ARM有限責(zé)任公司或其子公司的商標(biāo)或注冊商標(biāo)。
1 并非所有的編程方式都適合列示的對象,取決于實際資源和特征支持。
評論
查看更多