摘要:在DCS系统软件架构中,尤其核电站中功能需求的特殊性以及性能需求的高可靠性,基于Socket的传统的编程实现,面对分布式DCS系统的网络通信的多样性、实时性以及高可靠性等要求越来越困难。通过对基于CORBA实时中间件的实现的DCS系统的研究,提出核电站分布式DCS系统软件架构,最终使DCS系统满足核电站的工程需求。
关键词:分布式;CORBA;核电站;DCS
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)19-4539-03
1 概述
随着计算机硬件性能的不断提高,计算机软件技术和网络技术的迅速发展,分布式系统已经称为软件技术的研究和应用热点。但在工业软件领域,由于行业差异和业务差异,工业软件一般都采用面对工程的订制的实现方式,软件的扩展性,数据的共享性,网络的安全性都有很大的局限性。在核电站的DCS系统,需要整合整个运行机组的实时数据、历史数据、报警信息、操作信息等重要数据。通过对我国在运行的核电站DCS系统的研究,提出改进后的基于CORBA的分布式核电站DCS系统软件构架,作为核电站DCS系统安全应用的实现方向。
2 分布式DCS系统组成原理
2.1 CORBA的分布式计算架构
分布式系统是若干计算机的集合,这些计算机对于用户来说就像是单个相关系统。分布式系统常常通过一个统一的中间层软件将种类各异的计算机和网络组织起来,将底层组成复杂的多机多环境的系统呈现为单个系统。这个中间层软件位于用户应用程序和操作系统层之间,所以分布式系统又称中间件。针对中间件的实现,对象管理组织(Object Management Group)提出“公共对象请求代理结构“(Common Object Request Broker Architecture),简称CORBA。
CORBA是分布式系统中的一种面向对象技术的编程实现,在实现上采用不同于远程过程调用(remote procedure call ,RPC)的通信模型,CORBA采用多层次结构的实现了远程方法调用(remote method invocation,RMI)和面向消息的中间件(message-oriented middleware,MOM)的通信模型,通过定义同一的IDL(interface defined language)编写的对象接口,不同的服务提供不同的对象请求代理(Object Ruquest Broker,ORB),客户端调用相应的对象接口来实现服务器与客户端的通信。CORBA实现的体系结构如图1所示。
2.2 分布式系统的核电DCS结构
DCS软件运行在服务器或者工作站上,DCS按功能区分由数据库服务器、操作员站、工程师站组成,所有的硬件设备接入在一个环形双网上,一个典型的DCS系统结构拓扑图2所示:
数据库服务器:都是实时库服服务器,提供DCS所需要的数据服务,执行采集、转换、发送等数据操作。
历史数据库服务器:对实时数据进行长期档保存,提供相应的查询接口供趋势图、报表等功能模块使用。
对外接口服务器:为DCS提供对上层应用的数据接口,使第三方应用程序能访问DCS的数据信息。
操作员站:将操作员站按职能分配定义各个操作员站。每个操作员站运行同样的客户端软件,只是根据登陆用户的不同权限使用软件不同的功能。
2.3 分布式核电DCS系统软件组成
分布式DCS系统软件的整体架构按功能区分,这些模块分布在不同的服务器或者工作站上。按软件架构分层有功能内核层、服务层、分布式中间件层、代理层、应用层。一个功能模块的功能实现都是基于这些软件层次。功能模块之间的交互在特定的层次上实现,而模块之间的交互层次按具体的事务类型来确定。核电DCS系统的主要软件组成如图3所示:
采用CORBA中间件的DCS系统软件总体以C/S架构(客户端-服务器)实现各个功能,每个功能模块组件通过CORBA 组件命名服务机制, 可以直接用名字通过ORB自动寻找服务组件, 获得组件的引用实现接口对象的调用。内核层提供DCS系统的核心业务的实现,数据服务层利用CORBA中间件对核心业务封装成服务组件,作为接口框架(IDL Skeleton)实现接口的定义,将内核层的业务以服务的形式提供给用户端调用。用户代理层作为接口存根(IDL Stub)为应用层提供接口对象的声明调用。
3 基于CORBA分布式DCS系统的实现
CORBA是一个支持面向消息的中间件框架,业务层的组件之间通信时可以采用消息队列(Message Queue,MQ)模型,但大部分通信都以远程方法调用来实现,每个模块组件都按照业务功能定义组件接口,编写IDL文件,如过需要扩展功能则通过IDL中接口定义的继承方式来实现。DCS软件采用C++程序语言,编译成接口存根和接口框架,形成对应的客户端和服务器端程序源码文件。客户端与数据服务之间利用CORBA封装通信,客户端所有数值数据类型都是使用CORBA封装数据格式,所以普通数据格式中所有的定义数据格式要转换成CORBA对应的数据格式,其中IDL接口定义如下所示: