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