收藏 分销(赏)

CORBA通讯.doc

上传人:仙人****88 文档编号:9071069 上传时间:2025-03-12 格式:DOC 页数:6 大小:80KB
下载 相关 举报
CORBA通讯.doc_第1页
第1页 / 共6页
CORBA通讯.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述
CSP轧机二级程序间的CORBA通讯 王博 (安徽省马钢第一钢轧总厂) The CORBA communication among CSP level2 programs Wangbo (The No1 Steel Plant of Maanshan iron in Anhui province) 摘要:本文简要介绍了轧机二级程序的逻辑结构,以及程序之间使用基于CORBA服务的通讯过程。使用基于CORBA对象服务的通讯程序比一般的套接字网络程序性能更可靠,软件重用性较强,开发起来也较简单。 关键词:CORBA,对象服务,司服,通讯 ABSTRACT: The programs in the process computer for the finishing mill and the cooling section are based on CORBA. Using CORBA the L2 processes can execute steadily and easy to migrate to other systems. Compared to the traditional Socket programs, CORBA based programs are simple to write. Key Word: CORBA, object-oriented service, servant, communication 1 概述 由于面向对象的设计模式和框架能够帮助减轻昂贵的分布式软件概念和抽象核心的重新生成,被人们所看好。基于对象服务的CORBA专属中间件已经被越来越多地用于程序的通讯当中。CORBA(Common Object Request Broker Architecture),即公共对象请求代理结构,是由OMG小组编写和维护的开放式中间件,为C/S结构程序的通讯提供中间支持。CORBA提供一种规范的描述接口的语言——IDL,并且通过IDL编译器分别生成客户端和服务器端的抽象类代码,进而派生实现成对象。当客户端向服务器端请求数据时,由POA(Portable Object Adapter)激活对象,实例化对象成为伺服,再将请求分发给伺服。被请求的伺服处理来自客户端的请求,最后将结果发送给客户端。 轧机二级程序利用了CORBA中间件进行数据的传输,这样在开发程序时无须考虑网络传输协议以及报文的结构,而是通过IDL语言描述通讯接口,让CORBA对象服务来完成数据的传输和处理。基于CORBA的二级程序可以方便地在不同的系统之间移植,也可以方便地实现不同的操作系统平台之间的通讯过程。 2 轧机二级的逻辑结构 2.1 与外部的通讯 轧机二级程序分布运行在四台服务器上,包含非控制程序,控制程序和数据库。这些程序的主要功能是从三级接收计划,预计算设定点,接收板坯数据,下发一级请求的终轧区、冷却区设定点,接收一级生产实绩,以及传送生产数据等。三级下发的计划通过数据库接收,即三级的数据库和轧机二级的数据库之间通过数据库链进行通讯。二级的程序从一级请求生产实绩,并保存在数据库中,一级和二级的通讯直接通过网络传输,使用TCP/IP协议。二级程序之间也有通讯,它们之间是通过CORBA中间件传输数据的。逻辑结构如图1所示: 非控程序 控制程序 数据库 人机界面 一级自动化 CORBA 生产实绩 图1 通讯结构 2.2 主要程序介绍 轧机二级程序是既面向服务又充当客户端的基于CORBA的对象服务。也就是说,每个程序都是基于IDL文件的,从IDL代码编译出的基类进行派生,进而实现CORBA对象服务。 程序之间请求数据并发送数据,这样每个程序既是客户端也是服务端。如PDH(primary data handler)主数据处理程序,当有新计划下发后,PAP(plant adapter)程序使用PDH提供的接口通知PDH新的计划下发,而PDH被通知后就对数据库中的新计划数据进行处理。当开始轧制时,它从一级MTR(material tracking)请求物料主数据,保存在数据库中并激发模型控制程序(MOSPC等)计算设定点。二级主要程序如下图所示: IDL interface STA moscs mosfm 图2 主要程序 …… PDH PAP PDM 3 CORBA通讯 3.1 程序开发环境 轧机二级程序使用Visual C++7.0平台开发,软件环境使用了ACE(The ADAPTIVE Environment Communication)中间件和基于TAO(The ACE ORB)的CORBA服务。代码编写之后使用*.aim文件直接编译成可运行的*.exe文件。 ACE是一个免费的OO工具包,它包含一个丰富的集合,此集合中有可重用的wrappers、类、和可在很多操作系统平台上交互的通用的网络编程的框架。ACE实现了通信软件的基本设计模式。ACE 面向在UNIX 和Win32 平台上开发高性能通信服务的开发人员。它简化了面向对象的网络应用程序和服务的开发,这些程序和服务用到了进程间通信,事件分离,直接动态链接和并发机制。ACE 通过在运行时动态链接服务到应用程序和在一个或多个进程或线程中执行这些服务自动完成系统配置和重新配置。ACE从底向上共包含四层,分别是:ACE操作系统适配层,ACE OO Wrappers,ACE框架和ACE网络组件。如下图所示: 分布式服务和组件 框架和类目录 ACE OO Wrappers 操作系统适配层 图3 ACE中的组件 在ACE之上可以构建分布式中间件等专属中间件:如TAO。TAO一般与ACE绑定,提供CORBA分布式服务。二级服务器中利用了ACE+TAO中间件服务,实现了程序内部的数据通讯。 3.2 IDL接口文件 使用基于CORBA通讯的程序必须使用IDL(Interface Definition Language)接口文件来描述程序提供的功能接口,为其他程序提供数据传输的方法。如PDH的接口文件的部分代码如下: #include "glob.idl" interface pdhIDL // primary data handler { oneway void newMaterial(in ME_CODE meCode); // 接收新物料 oneway void newSchedule(); //接收新计划 oneway void getNextMaterial(in sequence<octet> seq); // 请求下一块物料 oneway void getMaterial(in sequence<octet> seq); // 当前物料请求 .... }; 通过TAO_IDL编译器将IDL文件编译成客户端的stub和服务端的skeleton,对应的文件为:*C.h,*C.cpp,*S.h,*S.cpp。而这些文件分别为客户端程序和服务端程序提供基类,以实现CORBA对象服务。在PrimaryDataHandler.h文件中实现了PDH服务端的类,从pdhIDLS.h文件提供的基类派生,部分代码如下: #include "pdhIDLS.h" class PrimaryDataHandler: public OA(pdhIDL) , public Application { void newMaterial(const ME_CODE& meCode);//对接口方法派生 …… }; //对接口方法的实现, void PrimaryDataHandler::newMaterial(const ME_CODE &meCode) { // 写入日志文件 Dbgn d ("PrimaryDataHandler::newMaterial",meCode.extId); d << "Start ***********************************************"; d.infoK(); //报文数据 d << "PAP->PDH activation recognized: \"new material\""; d.infoK(); // 开始执行描述列表 p_PAPNewMaterial->execute(meCode); d << "End ########"; d.infoK(); } 3.3 实现对象 实现了服务端的对象之后,就可以编写可执行的程序,即main函数。二级程序将main函数封装在一个Application类的构造函数中,在实现文件的最后通过调用宏 APPLICATION_CREATE(PrimaryDataHandler) 来实现公共main函数。这样CORBA的初始化,获得ROOTPOA的引用,以及POAManager的初始化等CORBA程序共同的代码只需要编写一次即可。 接下来,服务器端的程序还要实例化对象成为伺服才能够接收来自客户端的请求。PDH等二级程序是在其构造函数中注册对象的。一般注册对象就是在Name Service服务中注册对象的引用,以后客户端通过引用来调用伺服。而二级CORBA程序的对象引用是用ior文件实现的,所有的ior文件都保存在主域控制器的一个共享文件夹中,向其他计算机上的CORBA程序提供对象指针。PDH注册对象的代码如下: PrimaryDataHandler::PrimaryDataHandler(void) : Application() { …… try { ORBWrapper_registerObject(this, PDH_ORBW_OBJ_PDH); } …… } 代码中ORBWrapper_registerObject 函数是subsys环境提供的API函数,其函数声明在ORBWrapper.hpp头文件中,该头文件定义了CORBA的初始化函数。PDH_ORBW_OBJ_PDH在orbw_pdh.h中定义为: #define PDH_ORBW_OBJ_PDH “pdhIDL” 程序使用命令行启动,命令如下: REM start pdh start/MIN "pdh" E:\na\mas\runbin\pdh -ORBDottedDecimalAddresses 0 -name pdh -no_nested_upcall APPLICATION_CREATE(PrimaryDataHandler)宏接收命令行参数,将程序命名为“pdh”。函数ORBWrapper_registerObject的作用就是在共享文件夹中产生该对象的ior文件,它调用了CORBA提供的函数orb->object_to_string(pdhIDL),将pdhIDL对象实例转化为文本格式存储在pdhIDL.ior文件中。 3.4 请求对象 在客户端的程序中请求对象,首先需要包含Stub基类,再获得对象的引用,最后向服务端请求对象。二级程序PAP作为客户端使用了PDH提供的接口,向PDH发送新物料下发的通知。PAP部分代码如下: #include "pdhIDLC.h" //包含stub基类的头文件 static CORBAObjectWrapper <pdhIDL_var> p_pdh_server; //定义变量 CORBAObjectWrapper <pdhIDL_var>PapRcvToL2::p_pdh_server(PDH_ORBW_SRV_PDH, PDH_ORBW_OBJ_PDH); //在pdhIDL.ior文件中获得对象引用 short PapRcvToL2::sendNewMaterial(ME_CODE meCode) { try { p_pdh_server() -> newMaterial (meCode); //使用接口函数 } …… } CORBAObjectWrapper <pdhIDL_var>PapRcvToL2::p_pdh_server(PDH_ORBW_SRV_PDH, PDH_ORBW_OBJ_PDH)是定义在ORBWrapper.hpp中的模板类的构造函数,用来将pdhIDL.ior文件中的文本转化为指针,以获取对象的引用。即封装了下面的代码: CORBA::Object_var obj= orb->string_to_object(ior.c_str()); 于是类指针p_pdh_server指向了pdhIDL的伺服。接下来,p_pdh_server就可以调用接口函数完成数据的通讯了,即: p_pdh_server() -> newMaterial (meCode); 这样就完成了一个基于CORBA的通讯程序,即在服务端实现对象,注册对象引用,在客户端使用对象引用请求对象;当服务器端接收到来自客户端的请求后激活对象,分发请求给对象,对象处理请求并发送结果给客户端。代码中没有涉及任何套接字程序代码,比传统的网络通讯程序简单很多。 一个基于CORBA的C/S模式的程序整体结构如下图所示: *IDL.idl interface *IDL { .... }; *IDLC.h class *IDL *IDLC.cpp *IDLS.cpp *IDLS.h class OA(*IDL) *IDLC.obj *IDLS.obj client.cpp client.obj MyApp.cpp *.cpp *.hpp class * *.obj MyApp.obj CORBA.h CORBA.dll client main line object impl. (servant) server main lines client stub server skeleton IDL 用户提供 C++ 编译产生 用户提供 如 TAO, Orbix, ART, VisiBroker 图4 CORBA程序结构图 4 结束语 轧机二级程序间的通讯使用ACE+TAO中间件开发,代码的稳定性和可移植性都比传统的网络通讯程序增强很多。利用ACE面向对象的组件工具包实现了通常的通信相关活动,也方便实现了本地和远程过程调用,事件分离和服务处理调度,二级程序因此较为稳定地运行着,是CSP热轧生产线的重要组成部分,同时给工艺的各个方面提供了有利保障。 参考文献 1. Michi Henning, Steve Vinoski. Advanced CORBA Programming with C++. Publisher: Addison Wesley First Edition February 12, 1999 2. Douglas C. Schmidt. ADAPTIVE Communication Environment. Publisher: Department of Computer Science Washington University, 2000 3. Siemens. Application software concept specification. Publisher: Siemens, 2003 4. CORBA教程,李师贤等译,清华大学出版社,1999
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服