LXI仪器零配置发现机制的研究
2013-07-26牛军浩
陈 朋 李 智 胡 聪 牛军浩
(桂林电子科技大学电子工程与自动化学院,广西 桂林 541004)
0 引言
为了解决远距离测试应用问题,构建了一种复杂的分布式测试系统。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]。
1 基于VXI-11的仪器发现机制
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地址及其所能提供的服务信息,这样系统中的主控器和其他设备在设备接入网络初始化时就能获知它的存在。
2 ZeroConf仪器网络发现技术
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]。
3 LXI的ZeroConf发现机制的实现
根据LXI规范设计通信结构,选用客户端/服务器模型。服务器端是在ARM平台下建立的嵌入式Linux平台,客户端PC选用Microsoft Windows XP操作系统。该操作系统安装了用于发现LXI仪器的工具Agilent IO Libraries Suite 16.1.14931.0 版本,安捷伦发现工具作为客户端的应用程序。
实现LXI仪器ZeroConf发现机制的主要工作包括TCP服务器的建立、仪器IP地址的自动分配、域名的分配和服务的广播。
3.1 TCP服务器的建立
按照标准要求,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仪器的发现工具无法正常识别。
3.2 仪器IP地址的自动分配
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
3.3 域名分配和服务广播
对于动态分配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仪器的零配置发现机制。将该部分程序设置成开机自启动的形式,就可以在打开仪器后,通过安捷伦发现工具发现目标仪器,同时实现发现机制的各项功能,完成仪器的发现和识别。
4 系统功能验证
系统通过发现工具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
5 结束语
以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.