陳 朋 李 智 胡 聰 牛軍浩
(桂林電子科技大學(xué)電子工程與自動(dòng)化學(xué)院,廣西 桂林 541004)
為了解決遠(yuǎn)距離測(cè)試應(yīng)用問(wèn)題,構(gòu)建了一種復(fù)雜的分布式測(cè)試系統(tǒng)。Agilent公司和VXI科技公司等在2004年9月推出了新一代的測(cè)試總線即LXI(LAN extensions for instrumentation)總線。LXI總線是LAN技術(shù)在儀器領(lǐng)域的擴(kuò)展,其通過(guò)將LAN作為統(tǒng)一標(biāo)準(zhǔn)進(jìn)行部署和擴(kuò)展,具備LAN的大吞吐量和組網(wǎng)強(qiáng)大的優(yōu)勢(shì)。LXI總線構(gòu)建的自動(dòng)測(cè)試系統(tǒng)具有可靠性高、成本低、靈活緊湊、性能優(yōu)異等諸多優(yōu)勢(shì)[1]。
LXI總線的關(guān)鍵技術(shù)主要是網(wǎng)絡(luò)服務(wù)發(fā)現(xiàn)技術(shù)、網(wǎng)絡(luò)接口技術(shù)、網(wǎng)絡(luò)時(shí)鐘同步與觸發(fā)以及IVI-COM驅(qū)動(dòng)程序等技術(shù)。其中,網(wǎng)絡(luò)服務(wù)發(fā)現(xiàn)技術(shù)用于告知用戶當(dāng)前的自動(dòng)測(cè)試系統(tǒng)有哪些可用設(shè)備,并把儀器的描述信息提供給用戶。它包括儀器發(fā)現(xiàn)和儀器識(shí)別。儀器發(fā)現(xiàn)是獲取系統(tǒng)中所有可用設(shè)備的主機(jī)名和IP地址;儀器識(shí)別是指在得到設(shè)備的主機(jī)名或IP地址后,進(jìn)一步獲得設(shè)備的制造商、儀器類型、序列號(hào)等信息的過(guò)程[2-3]。
本文通過(guò)研究零配置網(wǎng)絡(luò)協(xié)議(zero configuration networking,ZeroConf)儀器網(wǎng)絡(luò)發(fā)現(xiàn)機(jī)制實(shí)現(xiàn)的原理和方法,基于mDNS/DNS-SD協(xié)議,在嵌入式系統(tǒng) S3C2440/Linux平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)建立TCP服務(wù)器,完成解析和響應(yīng)程控儀器標(biāo)準(zhǔn)命令集(standard commands for programmable instruments,SCPI)命令、IP地址自動(dòng)分配、域名分配以及服務(wù)廣播等功能,從而設(shè)計(jì)實(shí)現(xiàn)了LXI儀器的零配置發(fā)現(xiàn)機(jī)制[4]。
1995年,VXI總線聯(lián)盟提出了 VXI-11規(guī)范。VXI-11規(guī)范是一個(gè)在廣域網(wǎng)或者局域網(wǎng)內(nèi)控制器和儀器相互進(jìn)行通信的標(biāo)準(zhǔn)。由于VXIbus協(xié)議集中包括VXI-11協(xié)議,因此基于LAN的測(cè)試設(shè)備的網(wǎng)絡(luò)儀器都是基于VXI-11協(xié)議。
LXI標(biāo)準(zhǔn)規(guī)定LXI儀器必須支持基于VXI-11協(xié)議的儀器發(fā)現(xiàn)技術(shù),以便能夠在網(wǎng)絡(luò)中發(fā)現(xiàn)該LXI儀器。但VXI-11協(xié)議并不是LXI儀器專有的發(fā)現(xiàn)協(xié)議,協(xié)議中的很多內(nèi)容并不是LXI一致性所必需的,LXI儀器只支持VXI-11協(xié)議的部分功能;且這種基于ONC/RPC協(xié)議的網(wǎng)絡(luò)發(fā)現(xiàn)機(jī)制是一種被動(dòng)的查詢,使用VXI-11協(xié)議實(shí)現(xiàn)LXI儀器的發(fā)現(xiàn)機(jī)制存在如發(fā)現(xiàn)速度慢、設(shè)備數(shù)量受限、發(fā)現(xiàn)范圍窄等問(wèn)題[5]。
由上文分析可知,基于ONC/RPC協(xié)議的網(wǎng)絡(luò)發(fā)現(xiàn)機(jī)制存在諸多問(wèn)題。對(duì)此,LXI規(guī)范引入基于mDNS/DNS-SD協(xié)議的新設(shè)備和服務(wù)發(fā)現(xiàn)技術(shù),即ZeroConf儀器網(wǎng)絡(luò)發(fā)現(xiàn)技術(shù)。這種發(fā)現(xiàn)技術(shù)使得設(shè)備在網(wǎng)絡(luò)配置完成后會(huì)主動(dòng)通告自身的域名、IP地址及其所能提供的服務(wù)信息,這樣系統(tǒng)中的主控器和其他設(shè)備在設(shè)備接入網(wǎng)絡(luò)初始化時(shí)就能獲知它的存在。
2005年12月,IETF零配置網(wǎng)絡(luò)工作組發(fā)布了零配置網(wǎng)絡(luò)協(xié)議(ZeroConf),目標(biāo)是為網(wǎng)絡(luò)設(shè)備在小型網(wǎng)絡(luò)下建立便捷的網(wǎng)絡(luò)服務(wù),即不需任何手工以及其他服務(wù),如動(dòng)態(tài)主機(jī)設(shè)置協(xié)議(dynamic host configuration protocol,DHCP)等的支持,網(wǎng)絡(luò)設(shè)備能自動(dòng)配置、組網(wǎng)并正常工作。零配置網(wǎng)絡(luò)協(xié)議主要包括自動(dòng)獲取 IP地址、IP地址到域名的自動(dòng)轉(zhuǎn)換、網(wǎng)絡(luò)服務(wù)功能發(fā)現(xiàn)這三個(gè)功能。其中,本文通過(guò)mDNS(multicast DNS,mDNS)來(lái)完成IP地址到域名的自動(dòng)轉(zhuǎn)換以及服務(wù)的廣播,通過(guò) DNS-SD 實(shí)現(xiàn)服務(wù)的發(fā)現(xiàn)[3,6]。
按照LXI 1.3標(biāo)準(zhǔn),LXI設(shè)備應(yīng)該通過(guò)支持組播mDNS協(xié)議來(lái)實(shí)現(xiàn)儀器發(fā)現(xiàn)機(jī)制。mDNS使用5353端口,在內(nèi)網(wǎng)沒有DNS服務(wù)器時(shí),就會(huì)出現(xiàn)組播信息。在一個(gè)沒有常規(guī)DNS服務(wù)器的局域網(wǎng)內(nèi),可以使用mDNS來(lái)實(shí)現(xiàn)類似DNS的編程接口、操作語(yǔ)義和包格式。mDNS主要實(shí)現(xiàn)在無(wú)傳統(tǒng)DNS服務(wù)器的情況下局域網(wǎng)內(nèi)設(shè)備相互發(fā)現(xiàn)和通信的功能[3]。
根據(jù)LXI規(guī)范設(shè)計(jì)通信結(jié)構(gòu),選用客戶端/服務(wù)器模型。服務(wù)器端是在ARM平臺(tái)下建立的嵌入式Linux平臺(tái),客戶端PC選用Microsoft Windows XP操作系統(tǒng)。該操作系統(tǒng)安裝了用于發(fā)現(xiàn)LXI儀器的工具Agilent IO Libraries Suite 16.1.14931.0 版本,安捷倫發(fā)現(xiàn)工具作為客戶端的應(yīng)用程序。
實(shí)現(xiàn)LXI儀器ZeroConf發(fā)現(xiàn)機(jī)制的主要工作包括TCP服務(wù)器的建立、儀器IP地址的自動(dòng)分配、域名的分配和服務(wù)的廣播。
按照標(biāo)準(zhǔn)要求,LXI設(shè)備最少應(yīng)該能夠響應(yīng)標(biāo)準(zhǔn)IEEE 488.2的“*IDN?”命令。為了能對(duì)客戶端的程控儀器標(biāo)準(zhǔn)命令集(SCPI)命令進(jìn)行解析和響應(yīng),需要建立TCP服務(wù)器。在嵌入式系統(tǒng)S3C2440/Linux中,項(xiàng)目利用Socket編程建立了TCP服務(wù)器。該服務(wù)器是多線程服務(wù)器,能夠同時(shí)對(duì)多個(gè)SCPI命令進(jìn)行解析響應(yīng)。LXI儀器服務(wù)器端的流程圖如圖1所示。
服務(wù)器端的程序設(shè)計(jì)如下。
①用函數(shù)socket()創(chuàng)建一個(gè)套接字,獲取本機(jī)主機(jī)名,并將域名解析為IP地址,實(shí)例化服務(wù)器的IP和端口。
②用函數(shù)bind()綁定IP地址、端口等信息到套接字上。
③設(shè)置允許的最大連接數(shù),用函數(shù)listen()創(chuàng)建Listen對(duì)象監(jiān)聽網(wǎng)絡(luò)請(qǐng)求。
④等待來(lái)自客戶端的連接請(qǐng)求,利用函數(shù)accept(),通過(guò)調(diào)用Listen對(duì)象的accept方法處理接入連接請(qǐng)求的Socket實(shí)例。
⑤ 用函數(shù) send()和 recv(),或者 read()和write()收發(fā)數(shù)據(jù),即接收客戶端的查詢,回復(fù)查詢的應(yīng)答信息。
⑥關(guān)閉網(wǎng)絡(luò)連接,停止偵聽網(wǎng)絡(luò)。
在服務(wù)器程序中,服務(wù)器端創(chuàng)建Socket對(duì)象后綁定5025端口到該套接字上,以供客戶端連接實(shí)現(xiàn)通信。客戶端在與服務(wù)器端連接成功后,發(fā)送“*IDN?”命令查詢LXI儀器信息,服務(wù)器接收到命令后發(fā)送一個(gè)包含IDN String信息字符串的應(yīng)答數(shù)據(jù)包給客戶端,客戶端正確顯示LXI儀器屬性信息,則查詢結(jié)束。
本系統(tǒng)基于S3C2440/Linux平臺(tái),在程序設(shè)計(jì)和移植的過(guò)程中應(yīng)注意以下幾點(diǎn)。
①使用相應(yīng)嵌入式ARM平臺(tái)的交叉編譯工具。
②服務(wù)器端程序設(shè)計(jì)為多線程服務(wù)器,能夠同時(shí)對(duì)多個(gè)SCPI命令進(jìn)行解析響應(yīng),防止服務(wù)器端發(fā)生阻塞。另外,程序除了要包含頭文件pthread.h外,編譯時(shí)還必須要指定線程的庫(kù)。
③根據(jù)LXI標(biāo)準(zhǔn)規(guī)范,服務(wù)器發(fā)送返回識(shí)別信息時(shí),應(yīng)符合LXI標(biāo)準(zhǔn)要求,否則LXI儀器的發(fā)現(xiàn)工具無(wú)法正常識(shí)別。
IP地址的自動(dòng)配置可以通過(guò)DHCP獲得,但是該方法需要建立DHCP服務(wù)器。在沒有DHCP服務(wù)器的情況下,常用Auto-IP技術(shù)對(duì)小型局域網(wǎng)機(jī)型IP進(jìn)行自動(dòng)配置。Auto-IP即 Dynamic Configuration of IPv4 Link-Local Addresses,是一種常用于小型局域網(wǎng)的、無(wú)需用戶進(jìn)行干預(yù)的自動(dòng)IP配置技術(shù),非常適用于小型的、沒有架設(shè)DHCP服務(wù)器的網(wǎng)絡(luò)中。LXI儀器組成的自動(dòng)測(cè)試系統(tǒng)正是這種網(wǎng)絡(luò)[7-8]。
根據(jù)零配置網(wǎng)絡(luò)協(xié)議的規(guī)定,首先在169.254/16(255.255.0.0)網(wǎng)段內(nèi)隨機(jī)生成一個(gè) IP 地址,然后對(duì)該IP地址發(fā)送地址解析協(xié)議(address resolution protocol,ARP)數(shù)據(jù)包。如果網(wǎng)絡(luò)中有占用該IP地址的設(shè)備,則對(duì)該ARP數(shù)據(jù)包作出響應(yīng),且儀器隨機(jī)生成另外一個(gè)IP地址。重復(fù)之前的步驟,直到網(wǎng)絡(luò)中沒有設(shè)備對(duì)指定IP地址的ARP數(shù)據(jù)包作出響應(yīng),則該IP地址可用。
采用Auto-IP技術(shù)的軟件具體實(shí)現(xiàn)流程如下[2]。
① 在169.254/16(255.255.0.0)網(wǎng)段內(nèi)隨機(jī)選擇一個(gè)IP地址作為檢測(cè)對(duì)象。
②在本地網(wǎng)絡(luò)中發(fā)送已選定IP地址的ARP查詢數(shù)據(jù)包。
③檢測(cè)是否收到ARP應(yīng)答包,判斷是否發(fā)生IP沖突。
④重復(fù)發(fā)送ARP查詢數(shù)據(jù)包三次。
⑤如果沒有發(fā)生IP沖突,則使用該IP地址;否則重復(fù)以上步驟,直到選定的IP地址在本地網(wǎng)絡(luò)中未被使用為止。
在主機(jī)名為EmbedSky的嵌入式系統(tǒng)中運(yùn)行IP自動(dòng)配置程序,通過(guò)上述步驟隨機(jī)選擇一個(gè)IP地址如169.254.49.209,經(jīng)查詢沒有沖突,則最后設(shè)定 IP 地址為169.254.49.209。從超級(jí)終端截取的LXI儀器運(yùn)行Auto-IP程序的界面如圖2所示,運(yùn)行結(jié)果顯示IP設(shè)定成功。同時(shí),通過(guò)命令ifconfig查詢到的IP地址也是新的隨機(jī)設(shè)定的IP地址。
圖2 程序運(yùn)行界面載圖Fig.2 Screenshots of program interface
對(duì)于動(dòng)態(tài)分配IP地址的儀器,客戶端不便于通過(guò)IP地址來(lái)直接訪問(wèn)儀器。因此,需要實(shí)現(xiàn)儀器IP地址與域名的映射,使客戶端輸入域名即能訪問(wèn)儀器。同時(shí),為了在儀器接入網(wǎng)絡(luò)后主控機(jī)能得到儀器所能提供的服務(wù),需要將儀器的服務(wù)消息進(jìn)行廣播。
開源的 mDNSd(multicast DNS daemon)是 mDNS協(xié)議實(shí)現(xiàn)的一種版本。它便于嵌入式平臺(tái)移植,具有運(yùn)行空間占用小、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)。本系統(tǒng)通過(guò)對(duì)mDNSd源代碼的分析與研究,按照LXI標(biāo)準(zhǔn)修改源碼,將 mDNSd 移植到 S3C2440/Linux 平臺(tái)上[9-10]。
移植mDNSd后的儀器是一個(gè)mDNS服務(wù)器。在分配域名之前,mDNS服務(wù)器會(huì)查詢網(wǎng)絡(luò)中是否有占用該域名的儀器。如果有,則在沖突的域名中增加一個(gè)數(shù)字來(lái)避免域名沖突的問(wèn)題;如果沒有,即可分配域名。為了區(qū)別于傳統(tǒng)DNS分配的域名,所分配的域名以.local結(jié)尾,表示其服務(wù)域?yàn)閘ocal。
mDNS 服務(wù)器能廣播 http、lxi、scpi-raw、scpi-telnet服務(wù),這里用PiZeroconfBrowser工具來(lái)捕獲儀器所提供的lxi服務(wù)。該服務(wù)包含制造商、模型、序列號(hào)、版本等信息,這些信息存儲(chǔ)在編寫的程序的TXT記錄鍵中。
通過(guò)建立客戶端與LXI儀器之間的TCP通信,以及IP自動(dòng)分配、域名自動(dòng)分配、服務(wù)廣播等功能的完成,系統(tǒng)實(shí)現(xiàn)了LXI儀器的零配置發(fā)現(xiàn)機(jī)制。將該部分程序設(shè)置成開機(jī)自啟動(dòng)的形式,就可以在打開儀器后,通過(guò)安捷倫發(fā)現(xiàn)工具發(fā)現(xiàn)目標(biāo)儀器,同時(shí)實(shí)現(xiàn)發(fā)現(xiàn)機(jī)制的各項(xiàng)功能,完成儀器的發(fā)現(xiàn)和識(shí)別。
系統(tǒng)通過(guò)發(fā)現(xiàn)工具Agilent IO Libraries Suite 16.1.14931.0來(lái)發(fā)現(xiàn)和識(shí)別LXI儀器。從安捷倫發(fā)現(xiàn)工具軟件截取的界面如圖3所示。圖3中,安捷倫發(fā)現(xiàn)工具成功地在局域網(wǎng)中發(fā)現(xiàn)了服務(wù)器端的LXI儀器,其域名為“l(fā)xi-LXI.local.”,服務(wù)名為“l(fā)xi”,IP 地址為“169.254.49.177”。
圖3 LXI儀器的發(fā)現(xiàn)界面Fig.3 The discovery interface of LXI instrument
對(duì)“*IDN?”命令的解析過(guò)程及結(jié)果如下。從超級(jí)終端截取的LXI儀器服務(wù)器端運(yùn)行狀態(tài)的界面如圖4所示。從圖4可以看出,服務(wù)器端LXI儀器通過(guò)超級(jí)終端顯示服務(wù)器成功接收了客戶端發(fā)送的命令請(qǐng)求,即“*IDN?”。
圖4 服務(wù)器端運(yùn)行狀態(tài)界面Fig.4 Interface of server operation state
Agilent Interactive IO工具作為客戶端成功接收了服務(wù)器端的LXI儀器的應(yīng)答數(shù)據(jù)“LXI,1137AXXXXX,2011,3.1”。這說(shuō)明服務(wù)器端與客戶端成功進(jìn)行了TCP通信,完成了交互的數(shù)據(jù)讀寫操作??蛻舳孙@示界面如圖5所示。
圖5 客戶端顯示界面Fig.5 Client display interface
以LXI總線為標(biāo)志的新一代網(wǎng)絡(luò)化測(cè)控技術(shù)是未來(lái)測(cè)控技術(shù)發(fā)展的趨勢(shì)。本文基于ARM平臺(tái),建立了嵌入式Linux平臺(tái),并在該平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)了零配置發(fā)現(xiàn)機(jī)制。
零配置機(jī)制符合LXI 1.3標(biāo)準(zhǔn)的規(guī)定,支持mDNS協(xié)議進(jìn)行儀器發(fā)現(xiàn),實(shí)現(xiàn)了零配置網(wǎng)絡(luò)協(xié)議的要求;解決了基于ONC-RPC協(xié)議的VXI-11發(fā)現(xiàn)機(jī)制中發(fā)現(xiàn)速度慢、設(shè)備數(shù)量受限等問(wèn)題;將以往LXI儀器發(fā)現(xiàn)機(jī)制由被動(dòng)變?yōu)橹鲃?dòng),為組建網(wǎng)絡(luò)化的LXI總線的自動(dòng)測(cè)試系統(tǒng)提供了更大的靈活性。
[1]姚瑛.基于ZeroConf的LXI儀器發(fā)現(xiàn)協(xié)議研究與實(shí)現(xiàn)[D].桂林:桂林電子科技大學(xué),2010.
[2]李鳴,高娜,江義東.LXI總線標(biāo)準(zhǔn)規(guī)范關(guān)鍵技術(shù)研究[J].電子測(cè)量技術(shù),2010,33(8):22 -24.
[3]LXI Consortium.LXI Standard v1.3[EB/OL].[2010 -08 -31][2012- 01 - 10].http://www.lxistandard.org/products/conformant%20LXI%20devices%2010-08 -31pdf.
[4]趙昕,郭恩全,胡華偉,等.一種實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)配置及服務(wù)發(fā)現(xiàn)的零配置協(xié)議[J].計(jì)算機(jī)測(cè)量與控制,2008,16(8):1190 -1191.
[5]陳安軍.LXI總線基于VXI-11的自動(dòng)發(fā)現(xiàn)機(jī)制研究[J].儀器儀表學(xué)報(bào),2009,30(6):514 -515.
[6]張曄,胡春明.一種基于ZeroConf協(xié)議的虛擬機(jī)資源發(fā)現(xiàn)與展示方法[J].電子學(xué)報(bào),2008,36(8):1508 -1510.
[7]Wolle J,Wheelwright L.The need for conformance testing[EB/OL].[2008 -09 -20][2012 -01 -10].http://www.evaluation engineering. com/articles/200809/the-need-for-conformance testing.php.
[8]芶新禹,肖明清,王承孝.LXI測(cè)試系統(tǒng)LAN配置關(guān)鍵技術(shù)研究[J].彈箭與指導(dǎo)學(xué)報(bào),2008,28(2):321 -324.
[9]趙濤,于月芬,李建剛.LXI總線網(wǎng)絡(luò)發(fā)行機(jī)制研究[J].電測(cè)與儀表,2008,45(6):31 -34.
[10]Wilson Y.LXI instrument development platform based on an open embedded operating system[J].Chinese Journal of Scientific Instrument,2007,28(5):789-791.