1 前言
Web Service作为一种有着强大功能的可互操作性和扩展性的新技术,被越来越多用于异构数据的集成,自然想到将其应用于工业数据采集系统的异构数据的集成.本文介绍了一种在单片机系统中调用Web Service实现主动提交数据的方法,方便了数据采集系统的集成.在传统的数据采集系统中,可以利用单片机系统用串口方式采集仪表数据,通过串行总线将数据提交给上位计算机,通过预先设计的通信协议与上位采集服务器通信,集成采集的数据.当需要增加下位机采集模块时需要扩展对应的上位机采集口,采集系统的升级和维护都非常麻烦.在单片机系统中通过调用采集服务器端的Web Service和上位机交互数据,可以简化下位机和上位机的通信,把主要工作放在下位单片机系统如何和仪表通信采集数据上, 基于该方法可以方便的构建基于工业以太网的分布式数据采集方案.该方案还可以方便的集成已经存在的数据采集系统,方便单片机系统的升级,比如可以把利用单片机实现的采集系统很容易的改为PLC采集系统或直接PC采集数据模式,而只需升级后的系统调用同样的Web Service交互数据即可.由于Web Service调用使用HTTP协议交互数据,该方案还可以方便的扩展为支持Internet的远程数据采集.
2 单片机系统中调用Web Service的实现
2.1 Web Service技术[7,9,10]
Web Service是能够通过Web协议来访问的可编程应用程序组件, 使原来孤立的站点之间的信息能够相互通信、共享.Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP、WSDL、UDDI等,所以Web Service可以在任何支持这些标准的环境(Windows、Linux等)中使用.Web Service本质其实不是一种新技术,前面提到其使用了Internet标准,这些标准便是Web Service的核心技术.
(1)HTTP是一种基于TCP实现的应用层协议,它是因特网可靠的交换数据的重要基础.HTTP为Web Service请求与响应提供了传输层,HTTP使得任何设备和平台都可以访问Web Service.
(2)XML(Extensible Markup Language,可扩展标记语言),是一套规范,允许编程人员自行定义如HTML般的标注,以方便数据存取和处理、交换、转换等,主要特点是使用有意义的标记,这个特性使计算机可以理解数据含义.XML可以在任何系统、应用程序、任何平台上运行,数据传输以Internet为基础,传输费用便宜.
(3)SOAP协议(Simple Object Access Protocol,简单对象访问协议),是一个用于分散和分布式环境下网络信息交换的基于XML的通信协议.它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问.由于数据采用文本格式,调试方便,容易穿越防火墙.
(4)WSDL(Web服务描述语言),是基于XML的用来描述Web服务功能的一种语法.
(5)UDDI(Universal Description, Discovery, and Integration, 统一描述、发现和集成),基于XML创建的一个平台独立, 开放的框架,通过Internet来描述服务,发现服务,并且整合服务.
2.2 Web Service 调用本质
现在很多语言工具都支持Web服务开发,如VS.Net、J2EE、JBuilder等,而且很多语言工具是跨平台(Windows、Linux等)的.这些开发工具都有专门的开发包或者类库,可以方便的实现Web Service的定义和调用,本文主要研究单片机系统中实现Web Service的调用方法.
调用Web Service本质上就是程序客户端和Web Service服务器端的信息交互,且有专门的信息格式.在ASP.net中提供了三种交互端口(协议):SOAP、HTTP-GET和HTTP-POST[7].在这三种协议中,SOAP是XML Web Service最常用到的.与HTTP相比,SOAP显的更为复杂,但却拥有更强的接受能力.SOAP是一种以XML为基础的协议,它提供一种将数据打包和编码的方法,以用于网络的数据传输.任意一个用户都可以使用SOAP协议与任何一个Web Service进行通信,甚至于说这个XML Web Service不是建立在ASP.NET 平台上的,比如说Java的,都可以利用SOAP来进行数据传输.因此SOAP是语言独立的. HTTP将SOAP 消息封装,然后以它的形式进行网络传输. HTTP-GET和HTTP-POST这两种方法传送参数和数据的能力比较简单,非常适合不能使用SOAP的客户来调用Web Service的情况. HTTP-GET和HTTP-POST方式与SOAP相比有如下特性:
优点:(1)HTTP方式不需要复杂的XML消息处理,适合不支持XML的平台使用;(2)HTTP方式在交互时候不需要添加额外的标签,减少了交互的数据量和开销,有利于提高整体性能.
缺点:(1)不能调用具有复杂数据类型参数的Web Service;(2)如果调用返回复杂数据类型时处理不方便;(3)不能把类和结构序列化为XML消息;(4)不能使用引用方式传递参数.
结合单片机系统调用Web Service的实际需要以及考虑到单片机的处理能力低,不支持XML,不适合复杂的数据处理,开发效率低等问题,认为使用HTTP方式比较合适,本文中将以HTTP-POST为例介绍其调用Web Service的实现方法.
2.3 实现单片机系统中调用Web Service的核心技术
(1)基于嵌入式网络模块实现HTTP
在嵌入式系统(WinCE、Linux等)中,可以基于其自带的TCP/IP协议栈实现HTTP或者直接使用嵌入式Web服务器[1~5]来使用HTTP协议,在计算机系统中则可以在高级语言中直接调用Web客户端使用HTTP协议或者利用SOCKET网络编程实现基于HTTP的数据交互,实现都比较简单,但在单片机系统中,其自身并没有TCP/IP协议栈,因此基于嵌入式网络模块在单片机系统中实现HTTP.
要实现HTTP协议 ,必须以TCP/IP协议栈为基础,利用嵌入式网络模块即可方便的实现TCP/IP协议栈的功能.如图1所示,下位机和仪表设备通过485总线连接,下位机利用单片机开发,采用主从方式和设备仪表通信采集数据.采集到的数据再通过总线发送给嵌入式网络模块,模块收到串行数据,利用内嵌的TCP/IP协议栈实现串行数据到以太网数据的转换,嵌入式网络模块通过网线连接至工业以太网.该方法中,下位机是实现HTTP应用层协议的关键,只要下位机发出的数据包符合HTTP协议,经嵌入式网络模块转化,变成可由Web服务器处理的合法HTTP-POST请求包,则可利用Web Service实现数据的处理和保存,也就实现了单片机系统调用Web Service.
图1 单片机系统结构
实验中选用了广州周立功单片机发展有限公司开发的一款嵌入式网络模块ZNE-100T,它内部集成了TCP/IP 协议栈,利用它可以轻松完成嵌入式设备的网络功能,另外为了测试方便直接使用了ZNE-100T的评估板.通过周立功公司提供的配置软件可以设置网络模块的参数,包括IP地址、子网掩码、网关、串口的波特率、端口工作模式、目标IP 地址和目标端口等,特别说明的是端口工作模式,由于HTTP协议是基于TCP的,所以实验中模式设为TCP Client模式,目标端口默认设置为80. (2)HTTP-POST消息格式 Internet标准定义了两个HTTP协议的标准文档:RFC1945和RFC2616[6].这两个文档分别描述了HTTP/1.0和HTTP/1.1的实现标准.这两个版本的HTTP协议最大区别在于前者不支持保持连接,规定每次的HTTP请求和响应后都要关闭TCP连接,而后者支持持久连接,这意味着可以打开一次TCP连接进行多次请求/响应,大大提高了性能. 由于单片机系统的处理效率低、资源有限等原因,在其上实现完整HTTP协议很不现实,实际上为了实现Web Service调用也没有必要全部实现,只需实现基本的HTTP1.1协议完成单片机系统和Web服务器的数据通信即可. 经过分析研究,找出了一种比较简单有效的HTTP-POST格式.下面通过一个具体例子说明实现的方法. 用C#实现Web服务WebService1,定义一个处理模拟量数据的方法:[WebMethod]public string SimulateData(byte s,float[] a) { … return "OK";} SimulateData方法的参数中,s为下位机站地址,可以用来区分哪个下位机发来的数据,数组a为下位机提交的模拟量数据,数据个数根据实际传递的数据来定.下面是HTTP-POST请求包数据:POST /WebService1/service1.asmx/SimulateData HTTP/1.1Host: 127.0.0.1Content-Type: application/x-www-form-urlencodedContent-Length: 43s=1&a=100.0&a=100.0&a=100.0&a=100.0&a=100.0 上面为一个合法的HTTP-POST协议的包实例, “/WebService1/service1.asmx/SimulateData”为要调用的Web Service的方法名及其服务地址,最后一行为真正的有效数据信息,数据包括采集站地址,本例中为1,以及5个模拟量数据,本例中为5个100.0.在HTTP-POST包中除了数据域以外,“Content-Length: 43”中的43会根据数据域实际字节个数在下位机中由程序设置,表示提交的有效数据字节数.由此可以看出,只要加上正确的HTTP请求头、相应的Web Service地址,并且按照HTTP1.1 POST规范设置数据域数据就可以实现简单的HTTP-POST协议,在单片机系统中只需把这些数据通过串口发出,剩下的工作由嵌入式网络模块实现,和编写普通的串口发送程序一样简单.经络模块转化后的HTTP-POST请求最终到达Web服务器,根据数据的对应写入实时数据库,如果实时性要求不高且数据存储量不大,可以使用ACCESS数据库,不然可以使用专用的数据库服务器,如Oracle和SQL Server. 调用Web Service后也会返回给下位机数据以表示执行结果,如果下位机不关心执行结果可以忽略返回的数据,否则可以根据需要进行相应的处理,下面给出作者实验时的返回数据:HTTP/1.1 200 OKDate: Thu, 08 Feb 2007 07:45:51 GMTServer: Microsoft-IIS/6.0MicrosoftOfficeWebServer: 5.0_PubX-Powered-By: ASP.NETX-AspNet-Version: 1.1.4322Cache-Control: private, max-age=0Content-Type: text/xml; charset=utf-8Content-Length: 101< xml version="1.0" encoding="utf-8" >
评论排行