APP下载

嵌入式Web服务器的交通信号机控制系统设计※*

2015-07-03张永忠刘鹏郑国荣

单片机与嵌入式系统应用 2015年2期
关键词:信号机浏览器嵌入式

张永忠,刘鹏,郑国荣

(北方工业大学 城市道路交通智能控制技术北京市重点实验室,北京100041)

引 言

随着嵌入式系统的发展,原本以PC为中心的互联网应用逐渐延伸到了嵌入式系统中[1]。越来越多的设备需要通过互联网或者局域网互联互通,并在此基础上形成智能化网络,使用户对其进行远程管理控制及信息传递。嵌入式Web技术提供了一种通过PC机或者手机访问嵌入式设备的方式。采用Internet实现了路口现场数据采集,克服了其他串行传输方案或速率低、或抗干扰能力差的缺点[2]。基于B/S架构的交通信号机可以使用户在任何地点使用Web浏览器完成对接入网络的交通信号机进行配置与监控。

1 系统总体框架

用户通过浏览器对具有Web服务器功能的嵌入式设备进行监视与控制,是嵌入式服务器的研究重点[3]。交通信号机嵌入式Web控制与监视系统的总体结构如图1所示。

系统主要包括前端检测与执行机构、交通信号机和客户监视与控制端,检测机构主要包括路口设置的诸如视频行人检测器、线圈车辆检测器、地磁车辆检测器、视频车辆检测器等检测设备,其基础数据可以直接上传至交通信号机。执行机构主要包括路口信号灯、倒计时牌等设备。交通信号机采用SoC设备,硬件平台采用三星公司生产的S3C2440芯片作为核心处理器,其上搭载嵌入式Linux操作系统,并移植Mongoose Web服务器为客户端的访问与信息回馈提供服务。客户监视与控制端主要由PC机或手机Web浏览器组成,实现了在公共网关接口标准协议规范下对外部程序的执行,并完成了对交通信号机的远程配置及路口信息实时监控功能。在Web浏览器中访问指定交通信号机的URL(Uniform Resource Locator)来唯一地控制和监控该路口的检测与执行机构。

图1 系统总体结构

2 硬件设计

交通信号机主要包括主控部分和扩展模块。主控部分主要包括CPU模块、以太网接口模块和串口接口模块。扩展模块主要由串口电平转换电路、输入电路、输出电路和D/A转换电路构成。

2.1 CPU模块

CPU模块采用三星公司的S3C2440处理器,主频可达400 MHz,保证了交通信号机检测机构的采集效率、信号机运算执行能力和执行机构的控制质量。其上搭载两片外接的32 MB SDRAM,时钟频率可高达100 MHz。采用64 MB NAND Flash用于内核代码和数据保存区。

2.2 以太网接口模块

以太网接口电路,主要用于交通信号机集中协调式控制,设计中使用DM9000芯片。DM9000作为网络接口芯片,支持网络协议中的字、字节和双字的读写操作。支持自适应的10M/100M带宽选择,支持IEEE802.3协议中的全双工流控工作模式。为了保证数据稳定传输,DM9000外部信号发送接口TX-、TX+和外部信号接收接口RX-、RX+经过HST-1027SR隔离变压器与RJ45以太网接口进行连接,实现了外部电路与内部电路的电气隔离,使系统的抗干扰能力提高。

2.3 串口接口模块

S3C2440拥有3个独立的串行口,每个串口都可以独立地以终端模式或者DMA模式完成CPU与UART之间的数据传输。为了完成交通信号机和检测与执行机构的数据传输,提高交通信号机与其他外部设备的数据扩展能力,需要在原有基础上另外增加串行接口。设计中选用XR16V554芯片,采用数据总线扩展方式增加4路独立的串口通路。

2.4 扩展模块

扩展模块主要实现串口电平的转换、信号输入和信号输出的扩展、A/D转换等功能。通过扩展模块的设计,实现了交通信号机对外部设备的感知和控制能力。

3 嵌入式Web服务器平台构建

在交通信号机核心控制单元S3C2440上搭载了嵌入式Linux操作系统,包含系统软件部分和应用软件部分。系统软件由Bootloader引导程序、系统内核、根文件系统和系统驱动4个部分组成。应用软件主要包括嵌入式Mongoose服务器以及交通信号机配时软件等。

