??? 摘? 要: 以VMIC組成的實時網絡為基礎開發了基于LabVIEW環境的實時網絡接口" title="網絡接口">網絡接口。?
??? 關鍵詞: LabVIEW; 實時網絡; VMIC接口; 半實物仿真系統" title="仿真系統">仿真系統?
?
??? 在半實物仿真系統中需要實時地操作數據和分析數據,并在此基礎上作出相應的控制。由于LabVIEW具有與其他各種儀器的良好連接性、強大的數據采集功能、直觀的基于數據流的圖形化編程界面、良好的可擴展性以及整體功能的完整性,因而已經被廣泛應用于仿真領域。本文提出一種基于LabVIEW的實時網絡接口的設計方法,該方法將LabVIEW和VMIC實時網絡系統結合起來實現實時網絡的接口,并將其應用于某型號導彈的半實物仿真系統中。?
1 LabVIEW的特點?
??? LabVIEW是NI公司針對目前復雜的自動測試、高度自動化控制所提供的一種功能強大、成本低廉、系統靈活的新一代虛擬儀器。LabVIEW以先進的計算機總線技術和虛擬儀器技術為核心,代表了今后電子測控技術的發展方向。目前,LabVIEW越來越多地應用于測試和控制領域。在硬件方面,LabVIEW提供了開發系統的最佳平臺,它支持VXI/PXI/USB/IEEE 1394等各種先進的測試總線;在軟件方面,LabVIEW支持VISA、SCPI、IVI、DataSocket等各種虛擬儀器軟件標準,而且LabVIEW本身已經成為圖形化編程語言事實上的工業標準。由于LabVIEW作為虛擬儀器開發工具在數據采集和界面控制方面具有明顯的優勢,所以將其應用于半實物仿真非常有利于系統的快速開發。?
2 VMIC實時網絡原理?
??? 由于以太網傳輸協議開銷的不確定性,很難滿足大型復雜系統的半實物仿真的需要。目前,共享內存光纖網絡采用了先進特殊的技術,具備了很強的支持分布實時系統的數據傳輸能力。在每個需要實時通訊的節點上插入共享內存網卡(節點卡),每塊節點卡都有自己獨立的局部內存,它通過局部內存映射" title="內存映射">內存映射將網卡上的局部內存映射到主機內存,用戶讀寫網卡上的數據就如同讀寫主機內存上的數據一樣快速方便。另外,每塊共享內存網卡又通過網絡內存映射,將分布節點卡上的局部內存映射到一個虛擬的全局內存,即每個節點在寫入本地節點卡的數據同時也寫入所有其他節點卡的內存。這樣,用戶對本地節點內存的讀寫相當于對全局內存進行讀寫,而這個全局內存是所有分布節點都可見共享的,從而實現分布節點間的數據通訊。通過這種方式,所有的節點能透明并確定地傳送中斷、消息或者數據塊到其他的節點。其結構原理圖如圖1所示。?
?
?
??? 由于共享內存網絡是一個實時的、基于內存的網絡系統,其所有的工作都由硬件完成,沒有軟件的開銷,再加上采用光纖傳輸介質,因此可以達到數十兆字節的數據傳輸率和百納秒級的數據傳輸延遲。更重要的是這種網絡的傳輸延遲是確定和可以預期的,這是傳統的以太網絡技術所難以達到的。正是由于共享內存實時網絡的這些特點,使得它成為半實物仿真實時計算機網絡的首選方案。表1列出了VMIPCI-5565型號的共享內存網卡的技術性能指標。
?
?
3 基于LabVIEW的實時網絡接口設計方案 ?
??? 由于VMIC5565型號的驅動程序沒有提供LabVIEW的版本,而是提供了C語言版的API接口函數" title="接口函數">接口函數,因此必須利用LabVIEW的外部接口來實現實時網絡接口的設計。其中最為常用的方法有兩種,一種是通過CLF(Call Library Function)節點調用DLL(Dynamic Link Library)來完成實時網絡接口的設計。這種方法對于提供DLL的外部接口來說比較方便,但VMIC只是提供了C語言版的API接口函數,所以必須自己動手將VMIC提供的API接口函數轉換成為DLL。這種方法應用起來比較方便,但考慮到實時網絡的軟件實時性" title="實時性">實時性,調用DLL會增加一定的系統開銷。因此,對于實時要求比較嚴格的半實物仿真系統,這種方法不適用。LabVIEW提供的另外一種更為實用的方法是CIN(Code Interface Node)。利用CIN節點,可以將VMIC提供的C語言接口函數編譯成LabVIEW所能識別的格式后與此節點相連,當CIN節點執行時,LabVIEW將自動調用與此相連的C語言接口函數,并向CIN傳遞特定的數據結構。由于LabVIEW中的數據存儲格式遵循了C語言中的數據存儲格式,并且二者完全相同,所以在半實物仿真系統中,使用CIN可以獲得較高的程序效率。下面以VMIC5565實時網卡寫入浮點數據的函數rfm_write_floats為例,說明利用CIN節點實現實時網絡接口的設計方法。其他網絡接口的設計方法和此類似。?
??? rfm_write_floats函數原型為:double rfm_write_floats(int n, double* data,unsigned int addr)。該函數的功能是:從實時網指定地址addr,寫n個浮點數到實時網中。其中,要寫入實時網絡的數據放在緩沖區data中。如果返回值大于0,則執行正確,否則錯誤。創建對應的CIN節點的過程如下文所述。?
??? 首先在LabVIEW中創建一個空的CIN節點,按照rfm_write_floats函數原型創建輸入參數和輸出參數。創建完成的空CIN節點如圖2所示。?
?
?
??? 在創建完空CIN節點后,接下來需要為其裝載有用的lsb文件。在CIN節點單擊右鍵,在彈出菜單中選擇Creat.c File,創建相應的C文件,將其保存為rfm_write_floats.c。文件格式如下所示。?
??? /* CIN source file */?
??? #include 'extcode.h'?
??? MgErr CINRun(float64 *n, float64 *data, float64 *addr, float64 *result);?
??? MgErr CINRun(float64 *n, float64 *data, float64 *addr, float64 *result)?
??????? {?
??????? /* Insert code here */?
??????? return noErr;?
??????? }?
??? 這只是CIN節點的殼文件,然后可以將rfm_write_floats函數的源代碼復制到/* Insert code here */處,完成具體函數的功能。值得注意的是:由于LabVIEW所傳遞給CIN節點的參數實際上是其地址值,因此在rfm_write_floats函數中需要將輸入參數n和addr的參數值進行相應的轉換。源文件的創建已經完成,接下來的主要工作就是編譯rfm_write_floats.c文件生成對應的lsb文件。可以借助Visual C++來完成這個工作。?
??? 在Visual C++中創建一個新的DLL Project,將LabVIEW安裝目錄下的cintools文件夾中的cin.obj、labview.lib、lvsb.lib、lvsbmain.def和rfm_write_floats.c文件加入目前的DLL工程中。接下來需要配置Visual C++的編譯參數,在Visual C++主菜單中選擇Project|Setting,將“C/C++”頁選中,在Category欄中選擇Preprocessor,將cintools文件夾所在的路徑添加到Additional include directories文本框中。然后在Category欄中選擇Code Generation,在Use runtime library欄中選擇Multithreaded DLL,這樣就完成了相對應的DLL文件編譯配置。至此需要利用LabVIEW的CINTools工具中的lvsbutil函數將Visual C++生成的DLL文件轉換成為CIN節點能夠使用的lsb格式文件。選擇“Custom Build”頁,在Commands欄中鍵入如下格式代碼:?
???
??? 在Outputs欄中鍵入如下格式代碼:?
??? $(OutDir)$( TargetName).lsb?
??? 在這里必須嚴格遵守以上的命令格式。實際應用中可根據具體的路徑和文件名對cintools文件夾路徑、TargetName、WkspDir和OutDir進行替換。最后,編譯整個DLL工程,生成CIN節點所需要的lsb格式的文件。再加載lsb格式文件,在LabVIEW中選擇創建的CIN節點,單擊右鍵選擇Load Code Resource菜單,在隨后彈出的文件對話框中選擇rfm_write_floats.lsb文件。此時便可以在LabVIEW中通過CIN節點來控制實時網絡的寫入操作。類似地可以將vmic_open()、vmic_close()、rfm_read_floats(int n, double* data,unsigned int addr)等函數創建為相對應的CIN節點來實現相應的實時網絡的操作。?
??? 本文所開發的實時網絡接口可以很方便地應用在以LabVIEW系統為平臺的半實物仿真系統中。圖3為在半實物仿真系統中通過實時網絡控制三軸轉臺的前面板圖。相比較用傳統的局域網為通訊方式的仿真系統,其實時性有了很高的提升,在一定程度上可以認為在網絡傳輸方面達到了實時性的要求。此外,因為整個半實物仿真系統采用LabVIEW為平臺,本文所開發的實時網絡接口是模塊化的,可以和平臺無縫連接,可以提高系統的開發效率。?
?
?
??? 本文介紹的利用CIN節點設計實時網絡接口的方法適用于實時性要求比較高的系統,對于實時性要求不高的系統可以考慮采用CLF節點來完成。此外,由于半實物仿真系統對軟硬件的實時性要求都比較高,在網絡傳輸方面可以通過實時網絡來完成各種設備的控制。但在軟件方面如果利用LabVIEW信號處理模塊會產生比較大的延時,所以可以考慮利用實時處理模塊包或者是利用其逐點分析庫來完成信號處理模塊。?
參考文獻?
[1] VMIC.VMIPCI-5565技術手冊[M].2005.?
[2] 劉君華.基于LabVIEW的虛擬儀器設計[M].北京:電子工業出版社,2003.?
[3] NI Corp. Code Interface Reference Manual[M].2003.