1 引言
XML使得从工厂底层到企业办公自动化的系统集成变得非常容易,利用Internet技术,它可以实现以任何文件格式进行再使用、搜索和交换数据信息,实现从工厂底层的监控和控制系统到较高级别的制造业企业应用程序的纵向信息系统集成。同时在工厂自动化和企业解决方案方面也能够获得较高的集成度。XML还能够提供更好的方式将获得的实时生产数据信息嵌入基于办公自动化信息处理的应用程序中去,进一步满足企业对各种数据信息的需要。
2 OPC DA(COM)的局限性
以往的OPC(OLE for Process Contrl)规范是基于Microsoft COM/DCOM技术制定的。然而,由于COM自身的一些特点,使得它的应用受到了一定的限制,主要表现在以下3个方面: (1) 依赖Microsoft环境,缺少跨平台通用性 由于COM/D COM对Microsoft平台的依赖性,使得OPC COM接口很难被应用到其它平台上。如果运行的是DCOM服务器程序,所有的分布式的客户端不得不运行于微软的操作平台上。 (2) 难以与企业应用程序连接 企业应用程序需要实时的工业现场数据,但是这些上层应用程序大多没有与OPCCOM服务器交互的OPC COM接口,因而无法连接到具有COM接口的OPC服务器进行获取数据。 (3) 不易通过防火墙,较难与Internet应用程序集成 现行的OPC COM应用程序在现场级的局域网环境下能够很好的工作。但当你试图通过Internet进行数据交换时,网络防火墙会过滤掉大多数基于COM传输的数据,因此基于COM为了解决这些问题,人们用OPC XML标准,对原有OPC服务器进行必要的功能扩充。OPC XML 标准具有良好的跨平台通用性,而且基于广泛应用的Internet标准。
3 OPC XML解决方案
(1) OPC XML简介 OPC XML DA用基于XML的Web服务概念,用SOAP(简单对象访问协议)作为对应用程序共享消息进行包装的标准协议。OPC客户端和服务器之间通过HTTP协议传输Web服务。OPC XML提供一种比较容易的方式用于通过Internet发布OPC数据信息,为企业自动化过程控制系统集成提供广泛的连接特性。同时也为非Microsoft操作系统平台发布OPC数据信息提供一种数据信息转换机制,这些平台包括Linux、UNIX、CORBAR等。 OPC XML DA支持Brows、Read、Write、Subscribe等服务,每种服务都包括一个请求(Request)和一个响应(Response)。通过对这些服务的定义,提供了访问工业现场数据的标准接口。请求和响应按照SOAP协议标准被包装成SOAP信封,信封标题说明消息如何被处理,信封正文则包含工业过程信息。 (2) OPC XML解决方案 OPC XML标准采用了XML技术扩展了OPC访问数据信息平台。OPC XML DA定义了一套基于XML的面向工厂自动化和过程控制领域的数据信息交换接口,以便让这一领域的自动化过程控制设备横跨Internet而工作。用OPC XML作为OPC COM数据服务器的补充,在OPC COM服务器上添加OPC XML接口,将OPC COM数据服务器采集的数据通过OPC XML发布到Web服务器上,这样处于其它网络平台的授权用户就可以很容易通过Internet访问Web服务器提供的信息(如图1所示)。

