基于ARM9260的嵌入式无线Web设计与实现
2013-01-31许春杰
许春杰,杜 仲,2
(1.武汉邮电科学研究院,湖北 武汉430074;2.光纤通信技术和网络国家重点实验室,湖北 武汉430074)
Internet和嵌入式技术在过去的十几年里飞速发展,影响深远,二者结合的产物——嵌入式Web服务器应运而生,在最近几年的时间中影响逐步扩大,发展势头良好,在实际生产中有广泛的应用。本文研究的嵌入式无线Web将无线技术融入其中,为管理、监控嵌入式产品提供了一种基于无线IP的方法。在嵌入式终端中,可以通过嵌入式Web实现对设备的远程连网控制,无线技术将使远程控制变得更为灵活。通过本设计能够实现:1)在互联网的任意地点查看或控制设备的运行状态;2)让设备主动上报自己的运行状态。
1 功能结构
1.1 Linux操作系统
Linux操作系统在嵌入式设备开发中被广泛使用,它拥有稳定的性能和成熟的API。节省成本的特点也备受青睐,读者可以从“http://ww.kernel.org/Pub/linux/kernel/v2.6/”下载Linux 2.6.30版本内核。
1.2 GoAhead服务器
现在的嵌入式设备由于功能越来越复杂以及智能化的需求,大多采用了嵌入式的操作系统作为其系统开发的平台,WebServer则作为其操作系统中的一个任务存在。本文所采用的WebServer是目前在市场中应用较为广泛的GoAhead WebServer。它支持ASP编程,Javascript,SSL加密、验证,标准的CGI、底层CGI处理GoFroms过程,广泛使用在基于WinCE和Linux的嵌入式产品开发中。每秒可处理超过50个请求的响应速度,可以很好地处理用户对于嵌入式Web的需求。支持HTTP协议,支持多种操作系统,包括eCos,QNX,LynxOS,linux,VxWorks和WinCE等。
1.3 无线Modem
无线Modem的工作模式有两种:一种是与人们生活很贴近的GSM通信模式,另一种是TCP/IP通信模式。现有的Modem大多内置TCP/IP协议栈,但本文使用的是外置的协议栈——Linux内核支持的TCP/IP协议栈。TCP/IP通信方式是基于IP网络通信的方式,无线Modem基于IP网络通信之前,首先要进行PPP拔号过程,进行PPP拔号过程时需要后台计算机(也可能是其他设备)软硬件资源支持。需依附于计算机操作系统(或者具有PPP拔号功能设备)之上才能完成PPP拔号过程,获取到无线网络IP地址进行通信。无线Modem的选型主要考虑参数包括:1)支持的网络模式;2)支持的业务功能;3)AT命令,AT命令不同,程序中做的处理也不同;4)支持的操作系统类型。
不同的无线Modem生产厂家可能有自己定义的AT命令,但主要的AT命令相同,具体AT命令可以参看Modem的AT命令手册。
1.4 ARM9260系统平台
本设计选用的是搭载Linux操作系统的ARM9260系统平台,使用ARM926EJ-S处理器,ARM926EJ-S处理器是通用微处理器ARM9家族中的一员。ARM926EJ-S属于5TEJ版ARM架构,针对的是多任务应用,包括全储存器管理,高性能、小核心尺寸和低功耗都是其重要的特点。图1是在ARM9260平台上基于Linux操作系统开发的应用软件功能结构图。
图1 功能结构图
2 模块功能描述
嵌入式无线Web包含嵌入式WebServer、无线Modem控制以及硬件控制数据控制3个组成部分。系统上电后,依次启动Modem控制模块、Webserver、数据监控模块,这3个模块以3个进程的形式存在于Linux操作系统中,3个进程间通信需要依据一定的协议,这个协议可以依据功能需求来定制。
2.1 Modem控制模块
Modem控制模块主要完成的功能是对Modem工作状态进行控制,如在上电时进行Modem探测,将探测到的状态刷新到内存中,以供运行时查询;在需要发送短信时填写短信内容以及要发往的电话号码。协议接口3(由数据监控模块)发来的协议数据通常用于触发Modem控制模块工作方式变换。
2.2 WebServer
WebServer由GoAhead服务器实现,提供Web服务器功能,在设备的文件系统中存放设计好的网页文件,响应来自浏览器的HTTP请求,通过输入设备的联网IP实现对网页的访问,随时随地管理设备。关于网页过程的设计方法会在下文中介绍。WebServer通过协议接口1与Modem控制模块通信,通过协议接口2与数据监控模块通信。当用户请求的网页中包含GoAhead Asp及GoForm过程时,这些过程会关联到事先定义的处理函数中,有这些函数通过调用协议接口2查询或设置数据。同时将包含处理结果的网页通过HTTP协议返回给浏览器。
2.3 数据监控模块
完成的功能是:轮询数据控制模块,通过通信接口采集到新的数据来更新本地内存中的数据,提供给Web-Server查询;根据需求设置数据到数据控制模块中,当WebServer下发了设置请求时,数据监控模块要解析设置命令并将数据设置到系统状态或外部模块中;写文件保存需要断电保存的数据及信息;监控告警状态,在告警处理中发出Modem控制信号,例如,采集到的“温度”高出设定的门限,数据监控模块此时将变被动为主动,通过协议接口3告知Modem控制模块发出告警短信,用户收到提醒就能够及时排查设备故障。其流程设计如图2所示。
图2 数据监控模块流程图
3 功能实现
3.1 PPP拨号
PPP拨号成功会生成一个虚拟的网卡,它包含IP地址的信息,这个地址就是WebSever的网络地址,有了它,设备才能与外界发生联系。Linux下PPP拨号包含如下步骤:
1)配置内核,启动PPP拨号服务;
2)下载拨号源码,执行配置命令;
3)将与Modem配套的拨号脚本放至对应目录;
4)在应用程序中启动拨号命令;
5)拨号完成。
拨号成功后执行#ifconfig命令,可以看见新建了一个ppp0的网卡,上面的IP地址就是运营商划分给用户的公网IP地址,表明拨号成功。在设备Web建立完成以后,就可以通过互联网访问设备了。注意:Modem要插放有效的SIM卡。图3为用拨号成功后的网卡及路由信息打印,由图可知,PPP拨号生成了与Internet联系的信息,ppp0是由Modem外部协议栈生成的虚拟网卡,119.103.110.163为公网IP,通过它,可以访问设备的Web,这样Internet连接的通道就打通了。
图3 ppp拨号成功内核打印信息(截图)
3.2 AT命令的组织及回应
AT命令的组织及回应。当设备向Modem发出AT命令后,Modem会对AT命令作出解析并给出回应。如发“AT回车”探测Modem,若Modem在位则会回应“OK”。在收发短信前需要探测短信功能是否正常,以及在收发GPRS数据前要事先确认GPRS功能是否正常。也可以制作AT命令脚本,来开启Modem的某些功能,如登录GPRS或通信方式切换等。发短信一般包含两个步骤,先发号码回车等待“>”出现,然后发送短信内容。例如要发送的缓存是sendbuf,电话号码是“136***”,modem_send执行将发送缓存的内容发送至Modem,执行以下过程:
Sendbuf的内容为:“AT+CMGS=136*** ”;
modem_send(sendbuf,strlen(sendbuf))。
插有SIM卡的Modem则会回复“>”,此时再通过modem_send发送短信内容,Modem则会将此次的内容以短信形式发送到手机号为“136***”的手机上。
本文涉及常用的AT命令有:
AT+CMGS发送短信
AT^IPIINT 初始化登陆命令
AT^IPOPEN连接到指定IP及端口
3.3 GoAhead ASP及GoForm过程
Web服务器入口程序首先通过initWeb()函数实现一系列的初始化,包括访问口令、服务器端口号、默认页面设置等。
GoAhead Asp过程:ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。
ASP文件是以“.asp”为扩展名,在传送到浏览器之前用嵌入式脚本插入动态内容,GoAhead Web Server支持一个运行时选择脚本引擎的开放式脚本结构。要在ASP页面中创建ASP脚本使用“<%---%>”定界符。例如:<h1> <% webpage_write("Hello World");%></h1>,webpage_write()的方法在底层实现。
GoAhead GoForm过程:在嵌入式系统中,有时用户需要通过浏览器向嵌入式设备查询或发送信息。这就需要使用表单将用户输入的信息传递给嵌入式设备的相应操作模块。
下面介绍如何在Goahead中调用goform过程,Go-Form过程则主要用来处理用户指令以实现对设备的配置和管理等。GoForm过程网页存在形式如下。formTest的方法在底层实现,其作用是将页面的表单数据带入到内存中处理,可以将表单的数据转化为内存控制信息。
<form action=/goform/formTest method=POST>
……
</form>
GoAhead中常用API有:websGetVar函数,可以用于获取变量及其值;websWrite用于回填网页内容。图4为一个简易的监控界面。
图4 无线Web界面(截图)
4 小结
远程监控广泛应用在工业生产中,本文提出并设计的无线连网监控方案结合了当前互联网快速发展的趋势,可以增加设备的可移动性。在移动终端快速发展的趋势中,能够使嵌入式Web控制拥有无线接入的优势,势必会在环境复杂多变的工业控制中取得其一席之地。
[1]郭欣.构建高性能Web站点[M].修订版.北京:电子工业出版社,2012.
[2]单维锋,白灵.ASP.NET Web应用程序设计教程[M].北京:清华大学出版社,2010.
[3]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[4](印)拉克什曼.Linux Shell脚本攻略[M].门佳,译.北京:人民邮电出版社,2011.