文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.03.021
中文引用格式: 覃斌毅,邱杰,郑金存,等. 基于LXI总线的Web关键技术研究与实现[J].电子技术应用,2016,42(3):74-77.
英文引用格式: Qin Binyi,Qiu Jie,Zheng Jincun,et al. Research and implementation of Web key technologies based on LXI bus[J].Application of Electronic Technique,2016,42(3):74-77.
0 引言
LXI的全称是仪器在局域网扩展(LAN eXtensions for Instrumentation),它是继GPIB、VXI和PXI等传统总线技术之后发展起来的新一代仪器总线技术。LXI总线具有无处不在的LAN 接口、不受距离和节点数目的限制、精确时间同步技术以及远程网页访问等特点。因此,在组建网络化、分布式自动化测试系统时,LXI总线拥有传统测试仪器总线技术无法比拟的优势[1]。
LXI仪器是指符合LXI标准的新型仪器。LXI标准中明确提出LXI仪器必须提供能够被W3C兼容浏览器访问的Web页面,用户可以通过浏览器对仪器进行远程访问、控制以及故障排查,不需要传统仪器的前面板即可实现单台仪器的所有功能。其中,LXI总线B类仪器需要提供的基本Web页面主要包括:主页面、LAN配置页面、IEEE 1588同步配置页面、仪器功能页面以及事件日志访问页面[2]。因此,Web页面的实现是LXI总线技术中的一个关键。本文以LXI总线中IEEE1588同步配置页面为例,提出了一种实现LXI仪器Web页面的方法。
1 LXI仪器Web接口硬件设计
为了实现LXI仪器的Web接口,本设计使用ARM+DM9000+DP83640的架构,其中,选用三星公司的S3C2440处理器为主控制器,DM9000为MAC层芯片,DP83640为物理层芯片[3]。LXI仪器Web接口硬件系统框图如图1所示。

2 LXI仪器Web接口软件设计
本设计操作系统选用Linux系统,在系统中搭建嵌入式服务器,结合HTML、CGI以及SQLite数据库技术,实现了IEEE1588同步配置页面。整个LXI 仪器Web接口软件系统如图2所示。

系统工作过程为:用户在客户端发送HTTP请求消息,boa服务器对接收到的请求消息进行解析,解析的内容包括:读取请求URL、区分客户端请求的资源是静态页面还是CGI应用程序。若用户请求的是静态页面,则服务器读取相应的HTML的内容,并将其作为HTTP响应消息中的实体返回给客户端浏览器;若客户端请求的是CGI应用程序,则服务器将创建相应的CGI应用程序进程,并将所需信息按CGI规范传递给CGI应用程序进程,此后由CGI应用程序接管控制。CGI应用程序对接收到的信息进行解码,解码后调用设备驱动程序对硬件进行控制,必要时将解码的参数利用嵌入式数据库进行保存,同时CGI将结果在客户端浏览器上显示。
2.1 Web页面构成
IEEE1588同步配置页面是LXI总线B类仪器Web系统中的重要组成部分,用于对IEEE1588时钟同步状态监控和对输出触发信号动态配置。它由2个Web网页构成:IEEE1588基本信息页面和IEEE1588同步参数配置页面。
IEEE1588基本信息页面用于显示IEEE1588中的参数,如当前超主时钟的MAC地址、父时钟的MAC地址、时钟端口状态、当前PTP时间、PTP子域、IEEE 1588协议版本[4]。
IEEE1588同步参数配置页面可对IEEE1588中的参数进行设置,如可对PTP子域、PTP首选主时钟、同步时间间隔、PTP时间、IEEE1588触发时间、IEEE1588触发信号类型等进行设置。
2.2 嵌入式Web服务器的移植
嵌入式设备常用的Web服务器有Lighttpd、thttpd、shttpd、apache、boa[5]。本设计采用boa作为嵌入式Web服务器,它具有小巧、高效、支持CGI技术的特点。
boa服务器是开源的,要将其用于Linux系统需要进行移植,移植的步骤如下:
(1)从官方网站www.boa.org下载boa发布版源码,本设计选择版本为boa-0.94.13,在命令终端执行解压命令,将其解压到PC linux虚拟机下。
(2)进入src目录下执行命令./configure,产生一个 make-file文件。修改makefile文件:将CC=gcc改为CC=arm-linux-gcc,将CPP=gcc-E改为CPP=arm-linux-g++ -E。
(3)修改src目录下compat.h文件,找到头文件中的#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo)(foo)->tm_gmtoff。
(4)执行make命令进行编译,然后把编译得到的boa可执行文件拷贝到嵌入式设备文件系统的“sbin/”目录下;把“boa-0.94.13/”目录下的boa.conf文件拷贝到文件系统的“etc/boa/”目录下。
(5)修改boa配置文件boa.conf,主要修改内容有:
Port 80 //端口
User root
Group root
ServerName GUET //服务器名
DocumentRoot /www //存放html文档主目录
DirectoryIndex index.html
MimeTypes/etc/mime.types //指明文件位置
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/sbin:/sbin
ScriptAlias /cgi-bin/ /www/cgi-bin/
以上为关键设置部分,其他部分采用默认设置。设置完成后,保存退出,然后,拷贝PC机Linux系统etc/目录下的mime.types到文件系统etc/目录下。至此,boa服务器在Linux系统上的移植完成。最后,将HTML文件放在文件系统的/www文件夹中,将CGI脚本程序放在/www/cgi-bin文件夹中即可以实现网络访问。
2.3 嵌入式数据库的移植
数据库主要用于数据存储和查询,在本设计中,嵌入式数据库是客户端浏览器与PTP程序(PTP程序是指实现IEEE1588协议的应用程序)进行通信的桥梁,如图3所示。

