本文提出了一种在单片机系统中实施基于HTTP协议的数据采集的方案,利用嵌入式网络模块实现串口到以太网数据的转换,使用采集板将数据封装成HTTP包.
该方案灵活方便,实现简单;采用分布式结构,采集效率高,可适用于大量数据的采集,而且可以方便扩展为基于Internet的远程数据采集.
1 前言
随着工业以太网的发展,由于传输速度、传输可靠性及可扩展性等综合性能方面的优越性,越来越多的数据采集系统都是基于以太网接口,并且越来越多的仪器仪表设备也提供了以太网接口.但是很多企业都有早期投入的设备仪表,一般使用串口进行数据通信,因此需要一种简单、高效、易于扩充的集成方案,实现对原有设备仪表的数据采集,并且可以方便的集成到现有的以太网工业控制系统中.本文提出一种数据采集方案,除了满足前面要求外,由于其采用HTTP协议,可以方便扩展为基于Internet的远程数据采集.HTTP协议可以利用嵌入式系统(WinCE、Linux等)基于其自带的TCP/IP协议栈实现或者直接使用嵌入式Web服务器[1~4],在计算机系统中也可以利用高级语言直接使用Web客户端使用HTTP协议或者利用Winsock网络编程,实现基于HTTP的数据交互,但都会增加系统的开发成本,本文提出一种基于嵌入式网络模块在单片机系统中实现简单HTTP协议的方法,并基于此方法构建数据采集方案.
2 系统结构
HTTP协议是一种基于TCP实现的应用层协议,它是因特网可靠的交换数据的重要基础.如果要实现HTTP协议,必须以TCP/IP协议栈为基础,利用嵌入式网络模块即可方便的实现TCP/IP协议栈的功能.图1为一个利用嵌入式网络模块实现的基于HTTP协议的数据采集方案.
图1 系统结构
图1中,最关键部分是采集板和网络模块.当今仪器仪表最常用的通讯接口是485串行接口,采集板和仪表设备一般通过485总线连接,采集板利用单片机开发,实现下位机和设备仪表的通信,采用主从方式采集所需要的数据,再通过485总线发送给网络模块,网络模块收到采集板数据发出的串行数据,利用内嵌的TCP/IP协议栈实现串行数据到以太网数据的转换,网络模块通过网线、交换机和采集服务器连接.采集板是实现HTTP应用层协议的地方,只要采集板发出的数据符合HTTP协议,经由网络模块转化后成为合法的HTTP请求,则Web服务器可使用任何的服务器端动态网页技术(CGI、ASP、JSP、PHP、ASP.Net等)实现数据的处理和保存.
3.1 采集板
采集板和仪表进行主从通讯采集数据以外,最主要的任务就是把采集的数据封装为HTTP协议的数据包,也就是要在单片机中实现简化的HTTP协议,能够完成基本的数据交互功能即可.在国际标准中,有两个HTTP协议的标准文档:RFC1945和RFC2616[5].这两个文档分别描述了HTTP/1.0和HTTP/1.1的实现标准.这两个版本的HTTP协议最大区别在于前者不支持保持连接,规定每次的HTTP请求和响应后都要关闭TCP连接,而后者支持持久连接,这意味着可以打开一次TCP连接进行多次请求/响应,大大提高了性能.为了提高性能,本文中将实现基本的HTTP1.1协议.经过分析研究,找出了一种比较简单且有效的实现.下面通过一个具体例子说明实现的HTTP协议包格式.
GET /com2http/test.aspx HTTP/1.1CRLF
Host: 127.0.0.1CRLF
Content-Length: 86CRLF
Connection: Keep-AliveCRLF
CRLF
000000C8420000C8420000C8420000C8420000C8420000C8420000C842000
0C8420000C8420000C84251AD
通过工具截获的数据以16进制显示如下:
00000000:47 45 54 20 2F 63 6F 6D 32 68 74 74 70 2F 74 65 GET /com2http/te
00000010:73 74 2E 61 73 70 78 20 48 54 54 50 2F 31 2E 31 st.aspx HTTP/1.1
00000020:0D 0A 48 6F 73 74 3A 20 31 32 37 2E 30 2E 30 2E ..Host: 127.0.0.
00000030:31 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 1..Content-Lengt
00000040:68 3A 20 38 36 0D 0A 43 6F 6E 6E 65 63 74 69 6F h: 86..Connectio
00000050:6E 3A 20 4B 65 65 70 2D 41 6C 69 76 65 0D 0A 0D n: Keep-Alive...
00000060:0A 30 30 30 30 30 30 43 38 34 32 30 30 30 30 43 .000000C8420000C
00000070:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
00000080:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
00000090:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 43 8420000C8420000C
000000A0:38 34 32 30 30 30 30 43 38 34 32 30 30 30 30 438420000C8420000C
000000B0:38 34 32 35 31 41 44 84251AD
上面显示的便是一个合法的HTTP协议的数据包实例,从0x61开始为真正的有效数据信息,数据包括一个字节的采集站地址,本例中为“00”,10个符合IEEE-754标准的单精度四字节浮点数,本例中为10个100.0(16进制表示为0000C842),和2个字节的CRC16的循环检验码,本例中为“51AD”.HTTP协议传送的数据一般都是文本格式,所以总共43字节二进制数据经过转化成为86字节的16进制字符串数据.在HTTP包的封装中,除了数据域以外,0x4开始的“/com2http/test.aspx”和0x43开始86会根据实际需要在下位机中由程序自动设置,分别表示处理该数据的处理页面和提交的有效数据字节数.由此可以看出,只要在有效数据的前面加上HTTP请求头,就可以实现简单的HTTP1.1协议,在单片机系统中实现这种功能和写普通的串口发送程序一样简单.
3.2 网络模块
该模块在该系统中起着承上启下的作用,实现了TCP/IP协议栈,完成把485线上串行传送的HTTP包数据转化为在交换式以太网中的以太网帧,真正向Web服务器发出HTTP请求.
3.3 Web Server And Real Database
网络模块转化后的HTTP请求最终到达Web服务器,可用任何服务器端动态网页技术实现数据的处理和保存,实验方案采用微软最新的动态网页技术ASP.Net.通过编写程序获取有效数据,转化为原始二进制数据形式,验证校验码,如果无误根据数据的对应写入实时数据库,如果实时性要求不高以及数据存储量不大,可以使用ACCESS数据库,不然可以使用专用的数据库服务器,如Oracle和SQL Server.
4 优点
本文中数据采集方案有以下优点:
(1)可以很方便的集成现有设备和仪表的数据采集.只要知道仪表设备的通讯协议,在下位机实现数据通讯,把采集到的数据封装为HTTP协议包通过串口发出即可.
(2)采用工业交换以太网,基于HTTP协议,同时满足局域和远程采集的需要.可以把该系统连至Internet,Web Server And Real Database和采集系统不在同一地理位置,而且服务器可以同时处理多个不同地理位置的数据,方便实现数据集中,能更好的管理和使用数据.
(3)方便维护和升级,方便增加采样点.可以根据需要随意增加下位机,做到需要几个模块调试增加几个模块.
(4)不同于传统的专用采集服务器采集数据模式,上位机服务器的功能由Web服务提供,不需要编写专门的数据接收程序和采集程序,只要编写完成数据的处理和保存的代码.真正同仪表的通讯由下位机完成,形成分布式数据采集,Web服务是多线程体系结构,可并发处理多个下位机模块发送的数据,使得整个系统支持更多的数据点采集,提高整个系统的采集效率.
5 实验
(1)下位机实现:同普通的下位机系统设计和实现,只是在数据发送时需要加上HTTP协议包的包头,可参考3.1.
(2)网络模块:实验选用了广州周立功单片机发展有限公司开发的一款嵌入式网络模块-ZNE-100T,它内部集成了TCP/IP 协议栈,利用它可以轻松完成嵌入式设备的网络功能,另外为了测试方便直接使用了ZNE-100T的评估板.通过周立功公司提供的配置软件可以轻松设置网络模块的参数,需要设置的参数包括IP地址、子网掩码、网关、串口的波特率设置、端口工作模式、目标IP 地址和目标端口等,特别说明的是端口工作模式,由于HTTP协议是基于TCP的,所以该方案中模式设为TCP Client模式,目标端口一般默认设置为80.
(3)Web服务器使用联想万全520服务器,Windows Server2003操作系统,IIS6.0,数据库采用SQL Server 2005,使用ASP.Net技术编程实现数据处理和保存. 下面给出用C#实现的数据处理核心代码实例:
byte []a;
a=this.Request.BinaryRead ( this.Request.ContentLength) ;//获取提交的数据
System.Text.ASCIIEncoding ascii=new System.Text.ASCIIEncoding ();
string c=ascii.GetString (a);
if (!CheckValidChr (c))//检查是否有非法字符
return ;
byte []b=new byte [a.Length /2];
for (int i=0;i
b[i/2]=Convert.ToByte (c.Substring (i,2) ,16);
if (!CheckCRC(b))//验证CRC
return ;
for (int i=5;i
{
if ( (i-1) % 4 ==0 )
{
float t=BitConverter.ToSingle (b,i-4);//把字节数据转化为浮点数
SaveData(b[0],(i-1)/4,t);//根据下位机站地址以及数据位置保存数据
}
}
6 结束语
经过实验证明,基于本文方案可以快速有效的部署一个数据采集系统,比传统的串口数据采集方法有很多优越性,扩展维护方便,由于上位机基于动态网页技术,只需编写数据处理和保存程序,使得系统的开发工作主要放在下位机和仪表的通信上.需要说明的是,该方案中使用ZNE-100T评估板和下位机通过485串行总线相连,下位机向网络模块发送的有效数据需要加入CRC校验,防止在485总线上数据出现错误引起Web服务器采集到错误数据.另外一个解决方案是把ZNE-100T模块集成在下位机,这样可以取消校验.不过前者有个优点就是如果下位机距离交换机很远,可以近距离用网线把交换机和网络模块连接,用485线把网络模块和下位机连接,实现了长距离数据传输.由此可出看出,利用嵌入式网络模块实现基于HTTP协议的数据采集系统确是一个非常灵活的方案.