新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 通用嵌入式Web服务器模块的设计与实现

通用嵌入式Web服务器模块的设计与实现

作者:时间:2010-08-09来源:网络收藏

1 引言

从20世纪90年代中期开始, Internet以前所未有的惊人速度在全球蔓延,目前,几乎覆盖到了地球的每一个角落,成为计算机技术中的一个发展亮点;与此同时,嵌入式技术在最近十几年里也得到了飞速发展,被广泛应用于消费电子、通信网络、工业控制、汽车电子、医疗仪器、信息家电、航空航天、军事国防等众多领域。Internet与嵌入式技术相结合的产物———[1],是一个很有发展前景的研究方向,它将极大拓展嵌入式设备的应用范围,使嵌入式设备具有远程监控功能,而且可以使用通用PC的浏览器作为用户界面,操作简便,符合用户的使用习惯。

2 系统结构与工作原理

系统采用当前流行的B/S结构,这种结构是随着Internet技术的发展,对传统C/S结构的扩展和改造。实质上B/S结构是一种特殊的C/S结构,所不同的是,在B/S结构中,系统主要功能都在服务器端实现,浏览器是客户端,提供用户接口,将用户的请求传递到服务器,并将服务器的响应展现给用户。系统结构如图1所示。


1.jpg

分析嵌入式系统的具体情况,发现对于一般的嵌入式系统,基本的功能需求大体上分为两大类,可以用两个字来概括“监控”。“监”即监测,是数据采集和查看的过程,数据流的方向是从嵌入式系统到浏览器或上位机;“控”即控制,如设定工作参数、远程打开关闭现场的设备等,控制流的方向是从上位机或浏览器到嵌入式系统的。总而言之,就是要实现信息(上行的数据流和下行的控制流)的双向流动。

(1)嵌入式———“监”功能的实现。对于上行的数据流,通过嵌入式技术(ESSI)来实现。(SSI)[2]是在普通静态HTML语言中嵌入SSI指令,以便将文本、图形或应用程序信息包含到网页中。例如,可以使用SSI包含时间/日期戳、版权声明等。嵌入式服务器端包含是对服务器端包含技术的改造和完善,使其适应于嵌入式系统的软硬件环境。在本系统中,自定义了一条ESSI指令“DATA”,用来实现动态信息的实时显示,该指令的语法如下: DATA var = state func = Get-State>/DATA>,该指令与标准的HTML[3]标记兼容,其属性有两个,分别为var和func, var表示设备的状态名称,一个设备可以定义多个状态名; func管理接口函数,
用来获得相应设备的状态信息,原型为uint8* func( )。嵌入式服务器端包含技术的运行过程如图2所示。

(2)嵌入式———“控”功能的实现。对于下行的控制流,通过嵌入式(ECGI)[4]来实现,如图2所示。在需要向嵌入式设备下达控制命令的情况下,借助表单的POST方法[5, 6]向服务器传递数据,表单的语法格式如下:

5.jpg

FORM =“form”SPATTRIBUTES“>”a setof stand-ardHTML elements>“/form>”
ATTRIBUTES =* (ATTRIBUTE SP)ATTRIBUTE =ATTRIBUTENAME“=”TOKEN
ATTRIBUTENAME = name |methodTOKEN = 1* anyCHAR exceptCTLs or separators>
SP = US-ASCII SP, space (32)>

CHAR =anyUS-ASCII character (octets 0 - 127)>
CTL = anyUS-ASCII control character(octets 0 - 31) and DEL (127)>

表单的name属性指定了管理接口函数名,此函数用来处理表单数据,原型为void TestForm(uint8*
content), content是浏览器传送过来的参数;表单的另一个属性method指定了浏览器向服务器传送数据的方式。为进一步阐述ECGI的工作原理,举例如下:

form name=“TestForm”method=“POST”>
p>TestEmbedded Common Gateway Interface /p>
p>input type=“text”name=“var1”>/p>
p>input type=“text”name=“var2”>/p>
p>input type=“text”name=“var3”>/p>
p>input type=“submit”
name=“Go”value=“OK”>/p>
/form>

包含有上述表单的HTML文件传送到浏览器之后,网页上出现三个编辑框和一个submit按钮,用户在编辑框中输入参数,点击submit按钮后,浏览器向Web服务器传送以下内容:

var1=value1var2=value2var3=value3Go=OK,

