《電子技術(shù)應用》
您所在的位置:首頁 > 測試測量 > 業(yè)界動態(tài) > 基于LabVIEW的實時網(wǎng)絡接口開發(fā)

基于LabVIEW的實時網(wǎng)絡接口開發(fā)

2008-11-28
作者:胡小江, 錢志博

??? 摘? 要: 以VMIC組成的實時網(wǎng)絡為基礎(chǔ)開發(fā)了基于LabVIEW環(huán)境的實時網(wǎng)絡接口" title="網(wǎng)絡接口">網(wǎng)絡接口。?

??? 關(guān)鍵詞: LabVIEW; 實時網(wǎng)絡; VMIC接口; 半實物仿真系統(tǒng)" title="仿真系統(tǒng)">仿真系統(tǒng)?

?

??? 在半實物仿真系統(tǒng)中需要實時地操作數(shù)據(jù)和分析數(shù)據(jù),并在此基礎(chǔ)上作出相應的控制。由于LabVIEW具有與其他各種儀器的良好連接性、強大的數(shù)據(jù)采集功能、直觀的基于數(shù)據(jù)流的圖形化編程界面、良好的可擴展性以及整體功能的完整性,因而已經(jīng)被廣泛應用于仿真領(lǐng)域。本文提出一種基于LabVIEW的實時網(wǎng)絡接口的設計方法,該方法將LabVIEW和VMIC實時網(wǎng)絡系統(tǒng)結(jié)合起來實現(xiàn)實時網(wǎng)絡的接口,并將其應用于某型號導彈的半實物仿真系統(tǒng)中。?

1 LabVIEW的特點?

??? LabVIEW是NI公司針對目前復雜的自動測試、高度自動化控制所提供的一種功能強大、成本低廉、系統(tǒng)靈活的新一代虛擬儀器。LabVIEW以先進的計算機總線技術(shù)和虛擬儀器技術(shù)為核心,代表了今后電子測控技術(shù)的發(fā)展方向。目前,LabVIEW越來越多地應用于測試和控制領(lǐng)域。在硬件方面,LabVIEW提供了開發(fā)系統(tǒng)的最佳平臺,它支持VXI/PXI/USB/IEEE 1394等各種先進的測試總線;在軟件方面,LabVIEW支持VISA、SCPI、IVI、DataSocket等各種虛擬儀器軟件標準,而且LabVIEW本身已經(jīng)成為圖形化編程語言事實上的工業(yè)標準。由于LabVIEW作為虛擬儀器開發(fā)工具在數(shù)據(jù)采集和界面控制方面具有明顯的優(yōu)勢,所以將其應用于半實物仿真非常有利于系統(tǒng)的快速開發(fā)。?

2 VMIC實時網(wǎng)絡原理?

??? 由于以太網(wǎng)傳輸協(xié)議開銷的不確定性,很難滿足大型復雜系統(tǒng)的半實物仿真的需要。目前,共享內(nèi)存光纖網(wǎng)絡采用了先進特殊的技術(shù),具備了很強的支持分布實時系統(tǒng)的數(shù)據(jù)傳輸能力。在每個需要實時通訊的節(jié)點上插入共享內(nèi)存網(wǎng)卡(節(jié)點卡),每塊節(jié)點卡都有自己獨立的局部內(nèi)存,它通過局部內(nèi)存映射" title="內(nèi)存映射">內(nèi)存映射將網(wǎng)卡上的局部內(nèi)存映射到主機內(nèi)存,用戶讀寫網(wǎng)卡上的數(shù)據(jù)就如同讀寫主機內(nèi)存上的數(shù)據(jù)一樣快速方便。另外,每塊共享內(nèi)存網(wǎng)卡又通過網(wǎng)絡內(nèi)存映射,將分布節(jié)點卡上的局部內(nèi)存映射到一個虛擬的全局內(nèi)存,即每個節(jié)點在寫入本地節(jié)點卡的數(shù)據(jù)同時也寫入所有其他節(jié)點卡的內(nèi)存。這樣,用戶對本地節(jié)點內(nèi)存的讀寫相當于對全局內(nèi)存進行讀寫,而這個全局內(nèi)存是所有分布節(jié)點都可見共享的,從而實現(xiàn)分布節(jié)點間的數(shù)據(jù)通訊。通過這種方式,所有的節(jié)點能透明并確定地傳送中斷、消息或者數(shù)據(jù)塊到其他的節(jié)點。其結(jié)構(gòu)原理圖如圖1所示。?

