韓旭 宋華軍 王躍宗
摘? 要: 針對現(xiàn)有VXI?11協(xié)議在Windows下的開發(fā)都過于簡單,功能嚴重不完整,且儀器在啟動VXI?11服務時需要引入很多代碼,操作過于繁瑣等問題,完成了VXI?11協(xié)議在Windows下完整功能的開發(fā)。在此基礎上,將所有的代碼封裝成庫的形式,并且給使用者提供一些必要的接口,讓使用者可以方便快捷地在儀器上啟動VXI?11服務而且更加靈活地使用該服務。實驗結果證明,該系統(tǒng)的服務端程序可以正確地響應客戶端的VXI?11協(xié)議,并且可以通過VXI?11協(xié)議穩(wěn)定地進行數(shù)據(jù)傳輸。
關鍵詞: VXI?11協(xié)議; 功能開發(fā); 代碼封裝; 網(wǎng)絡儀器; 端口映射; 儀器測試
中圖分類號: TN915.04?34; TP336? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? ? ? 文章編號: 1004?373X(2020)10?0086?03
Complete development of VXI?11 protocol and implementation of library
HAN Xu, SONG Huajun, WANG Yuezong
(School of Information and Control Engineering, China University Of Petroleum, Qingdao 266580, China)
Abstract: As the existing development of VXI?11 protocol is too simple in Windows, the function is severe incomplete, the instrument needs to introduce a lot of codes when starting the VXI?11 service, the operation is too cumbersome and other problems, the development of the complete function of VXI?11 protocol in Windows is completed. On this basis, all the codes are packaged as the form of the library, and users are provided with some necessary interfaces, so that users can convenient and efficient start the VXI?11 service on the instrument and use the service more flexible. The experimental results show that the server?side program of the system can respond to the client′s VXI?11 protocol correctly, and can transmit data stably through the VXI?11 protocol.
Keywords: VXI?11 protocol; functional development; code packaging; network instrument; port mapping; instrument test
0? 引? 言
LXI的推出為構建分布式測試系統(tǒng)提供了更好的手段,同時LXI儀器也成為測試儀器發(fā)展的新方向[1]。VXI?11協(xié)議是LXI儀器中的關鍵標準之一,為了在網(wǎng)絡中發(fā)現(xiàn)并使用LXI儀器,必須實現(xiàn)VXI?11協(xié)議開發(fā)[2]。近些年,VXI?11協(xié)議在Windows下的開發(fā)已經(jīng)取得了一定進展,但實現(xiàn)的功能還不夠完整,僅有部分功能函數(shù)可以使用。在現(xiàn)代科技迅速發(fā)展的情況下,這僅有的部分功能函數(shù)難以滿足人們對儀器功能日益增長的需求。此外,現(xiàn)有對VXI?11協(xié)議的開發(fā)使用起來十分不便,需要向儀器中引入大量代碼,這對一些沒有接觸源代碼的使用者很不友好。因此,VXI?11協(xié)議在Windows下完整功能的開發(fā)以及更為方便的使用成了人們的迫切需求。
1? 開發(fā)原理
RPC(Remote Procedure Call)即遠程過程調用,它是一種通過網(wǎng)絡從遠程計算機程序上請求服務,而不需要了解底層網(wǎng)絡技術的協(xié)議[3]。
VXI?11協(xié)議定義了三個通道:核心通道(Core Channel)、中止通道(Abort? Channel)和中斷通道(Interrupt Channel)[4]。三個通道函數(shù)的調用均采用RPC方式進行。VXI?11協(xié)議所包含的通道及通道調用方向關系如圖1所示。
VXI?11整體的通信包括三個部分:客戶端、服務器端和Portmap端口映射程序??蛻舳说淖饔檬歉鶕?jù)需要向服務器端發(fā)起遠程調用請求。服務器端在儀器上運行,對客戶端發(fā)送過來的請求進行解析處理并將解析結果返回客戶端。 Portmap端口映射程序功能是把RPC進程標識號轉化為Internet的端口號[5]。
下面從VXI?11協(xié)議完整功能的開發(fā)以及庫和接口的實現(xiàn)兩個方面進行介紹。
2? VXI?11協(xié)議完整功能的開發(fā)
2.1? VXI?11協(xié)議開發(fā)
VXI?11協(xié)議開發(fā)的流程如圖2所示。
首先在Linux系統(tǒng)下使用rpcgen命令(該命令可以生成RPC服務器程序的代碼,它的輸入為一個規(guī)格說明文件,輸出為一個C語言的源程序[6])生成VXI?11協(xié)議的框架,然后將其導出至Windows系統(tǒng)中。之后,在Windows系統(tǒng)里新建工程,將導出的文件加入工程并調試?,F(xiàn)有對VXI?11開發(fā)的功能函數(shù)僅有2~3個,本系統(tǒng)復現(xiàn)了現(xiàn)有的功能函數(shù)后,補充完善并實現(xiàn)所有的功能函數(shù)。
2.2? VXI?11協(xié)議功能函數(shù)
完整的VXI?11協(xié)議共17個功能函數(shù)。其中,核心通道定義了15個函數(shù),通過這15個函數(shù)完成對網(wǎng)絡儀器的大部分控制任務[7],比如向儀器寫入數(shù)據(jù)的寫入函數(shù)和可以讀取儀器狀態(tài)字的讀狀態(tài)字函數(shù);中止通道定義了1個函數(shù),用于儀器控制端對儀器優(yōu)先級較高或緊急的控制任務;中斷通道定義了1個函數(shù),用于儀器向控制器反饋信息。
在17個功能函數(shù)中,核心通道的讀取儀器函數(shù)最為復雜,下面以讀取儀器函數(shù)device_read的開發(fā)為例做介紹。
device_read函數(shù)用于將數(shù)據(jù)從儀器讀取到客戶端??蛻舳税l(fā)送的數(shù)據(jù)結構體代碼如下:
struct Device_ReadParms {
Device_Link lid;? ? ? ? ? ? ? ? ? ? ? ? ? //來自客戶端的鏈接ID
unsigned long requestSize;
//客戶端一次能接收的最大字節(jié)數(shù)
unsigned long io_timeout;? ? ? ? ? ? ? ? ?//I/O最多傳輸?shù)臅r間
unsigned long lock_timeout;? ? ? ? ? ? ?//最多等待解鎖的時間
Device_Flags flags;
char termChar;
//termChar和flags里的termchrset一起使用,當termchrset的字符
與termChar匹配時,該字符被傳輸
};
儀器返回給客戶端的數(shù)據(jù)結構體代碼如下:
struct Device_ReadResp {
Device_ErrorCode error;? ? ? ? ? ? ? //讀取失敗的原因標志位
long reason;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//讀取完成的原因標志位
opaque data<>;? ? ? ?//返回給客戶端的數(shù)據(jù)長度和具體數(shù)據(jù)
};
device_read函數(shù)的流程圖如圖3所示。
首先,客戶端發(fā)送讀請求后,運行服務器端的儀器會根據(jù)客戶端發(fā)送的lid判斷是否可以連接,若不能連接,則返回Error=4;若可以,則判斷其他連接是否有鎖定。如果沒有鎖定,判斷要讀的數(shù)據(jù)是否大于requestSize;若有鎖定,則等待Lock_timeout毫秒的時間。若在該時間內未解鎖,則返回Error=11、data.data_len=0;否則,判斷要讀的數(shù)據(jù)是否大于RequestSize,若小于則返回Reason=4,若大于則判斷返回的緩沖區(qū)是否已滿,如果已滿,則返回Reason=0,否則繼續(xù)讀。最后判斷是否讀完,若讀完則返回Reason=1,否則繼續(xù)判斷返回的緩沖區(qū)是否滿,直到讀完為止。
3? VXI?11庫及接口的實現(xiàn)
雖然已將VXI?11協(xié)議開發(fā)完整,但使用起來仍不方便,因此系統(tǒng)將完整開發(fā)的VXI?11協(xié)議封裝成庫,只需在儀器里調用這個庫就可以成功啟動VXI?11服務,使用起來更為便捷、快速。
此外,系統(tǒng)還提供眾多獨立封裝接口函數(shù),可滿足大多數(shù)儀器的需求,使用起來更為靈活。其包括1個服務啟動函數(shù)、1個可以完成緩沖區(qū)的初始化的緩沖初始函數(shù)和10個接口函數(shù)。在10個接口函數(shù)中,讀取數(shù)據(jù)接口較為復雜,以此函數(shù)為例對接口函數(shù)做介紹。
讀取數(shù)據(jù)接口定義如下:
typedef struct InputdData{char* DataVal; u_int DataLen;}
InputData;
typedef int (CALLBACK * RdDevice)(InputData data);
RdDevice funcRe;
void ReadVXI11Device(RdDevice func);
{
funcRe = func;
}
首先,定義InputData結構體和一個回調函數(shù)類型RdDevice,此回調函數(shù)的輸入?yún)?shù)類型為InputData型,返回參數(shù)為int型。通過RdDevice即可創(chuàng)建此類型的回調函數(shù)指針。ReadVXI11Device函數(shù)為庫的導出函數(shù),此函數(shù)功能是將一個庫外的回調函數(shù)指針傳遞給VXI?11庫內事先定義好的回調函數(shù)指針funcRe,庫內便可以通過指針funcRe調用到庫外的回調函數(shù)。
4? 測? 試
本文測試使用的是Keysight Connection Expert軟件。在儀器中調用該系統(tǒng)的VXI?11庫,通過簡單的幾個庫函數(shù)便可以成功啟動VXI?11服務。
以大數(shù)據(jù)傳輸為例,在對儀器進行訪問時,不可避免地要對大量數(shù)據(jù)進行傳輸,但由于受客戶端單次最大可接收字節(jié)數(shù)限制,通常無法通過單次操作完成傳輸,而使用本系統(tǒng)的庫,可通過一次讀操作直接完成傳輸,測試結果如圖4所示。
當儀器(服務器端)接收到測試軟件(客戶端)發(fā)出的測試命令后,會判斷要讀的數(shù)據(jù)是否大于測試軟件一次能接收的最大字節(jié)數(shù),測試軟件默認設置1 024 B,而本次要接收的數(shù)據(jù)為3 000 B,所以讀完1 024 B數(shù)據(jù)后,將繼續(xù)讀1 024 B數(shù)據(jù),直至3 000 B全部讀完,一共讀三次,然后將結果返回至測試軟件。從圖4可以看出,通過讀操作,客戶端成功接收了服務器端的3 000 B數(shù)據(jù)。
5? 結? 語
本文完成了VXI?11協(xié)議在Windows下完整功能的開發(fā),并且做成庫的形式,給使用者提供接口,解決了現(xiàn)有VXI?11協(xié)議在Windows下開發(fā)的功能還不夠完整、使用起來不方便等問題。經(jīng)驗證,功能開發(fā)完整的服務端程序可以正確響應客戶端的VXI?11協(xié)議,并且可以穩(wěn)定地傳輸數(shù)據(jù)。
參 考 文 獻
[1] 沈建飛.基于LXI的數(shù)據(jù)鏈端機自動測試系統(tǒng)[J].現(xiàn)代導航,2019,10(1):56?59.
[2] 尹洪偉,孫美美,張樹團.基于VXI?11的LXI儀器發(fā)現(xiàn)技術研究[J].電子設計工程,2011,19(18):18?20.
[3] 邱暢,李龍,鄭艷梅.基于LXI總線PCI接口的軟件設計[J].國外電子測量技術,2016,35(5):100?103.
[4] 翟龍軍,曲洪東,高山,等.基于DSP和VXI?11協(xié)議的LXI儀器控制與實現(xiàn)[J].計算機測量與控制,2014,22(11):3691?3693.
[5] 田丹丹.PortMap端口映射器[J].網(wǎng)絡安全和信息化,2017(2):161.
[6] 耿建平,鄧力.通過VXI?11協(xié)議控制LXI儀器[J].微計算機信息,2011,27(10):39?41.
[7] 龐新法.網(wǎng)絡化儀器儀表協(xié)議客戶端設計與實現(xiàn)[J].現(xiàn)代電子技術,2015,38(18):122?124.
[8] 李延峰,李宥謀,閆海卿,等.LXI網(wǎng)絡儀器后臺處理的設計與實現(xiàn)[J].計算機技術與發(fā)展,2019,29(3):159?163.
[9] 鄧茂林,姚靜波,解維奇.基于航天測試技術的LXI多功能接口板卡設計[J].現(xiàn)代電子技術,2014,37(21):94?97.
[10] 鄭馥薇,沈卓煒.基于數(shù)據(jù)分發(fā)服務的遠程過程調用系統(tǒng)[J].計算機應用,2018,38(z2):239?242.
[11] 張波,萬麗.基于端口映射NAT網(wǎng)絡方案分析與實施[J].軟件工程師,2015,18(3):12?13.