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