陳 朋 李 智 胡 聰 牛軍浩
(桂林電子科技大學電子工程與自動化學院,廣西 桂林 541004)
為了解決遠距離測試應用問題,構建了一種復雜的分布式測試系統。Agilent公司和VXI科技公司等在2004年9月推出了新一代的測試總線即LXI(LAN extensions for instrumentation)總線。LXI總線是LAN技術在儀器領域的擴展,其通過將LAN作為統一標準進行部署和擴展,具備LAN的大吞吐量和組網強大的優勢。LXI總線構建的自動測試系統具有可靠性高、成本低、靈活緊湊、性能優異等諸多優勢[1]。
LXI總線的關鍵技術主要是網絡服務發現技術、網絡接口技術、網絡時鐘同步與觸發以及IVI-COM驅動程序等技術。其中,網絡服務發現技術用于告知用戶當前的自動測試系統有哪些可用設備,并把儀器的描述信息提供給用戶。它包括儀器發現和儀器識別。儀器發現是獲取系統中所有可用設備的主機名和IP地址;儀器識別是指在得到設備的主機名或IP地址后,進一步獲得設備的制造商、儀器類型、序列號等信息的過程[2-3]。
本文通過研究零配置網絡協議(zero configuration networking,ZeroConf)儀器網絡發現機制實現的原理和方法,基于mDNS/DNS-SD協議,在嵌入式系統 S3C2440/Linux平臺上設計實現建立TCP服務器,完成解析和響應程控儀器標準命令集(standard commands for programmable instruments,SCPI)命令、IP地址自動分配、域名分配以及服務廣播等功能,從而設計實現了LXI儀器的零配置發現機制[4]。
1995年,VXI總線聯盟提出了 VXI-11規范。VXI-11規范是一個在廣域網或者局域網內控制器和儀器相互進行通信的標準。由于VXIbus協議集中包括VXI-11協議,因此基于LAN的測試設備的網絡儀器都是基于VXI-11協議。
LXI標準規定LXI儀器必須支持基于VXI-11協議的儀器發現技術,以便能夠在網絡中發現該LXI儀器。但VXI-11協議并不是LXI儀器專有的發現協議,協議中的很多內容并不是LXI一致性所必需的,LXI儀器只支持VXI-11協議的部分功能;且這種基于ONC/RPC協議的網絡發現機制是一種被動的查詢,使用VXI-11協議實現LXI儀器的發現機制存在如發現速度慢、設備數量受限、發現范圍窄等問題[5]。
由上文分析可知,基于ONC/RPC協議的網絡發現機制存在諸多問題。對此,LXI規范引入基于mDNS/DNS-SD協議的新設備和服務發現技術,即ZeroConf儀器網絡發現技術。這種發現技術使得設備在網絡配置完成后會主動通告自身的域名、IP地址及其所能提供的服務信息,這樣系統中的主控器和其他設備在設備接入網絡初始化時就能獲知它的存在。
2005年12月,IETF零配置網絡工作組發布了零配置網絡協議(ZeroConf),目標是為網絡設備在小型網絡下建立便捷的網絡服務,即不需任何手工以及其他服務,如動態主機設置協議(dynamic host configuration protocol,DHCP)等的支持,網絡設備能自動配置、組網并正常工作。零配置網絡協議主要包括自動獲取 IP地址、IP地址到域名的自動轉換、網絡服務功能發現這三個功能。其中,本文通過mDNS(multicast DNS,mDNS)來完成IP地址到域名的自動轉換以及服務的廣播,通過 DNS-SD 實現服務的發現[3,6]。
按照LXI 1.3標準,LXI設備應該通過支持組播mDNS協議來實現儀器發現機制。mDNS使用5353端口,在內網沒有DNS服務器時,就會出現組播信息。在一個沒有常規DNS服務器的局域網內,可以使用mDNS來實現類似DNS的編程接口、操作語義和包格式。mDNS主要實現在無傳統DNS服務器的情況下局域網內設備相互發現和通信的功能[3]。
根據LXI規范設計通信結構,選用客戶端/服務器模型。服務器端是在ARM平臺下建立的嵌入式Linux平臺,客戶端PC選用Microsoft Windows XP操作系統。該操作系統安裝了用于發現LXI儀器的工具Agilent IO Libraries Suite 16.1.14931.0 版本,安捷倫發現工具作為客戶端的應用程序。
實現LXI儀器ZeroConf發現機制的主要工作包括TCP服務器的建立、儀器IP地址的自動分配、域名的分配和服務的廣播。
按照標準要求,LXI設備最少應該能夠響應標準IEEE 488.2的“*IDN?”命令。為了能對客戶端的程控儀器標準命令集(SCPI)命令進行解析和響應,需要建立TCP服務器。在嵌入式系統S3C2440/Linux中,項目利用Socket編程建立了TCP服務器。該服務器是多線程服務器,能夠同時對多個SCPI命令進行解析響應。LXI儀器服務器端的流程圖如圖1所示。
服務器端的程序設計如下。
①用函數socket()創建一個套接字,獲取本機主機名,并將域名解析為IP地址,實例化服務器的IP和端口。
②用函數bind()綁定IP地址、端口等信息到套接字上。
③設置允許的最大連接數,用函數listen()創建Listen對象監聽網絡請求。
④等待來自客戶端的連接請求,利用函數accept(),通過調用Listen對象的accept方法處理接入連接請求的Socket實例。
⑤ 用函數 send()和 recv(),或者 read()和write()收發數據,即接收客戶端的查詢,回復查詢的應答信息。
⑥關閉網絡連接,停止偵聽網絡。
在服務器程序中,服務器端創建Socket對象后綁定5025端口到該套接字上,以供客戶端連接實現通信。客戶端在與服務器端連接成功后,發送“*IDN?”命令查詢LXI儀器信息,服務器接收到命令后發送一個包含IDN String信息字符串的應答數據包給客戶端,客戶端正確顯示LXI儀器屬性信息,則查詢結束。
本系統基于S3C2440/Linux平臺,在程序設計和移植的過程中應注意以下幾點。
①使用相應嵌入式ARM平臺的交叉編譯工具。
②服務器端程序設計為多線程服務器,能夠同時對多個SCPI命令進行解析響應,防止服務器端發生阻塞。另外,程序除了要包含頭文件pthread.h外,編譯時還必須要指定線程的庫。
③根據LXI標準規范,服務器發送返回識別信息時,應符合LXI標準要求,否則LXI儀器的發現工具無法正常識別。
IP地址的自動配置可以通過DHCP獲得,但是該方法需要建立DHCP服務器。在沒有DHCP服務器的情況下,常用Auto-IP技術對小型局域網機型IP進行自動配置。Auto-IP即 Dynamic Configuration of IPv4 Link-Local Addresses,是一種常用于小型局域網的、無需用戶進行干預的自動IP配置技術,非常適用于小型的、沒有架設DHCP服務器的網絡中。LXI儀器組成的自動測試系統正是這種網絡[7-8]。
根據零配置網絡協議的規定,首先在169.254/16(255.255.0.0)網段內隨機生成一個 IP 地址,然后對該IP地址發送地址解析協議(address resolution protocol,ARP)數據包。如果網絡中有占用該IP地址的設備,則對該ARP數據包作出響應,且儀器隨機生成另外一個IP地址。重復之前的步驟,直到網絡中沒有設備對指定IP地址的ARP數據包作出響應,則該IP地址可用。
采用Auto-IP技術的軟件具體實現流程如下[2]。
① 在169.254/16(255.255.0.0)網段內隨機選擇一個IP地址作為檢測對象。
②在本地網絡中發送已選定IP地址的ARP查詢數據包。
③檢測是否收到ARP應答包,判斷是否發生IP沖突。
④重復發送ARP查詢數據包三次。
⑤如果沒有發生IP沖突,則使用該IP地址;否則重復以上步驟,直到選定的IP地址在本地網絡中未被使用為止。
在主機名為EmbedSky的嵌入式系統中運行IP自動配置程序,通過上述步驟隨機選擇一個IP地址如169.254.49.209,經查詢沒有沖突,則最后設定 IP 地址為169.254.49.209。從超級終端截取的LXI儀器運行Auto-IP程序的界面如圖2所示,運行結果顯示IP設定成功。同時,通過命令ifconfig查詢到的IP地址也是新的隨機設定的IP地址。

