北京首钢自动化信息技术有限公司 李亮举,郭雨春
进入20世纪90年代以来,世界各工业发达国家,集中全力进行工业综合自动化技术的研究。所谓综合自动化,就是在自动化技术、信息技术、计算机控制和各种生产加工技术的基础上,从生产过程的全局出发,通过生产活动所需的各种信息的集成,把控制、优化、调度、管理、经营、决策融为一体,形成一个能适应各种生产环境和市场需求、多变性的、总体最优的高质量、高效益、高柔性的管理生产系统 。本文中冶金过程控制系统是这一类管理生产系统中计算机应用软件的总称,而冶金过程控制系统开发平台(下文简称开发平台)是为开发此类软件而定制开发的软件开发环境。通过在冶金过程控制系统的开发过程中使用开发平台可以降低软件开发难度、标准化软件开发过程、规范设计并精简代码。使用开发平台开发出的软件具有更高的可靠性、可用性、可扩展性和可维护性。通过学习和总结冶金过程控制软件系统开发经验,发现C/S结构(客户机/服务器结构)在冶金过程控制系统中非常普遍,但是由于C/S结构自身的特点,开发者通常会使用自定义标准来定义设备间的协议,这不仅增加了系统的设计难度,而且在后期系统集成和维护过程中因为系统与系统间缺乏统一的集成标准,不便于系统的集成和信息的共享。但是如果使用二次开发的办法解决系统集成和扩展的问题,又会给系统的运行和维护带来大量的工作。
为了解决这一问题,参考对象请求代理(Object Request Broker缩写ORB)技术和面向服务(Service-Oriented Architec ture缩写SOA)的原则,结合冶金过程控制系统开发实践,在开发冶金过程控制系统开发平台的过程中,开发了服务请求代理构件,该构件和冶金过程控制系统开发平台一起,在京唐钢铁公司1580过程控制系统研究项目中得以成功应用,运行效果良好。
对象请求代理是一个中间件(MIDDLEWARE),它可以建立对象之间的CLIENT/SERVER关系。通过对象请求代理,一个CLIENT可以透明的引用同一台机器上或网络上的一个SERVER对象的方法。对象请求代理解释该调用并负责查找一个实现该请求的对象,把参数传给该对象,调用它的方法,最后返回结果。CLIENT并不清楚该对象的位置、编程语言、操作系统以及其它不是对象接口等系统信息。对象请求代理能实现分布式环境中位于不同机器上的应用之间的互操作以及多对象系统之间的无缝连接 。在一个面向对象的分布式环境中,一个对象请求代理可以为应用程序、服务器、网络设施之间分发消息、提供关键通信设施。开发人员可以将对象请求代理想象成一组软件总线、支柱,它提供了一个公用消息传递接口然后通过这个接口,许多不同类型的对象可以以对等层策略进行通信。
SOA架构是一种进行系统开发的新的体系架构。在基于SOA架构的系统中,具体应用程序的功能是由一些松耦合并且具有统一接口定义方式的组件(也就是SERVICE)组合构建起来的,它因对迅速变化的业务环境具有良好适应力而备受关注。正是因为这个特点,采用面向服务的架构去搭建开发平台的底层,从而使开发平台具有更好的适应性和可扩展性。
服务请求代理构件,在参考对象请求代理技术和面向服务的原则下,结合冶金过程控制系统开发的经验而定制开发,它由一组服务请求代理标准和一个服务请求代理工具组成。考虑到在过程控制环境下通常对系统的响应速度和稳定性有较高的要求,在服务请求代理构件中使用静态连接方式来规划网络中服务的分布。一方面设计者可以精确地控制服务的访问权限,另一方面系统在初始化的过程中完成网络拓扑结构的建立工作,避免了在业务逻辑发生时等待客户机与服务器建立连接和重复连接的情况,不仅可以缩短服务器接收客户机请求和服务器向客户机发送处理结果所需的时间,还可以提高开发平台底层网络连接控制部分的稳定性。
服务请求代理构件标准部分包括通讯对象定义标准和通讯对象部署标准两部分。
3.1.1 通讯对象定义
结合冶金过程控制系统开发平台中的参数管理构件,将通讯对象的信息保存在相应的csv文件中。通讯对象标准如表1所示。
表1 通讯对象定义标准
如上表所示,在该标准中,网络中所有的计算机由唯一的站名xsStationName标识,服务对象用服务名xsServiceName标识,该服务能够处理的最大信息长度用缓冲区大小lSize标识,对该服务的说明用xsDescription标识。通讯对象定义实例如表2所示。
表2 通讯对象定义实例
在表2 通讯对象定义实例中,可以看出在站点L2-APP00中存在4个服务分别是:xParameterService、xLoggerWriter Service00、xCommunication Servcie00和xShmSynchronize Service00;在站点L2-APP01站点中存在3个服务xLoggerWriter Service01、xCommunication Service01和xShmSynchronize Service01。lSize和xsDescription分别给出了服务缓冲区的大小和说明。
3.1.2 通讯对象部署
和通讯对象的定义相同,通讯对象的部署也是通过相应的csv文件来实现。通讯对象部署标准如表3所示。
表3 通讯对象部署标准
上表定义了通讯对象部署标准:服务在网络中的分布情况,站名xsStationName和服务名xslObjectName、xsrObjectName与通讯对象定义标准中的定义相关,服务类型iType用于指明服务在该计算机中的工作模式,网络地址lIp、rIp和端口lPort、rPort用于指明服务在不同模式时的网络地址,bHeartBeat、xsHead、xsTail是通讯代理器进行报文交换时所需的控制信息,描述xsDescription是对通讯对象部署的一个说明。通讯对象部署实例如表4所示。
表4 通讯对象部署实例
在表4 通讯对象部署实例中,我们以第三行、第七行、第十行为例分别说明三种不同类型的服务工作模式:第三行“L2-A P P00,1,xParameter Service,,10200,,,,1,HEAD,TAIL,监听”定义了以下关键信息:在站点L2-APP00上,存在一个xParameter Servcie服务,该服务处于监听模式可以为网络中的相关站点提供相应的服务,服务工作在L2-APP00的10200端口。
第七行“L2-APP00,2,,,,xCommunication Service01,10.5.30.218,10202,1,HEAD,TAIL,连接”定义了以下信息:在站点L2-APP00上,存在xCommunication Service01服务的一个代理,该代理从10.5.30.218:10202获得服务。
第十行“L2-APP01,0,xLoggerWriter Service01,,10201,,,,1,HEAD,TAIL,监听”定义了以下信息:在L2-APP01站点上,存在一个xLoggerWriter Service01服务,该服务在私有模式下工作,只为本机提供服务,不能被网络上其它站点访问。
服务请求代理构件的作用是搭建分布式服务通信网络,为网络中的服务提供透明的同步过程调用和异步过程调用方法。在本方法中参考SOA架构,将能够提供具体应用功能的进程(或线程)视为服务,通信资源的管理以服务为单位,以适应迅速变化的业务环境。在本地过程调用(LPC)过程中,系统为进程提供面向服务的过程调用中间件,负责进程(或线程)间事件和数据的传递;在远程过程调用(RPC)过程中,由过程调用中间件将事件和数据传递给过程调用服务,过程调用服务根据上面提及的配置参数创建和维护分布式过程调用服务网络,实现与网络上其他节点间的远程过程调用 。
在过程调用中间件中,过程调用接口分为三种:
(1)等待接口:负责为服务提供在中断模式下工作的事件和数据接收,特点是基于事件、低CPU消耗和高响应速度;
(2)请求接口:负责为服务调用者提供事件和数据的发送和调用结果的接收,特点是在异步过程调用中只提供发送功能,在同步过程调用中提供发送、同步和调用结果接收功能。异步过程调用和同步过程称调用使用统一的接口形式;
(3)应答接口:在同步过程调用中,服务完成业务处理后,该接口负责将调用结果发送给服务的调用者。
在过程调用服务中,提供进程(或线程)通信功能的线程分为四种:监听线程、接入线程、接收线程、代理线程。
(1)监听线程:负责为本地进程(或线程)提供监听功能,响应远程节点的接入操作,远程节点接入后,监听线程为远程节点上的进程(或线程)创建专用的接收线程和代理线程。
(2)接入线程:负责为本地进程(或线程)提供接入远程节点的功能,接入成功后,接入线程为远程节点上的进程(或线程)创建专用的接收线程和代理线程。
(3)接收线程:负责接收远程节点的过程调用,并通过过程调用中间件的请求接口将调用传递给本地进程,在同步过程调用中接收线程还负责将调用结果发送给远程节点。
(4)代理线程:负责为远程节点上的进程(或线程)创建过程调用中间件的本地代理,并通过过程调用中间件的等待接口接收本地进程(或线程)对远程进程(或线程)的调用,并负责将调用发送给远程节点上的接收线程。
在分布式网络环境中,服务请求代理负责建立计算机与计算机之间的连接,客户端通过通讯中间件透明的向服务发送请求和接收应答,客户端(CLIENT)调用服务器(SERVER)提供的服务时经过以下步骤:
(1)客户端来调用通讯中间件
(2)中间件将消息传递给代理线程
(3)代理线程将数据封装后发送给服务器上的接收线程
(4)接收线程解包数据后将自己扮演为模拟客户端再次调用通讯中间件
(5)服务器收到调用数据后执行约定的业务处理过程
(6)服务器调用通讯中间件将处理结果返回
(7)接收线程将处理结果封装后发送给代理线程
(8)代理线程通过中间件将结果返回给客户端
借助于服务请求代理构件,客户端(计算机A)和服务器(计算机B)客户端像调用本地服务一样调用在网络上分布的服务,服务请求代理就像一条“通讯总线”一样,它为连接在网络上的客户端和服务器提供一个透明的通讯环境,图1为“通讯总线”示意图,是在这个网络环境中客户端和服务器进行通讯的示意图。
图1“通讯总线”示意图
服务请求代理开发完成后已经作为标准组件与冶金过程控制计算机应用系统开发平台其他构件一起应用到了京唐钢铁公司1580项目研究中,经测试,该系统已经稳定运行3个多月,系统稳定可靠。通过使用自主开发设计的服务请求代理组件,为1580项目实施带来了以下好处:
(1)客户端与服务器之间的接口使用统一的标准,规范化了接口设计,减少了设计人员的工作量;
(2)编程人员无需关心开发出的程序究竟部署在何处,给调试和测试工作带来了巨大的便利;
(3)当网络环境发生变化时,无论是重新部署应用程序还是调整服务器网络参数,都可以通过修改相应的参数来完成,降低了系统维护难度。
经过多次对分布式网络系统搭建过程的测试和在1580热轧项目中的具体应用,发现该服务请求代理构件运行稳定,且成为冶金过程控制系统开发平台中不可或缺的一个组成部分。该构件体现出了无比巨大的优越性,方便、简单、轻松快速的实现分布式系统的搭建,减少开发人员代码编写、统一编程接口、规范化接口设计,易于维护,大大减少了系统搭建完成后
[1] 邵裕森,戴先中主编. 过程控制工程[M]. 北京:机械工业出版社,2 0 0 1.
[2] 孙昌平,顾冠群. 通用对象请求代理体系结构[J]. 计算机集成制造系统-C I MS,1 9 9 8 ,(2).
[3] 胡丕俊,李亮举等. 冶金过程控制开发平台中进程通信系统的开发及应用[J]. 冶金自动化,2 0 1 1, (5).