数据采集终端Web通信服务器嵌入式设计
邓耀华 吴黎明 网络
 0 引言

    近年来制造执行系统在生产企业中发展迅速,制造执行系统提供从接受订货到制成最终产品全过程的生产活动实现优化的信息。对随时可能发生变化的生产状态和条件做出快速反应,削减不会产生附加值的活动,从而推动有效的工厂运行。目前,大多数工厂的制造执行系统是上层管理软件加原有的现场总线车间管理层组成,底层数据采集节点之间的通信仍然采用现场总线所用的通讯方式。随着计算机网络应用领域的不断深入,嵌入式网络技术在信息控制领域中逐步应用。嵌入式Web服务器特别适用于嵌入式Internet应用,它通过以太网可以方便地连接到任何网络,优化系统结构,提高系统执行效率。本文讨论基于以太网技术的制造执行系统底层Web通信服务器的设计,重点论述底层数据采集通信节点的工作原理和软硬件实现过程。

1 Web Server结构层次

    Web Server选用B/S(浏览器/服务器)模型,通过B/S方式,可在远程网络监控端使用IE浏览器作为监控界面。浏览器通过TCP/IP协议与远端的嵌入式Web服务器进行数据交互。通过IE浏览器接收远端现场各嵌入式设备采集到的数据,并显示在网页上,以及通过HTTP协议将用户的控制命令发送到嵌入式Web服务器(图1中的采集服务器)。

 

Web服务器则负责接收从IE测览器发送过来的控制命令,并将其发送给各嵌入式终端设备,以及将各嵌入式终端设备的现场数据采集后发送给IE浏览器,由此达到远程监控的目的。

2 Web Server执行逻辑

    嵌入式Web控制器实现的平台采用ARM9+Linux构架,在ARM9系统中移植Linux嵌入式操作系统,在嵌入式Linux操作系统的平台上进行Web服务器应用程序的开发。

    2.1 系统软件执行分析

    图2描述了嵌入式web控制器的软硬件架构,在嵌入式操作系统移植了BOA服务器,BOA是单任务的HTTP服务器,当有连接请求到来时,其并不为每个连接单独创建进程,也不通过复制自身进程来处理多链接,而是通过建立HTTP请求列表来处理多路HTTP连接请求,同时,为了最大程度上节省系统资源,它只为CGI(Common Gateway Interface,外部应用扩展应用程序与www服务器交互的一个标准接口,以下称CGI)程序创建新的进程,可以自动生成目录、自动解压文件。在图3的执行逻辑中,Web服务器在接收到IE浏览器发送过来的数据以后,进行判断,假如客户端请求的是静态网页,Web服务器就会从静态网页库中查找相应网页文件,并将其返回给客户端;假如客户端请求CGI程序,则通过CGI程序解析命令,并根据具体命令调用数据采集模块或硬件控制模块,这两个模块再调度相应的硬件单元。

 

 

  2.2 Web Server中BOA的执行过程

    在Web Server中,BOA服务器根据请求方法的不同做出不同的响应。当请求方法为HEAD,则直接向浏览器返回响应首部;当请求方法为GET时,第一步是返回响应首部,然后将客户端请求的URL目标文件从服务器上读出,并发送给客户端浏览器;当请求方法为POST,则将客户发送过来的表单信息传送给相应的CGI程序,作为CGI的参数来执行CGI程序,并将执行结果发送给客户端浏览器,BOA的功能实现是通过建立连接、绑定端口、进行侦听、请求处理等来实现的。利用BOA进行网络通信主要涉及以下几个函数:指定端口间的关联:bind函数;指定端口侦听、等待远程连接请求:listen函数;获取请求信息:get-request函数;请求建立一个连接:accept函数。对于CGI请求BOA将为CGI程序创建进程,并将结果通过管道发送输出。BOA的工作流程图如图4所示。

 