圖2 程序運行界面載圖Fig.2 Screenshots of program interface
對于動態分配IP地址的儀器,客戶端不便于通過IP地址來直接訪問儀器。因此,需要實現儀器IP地址與域名的映射,使客戶端輸入域名即能訪問儀器。同時,為了在儀器接入網絡后主控機能得到儀器所能提供的服務,需要將儀器的服務消息進行廣播。
開源的 mDNSd(multicast DNS daemon)是 mDNS協議實現的一種版本。它便于嵌入式平臺移植,具有運行空間占用小、結構簡單等優點。本系統通過對mDNSd源代碼的分析與研究,按照LXI標準修改源碼,將 mDNSd 移植到 S3C2440/Linux 平臺上[9-10]。
移植mDNSd后的儀器是一個mDNS服務器。在分配域名之前,mDNS服務器會查詢網絡中是否有占用該域名的儀器。如果有,則在沖突的域名中增加一個數字來避免域名沖突的問題;如果沒有,即可分配域名。為了區別于傳統DNS分配的域名,所分配的域名以.local結尾,表示其服務域為local。
mDNS 服務器能廣播 http、lxi、scpi-raw、scpi-telnet服務,這里用PiZeroconfBrowser工具來捕獲儀器所提供的lxi服務。該服務包含制造商、模型、序列號、版本等信息,這些信息存儲在編寫的程序的TXT記錄鍵中。
通過建立客戶端與LXI儀器之間的TCP通信,以及IP自動分配、域名自動分配、服務廣播等功能的完成,系統實現了LXI儀器的零配置發現機制。將該部分程序設置成開機自啟動的形式,就可以在打開儀器后,通過安捷倫發現工具發現目標儀器,同時實現發現機制的各項功能,完成儀器的發現和識別。
系統通過發現工具Agilent IO Libraries Suite 16.1.14931.0來發現和識別LXI儀器。從安捷倫發現工具軟件截取的界面如圖3所示。圖3中,安捷倫發現工具成功地在局域網中發現了服務器端的LXI儀器,其域名為“lxi-LXI.local.”,服務名為“lxi”,IP 地址為“169.254.49.177”。

