往期浏览

您的位置:首页 往期浏览 权威论坛内容页面

P126 基于WCF架构的OPC客户端技术在物流系统中的应用

来源:2017年第3期(总第202期) 作者:邵海龙/文 浏览:

摘要:本文介绍了基于WCF技术的客户端与OPC服务器间的数据的交换实现方法,可以有效地降低通讯成本,实现代码复用。为配有许多终端的大型智能工厂物流系统的智能通讯提供了一种新的OPC通讯方式。本文认为,面向服务技术的应用未来将会大大提升智能工厂物流的智能化进程,降低设备之间通讯的难度,实现真正的信息全跟踪、设备全智能。
 
关键词:WCF技术、OPC服务器、数据交换、物流系统
 
马勇超金亚萍张胜邵海龙/文
 
 
       在如今的智能工厂物流系统中,信息数据的传递无时无刻不在进行着,其中包含了产品信息、任务信息、设备信息等,它将整个系统连接在一起,信息的时刻跟踪实现了每一份货物有源头可寻,每一条任务有记录可查,让管理者可以时刻监控货物的流向,查看货物储位、站台物流信息等。
 
 
一、关于OPC服务器与数据交换方式
 
         OPC作为硬件与软件连接的中间件,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。OPC通讯一般采用C/S的体系结构,客户端通过OPC协议接口与服务器端完成数据的通信和交换。作为数据源的OPC服务器既可以是和OPC应用程序在同一台计算机上运行的本地OPC服务器,也可以是在另外的计算机上运行的远程OPC服务器,而当实际项目中客户端和服务器的数目是多对一时,采用本地服务器,在每一台计算机上都安装OPC服务器的方法时(如图1)是不明智的,这样会耗费大量的内存和资源。这时,多客户端远程连接OPC服务器(如图2)进行数据交换的方法就成了实现需求的不二选择。
 
        通过OPC接口直接实现两者的相连这种方法,虽然在效果上完全可以取代第一种方式,并且大大降低资源的消耗,但是这种方法中最麻烦的部分就是对客户端和服务器电脑上DCOM的配置。而本文所介绍的通过WCF寄宿OPCinterface方法的方式,可以让客户端在避开配置DCOM下实现与OPC服务端的数据交换,大大简化了服务器和客户端通信工作。本文将结合实际项目来讲述基于WCF架构的OPC客户端技术的配置与实现。
 
        在一个完整的物流信息跟踪程中,因受到现场环境和工艺流程的制约,货物信息在整个工艺流程的进行过程中可能会有信息盲点,在某个流程结束后信息出现物资整合、变形等情况,使物流信息无法继续跟踪,这时则需要辅以客户端应用来帮助数据信息流的畅通,完成整个信息的跟踪记录,或者项目在设计中本身需要一个现场终端的客户端程序来进行一些任务的调度、现场工作者在终端上查看设备状态,这些功能的完成都需要现场的终端的客户端应用与中控室的OPC服务器端进行数据交换,当WCF技术运用到这些客户端与OPC服务器之间的数据交换上后,数据传输的操作变得简单起来。
 
 
二、WCF技术原理与技术要素
 
1.WCF技术原理
 
       WCF是使用托管代码建立和运行面向服务应用程序的统一框架,整合了.Net平台下所有的和分布式系统有关的技术,以通信范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于Internet;以宿主程序而论,可以以ASP.NET、EXE、WPF、Windows Forms等作为宿主(Host)。WCF可以支持的协议包括TCP、HTTP、跨进程以及自定义。
 
        总的来说,WCF与以往windwos上的开放式分布式应用的比较,其统一性、互操作性、安全与可信赖、兼容性的特点让WCF成为Windows平台上开发分布式应用最佳的实践方式。
 
2.WCF技术要素
 
        作为面向服务的一个框架,WCF最重要的就是能够快捷地创建一个包含客户需要的方法或者数据的服务,而在本文的WCF服务中包含的是用于OPC客户端与服务器进行数据交换的OPC接口中的方法,应用程序在对此WCF服务添加了引用后可以通过WCF服务中的方法与OPC服务器进行数据交换。一个WCF服务包含了以下三个要素:
 
(1)Service Class:一个标记了[ServiceContract]属性的类,在其中可能包含多个方法。除了标记了一些WCF特有的Attribute外,这个类与一般的类没有什么区别。
 
(2)Host(宿主):可以是应用程序,进程如Windows Service等,它是WCF Service运行的环境,本例中所用到的宿主是windows服务,服务启动关闭就可以控制WCF Service运行,满足长时间后台运行的条件。
 
(3)Endpoints:它是WCF实现通信的核心要素,Endpoint由三部分组成:Address、Binding、Contract。Address是Endpoint的网络地址,它标记了消息发送的目的地。Binding描述的是如何发送消息,例如消息发送的传输协议,Contract则描述的是消息所包含的内容,以及消息的组织和操作方式。Endpoint中的ABCs分别代表的含义就是:where,how,what。当WCF发送消息时,通过address知道消息发送的地址,通过binding知道怎样来发送它,通过contract则知道发送的消息是什么。
 
         而当一个WCF服务创建后,并将其运行在Host上后,服务端与客户端均采用了WSDL,以完成二者的消息传递,如图3。这样客户端就可以添加该服务的引用,调用服务中的方法和数据,下面以一台堆垛机的操作终端应用上所应用到的设备数据传输为例来说明WCF服务详细设计流程。
 
 