嵌入式Mongoose服务器主要用于向发出请求的客户端浏览器提供所需的文档程序。本设计中嵌入式Web服务器采用 Mongoose2.8版本,该版本支持Linux、bsd、solaris、mac、widows、mingw这6种操作系统。本文主要介绍Linux系统下的Mongoose Web服务器。通过分析解压好的Mongoose Web服务器程序中的Makefile,可以通过使用操作命令make Linux来编译成Linux操作系统下的Mongoose Web下的可执行程序。在Makefile文件中有关Linux操作系统的命令主要包括以下几条:

由makefile文件可知,编译过程中源文件主要有两个:一个为mongoose.c,另一个是main.c。如果想编译生成嵌入式Linux系统中的可执行文件,需将Makefile文件中的$(CC)改为arm-linux-gcc。mongoose服务器的主入口在main函数中,入口函数为mg_start(),整个进程结束于 mg_stop();在 main函数中通过函数 mg_set_option(ctx,"ports","8080")设置服务器程序端口号,本设计设置的端口号为8080。编译生成两个文件:一个是文件mongoose,它是可执行文件,通过执行该文件可以开启目标板的嵌入式Web服务器功能;另一个为_mongoose.so,该文件为Linux下的标准库文件,此文件可以直接嵌入于需要使用嵌入式服务器的项目中。当执行mongoose后,所在的目录将被开放,在PC或手机浏览器上可以以“http://”+“目标交通信号机ip”+“:8080/”的方式访问被开放的目录。

4 CGI应用程序设计

CGI(Common Gateway Interface)即公共网关接口,主要提供了外部CGI应用程序与Web服务器之间标准的接口。CGI标准接口为Web服务器执行外部程序提供了可能,可以通过CGI程序完成外部Web浏览器与内部服务器之间的数据信息交互。

4.1 CGI工作流程分析

CGI程序本质为浏览器与服务器之间的中间介质程序,负责处理超文本文件与运行在服务器中的程序之间的数据交换[4],通过客户端浏览器中HTML表单向服务器端发送CGI请求,服务器监听进程收到该CGI请求后触发CGI程序,该CGI程序执行客户请求,然后将处理请求信息传送至服务器,最后将服务器返回的数据信息送回到客户端浏览器。此数据信息通常以HTML网页形式传回客户端浏览器,由浏览器以网页的形式展现在用户面前。CGI程序可以使用Perl、Pascal、C语言等编写。服务器接收用户请求交给嵌入式Web服务器上的CGI程序处理[5]。CGI程序工作流程如图2所示。

图2 CGI程序工作流程

4.2 CGI接口的实现

一个基本的CGI接口包括标准输入、标准输出和环境变量3部分。标准输入可以使用FORM表单的形式,提交过程中以GET或POST的方法向服务器提交数据。在CGI程序应用中服务器与CGI程序之间的数据信息传递是通过环境变量完成的。标准输出是CGI程序向客户端发送服务器返回数据信息的标准,返回的应答是HTTP应答信息,HTTP应答输出的标准是CGI程序标准输出的重要格式。在CGI程序中重要的环境变量包括QUERY_STRING和CONTENT_LENGTH,其分别为 GET方法和POST方法向服务器传递数据信息的媒介。HTTP引擎是整个Web服务器的核心,负责接收和响应来自客户端的 HTTP请求[6]。

4.2.1 标准输入

CGI标准输入通过定义表单中的method和action来定义客户端向服务器端提交信息的方式和将要触发的CGI程序的路径。

<form name="form"method="post"action="./cgibin/post.cgi">

以上程序段表示客户端提交信息的方式为POST方法,CGI程序的触发路径为嵌入式 Web服务器开放目录下的cgi-bin,当触发完成后,服务器将执行post.cgi完成客户端与服务器端的数据信息交互。客户端浏览器向服务器端的数据传输方式主要有GET和POST两种,GET方法提交表单时,所传递的数据信息会在URL上直接显示出来,从而带来一定的安全问题,本设计使用POST方法通过标准输入将客户端的数据信息传递给服务器。

4.2.2 标准输出

CGI程序均通过重定向的标准输出STDOUT返回结果信息[7]。CGI程序触发后,完成了数据由客户端到服务器端的上传以及解析,最后一步是将处理完成的信息输出到客户端浏览器,此过程CGI程序有标准的输出格式,其应满足HTTP应答信息的基本格式,CGI程序在向客户端输出信息时可以使用printf()等标准函数完成向客户端的数据信息传递。

