一种新型嵌入式远程监控系统的设计开发
扫描二维码
随时随地手机看文章
1 引言
嵌入式监控系统是当前工业自动化监控应用领域研究的热点之一。微电子技术和微处理器制造工艺的提高以及网络技术的飞速发展,使得构建基于Web的嵌入式远程监控系统得以实现。这样的远程监控系统可以直接通过TCP/IP网络协议接入Internet实现远程监控,成为真正不受时间和空间限制的远程监控系统。
由于近年来一些半导体厂家新推出的MCU的存储能力都有了很大的提高,以及用C语言编写的程序具有移植性强、可读性好等优点,因此本文监控软件采用标准C语言编写,并在m6811-elf-gcc中编译通过。本文将从嵌入式Web监控系统的通信基础--以太网接口模块着手,分别讲述各个功能模块的设计与实现。
2 以太网接口程序设计
以太网接口程序是与硬件设计中的网络控制芯片密切相关的,不同的网络控制芯片具有不同的以太网接口程序,但是一个完整的以太网接口程序通常包括三个部分:硬件模块初始化、以太帧的发送和以太帧的接收。
1、硬件模块初始化
本文使用的Freescale公司的MC9S12NE64 MCU集成了EPHY和EMAC两个硬件子模块,它们的初始化必须严格按照技术手册进行,避免忽略一些细节。
2、以太帧的发送
在NE64中发送一个以太帧,必须将该帧内容写入至EMAC模块的发送缓冲区(TX缓冲区),然后再通过发送命令将其发送出去,接下来的工作由下层硬件完成。与以太帧的发送相关的寄存器包括发送缓冲区帧结束指针寄存器(TXEFP)、发送控制和状态寄存器(TXCTS)。
3、以太帧的接收
判断以太帧的接收有两种方法:查询法和中断法。由于中断法有更好的执行效率,本文使用了中断法接收以太帧。由于NE64有两个接收缓冲区A和B,因此到达的帧可能存储在A缓冲区也可能存储在B缓冲区,所以中断矢量也有两个:A缓冲区接收完成中断和B缓冲区接收完成中断,其矢量地址分别是$FFB2和$FFB4。无论是A缓冲区还是B缓冲区接收到数据,处理方法是一样的,都是将接收到的数据帧读出来,再进行相应的处理。
3 uIP协议实现的程序设计
3.1 TCP协议的实现
TCP协议是嵌入式Web的核心,它提供一种基于连接的带确认的可靠的数据流传输方式,可增强网络的服务质量。TCP协议的机制很复杂,它的完整实现对处理器的存储能力和运算能力要求较高。这对于嵌入式系统来说是比较奢侈的,因此必须对其进行简化。本文要实现的是一个基于嵌入式Web服务器的监控系统,经过仔细分析,本文得到如图1所示的简化的TCP状态机。其中连接的断开由服务器主动执行,通过多次实验总结出来该方式在本文系统中,比标准的TCP协议主动断开连接的状态机简单且稳定。
图1 服务端简化的TCP状态图
另外本系统可以根据不同的应用要求调整TCP所支持的连接数量,但是通常在同一时刻仅支持单个TCP连接。同时为了避免因为数据报的丢失而造成状态机的死锁,本文使用简单定时机制,使TCP状态机在超时后复位。
TCP协议连接建立的过程被称为“三次握手”。首先,客户端向服务端提出连接请求。此时客户端在TCP报头中插入自己的ISN,并置SYN标志为1,表示序列号字段合法,需要检查。其次,服务端收到该TCP分段后,以自己的ISN回应,同时确认收到客户端的TCP分段,置ACK标志为1。最后,客户端确认收到服务端的ISN,置ACK标志为1。至此完整的TCP连接建立,开始全双工模式的数据传输过程。
3.2 其他协议的实现
在实现以太网底层驱动的基础上,接下来实现用于以太网通信的上层协议。ARP协议是为了通信双方获取对方MAC地址的通信协议,是网络通信的基础,本文实现了ARP请求报文的发送和接收以及ARP响应报文的接收和处理功能。为方便网络调试,在uIP中实现了Ping命令,当监控设备正常工作后可省略该部分内容。SD12-MCS是实现一个基于嵌入式Web的应用设备,并非嵌入式网关或路由器,因此为了节约嵌入式系统资源,本文裁减了IP协议的路由功能,有关路由问题都由默认网关完成。尽管基于Web方式的SD12-MCS使用了TCP协议,但是目前也有一些应用是基于UDP协议的,为了系统具有更好的扩展性,本文也实现了UDP协议。
4 Web服务器的设计与实现
该监控系统的工作模式为嵌入式Web服务器方式,因此本文在实现uIP协议的基础上,设计并实现了应用层的HTTP协议以及CGI处理程序。
4.1 HTTP协议的设计与实现[!--empirenews.page--]
Web的应用层协议HTTP是Web的核心。HTTP协议实现的客户机/服务器模式是一种请求/响应结构。考虑到系统实现时嵌入式TCP协议同时支持的连接次数和安全性问题,本文采用HTTP1.0协议,Web服务器每次发送完响应就断开连接。状态码的含义很多,本文使用了两种:当请求网页成功时,返回状态码200,原因短语为OK;当所请求的网页不存在时,返回状态码404,原因短语为NOT FOUND。头部字段名也是可选部分,但是本文使用了其中一个选项Content-Length:指出所发送对象的字节数,以方便程序调试。实体部分就是响应的具体内容,譬如一个HTML网页或者一张图片等等。
本文HTTP协议静态页面的实现需要完成如下内容:首先获取URL中的文件名,接着根据该文件名调用https_calculatehash()函数获取文件句柄,即文件处理入口数据结构中的hash域值,根据该值查找文件的起始地址,然后将文件装入TCP套接字发送缓冲区。当所发送的文件过长而大于发送缓冲区的大小时则会发生缓冲区的溢出问题,本文的解决办法是:首先判断文件的长度,当文件过长时,将文件分割成多个不大于发送缓冲区大小的分段,然后循环发送出去。HTTP协议中静态页面处理的程序流程如图2所示。
图2 HTTP静态页面处理流程图
4.2 CGI的设计与实现
在该监控系统中,除了支持静态页面,还必须支持动态内容和动态表单的处理,主要包括动态生成实时采集数据页面和处理控制命令表单。为了实现该功能,本文设计了CGI接口处理程序。
考虑到实际应用情况,本文无需在NE64中移植操作系统,因此为Web服务器创建CGI接口不能照搬标准CGI。首先,本文的Web服务器不能同时运行多个应用程序,每个应用程序的运行都会独占CPU,直到完成才会释放CPU。其次,本文未实现复杂的缓存机制,所以反复执行应用程序是个低速的过程。因此,本文对标准CGI进行了裁减,设计了嵌入式CGI(Embedded CGI),通过该方法实现了嵌入式Web服务器的数据的采集和监控。其工作处理流程如图3所示。
图3 CGI处理流程
5 A/D采集子程序
为了实现不同精度、更多路的数据采集,系统既使用了NE64集成的A/D采集模块,又使用了通过SPI外扩的专用的A/D采集芯片TLC2543。因此,A/D采集子程序包含了这两部分的内容。在具体实现时,本文通过变量TLCAD控制调用哪个采集子程序,当TLCAD=100时,调用TLC2543采集子程序;当TLCAD=99时,调用集成A/D采集子程序。系统在采集数据时,模拟量输入信号从最小的通道号依次接入,实际模拟量的个数由变量NE64ADNmb和TLCADNmb决定,分别表示采集精度为10位的模拟量个数以及采集精度为12位的模拟量个数。
在A/D数据采集过程中,不可避免地会受到随机噪声的干扰,从而造成采集数据的不准确,进而得出错误的结论。为了防止脉冲干扰该系统,本文作者采用了中值滤波的方法。在中值滤波的基础上,为了保证采集数据的稳定性,本文作者采用了算术平均值滤波的方法。
6 模块测试
该监控系统软件的主要功能是实现多路数据采集、网络协议通信以及对象控制机制。模块测试部分主要针对各模块进行软件测试。由于篇幅限制,下面主要针对起数据采集部分介绍其测试部分。SD12-MCS共支持30路模拟量数据采集,其中8路10位精度的AD属于NE64的A/D模块,剩余22路属于2片TLC2543采集芯片。为了验证每个采集程序是否正确,本文设计了这样一个测试用例:首先单独运行其中一种精度的采集程序,发送所有通道采集到的数据,通过串行口发送给高端PC机,并由PC机的测试用例显示,若显示数据正确,则程序正确。在此基础上,发送参数确定调用哪种子程序,同时控制采集多路模拟量,由于本文设置模拟量采集都是从第0通道开始,并依此类推,因此不需要设置究竟是采集哪个通道的模拟量,从而简化程序处理。
本文作者创新点:
本文主要介绍了一种基于Web的嵌入式监控系统控制策略设计与实现。通过对各功能模块测试显示该监控系统性能良好,符合相关设计要求。