三、基于WCF架构的OPC客户端数据传输方法的具体设计
 
1.接口内容
 
         根据本例中堆垛机终端应用程序在数据传输方面的需求,客户端在整个工厂物流系统中起到货物信息传递的中间桥梁的作用,这就要求客户端上的操作程序可以与OPC服务器进行数据传输,对于一台堆垛机来说,客户端上对于设备的监控需要订阅OPC服务器上的设备状态点,如:故障、忙碌、工作状态等,时时通知设备状态点的变化,在终端上显示。而对于向设备下发任务,则需要在客户端上对OPC服务器中设备的任务相关点进行写入操作,用WCF服务来完成这些操作,则要求WCF服务的内容包括OPC客户端与OPC服务之间的数据操作方法如点的读写、组的订阅等等,总体上讲,在本文的实例中WCF服务的内容是OPC操作接口(OPCInterface为客户端与OPC服务进行数据传输的开源类)中的方法,而建立的WCF服务起到了OPC接口中方法与客户端程序的中间件的作用,我们可以在中控室中的服务器上部署WCF服务,它将其中的方法以服务的形式发布出去,当终端上的客户端应用对WCF服务进行引用后,就可直接调用OPCInterface中的方法实现客户端与OPC服务器的数据传输。
 
2.具体实现
 
         创建一个完整的WCF应用首先了解其工作的基本结构,如图4所示,以便创建出基本的架构。创建一个基本的WCF架构包括四个部分contract,service,host,client。
 
(1)契约(Contract)接口类的定义实现
 
        契约类为一个类库项目(为了更好地复用一般定义为一个接口类型),用来定义服务契约,用[ServiceContract]的特性进行标记,而在其中定义的每个方法都要用[OperationContract]特性进行标记,包括上文中所提到的堆垛机终端应用与OPC服务器进行数据交换时所用到读、写、订阅等方法,方法名称与OPCInterface中相应的方法进行对应,以便更好地区分和实现。在契约类中只需要定义方法名称,不能实现方法体。而对于订阅这种需要回调函数的方法,需要再另定义一个接口,其中定义与OPCinterface中方法相对应的回调函数的类型,之后在契约类上方加上[ServiceContract(CallbackContract = typeof)]即完成了回调函数在WCF服务使用的前提工作。  
 
(2)服务类(Service)的实现
 
         服务类用于定义在该项目中的所有WCF服务的实现,在整个框架中起着至关重要的作用,其主要通过实现服务契约来创建具体的WCF服务,本例中共有三个方法write,read,advise,即读、写、订阅,在实现方法时,因上面定义契约的时候已经与OPCInterface相对应,只需要调用相应OPCInterface中的方法进行实现,这里WCF完成了对于OPCinterface方法的映射,使得引用其服务的程序可以间接应用OPCinterface中的方法来实现与OPC 服务器的数据交换功能。
 
(3)寄宿宿主(Host)程序
 
        WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中, WCF服务的宿主程序可以多种多样,它可以是控制台程序、web应用、winform应用程序等等,物流设备需要长期运行,时刻监控其状态信息更是非常必要的,所以WCF服务应保证长时间运行,故选择将其宿主设为一个开机自动启动的服务,这样不仅可以满足使用需求,更加方便统一管理。
 
(4)Endpoins中ABC的配置
 
         完成服务寄宿,关键一步是对WCF服务信息的配置(Endpoints等信息),本例中选用.NETTCP作为传输协议,是因为在OPCInterface中订阅方式的需要,其中的回调函数需要服务器端使用客户端的方法,这就需要一个支持双工的通讯协议,.nettcp在局域网中比http更适合此种情况。在binding中netbinding需添加节点并设置<security mode="None"/>(客户端设置相同)来解决不同PC之间通信的问题,并为元数据添加单独的地址为mex,contract为IMetadataExchange 的endpoints,之后在宿主程序的主程序入口中,实例化服务,并且启动服务,等待客户端调用。
 
(5)客户端(Client)
 
         堆垛机终端应用能对WCF服务进行引用的前提是宿主程序正处于运行状态,通过添加服务引用,输入刚才设置的WCF服务的元数据地址,在添加完成后,实例化服务客户端,即可在其中使用服务端的方法。这样就实现了只要当服务端服务处于运行状态,客户端就可以随时调用服务端的资源方法来实现与OPC服务器的数据交换,实现对OPC服务器中数据的订阅、读、写。
 
3.实现效果
 
         在布有多个终端的局域网物流系统中,通过.NETTCP协议配置的WCF服务实现与OPC服务器数据交换方法的寄宿,将用宿主部署在中控室的监控机上。堆垛机中的客户端应用程序通过对WCF服务的引用,使用服务中包含的方法可以直接与OPC服务器数据交换,对其中任务相关点进行读和写来实现终端给设备下发任务、信息的跟踪,通过对堆垛机设备状态点的订阅从而实现对堆垛机状态的监控,完善了物流体系,使货物信息畅通,从而免去了在客户端远程连接OPC服务器的部署工作,大大减少了工作量,并且实现在中控机上控制服务的开关来统一管理。
 
 
作者单位为机科发展科技股份有限公司




版权声明:

未经特别书面授权禁止所有媒体及网站转载本站所有文章内容。如有违反者构成犯罪的,依法追究刑事责任。 所有媒体及网站要转载本站的任何内容请来信申请,请E-Mail:bjb@edit56.com.cn 或者致电:(010)82387518 联系。