至此,一个完整的客户端向服务器传送数据信息,经过服务器处理,最后返回至客户端的过程已经结束。总结起来,可以将Mongoose Web服务器与CGI程序看成是两个进程,把CGI接口看成是解决了两个进程间的通信问题。当服务器接收到了客户端浏览器发送的请求后,将创建一个子进程处理客户请求,CGI程序将通过读取环境变量得到客户端的标准输入,将数据信息处理后,通过标准输出将信息输出至客户端浏览器进行解析,以网页的形式呈现给用户。最后结束此CGI进程,Mongoose服务器继续等待下一个客户端请求。虽然动态网页的处理由CGI完全可以实现,但由于Web服务器每运行一个CGI程序,就需要fork一个进程为其服务,这样服务器与浏览器的交互越多,对服务器的总体性能影响就越大[8]。

4.2.3 环境变量

数据不会通过标准输入将客户端传递的数据信息直接传递给CGI程序,而是服务器通过将FORM表单提供的数据信息以特定的格式存放至环境变量中。CGI程序通过读取环境变量CONTENT_LENGTH,将客户端以POST方式传递给服务器的数据信息以字符串数组的方式读取出来。读取出来的每组的数据格式为“变量名”+“=”+“变量值”,每两个变量直接又以“&”隔开。例如,本设计中在环境变量中得到的部分变量的表达形式为“P10101=15&P10102=50&P10103=35&P10104=3”。该数组有标准的结构,通过解析可以将每一个变量相应地传递到服务器端的程序中进行运算处理。

5 信号配置及网络监控的实现

以上述理论为基础,设计完成了基于B/S架构的交通信号机实时监控软件,用户登录时通过输入目标信号机URL,进入交通信号机配置监控页面。确认用户信息后,进入主配置页面后可根据路口具体信号需求对信号机进行配置。信号机配置页面与路口实时监控页面略——编者注。

配置结束后前往监视运行界面,此界面可以对信号机系统时间、协调方式、方案编号、路口信号情况等进行实时监视,便于以可视化方式直接掌握路口信号灯运行情况。通过实验表明,信号灯灯组控制准确、路口监控信息上传及时,达到了良好的控制效果。

结 语

基于B/S架构的嵌入式信号机配置软件,将 Mongoose Web嵌入式服务器移植到嵌入式Linux系统上,通过CGI可以方便地完成客户端与服务器端数据信息通信的实时交互。嵌入式服务器仅占用40 KB空间,提高了系统的灵活性,而且系统升级过程中只需对服务器端进行软件升级,对客户端的依赖度比较低,这解决了传统C/S架构系统设备大范围升级代价较高的问题。嵌入式Web服务器通过Web浏览器方便地向用户提供信息交互接口,可以预见随着人们对信息获取需求的增多,带有嵌入式Web服务器的设备将有更广阔的应用空间。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

[1]宋凯,严丽平,甘岚.嵌入式 Web服务器的设计与实现[J].计算机工程与设计,2009,30(4):808-810.

[2]王莉,周伟.基于ARM的嵌入式 Web服务器设计[J].计算机工程与应用,2012,48(14):90-93,213.

[3]Yin Jie,Chai Xiaoyong,Yang Qiang.High-level goal recognition in a wireless LAN[C]//Proceedings of the 19th National Conference on Artificial Intelligence(AAAI2004),San Jose,CA USA,2004:578-584.

[4]马群利.嵌入式WEB服务器及其安全机制研究[J].计算机测量与控制,2007,15(4):538-540.

[5]吴辉,侯思祖.嵌入式 Web的远程数据交互式设计[J].单片机与嵌入式系统应用,2013(6):21-24.

[6]姚雷,卢晓东,万江文.光伏发电监控系统中嵌入式 Web服务器的实现[J].计算机工程与设计,2012,33(9):3397-3401.

[7]郑强,彭琳,邹秋霞,等.基于嵌入式 Web服务器的远程温室监控系统设计[J].农机化研究,2013(11):84-87.

[8]陈嵩,沙斐,周克生.基于嵌入式以太网技术的便携式数据采集系统[J].电子测量与仪器学报,2007,21(6):62-66.

猜你喜欢

信号机浏览器嵌入式
驼峰信号机与驼峰辅助信号机显示不一致问题分析
四显示自动闭塞通过信号机在TDCS/CTC采集电路中存在的问题及改进
反浏览器指纹追踪
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
半自动闭塞总出发信号机非正常关闭解决方案
环球浏览器
倍福 CX8091嵌入式控制器
取消出站信号机“双绿”显示方式的探讨