图1 OPC XML支持任何操作系统平台的Web浏览器
人们还开发了基于SOAP协议的客户端,实现了对企业信息及生产数据的访问。在实验室环境下取得了较好的预期效果。 (3) SOAP简介 SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。SOAP可以简单的理解为这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在Internet进行通讯交互。 SOAP的两个主要设计目标是简单性和可扩展性,它包括四个部分:SOAP信封(SOAP Envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(SOAP Encoding rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(SOAP RPC Representation),表示远程过程调用和应答的协定;SOAP绑定(SOAP Binding),用于使用底层协议交换信息。 SOAP定义了一种消息交互机制,它描述了如何用XML对信息进行编码。通常,SOAP用于在运行时解释远程调用的参数值,并且使用特定的编码方式将这些值填充在XML文档中。然后,XML数据通过HTTP协议传输至远程服务器。SOAP 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。 (4) SOAP与DCOM的比较优势 首先,DCOM定义了传送信息的语义,对参数和返回值使用二进制编码。但是对诸如参数名称或类型的任何信息都不编码,使中介很难处理消息。又因为每个系统使用不同的二进制编码,系统间的互操作很难实现。SOAP并没有定义信息的语义、服务质量以及基于Internet的事务处理。而是采用 XML 进行消息编码,正确的处理需要服务器和客户端本身来执行,理解和执行彼此使用的信息格式(One-To-One,Request/Reply,Broadcast,ETC),应用程序本身在语义解析中扮演着十分重要的角色。 其次,尽管DCOM可以在微软的各种平台上运行,但是基于DCOM的解决方案必须依赖于单一的应用程序。比如说,假如运行的是DCOM服务器程序,所有的分布式的客户端不得不运行于微软的操作平台上。DCOM适合于服务器―服务器间的通讯,但是对于客户端―服务器的通讯十分脆弱,尤其当客户程序分布在Internet上更是如此。 最后,DCOM虽然是有效的、灵活的,但也是很复杂的。而SOAP的一个主要优点就在于它的简单性,SOAP使用HTTP作为网络通讯协议,接受和传送数据参数时采用XML作为数据格式,从而代替了DCOM中的NDR格式,提供了更高层次上的抽象,与平台和环境无关
4 基于SOAP的OPC XML DA客户端的实现
现在许多自动化厂商已经开发出了高效的OPC XML DA应用程序,如作为OPC规范的五个发起公司之一的SIEMENS公司开发的WinCC更是很好的支持OPC XML。客户可以按照OPC XML规范编写自己所需功能的客户端,就能实现与服务器相连,进行数据交换。 OPC XML DA是在Web服务基础上制定的全新的接口规范,所有支持Web服务的编程工具(例如Microsoft的Visual C++,Borland Delphi等)都可以用来编写OPC XML DA接口。由于Delphi7强大的Web Service 功能,对XML和SOAP有很好的支持,开发者无需精通XML和SOAP即可进行相关程序的开发,因此选用Delphi在WINDOWS下进行客户端的编程。
 图2 Read命令界面
下面以客户端如何向服务器端发送读请求为例,给出开发步骤及部分实现代码。测试服务器网址为www.tswinc.us/XMLDADemo/XML_Sim/opcxmldaserver.asmx。 步骤1:在工程目录下建立一个文本文档,把Read界面中各命令的参数值按照XML语言规范保存到这个文档中,方便以后用到读命令时进行SOAP封装。文档中XML代码如下: <Read xmlns=" http://www.tswinc.us/XMLDADemo/XML_Sim/opcxmldaserver.asmx"> <Options ReturnItemName="true" ReturnItemPath="true" ReturnDiagnosticInfo="true" ReturnItemTime="true" ReturnErrorText="true" ClientRequestHandle="123" LocaleID="" /> <ItemList MaxAge="0"> <Items MaxAge="0" ItemName="Bucket Brigade.Boolean" ClientItemHandle="264331" /> </ItemList> </Read> 步骤2:SOAP请求需要SOAPAction HTTP标头。 SoapAction:= 'http://opcfoundation.org/webservices/XMLDA/1.0/’+’Read’; 步骤3:发送的SOAP Envelop ReadRequest := TStringStream.Create( ‘<?xml version="1.0" encoding="UTF-8" ?>’ +’<SOAP-ENV:Envelopexmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +'<SOAP-ENV:Body>' + 步骤(1)建立的Read文档的内容 +'</SOAP-ENV:Body>' +'</SOAP-ENV:Envelope>'); 步骤4:命令发送函数Send function TXMLDAClient.Send(const ReadReq: TStream): Integer; …… //变量定义 begin …… Request := HttpOpenRequest(FInetConnect, 'POST', PChar(FURLSite),nil, nil, nil, Flags, 0); //创建http句柄 ActionHeader:= GetSOAPActionHeader(FSoapAction); HttpAddRequestHeaders(Request, PChar(ActionHeader), Length(ActionHeader), HTTP_ADDREQ_FLAG_ADD); //向HTTP请求句柄加入一个或多个HTTP请求头部 …… BuffSize := ReadReq.Size; //设置缓冲区 if BuffSize > MaxSinglePostSize then begin Buffer := TMemoryStream.Create; try Buffer.SetSize(MaxSinglePostSize); //初始化缓冲区 …… //开始发送 Check(not HttpSendRequestEx(Request,@INBuffer,nil, HSR_INITIATE or HSR_SYNC, cardinal(self))); //发送读请求到XML DA Server try while True do begin Len := BuffSize - ReadReq.Position; //读缓冲区数据 Len := ReadReq.Read(Buffer.Memory^, Len); if Len = 0 then raise Exception.Create(SInvalidHTTPRequest); Check(not InternetWriteFile(Request, @Buffer.Memory^, Len,RetVal)); //把数据写入一个打开的Internet file …… finally … end; end; 通过测试,客户端能够按照预定设计通过Internet进行数据读、写等基本功能。
5 结语
现在工业过程自动化控制领域正在积极容纳电子商务的管理和应用模式,以便更好地将工厂现场的自动化过程控制与企业办公自动化集成在一起。OPC XML扩展了OPC的功能,实现了企业信息系统控制、监控、管理3个层次间的信息沟通和系统整合。SOAP把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起,使大量异构程序和基于不同平台子系统之间的互操作成为可能,从而使存在的应用能够被广泛的用户所访问。SOAP与OPC XML必将为工业自动化控制系统集成提供新的途径。
|