圖3 LXI儀器的發現界面Fig.3 The discovery interface of LXI instrument
對“*IDN?”命令的解析過程及結果如下。從超級終端截取的LXI儀器服務器端運行狀態的界面如圖4所示。從圖4可以看出,服務器端LXI儀器通過超級終端顯示服務器成功接收了客戶端發送的命令請求,即“*IDN?”。

圖4 服務器端運行狀態界面Fig.4 Interface of server operation state
Agilent Interactive IO工具作為客戶端成功接收了服務器端的LXI儀器的應答數據“LXI,1137AXXXXX,2011,3.1”。這說明服務器端與客戶端成功進行了TCP通信,完成了交互的數據讀寫操作。客戶端顯示界面如圖5所示。

圖5 客戶端顯示界面Fig.5 Client display interface
以LXI總線為標志的新一代網絡化測控技術是未來測控技術發展的趨勢。本文基于ARM平臺,建立了嵌入式Linux平臺,并在該平臺上設計實現了零配置發現機制。
零配置機制符合LXI 1.3標準的規定,支持mDNS協議進行儀器發現,實現了零配置網絡協議的要求;解決了基于ONC-RPC協議的VXI-11發現機制中發現速度慢、設備數量受限等問題;將以往LXI儀器發現機制由被動變為主動,為組建網絡化的LXI總線的自動測試系統提供了更大的靈活性。
[1]姚瑛.基于ZeroConf的LXI儀器發現協議研究與實現[D].桂林:桂林電子科技大學,2010.
[2]李鳴,高娜,江義東.LXI總線標準規范關鍵技術研究[J].電子測量技術,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]趙昕,郭恩全,胡華偉,等.一種實現網絡自動配置及服務發現的零配置協議[J].計算機測量與控制,2008,16(8):1190 -1191.
[5]陳安軍.LXI總線基于VXI-11的自動發現機制研究[J].儀器儀表學報,2009,30(6):514 -515.
[6]張曄,胡春明.一種基于ZeroConf協議的虛擬機資源發現與展示方法[J].電子學報,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測試系統LAN配置關鍵技術研究[J].彈箭與指導學報,2008,28(2):321 -324.
[9]趙濤,于月芬,李建剛.LXI總線網絡發行機制研究[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.