资讯 > 正文

用于监测系统的LPC2292嵌入式WEB服务器

发布时间:2008-08-17 来源:海志华 宋晓梅/www.plc-fa.hk

 1  引言

  近年来,远程监测系统成为自动化控制领域的一个研究开发热点。远程监测系统是本地和远端共同构成的能够实现远程监测功能的软、硬件系统。本设计采用嵌入式web服务器对远端工厂机器温度进行远程监测,用arm处理器lpc2292来实现精简tcp/ip协议栈;远程数据交换则采用b/s模式,简洁美观,便于系统的维护与升级。其使用具有统一性的html语言,标准化界面独立于客户端的软、硬件平台,极大地节省了客户端的开发工作。用户可以随时用ie浏览器进行远程访问来获得最新监测信息,实现有效监测和信息集中处理。

 2  系统总体设计

  本文采用基于嵌入式web服务器的远程监测,其结构如图1所示。

 

用于监测系统的LPC2292嵌入式WEB服务器如图

图1  温度监测系统的框图

  系统直接在32位的arm处理器lpc2292上实现嵌入式服务器,通过嵌入式web服务器将被控设备接入internet,用户可以通过ie浏览器对被控设备实现远程监测。

3  系统硬件设计

  嵌入式web服务器系统不仅要进行现场数据采集,还要通过网络将数据及时发布到互联网上。经过对性能与经济的综合比较后,本远程监测系统主要采用philips公司的一款功能强大、超低功耗、支持实时仿真和跟踪的微控制器lpc2292。片内有16k sram、256k flash、128位宽度的存储器接口和独特的加速结构可实现高达60mhz的工作频率。lpc2292采用144脚封装、极低的功耗、2个32位定时器、8路10位adc、2路can、pwm通道以及多达9个外部中断、76~112个gpio口、2个工业标准uart、高速i2c接口(400kbps)和2个spi接口。

  lpc2292内部没有集成以太网控制器,需要在片外搭建以太网接口电路。常用的芯片是rtl8019as,但本设计中采用davicom公司的dm9000a(e),它内置auto-mdix功能的10/100m自适应收发器,并支持多种连接模式,i/0速度比rtl8019as速度快且功耗也低很多。rj45接口采用st-j0012,内部集成有2个耦合变压器,可抑制来自介质的共模噪声和干扰。接口自带2个led,分别用来显示链接/活动状态和速度状态(10m/100m),大大节省了硬件的线路连接。

 

用于监测系统的LPC2292嵌入式WEB服务器如图

图2  系统硬件原理图

  系统的硬件原理图如图2所示,本设计采用16位数据总线对dm9000a进行访问,将16根数据线分别与lpc2292外部存储器数据总线的低16位相连。dm9000a没有地址线,cmd引脚与lpc2292的a1引脚连接,用来处理数据和命令。片选信号由lpc2292的cs2控制,当cs2为低电平时,控制器被选中,所以其命令操作地址为0x82000000,数据操作地址为0x82000002。dm9000a提供了eeprom接口,与93c46相连,可用来存储物理地址等信息。铁电随机存储器(型号是fm25cl64)用来存储每隔一段时间所测量的数据,64k的非易失性fram具有像ram一样快的读写速度,数据在掉电后可保存10年,还具有spi串行外围接口,方便与lpc2292的两个spi接口之一相连接。

  嵌入式系统对可靠性的要求很高,不允许出现死机现象,本设计中采用了专门的复位芯片cat1023来将完成上电、掉电时的可靠复位。cat1023含有一个精确的vcc监控电路并且它的复位端为开漏输出,利用jtag调试时仿真器可以主动拉低复位引脚使系统复位。

  本系统中的温度传感器是lm35。lm35是电压集成温度传感器,其输出电压与摄氏温度成正比,无需外部校正,精度可达0.5℃。其输出阻抗低,适用于远距离传送。

4  嵌入式tcp/ip协议的实现

  首先将μc/0s-ii移植到lpc2292上。移植μc/os-ii到lpc2292需要提供2个或3个文件:os_cpu.h、os_cpu_c.c及os_cpu_a.asm。并且需要在os_cpu.h包含几个类型的定义和几个常数的定义;在os_cpu_c.c和os_cpu_a.asm中包含几个函数的定义和时钟节拍中断服务程序的代码,还得修改两者间相关的数据类型和函数。

  由于嵌入式系统的硬件资源相对比较有限,在μc/os-ii操作系统上移植的tcp/ip协议栈需要进行一定的裁减,只需要arp协议、ip协议、icmp协议、tcp协议及http协议。发送数据时,应用程序通过socket api接口函数并使用tcp/ip协议栈提供的数据通讯功能。如果选择的是面向连接的tcp协议,则应用程序将用户数据交由tcp传输层处理,tcp协议将数据添加tcp首部后封装成tcp数据报;然后将封装好的tcp数据报交给ip网络层,ip协议在tcp数据报上添加ip头部信息封装成ip分组,然后根据路由表为ip分组确定路由,如果找不到相应路由,则发送出错报文,由icmp协议进行处理;如果找到了路由则把ip分组发送到以太网层,以太网层由以太网接口发送数据,利用arp协议找到目的ip地址对应的物理地址后,封装成以太网帧,由网卡驱动程序将数据发送到目的地。

  接收数据和发送数据的过程相反。接收数据时,由网卡驱动程序负责接收远程发送过来的以太网帧,然后交给以太网层,以太网层取出帧头并判断数据帧的类型字段标识,如果是arp报文,则交给arp协议模块处理;如果是ip报文,则交给ip协议处理,取出ip报头信息,然后根据报头中的上层协议字段标识,将报文交给相应的协议(tcp协议、udp协议或者icmp协议)处理;如果是tcp报文段,在处理函数中取出tcp报头信息,根据报头中的端口字段标识,将数据交给相应的应用程序http进行处理。http在端口80上使用tcp协议传递来自以太网和数据终端的数据,并对数据作打包拆包处理。tcp/ip协议实现的流程框图如图3所示。

 