?

?

??? 由于共享內(nèi)存網(wǎng)絡是一個實時的、基于內(nèi)存的網(wǎng)絡系統(tǒng),其所有的工作都由硬件完成,沒有軟件的開銷,再加上采用光纖傳輸介質(zhì),因此可以達到數(shù)十兆字節(jié)的數(shù)據(jù)傳輸率和百納秒級的數(shù)據(jù)傳輸延遲。更重要的是這種網(wǎng)絡的傳輸延遲是確定和可以預期的,這是傳統(tǒng)的以太網(wǎng)絡技術(shù)所難以達到的。正是由于共享內(nèi)存實時網(wǎng)絡的這些特點,使得它成為半實物仿真實時計算機網(wǎng)絡的首選方案。表1列出了VMIPCI-5565型號的共享內(nèi)存網(wǎng)卡的技術(shù)性能指標。

?

?

3 基于LabVIEW的實時網(wǎng)絡接口設計方案 ?

??? 由于VMIC5565型號的驅(qū)動程序沒有提供LabVIEW的版本,而是提供了C語言版的API接口函數(shù)" title="接口函數(shù)">接口函數(shù),因此必須利用LabVIEW的外部接口來實現(xiàn)實時網(wǎng)絡接口的設計。其中最為常用的方法有兩種,一種是通過CLF(Call Library Function)節(jié)點調(diào)用DLL(Dynamic Link Library)來完成實時網(wǎng)絡接口的設計。這種方法對于提供DLL的外部接口來說比較方便,但VMIC只是提供了C語言版的API接口函數(shù),所以必須自己動手將VMIC提供的API接口函數(shù)轉(zhuǎn)換成為DLL。這種方法應用起來比較方便,但考慮到實時網(wǎng)絡的軟件實時性" title="實時性">實時性,調(diào)用DLL會增加一定的系統(tǒng)開銷。因此,對于實時要求比較嚴格的半實物仿真系統(tǒng),這種方法不適用。LabVIEW提供的另外一種更為實用的方法是CIN(Code Interface Node)。利用CIN節(jié)點,可以將VMIC提供的C語言接口函數(shù)編譯成LabVIEW所能識別的格式后與此節(jié)點相連,當CIN節(jié)點執(zhí)行時,LabVIEW將自動調(diào)用與此相連的C語言接口函數(shù),并向CIN傳遞特定的數(shù)據(jù)結(jié)構(gòu)。由于LabVIEW中的數(shù)據(jù)存儲格式遵循了C語言中的數(shù)據(jù)存儲格式,并且二者完全相同,所以在半實物仿真系統(tǒng)中,使用CIN可以獲得較高的程序效率。下面以VMIC5565實時網(wǎng)卡寫入浮點數(shù)據(jù)的函數(shù)rfm_write_floats為例,說明利用CIN節(jié)點實現(xiàn)實時網(wǎng)絡接口的設計方法。其他網(wǎng)絡接口的設計方法和此類似。?

??? rfm_write_floats函數(shù)原型為:double rfm_write_floats(int n, double* data,unsigned int addr)。該函數(shù)的功能是:從實時網(wǎng)指定地址addr,寫n個浮點數(shù)到實時網(wǎng)中。其中,要寫入實時網(wǎng)絡的數(shù)據(jù)放在緩沖區(qū)data中。如果返回值大于0,則執(zhí)行正確,否則錯誤。創(chuàng)建對應的CIN節(jié)點的過程如下文所述。?

??? 首先在LabVIEW中創(chuàng)建一個空的CIN節(jié)點,按照rfm_write_floats函數(shù)原型創(chuàng)建輸入?yún)?shù)和輸出參數(shù)。創(chuàng)建完成的空CIN節(jié)點如圖2所示。?