IEEE 1588同步配置页面利用嵌入式数据库实现两个方面的作用:一方面是对一些IEEE 1588配置参数进行存储,PTP程序可以通过数据库API访问这些参数;另一方面是PTP程序在运行过程中可以动态存储重要的状态信息,客户端可以通过调用CGI应用程序实现对这些信息的访问。本设计选用在嵌入式系统中应用最广的SQLite进行移植。
移植嵌入式数据库SQLite到Linux系统中的步骤如下:
(1)从官方网站www.sqlite.org下载SQLite数据库源码压缩包,本设计选择的版本是sqlite-3.5.9。
(2)压缩包将其解压到PC虚拟机Linux系统的opt目录中,会生成一个名为sqlite-3.5.9的文件夹。
(3)在sqlite-3.5.9根目录下新建目录_install。
(4)配置SQLite,生成Makefile文件。
(5)执行make和make install命令,编译安装结束后,在/_install目录下生成bin、lib、include目录。
(6)把bin目录下的sqlite3和sqlite_test文件拷贝到嵌入式Linux文件系统中的bin目录下,把lib目录下的库文件拷贝到文件系统的lib目录下,这样在嵌入式Linux中就可以使用SQLite数据库了。
(7)把include目录下面的数据库头文件拷贝到交叉编译器的include目录下,把lib目录下的库文件拷贝到交叉编译器的lib目录下,让交叉编译器支持sqlite3数据库。
为实现相关的数据存储,建立了一个数据库文件config.db,存放在文件系统的mnt文件夹中。使用“create table”语句创建2个用于存放1588参数信息的表:config1588和parameters。其中,config1588存放PTP子域、首选主时钟、同步间隔等;parameters存放超主时钟的MAC地址、父时钟的MAC地址、端口状态等。
2.4 CGI动态网页的实现
嵌入式系统由于自身软硬件资源的限制,Web服务器无法支持功能强大的脚本语言实现动态网页。因此,在嵌入式Web服务器中通常使用CGI实现动态网页。
CGI(公共网关接口)是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。例如,可以通过编写CGI程序访问数据库以及通过设备驱动接口访问硬件等[6]。
CGI程序可以用任何脚本语言或者独立编程语言实现,只要该语言可以在系统上运行。传统的使用CGI实现动态网页的方法步骤如下:
(1)浏览器通过表单把请求数据发送到Web服务器。
(2)CGI程序从环境变量或者标准输入中提取表单数据,并进行相应的处理。
(3)用printf函数输出整个HTML页面代码,将结果返回给浏览器。
这种方法虽然可行,但是用CGI程序将整个HTML静态页面全部通过printf输出,会使得CGI代码混乱不堪,并且难以实现复杂的HTML页面。另外,还有一个缺点就是接到每一次请求都会将整个HTML页面重传一遍,增加了服务器的负担。在已经打开一个网页进行操作的过程中,每次请求往往只需要更新页面中少部分数据即可,没有必要重传整个页面。
为解决上述问题,本设计参照了AJAX技术,使用局部动态网页刷新的方法实现动态网页。AJAX主要由JavaScript、XMLHTTPREQUEST、XML三部分组成。其中JavaScript用于页面数据传递、刷新局部页面;XMLHTTPREQUEST用于向服务器提交请求,与服务器响应;XML是服务器返回数据的格式。由于boa服务器不支持XMLHTTPRE-QUEST发出的请求,因此仍使用CGI实现请求的提交与响应,数据格式可以任意定义。具体实现方法如下:
(1)参照大型服务器Web动态网页的实现方法,先建立一个HTML静态网页框架。
(2)对每一个表单请求创建一个CGI响应程序,CGI只对需要返回的数据用printf函数输出。
(3)采用HTML内联框架技术将CGI响应的HTML页面进行隐藏。
(4)使用JavaScript脚本语言从CGI响应的HTML页面中取出服务器返回的数据,并将其显示在主HTML页面的指定位置。
3 LXI仪器Web接口功能验证
为了对LXI仪器Web接口功能进行测试,搭建图4所示的测试平台。其中,美国安捷伦公司的触发盒E5818A与待测LXI仪器通过交换机相连,同时,PC也通过交换机接入到局域网中,PC可通过网页访问对待测LXI仪器进行控制。将触发盒和待测LXI仪器的触发输出口分别接到示波器的两个通道,用于测量同步误差[7]。