其中, value1、value2、value3为用户输入的参数,服务器接收到以上参数后,便调用表单的name属性指定的管理接口函数,从而实现对嵌入式设备的控制。

3 硬件系统设计

本系统的主要功能是监测现场的设备状态,及时将监测到的状态数据发布到网络上;同时接收来自用户的控制信息,利用这些控制信息准确地控制设备工作。因此,在硬件上,需包含以下几个模块:
嵌入式处理器、网络接口芯片和有关I/O接口。

3. 1 硬件原理框图

系统的硬件原理框图如图3所示,嵌入式处理器LPC2292处于中心位置,设备的状态数据经过处理器打包后,经由RTL8019AS发布到网络上,供用户浏览,用户的控制命令经过RTL8019AS传递到处理器LPC2292,再由处理器控制相应的设备执行相应的控制命令。

17.jpg

3. 2 嵌入式处理器

嵌入式处理器采用了Philips公司的基于ARM7TDMI内核的处理器LPC2292,该处理器具有16 kB片内静态RAM和256 kB片内Flash程序存储器;可以通过片内boot装载程序实现在系统编程(ISP)和在应用编程(IAP),编程速度快, 512字节行编程时间为1ms,单扇区或整片擦除时间为400ms;同时还内置丰富的外设接口,如:A/D转换器、CAN控制器、UART接口、I2C接口、SPI接口、定时器、RTC实时时钟和看门狗等,极大的简化和方便了应用系统的设计,提高了系统的可靠性[7]。

3. 3 网络接口芯片

网络接口芯片采用Realtek公司的RTL8019AS,它是一种高度集成的以太网控制芯片,能简单的实现Plug and Play并兼容NE2000、掉电等特性。同时还支持全双工模式,能够实现网络数据的同时发送和接收。RTL8019AS芯片内部集成了DMA控制器、ISA总线控制器和16K SRAM、网络PHY收发器。用户可以通过DMA方式把需要发送的数据写入SRAM中,让芯片自动将数据发送出去;而芯片在接收到数据后,用户也可以通过DMA方式将其读出。

3. 4 其它模块

RS232电路有两个作用,首先可以用作在系统编程(ISP),方便了LPC2292中软件的升级和调试,提高了效率;其次,在系统运行时,充当与外界通讯的一个通道。I2C和CAN电路可以用于扩展外围设备,完成系统在工业现场的控制任务和数据采集任务等。

4 软件系统设计

该系统的软件主要由以下几个部分组成:嵌入式操作系统、嵌入式TCP/IP协议栈、。嵌入式操作系统是整个系统的基础,对整个系统软硬件资源进行统一协调、指挥和控制[8]。嵌入式TCP/IP协议栈是网络通讯的基础,负责收发网络上的数据包,对于从网络上接收到的数据包,协议栈对其解析,分离出有效载荷交由应用层处理;对应用层向网络上发送的数据包,协议栈按照相关协议的要求加上相应的协议头,然后发送到网络上。是本系统的核心,实现了HTTP协议中的基本功能,能够与通用的Web浏览器通信,并且提供开放的应用程序编程接口API,方便的系统软件资源的重用。

4. 1 嵌入式操作系统

为了满足多任务和实时性的要求,本系统移植了嵌入式多任务实时操作系统μC/OS-II,并针对系统的具体情况和相应软硬件资源的情况,做了适当的裁剪和修改。μC/OS-II是由Jean J. Labrosse在1999年推出的,在2000年得到了美国联邦航空管理局对于商用飞机的、符合RTCA DO-178B标准的认证,从而证明μC/OS-II具有足够的稳定性和安全性。μC/OS-II是开放源代码的,本系统在设计时使用的是μC/OS-IIV2. 52版本,为了将其移植到ARM7TDMI平台上,主要在以下方面作了修改:进出临界段的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()、堆栈增长方式、任务切换等[9]。

4. 2 嵌入式TCP/IP协议栈

为了搭建一个Web服务器平台,网络协议栈是必不可少的。TCP/IP协议是目前广泛应用的网络协议栈,并且成了事实上的国际标准。本系统设计并实现了针对嵌入式系统的简易TCP/IP协议栈,该协议栈利用μC/OS-II实时操作系统的信号机制来实现多任务和可重入的特性,并且完全使用ANSIC进行编写,在设计实现时充分考虑了重用性和可移植性,可以像μC/OS-II那样支持多种CPU。