?

?

??? 在創(chuàng)建完空CIN節(jié)點后,接下來需要為其裝載有用的lsb文件。在CIN節(jié)點單擊右鍵,在彈出菜單中選擇Creat.c File,創(chuà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é)點的殼文件,然后可以將rfm_write_floats函數(shù)的源代碼復制到/* Insert code here */處,完成具體函數(shù)的功能。值得注意的是:由于LabVIEW所傳遞給CIN節(jié)點的參數(shù)實際上是其地址值,因此在rfm_write_floats函數(shù)中需要將輸入?yún)?shù)n和addr的參數(shù)值進行相應的轉(zhuǎn)換。源文件的創(chuàng)建已經(jīng)完成,接下來的主要工作就是編譯rfm_write_floats.c文件生成對應的lsb文件。可以借助Visual C++來完成這個工作。?

??? 在Visual C++中創(chuàng)建一個新的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,這樣就完成了相對應的DLL文件編譯配置。至此需要利用LabVIEW的CINTools工具中的lvsbutil函數(shù)將Visual C++生成的DLL文件轉(zhuǎn)換成為CIN節(jié)點能夠使用的lsb格式文件。選擇“Custom Build”頁,在Commands欄中鍵入如下格式代碼:?

??? lvsbtil“$(TargetName)-d” $(WkspDir)$(OutDir)?

??? 在Outputs欄中鍵入如下格式代碼:?

??? $(OutDir)$( TargetName).lsb?

??? 在這里必須嚴格遵守以上的命令格式。實際應用中可根據(jù)具體的路徑和文件名對cintools文件夾路徑、TargetName、WkspDir和OutDir進行替換。最后,編譯整個DLL工程,生成CIN節(jié)點所需要的lsb格式的文件。再加載lsb格式文件,在LabVIEW中選擇創(chuàng)建的CIN節(jié)點,單擊右鍵選擇Load Code Resource菜單,在隨后彈出的文件對話框中選擇rfm_write_floats.lsb文件。此時便可以在LabVIEW中通過CIN節(jié)點來控制實時網(wǎng)絡的寫入操作。類似地可以將vmic_open()、vmic_close()、rfm_read_floats(int n, double* data,unsigned int addr)等函數(shù)創(chuàng)建為相對應的CIN節(jié)點來實現(xiàn)相應的實時網(wǎng)絡的操作。?

??? 本文所開發(fā)的實時網(wǎng)絡接口可以很方便地應用在以LabVIEW系統(tǒng)為平臺的半實物仿真系統(tǒng)中。圖3為在半實物仿真系統(tǒng)中通過實時網(wǎng)絡控制三軸轉(zhuǎn)臺的前面板圖。相比較用傳統(tǒng)的局域網(wǎng)為通訊方式的仿真系統(tǒng),其實時性有了很高的提升,在一定程度上可以認為在網(wǎng)絡傳輸方面達到了實時性的要求。此外,因為整個半實物仿真系統(tǒng)采用LabVIEW為平臺,本文所開發(fā)的實時網(wǎng)絡接口是模塊化的,可以和平臺無縫連接,可以提高系統(tǒng)的開發(fā)效率。?

?

?

??? 本文介紹的利用CIN節(jié)點設計實時網(wǎng)絡接口的方法適用于實時性要求比較高的系統(tǒng),對于實時性要求不高的系統(tǒng)可以考慮采用CLF節(jié)點來完成。此外,由于半實物仿真系統(tǒng)對軟硬件的實時性要求都比較高,在網(wǎng)絡傳輸方面可以通過實時網(wǎng)絡來完成各種設備的控制。但在軟件方面如果利用LabVIEW信號處理模塊會產(chǎn)生比較大的延時,所以可以考慮利用實時處理模塊包或者是利用其逐點分析庫來完成信號處理模塊。?

參考文獻?

[1] VMIC.VMIPCI-5565技術(shù)手冊[M].2005.?

[2] 劉君華.基于LabVIEW的虛擬儀器設計[M].北京:電子工業(yè)出版社,2003.?

[3] NI Corp. Code Interface Reference Manual[M].2003.
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。