3.1 IEEE1588基本信息页面的验证
首先,通过交换机将PC与LXI测试仪器相连,设置PC和LXI仪器在同一局域网内,然后在浏览器中输入网址:http://192.168.1.6/ieee1588ViewConfiguration.html,打开网页,界面如图5所示。

经验证,PC可通过浏览器访问嵌入式系统中的IEEE1588基本信息页面,在页面正确显示了IEEE1588的相关参数。
3.2 IEEE1588同步参数配置页面的验证
通过交换机将PC与LXI测试仪器相连,设置PC和LXI仪器在同一局域网内,然后在浏览器器中输入网址:http://192.168.1.6/ieee1588ModifyConfiguration.html,界面如图6所示。

经验证,PC可通过浏览器访问嵌入式系统中的IEEE1588同步参数配置页面。
通过对触发时间、触发周期、触发源等参数进行设置,可在指定的时刻输出触发信号。为了验证同步触发功能,分别通过网页设置E5818A 和待测LXI仪器在同一时刻触发输出脉冲信号,用示波器检测这两路输出信号。图7是在指定时刻下,示波器测得的同步触发的信号,从图7可得同步误差时间是258 ns。

4 结束语
本设计使用ARM+DM9000+DP83640的架构实现了LXI仪器Web硬件接口;将boa服务器和sQList数据库、Linux操作系统、HTML、CGI 等技术结合起来,实现了LXI仪器Web软件接口。在Web软件接口实现的过程中,使用了CGI局部刷新技术代替传统的CGI全局刷新,减轻了Web服务器的负担。最终,通过搭建测试平台,验证了所提出的方法切实可行,为LXI仪器的Web页面设计提供了参考。
参考文献
[1] 王彪.LXI关键技术研究[D].哈尔滨:哈尔滨工业大学,2009.
[2] LXI Consortium,Inc.LXI Consortium.LXI standard revision1.3[S].2008.
[3] 覃斌毅,陈铁军,邱杰,等.基于IEEE1588协议时钟同步精度影响因素的研究[J].计算机测量与控制,2014,22(10):3312-3315.
[4] 于志成.LXI关键技术-IEEE1588协议的研究与实现[D].哈尔滨:哈尔滨工业大学,2012.
[5] 胡聪,高明,牛军浩.LXI标准Web接口仪器控制研究[J].计算机测量与控制,2011,19(6):1354-1356.
[6] 谢仕义,徐兵.嵌入式Web服务器的设计及其CGI 实现[J].计算机工程与设计,2007,28(7):1598-1600.
[7] 朱旺纯,覃斌毅,王玉娟.基于IEEE1588协议同步技术的研究[J].计算机测量与控制,2014,33(7):98-101.