用于监测系统的LPC2292嵌入式WEB服务器如图

图3  tcp/ip协议实现的流程框图

 5  嵌入式web服务器的实现

5.1 嵌入式web服务器软件设计

  嵌入式web服务器采用b/s模式,比浏览器简单,它在tcp的80端口打开一个被订的tcp连接。tcp协议是一个面向连接的协议,连接的双方无论是哪一方向另一方发送数据都必须先通过“三次握手”在双方之间建立一条连接。在建立连接后,tcp就开始发送数据块。完成数据传输之后再通过“四次握手”终止连接。发送请求行仅有一行文本,包括三个区:操作方式、所请求资源的地址、http版本。其中操作方式包括get、post、put、delect等7种,现代的web服务器出于安全性的考虑,只响应get和post两种请求。本系统只有对get请求的响应。

  系统初始化后,设置以太网控制器和arm处理器lpc2292内部定时器工作方式,将测量数据存入铁电存储器中,同时对数据分别添加tcp和ip层所需要的信息。arm处理器lpc2292将封装的数据发送给以太网控制芯片dm9000a。dm9000a自动会给这些数据添加以太网物理层和逻辑链路层所需要的相关信息,通过rj45接口传递到以太网上。为了保证网络正常工作,系统需要监听网络状态,对从dm9000a接收到的以太网数据帧进行解包分析,按上述的tcp/ip协议实现方式使远程监测数据发送到以太网,实现远程监测。

  系统程序采用c语言编写,在arm编译环境ads1.2下编译连接,将所生成的高效可执行代码写入到lpc2292片上的flash中。同时,整个系统软件的各个功能模块均采用高级语言c进行编写,使系统程序结构清晰,易于维护。

5.2 动态web页面的实现

  远程监测系统要求数据能及时地更新。为了实现网页的定时刷新,使用html语言中的meta标记,在html网页的开始处加入一条meta标记,就可以实现每3秒刷新一次当前网页。

  由于只需将web页面中的数据部分及时刷新,在客户请求网页时,web服务器在发送应答之前,首先调用getcurvar()函数对静态网页中需要动态显示的变量进行代换,用新数据替换其在网页中的字符串标记,然后将整个网页内容作为应答发出,这样数据就每3秒更新一次。

  实现浏览器与服务器之间的交互性,cgi给web服务器提供了一个执行外部程序的通道。cgi是建立在web服务器内的一个软件模块,它可以执行存储在服务器上的程序。cgi程序可以用shell脚本语言、pascal、fortran、perl、c等语言进行编写,由于c语言与平台无关,所以选择用c语言来编写cgi程序。

  html语言编写web页面及内建表单时,要由action属性指定相关的cgi程序,由mothod属性指定所用的提交数据的方法,即:mothod=get。下面是编写的监测系统的web页面中部分温度查询程序段在浏览器中的显示。

输入要查询的第几次温度值。

用于监测系统的LPC2292嵌入式WEB服务器如图

  通常cgi是一个不依懒于嵌入式web服务器的应用程序,它一般完成web网页中表单(form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。如果有任何附加的参数,cgi程序就会把这些参数作为环境变量进行处理,从而对用户的命令做出响应。为了实现动态的web页面,用c语言编写cgi程序。将编写好的cgi程序编译成二进制文件放在cgi-bin/目录下,cgi程序能被正确地执行。cgi的get方法通过环境变量query_string向cgi程序传递form中的数据,cgi程序中的库函数getenv把环境变量的值作为一个字符串来读取,在取得了字符串中的数据后,就可以对数据进行需要的处理。处理完成后的数据将被重定向到客户浏览器,用户可通过浏览器查询到前面的任何一次监测的温度值。

  下面是处理表单的cgi程序temperature.c:

#include

#include

int main(void){

char*d;

d=getenv(“query_string”);

printf(“

%ld此次的温度值为:”,d);

}

 6  结束语

  针对工业企业中的现场设备与以太网间的通信互联,本文实现了嵌入式系统在远程监测系统中的应用,并解决了数据传输的具体问题。设计了一种基于lpc2292的嵌入式web服务器。该服务器实时性好、造价低、可靠性高,并且开发周期短。工程人员只需在pc机上远程登陆就可以了解远程设备的运转情况,获取数据,在实际的工业应用中可以得到极大的推广。
 

标签:监测系统,LPC2292,嵌入式,服务器

相关文章