4. 3 嵌入式W eb服务器

在整个软件体系中,嵌入式Web服务器处于最上层,在它之下的是上述的嵌入式操作系统和嵌入式TCP/IP协议栈。嵌入式Web服务器除了实现静态文档以外,还利用嵌入式服务器端包含(ESSI)技术实现了动态文档,从而支持实时显示系统的工作状态;此外,通过嵌入式(ECGI)[4]技术实现了浏览器端数据向服务器的传递,从而为对系统的控制提供了数据通道。

4. 3. 1 嵌入式Web服务器层次模型

如图4所示,嵌入式Web服务器包含四个层次,分别为套接字层、协议解析层、功能模块层和用户定义层。套接字层负责本系统与网络上的数据收发;协议解析层负责解析HTTP协议,从中获取有效数据或按照HTTP协议要求,生成HTTP协议报文;功能模块层有三个部分,分别是嵌入式文件系统(EFS)、嵌入式服务器端包含(ESSI)、嵌入式通用网关接口(ECGI);用户定义层的三个部分由用户(开发人员)自定义,从而在不改变其他模块的情况下,增加、减少或修改系统的功能,使得系统具有二次开发功能。

19.jpg

4. 3. 2 嵌入式文件系统

为了方便Web服务器的实现,设计并实现了一个嵌入式文件系统[10-12]用来存储网页。此文件系统结构简洁、效率高,所有文件被集合成一个顺序结构,文件系统中每个文件包含一下几个域:HEAD,文件报头,两个字节,标记一个文件的开始(0xFA, 0xF3);NAME,文件名,长度不定,以NULL结尾; SIZE,文件长度,四个字节,指示文件长度(以字节为单位);FILE,文件内容,长度由SIZE指定。

为了将多个文件(包括网页文件、图片文件等)转化为嵌入式文件系统所需要的可编译格式,在PC上开发了一个工具软件ConvertFile,其功能是把一个指定目录下的所有文件转换成一个filedata. c文件,从而加快了后续程序的开发。

4. 3. 3 用户定义层

为了方便更改系统功能,提供二次开发能力,系统引入了用户定义层。该层为用户开放了系统的编程接口,主要有三个方面:

(1)文件系统构造。当用户需要更改Web服务器的网页时,只需在PC上用任何一种网页设计工具设计好网页,然后用ConverFile工具转化称filedata. c,即完成了文件系统的设计。

(2)ESSI变量定义。如需在浏览器上显示设备的工作状态等信息,可为每个状态定义一个变量,并绑定一个能够返回该状态值的函数即可。

(3)ECGI句柄定义。为了在服务器端获得用户的命令信息,需要为每一个命令定义一个虚拟网址(此网址并不对应一个网页文件),并绑定该网址到一个服务器端的函数,该函数获得浏览器端发送过来的参数,执行相应的命令。

21.jpg

23.jpg

5 实验结果分析

为了验证方案的可行性和实用性,在上述的软硬件平台的基础上,搭建了一个测试环境:在ARM处理器上外接八个LED指示灯,通过嵌入式Web服务器显示并控制每一个LED指示灯的亮和灭。系统测试的网络环境如图5所示,该网络由两个网段组成,用一台路由器连接,网段一的地址为172. 18. 136. 0/24,段内连接终端1和嵌入式设备,网段二的地址为172.18. 135. 0/24,段内连接终端2和终端3,具体的地址分配如图5所示。嵌入式Web服务器运行在IP地址为172. 18. 136. 8的嵌入式设备上,测试结果如图6。结果表明,无论是在同一网段内的终端1上访问嵌入式Web服务器,还是在不同网段的终端2和终端3上访问嵌入式We服务器,系统都可以正常、稳定地运行,并实现对嵌入式设备的监控功能。

6 结束语

引入嵌入式Web服务器,采用B/S方式对嵌入式设备进行远程监控,已逐渐成为一种趋势,极大的方便了系统的使用和维护,此方式以友好的用户界面和简单的操作方法赢得了越来越多的用户的支持。以上设计并实现的通用嵌入式Web服务器模块,可移植到多种ARM7系列的处理器上,采用此模块可简化系统的设计,加快开发速度,具有一定的应用前景。



评论


相关推荐

技术专区

关闭