3 BOA服务器配置及CGI接口设计

    在使用BOA服务器之前,必须将其移植到嵌入式系统中,由于BOA是开源的,所以可以从其官方网站下载到源代码,移植过程可以参考相应的文献。移植完成后,下一步工作是对BOA进行配置。

    3.1 BOA服务器参数配置

    要使得BOA服务器能在目标中正常工作,在设计过程中,本文对BOA服务器的参数配置如下:

     

    实际设计中,配置参数中目录是在ARM根文件系统的home/目录中创建,命令如下:

    (1)创建日志文件所在目录/home/log/boa;

    (2)创建HTML文档的主目录/home/www;

    (3)创建CGI脚本所在目录/home/www/cgi-bin。

    其中目录/home/www用于存放用户设计的静态网页文件,本设计中为文件:index.html;目录/home/www/cgi-bin/用于存放CGI的文件;此外还需要通过命令:#cp/etc/mime.types etc/,将Mime/types文件复制到Linux根文件系统/etc目录下。以下内容描述了服务器根文件系统结构。

     

  3.2 BOA服务器启动配置

    为了使Web Server启动与目标机中Linux启动同步,还需要进行如下改进。对根文件系统下的文件Linuxrc进行修改,在文件中添加如下代码:/bin/cp-r/home/*/var/,该代码的目的是为了在嵌入式Linux系统启动时,自动把home/目录下的所有文件拷贝到/var/下,形成实际的Web Server根目录;其次,在Linuxre中添加:/bin/boa,实现BOA服务器随Linux系统一起启动;最后将修改后的文件系统下载到ARM板完成配置后,继续执行命令:#/bin/boa。

    

    通过命令#ifeonfig eth设置主机和目标机的IP在同一个网段,连接主机和目标机,在主机的浏览器中输入目标机的IP地址,如果BOA服务器移植成功将会显示index.html网页,如图5所示。

 图5 BOA移植成功测试界面

图5 BOA移植成功测试界面

    3.3 BOA+CGI应用接口设计

    CGI程序与WWW服务器进行通信、传递有关参数和处理结果是通过环境变量、命令行参数和标准输入来进行。服务器提供了客户端(测览器)与CGI扩展程序之间的信息交换的通道。CGI的标准输入是服务器的标准输出,而CGI的标准输出是服务器的标准输入。客户的请求通过服务器的标准输出传送给CGI的标准输入,CGI对信息进行处理后,将结果发送到它的标准输入,然后由服务器将处理结果发送给客户端。服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由< FORM >标签的METHOD属性来决定。METHOD包括三种方法:GET方法,POST方法,真接URL加参数传递方法。为了提高软件的灵活性,设计中采用GET方法,GET方法是对数据的一个请求,被用于获得静态文档,当浏览器将数据从一个填写的表单传给服务器时一般采用POST方法,而且在发送的数据超过1024字节时也必须采用POST方法。

    GET方法通过附加在URL后面的参数发送请求信息。这些参数将被放在环境变量QUERY_.STRING中传给CGI程序。

4 应用测试与结论

    设计中,采用ARM9 CPU S3C2440作为嵌入式硬件平台,嵌入式操作系统Linux内核版本为2.16.12,BOA服务器版本为移植0.94.13。测试目的是在局域网PC上通过浏览器打开嵌入式Web服务器中的网页,并可以在网页上面点击相应的按钮对Web服务器进行控制。由于测试只是验证Web服务器是否运行正常,因此设计的测试程序只涉及I/O控制。测试程序有三个文件:①主页面Index/html;②Led状态查看和控制界面Led.html;③执行控制命令Control.c。程序关键代码如下。

    4.1 关键代码

     

     

     

    4.2 交叉编译CGI程序

    #/usr/local/arm/2.95.3/bin/arm-linux-gcc-o Led.cgi Control.c

    将Led.cgi拷贝至嵌入式板子的/home/www/cgi-bin/下,将Led/html和index/html拷贝至嵌入式板子的/home/www/下。

 图6 目标机主要的运行页面

图6 目标机主要的运行页面

    在局域网PC的IE上输入目标板IP地址,这里为http://169.128.2.223,显示index.html的网页,再由主页面进入终端I/O状态显示页面。如图6所示。

    以上测试表明,采集Web服务器在嵌入式系统中运行正常,数据通信正确。实际运用中,每台Web服务器最大连接6台底层设备,设备数据更新时间为0.5s,每包数据编码后大小为32个字节,嵌入式控制器主频为400MHz,通信负载结果表明,该服务器平均响应时间为1ms,满足通信的要求。   

 
CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