韓旭 宋華軍 王躍宗



摘? 要: 針對現有VXI?11協議在Windows下的開發都過于簡單,功能嚴重不完整,且儀器在啟動VXI?11服務時需要引入很多代碼,操作過于繁瑣等問題,完成了VXI?11協議在Windows下完整功能的開發。在此基礎上,將所有的代碼封裝成庫的形式,并且給使用者提供一些必要的接口,讓使用者可以方便快捷地在儀器上啟動VXI?11服務而且更加靈活地使用該服務。實驗結果證明,該系統的服務端程序可以正確地響應客戶端的VXI?11協議,并且可以通過VXI?11協議穩定地進行數據傳輸。
關鍵詞: VXI?11協議; 功能開發; 代碼封裝; 網絡儀器; 端口映射; 儀器測試
中圖分類號: 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的推出為構建分布式測試系統提供了更好的手段,同時LXI儀器也成為測試儀器發展的新方向[1]。VXI?11協議是LXI儀器中的關鍵標準之一,為了在網絡中發現并使用LXI儀器,必須實現VXI?11協議開發[2]。近些年,VXI?11協議在Windows下的開發已經取得了一定進展,但實現的功能還不夠完整,僅有部分功能函數可以使用。在現代科技迅速發展的情況下,這僅有的部分功能函數難以滿足人們對儀器功能日益增長的需求。此外,現有對VXI?11協議的開發使用起來十分不便,需要向儀器中引入大量代碼,這對一些沒有接觸源代碼的使用者很不友好。因此,VXI?11協議在Windows下完整功能的開發以及更為方便的使用成了人們的迫切需求。
1? 開發原理
RPC(Remote Procedure Call)即遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議[3]。
VXI?11協議定義了三個通道:核心通道(Core Channel)、中止通道(Abort? Channel)和中斷通道(Interrupt Channel)[4]。三個通道函數的調用均采用RPC方式進行。VXI?11協議所包含的通道及通道調用方向關系如圖1所示。
VXI?11整體的通信包括三個部分:客戶端、服務器端和Portmap端口映射程序。客戶端的作用是根據需要向服務器端發起遠程調用請求。服務器端在儀器上運行,對客戶端發送過來的請求進行解析處理并將解析結果返回客戶端。 Portmap端口映射程序功能是把RPC進程標識號轉化為Internet的端口號[5]。
下面從VXI?11協議完整功能的開發以及庫和接口的實現兩個方面進行介紹。
2? VXI?11協議完整功能的開發
2.1? VXI?11協議開發
VXI?11協議開發的流程如圖2所示。
首先在Linux系統下使用rpcgen命令(該命令可以生成RPC服務器程序的代碼,它的輸入為一個規格說明文件,輸出為一個C語言的源程序[6])生成VXI?11協議的框架,然后將其導出至Windows系統中。之后,在Windows系統里新建工程,將導出的文件加入工程并調試?,F有對VXI?11開發的功能函數僅有2~3個,本系統復現了現有的功能函數后,補充完善并實現所有的功能函數。
2.2? VXI?11協議功能函數
完整的VXI?11協議共17個功能函數。其中,核心通道定義了15個函數,通過這15個函數完成對網絡儀器的大部分控制任務[7],比如向儀器寫入數據的寫入函數和可以讀取儀器狀態字的讀狀態字函數;中止通道定義了1個函數,用于儀器控制端對儀器優先級較高或緊急的控制任務;中斷通道定義了1個函數,用于儀器向控制器反饋信息。
在17個功能函數中,核心通道的讀取儀器函數最為復雜,下面以讀取儀器函數device_read的開發為例做介紹。
device_read函數用于將數據從儀器讀取到客戶端??蛻舳税l送的數據結構體代碼如下:
struct Device_ReadParms {
Device_Link lid;? ? ? ? ? ? ? ? ? ? ? ? ? //來自客戶端的鏈接ID
unsigned long requestSize;
//客戶端一次能接收的最大字節數
unsigned long io_timeout;? ? ? ? ? ? ? ? ?//I/O最多傳輸的時間
unsigned long lock_timeout;? ? ? ? ? ? ?//最多等待解鎖的時間
Device_Flags flags;
char termChar;
//termChar和flags里的termchrset一起使用,當termchrset的字符
與termChar匹配時,該字符被傳輸
};
儀器返回給客戶端的數據結構體代碼如下:
struct Device_ReadResp {
Device_ErrorCode error;? ? ? ? ? ? ? //讀取失敗的原因標志位
long reason;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//讀取完成的原因標志位
opaque data<>;? ? ? ?//返回給客戶端的數據長度和具體數據
};
device_read函數的流程圖如圖3所示。
首先,客戶端發送讀請求后,運行服務器端的儀器會根據客戶端發送的lid判斷是否可以連接,若不能連接,則返回Error=4;若可以,則判斷其他連接是否有鎖定。如果沒有鎖定,判斷要讀的數據是否大于requestSize;若有鎖定,則等待Lock_timeout毫秒的時間。若在該時間內未解鎖,則返回Error=11、data.data_len=0;否則,判斷要讀的數據是否大于RequestSize,若小于則返回Reason=4,若大于則判斷返回的緩沖區是否已滿,如果已滿,則返回Reason=0,否則繼續讀。最后判斷是否讀完,若讀完則返回Reason=1,否則繼續判斷返回的緩沖區是否滿,直到讀完為止。
3? VXI?11庫及接口的實現
雖然已將VXI?11協議開發完整,但使用起來仍不方便,因此系統將完整開發的VXI?11協議封裝成庫,只需在儀器里調用這個庫就可以成功啟動VXI?11服務,使用起來更為便捷、快速。
此外,系統還提供眾多獨立封裝接口函數,可滿足大多數儀器的需求,使用起來更為靈活。其包括1個服務啟動函數、1個可以完成緩沖區的初始化的緩沖初始函數和10個接口函數。在10個接口函數中,讀取數據接口較為復雜,以此函數為例對接口函數做介紹。
讀取數據接口定義如下:
typedef struct InputdData{char* DataVal; u_int DataLen;}
InputData;
typedef int (CALLBACK * RdDevice)(InputData data);
RdDevice funcRe;
void ReadVXI11Device(RdDevice func);
{
funcRe = func;
}
首先,定義InputData結構體和一個回調函數類型RdDevice,此回調函數的輸入參數類型為InputData型,返回參數為int型。通過RdDevice即可創建此類型的回調函數指針。ReadVXI11Device函數為庫的導出函數,此函數功能是將一個庫外的回調函數指針傳遞給VXI?11庫內事先定義好的回調函數指針funcRe,庫內便可以通過指針funcRe調用到庫外的回調函數。
4? 測? 試
本文測試使用的是Keysight Connection Expert軟件。在儀器中調用該系統的VXI?11庫,通過簡單的幾個庫函數便可以成功啟動VXI?11服務。
以大數據傳輸為例,在對儀器進行訪問時,不可避免地要對大量數據進行傳輸,但由于受客戶端單次最大可接收字節數限制,通常無法通過單次操作完成傳輸,而使用本系統的庫,可通過一次讀操作直接完成傳輸,測試結果如圖4所示。
當儀器(服務器端)接收到測試軟件(客戶端)發出的測試命令后,會判斷要讀的數據是否大于測試軟件一次能接收的最大字節數,測試軟件默認設置1 024 B,而本次要接收的數據為3 000 B,所以讀完1 024 B數據后,將繼續讀1 024 B數據,直至3 000 B全部讀完,一共讀三次,然后將結果返回至測試軟件。從圖4可以看出,通過讀操作,客戶端成功接收了服務器端的3 000 B數據。
5? 結? 語
本文完成了VXI?11協議在Windows下完整功能的開發,并且做成庫的形式,給使用者提供接口,解決了現有VXI?11協議在Windows下開發的功能還不夠完整、使用起來不方便等問題。經驗證,功能開發完整的服務端程序可以正確響應客戶端的VXI?11協議,并且可以穩定地傳輸數據。
參 考 文 獻
[1] 沈建飛.基于LXI的數據鏈端機自動測試系統[J].現代導航,2019,10(1):56?59.
[2] 尹洪偉,孫美美,張樹團.基于VXI?11的LXI儀器發現技術研究[J].電子設計工程,2011,19(18):18?20.
[3] 邱暢,李龍,鄭艷梅.基于LXI總線PCI接口的軟件設計[J].國外電子測量技術,2016,35(5):100?103.
[4] 翟龍軍,曲洪東,高山,等.基于DSP和VXI?11協議的LXI儀器控制與實現[J].計算機測量與控制,2014,22(11):3691?3693.
[5] 田丹丹.PortMap端口映射器[J].網絡安全和信息化,2017(2):161.
[6] 耿建平,鄧力.通過VXI?11協議控制LXI儀器[J].微計算機信息,2011,27(10):39?41.
[7] 龐新法.網絡化儀器儀表協議客戶端設計與實現[J].現代電子技術,2015,38(18):122?124.
[8] 李延峰,李宥謀,閆海卿,等.LXI網絡儀器后臺處理的設計與實現[J].計算機技術與發展,2019,29(3):159?163.
[9] 鄧茂林,姚靜波,解維奇.基于航天測試技術的LXI多功能接口板卡設計[J].現代電子技術,2014,37(21):94?97.
[10] 鄭馥薇,沈卓煒.基于數據分發服務的遠程過程調用系統[J].計算機應用,2018,38(z2):239?242.
[11] 張波,萬麗.基于端口映射NAT網絡方案分析與實施[J].軟件工程師,2015,18(3):12?13.