本文提出了一种在单片机系统中实施基于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 系统实现
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
000000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C8420000C84251AD
通过工具截获的数据以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
来源:维库开发网