基于CORBA的局域网监控系统设计与实现
华北电力大学 陈嫱嫱
【摘要】随着工业的不断发展,越来越多的自动化设备应用在控制局域网中,如何监控这些工业设备是个需要研究的课题。本文结合CORBA原理及实现过程,设计了基于CORBA的局域网监控系统的体系架构,并对系统实现中的关键技术做了详细阐述。
【关键词】监控系统;CORBA;系统设计
1.引言
随着计算机技术的快速发展,基于计算机网络的分布式控制已成为日益重要的监控途径。远程监控系统可以采集现场设备运行时产生的动态数据和其它内部数据,通过这些数据调度中心可以有效的监控现场设备运行状况。然而,目前的监控系统结构复杂,存在着同一网络环境下的不同操作平台、不同通信协议以及不同的编程语言等问题。同时如何实现系统的可重用性、可移植性等问题都是传统方法所难以解决的。
CORBA(Common Object Request Broker Architecture简称)是当今国际产业界最令人关注的中间件技术规范,它的主要目标就是在分布式异构环境下实现信息和资源的共享[1]。技术屏蔽了不同操作系统、编程语言以及通信协议之间的差异。采用面向对象的方法以提供分布式应用软件的可重用性和可移植性,实现了异构环境下的客户端和服务器端的通信,这样既大大简化了分布式应用系统的开发和维护,又便于异构环境下的系统集成,从而可以满足未来远程监控系统扩展的需要。
本文结合已有的监控系统产品,将CORBA技术应用于局域网监控系统设计中,同时结合实际工程的需要,提出基于CORBA的监控系统的设计方案。该系统解决了分布式系统中的对象引用的管理问题,能够准确的定位到监控系统中的各个对象机制。
2.监控系统的设计
2.1 监控系统拓扑结构设计
监控系统主要由前端数据采集系统、工程师站和数据服务系统组成。通过安放在现场的IO系统,数据采集系统采集现场各种设备的数据;数据服务系统将采集数据汇总、存储,并对数据做出相应的数值运算。工程师站负责监控整个系统的运行状态,可以查询每个设备的实时数据、历史数据;当系统出现故障时,数据服务系统及时发送故障设备,工程师站接收报警信息后根据规程进行操作,解决系统出现的故障。监控系统拓扑结构如图1所示。
图1 监控系统拓扑图
2.2 监控系统逻辑结构设计
随着网络技术的发展,分布对象技术和多层体系结构紧密结合[2]。在分布式环境中,应用程序不再以整体的形式提供给用户,而是将程序分成N层,用户程序可以访问运行在网络的各个服务对象。根据以上思想,将CORBA中间件技术和监控系统结合起来形成强大的服务平台是可行的。本文设计了基于CORBA的监控系统逻辑结构,如图2所示。
硬件、操作系统和网络层:底层硬件、操作系统层,以及CORBA支持的任意网络结构。
CORBA中间件:提供底层网络通信服务。通过对象请求代理,可以实现不同底层网络协议之间的数据通信。
服务层:基于CORBA中间件提供的命名服务、数据服务、时间服务等,为整个系统运行提供服务支撑。向上为应用层程序提供API接口服务,保证程序间的独立运行,向下使用CORBA提供的基础服务和通信机制实现各个服务间的数据通信与共享。在基于CORBA通信服务的基础上,系统的实时数据库、历史数据库和计算服务存储现场数据,为应用层提供基础数据源。
应用层:基于服务层之上,在系统运行时独立CORBA对象存在。包括监控系统、日志系统、图形显示系统等应用系统。
2.3 监控系统功能设计
监控系统功能可分为通信系统、人机界面系统、数据采集系统和数据服务系统四部分,如图3所示。
图2 监控系统逻辑结构图
图3 监控系统功能结构图
通信系统:负责整个监控系统的数据通信,采用远程接口调用和数据推送两种工作模式。用户通过客户端代理模块远程请求服务器数据,服务器模块响应并根据接口返回请求数据,实现两者数据通信。数据推送模式是指用户程序调用数据推送模块并将信息发送到事件通道,其他模块接收事件通道信息,实现数据主动发送功能。
人机界面系统:系统运行在工程师站,主要包括用户管理、数据显示及查询、日志报警以及报表等模块,可以实时监测系统运行状况,并可查询历史数据信息、日志信息;当系统发生故障时,界面会及时发出报警信息,提醒用户处理故障。
数据采集系统:系统运行在现场工作站中,主要负责采集现场设备的实时数据,并将数据发送到数据服务器中;當人机界面有操作IO设备指令时,数据采集系统负责将指令下发到对应的IO设备中,实现对现场设备的远程控制。
数据服务系统:系统运行在数据服务器中,分为实时数据、历史数据和数据备份等数据存储模块,为人机界面系统提供数据源。数据服务系统将实时数据不断的推送到事件通道,人机界面系统接收实时数据并显示在界面中;系统定期备份现场数据,防止重要数据丢失。
3.监控系统的实现
考虑到工业现场设备控制的复杂性、分散性以及较为恶劣的环境等问题,本文设计并实现了基于CORBA技术的局域网监控系统,具备跨操作系统、跨编程语言操作,实现远程控制、实时监测等功能,可减少工作人员不必要现场设备巡视及操作,极大的方便了人工操作。
3.1 基于CORBA应用程序开发的步骤
基于CORBA的分布式应用程序开发要求客户端和服务器端的通信必须经过特殊的中间层来实现[3],其开发步骤如下:
(1)确定程序对象,并定义它们在IDL文件的接口;
(2)编译接口文件,系统自动生成客户端和服务器端代码;
(3)在ORB调度请求前,实例化CORBA对象的伺服类;
(4)编写客户端代理请求程序,并链接成客户实现文件;
(5)编写服务器端接口实现程序,链接成服务器实现文件。
下面用IDL定义了系统常用数据类型:
//IDL
module SI
{
typedef char siChar;
typedef unsigned short siUChar;
typedef char siByte ;
typedef char siBool;
typedef char siInt8;
typedef char siUInt8;
typedef short siInt16;
typedef unsigned short siUInt16;
typedef long siInt32;
typedef unsigned long siUInt32;
struct siTime
{
siUInt32 Second;
siUInt16 Millisec;
};
struct siVariant
{
siUInt8 DataType;
siVal val;
};
struct siData
{
siTime time; siVariant value;
siChar quality;
};
struct siRealData
{
siUInt32 tagId;
siData rData;
};
//读数据和写数据接口函数
bool readData (........);
bool writeData (........);
}
3.2 服务器端功能实现
除了IDL接口定义和生成的Skeleton类,服务器端接口类实现接口函数,接口类继承框架文件伺服类。
服务器端程序实现包括两部分,一部分是接口定义的函数的实现。
class si_i : public POA_SI::SI
{
public:
si_i ();
virtual ~DB_i();
virtual ::SI::bool readData (........);
virtual ::SI::bool writeData (........);
};
服务器端定义类si_i,继承了伺服类POA_SI,并实现伺服类中的数据接口函数。
另一部分包括对象程序,需调用对象接口来实现具体功能。在编写服务器程序时,需要初始化CORBA环境,首先要初始化ORB,本文通过命名服务实现对象实例的绑定与查找。下面是初始化ORB代码:
this->orb_ = CORBA::ORB_init(argc, argv);
CORBA::Object_ptr poa_object = this->orb_->resolve_initial_references ("RootPOA");
this->root_poa_ = PortableServer: :POA::_narrow(poa_object);
PortableServer::POAManager_var poa_manager = root_poa_->the_POAManager();
poa_manager->activate();
服務器将对象实例绑定到命名服务,如下代码所示:
CosNaming::Name objectName;
objectName.length(1);
objectName[0].id =”connname”;
objectName[0].kind = “connkind”;
try
{
naming_context_->bind(objectName, objref);
}
服务器端将对象名ID为“conname”,类型为”connkind”的实例绑定到命名服务中,等待客户端通过对象名获取对象实例。
3.3 客户端功能实现
在本系统中,客户端应用程序主要是查询和调控操作,通过ORB调用服务器端的具体方法来实现具体操作。ORB主要完成客户对象的获取请求,获取服务端的返回值,并显示在人机界面系统中。下面是客户端ORB通过命名服务,获取服务器端的对象实例。
CosNaming::Name objectName;
objectName.length(1);
objectName[0].id = ”connname”;
objectName[0].kind = “connkind”;
try
{
return naming_context_->resolve(object Name);
}
客户端获取对象实例,并使用接口函数实现与服务器端的数据通信,代码如下:
Class Class_si * my_si = new Class_si();
my_si->SI_Ref_->readData(......);
4.总结
基于CORBA技术的局域网监控系统不用考虑通信协议和平台差异,只要按照CORBA统一规范,根据各自的平台进行编译即可;系统具有可移植性、可重用性和可扩展性等特点。随着我国工业自动化水平的不断提高,降低能耗、提高设备利用率和生產效率、改善工人劳动条件将是企业发展的方向,相信本系统会有很大的应用前景。
参考文献
[1]胡新荣.分布式对象技术的研究[J].武汉科技学院学报,2002(03).
[2]杨燕.基于CORBA的自适应软总线设计技术[J].西北工业大学计算机应用技术,2002.
[3]高建军,吴健.CORBA服务在分布式电力监控系统中的应用[J].计算机应用与软件,2005(05).
[4]杨妮妮,杨进.基于CORBA事件服务的煤矿安全生产监控系统联网方案[J].矿业研究与开发,2008(04).
[5]叶双,傅清祥.基于CORBA的异步通讯服务[J].福州大学学报(自然科学版),2001(04).
[6]薛文玲,张绍华,李天柱.CORBA在远程控制中的应用[J].计算机应用研究,2001(09).
[7]李丽娟.基于CORBA的分布式监控系统开发[D].四川大学,2006.
[8]聂晶.基于PLC的供热网络远程监控系统研究[D].新疆大学,2007.
[9]彭宏,韩仲平.基于CORBA的非耦合异步多点通讯——CORBA的事件服务和通知服务[J].计算机工程与应用,2000(07).
作者简介:陈嫱嫱(1985—),女,华北电力大学在读硕士研究生,主要研究方向:局域网监控系统。