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