安防监控知识
电力检修|电力系统实时图形系统的基于COM的设计与实现
2017-05-09  浏览:75
安防之家讯:cript>电力系统实时图形系统的基于COM的设计与实现
戴赛1 李晓明1 陈少明2
(1.武汉大学,湖北武汉430072;2.孝南供电局,湖北孝感432000)

随着电力系统信息化的不断发展,在一个电力企业内部,往往同时存在着不同厂家开发的各种电力系统应用软件,如SCADA系统、调度自动化系统、MIS系统、地理信息系统、操作票智能生成系统等。在这些应用软件中,经常要有界面友好的图形系统,它们是由不同的开发厂家分别独立开发,虽然能满足各自的要求,但不能做到很好的系统集成,往往存在着功能重复设计,即增加一个应用系统时,整个图形系统又要重复设计,重复开发等问题,这样极大地浪费了开发人员的时间,增加了企业的负担。增强软件复用性,提高软件生产率是一个亟待解决的问题。
电力企业的应用软件应按照系统开放的原则,遵循共同的标准,做到插入兼容性(Plug-Compatible),从而提高系统集成度。微软公司推出的COM/DCOM标准为此提供了有效的工具
组件对象模型(ComponentObjectModel/DistributeCOM即COM/DCOM)技术是继模块化、结构化,面向对象开发方法之后,发展起来的又一新的软件开发方法。它主要思想是将一个对象的外观(接口)同其工作方式(实现)分离开来〔1〕,这一封装思想应用到二进制层次上,使得我们可以在COM架构下开发出各种各样的功能专一的软件“积木块”,然后根据需要将其装配起来构成复杂的应用系统,最大程度地实现了软件的复用。

1 组件对象模型
1.1 COM标准
COM标准包括规范和实现两大部分。COM规范是一套为组件架构设置标准的文档,它定义了组件与组件之间的通信机制,这些规范不依赖任何特定的语言和操作系统。COM实现部分是一个COM库(COMLibrary)的API(ApplicationProgrammingInterface),它为COM规范的具体实现提供核心服务。
1.2 COM工作原理
COM本质上是客户机/服务器(C/S)模式。当客户通过传递一个组件类的CLSID(ClassIdentifier)请求其服务时,Windows通过注册表透明地查找到组件对象地址,然后创建该组件对象,并把客户请求的接口指针回传给客户。在COM模型中,客户请求服务时,只是通过GUID(GloballyUniqueIdentifier)获取接口指针,从而调用其相应的成员函数。而COM对象对客户而言是不可见的,客户只是通过接口才感受到对象的存在。对客户而言,接口便是一切。
COM接口规范规定,所有接口都必须直接或间接地从IUnknown接口继承。IUnknown接口只有3个函数:QueryInterface()用于接口查询,AddRef()和Release()用来维护对象的生存期管理。COM对象可支持多个接口。
C++通过实现继承来支持重用,即一个类继承其基类的代码或实现,COM对象重用机制为接口继承,它指的是一个类继承其基类的类型或接口,实现方法有2种:包容(containment)或聚合(aggregation)。包容是指外部对象A作为内部对象B的客户调用内部对象B的方法来实现自己的功能。
聚合是指外部对象A将内部对象B的接口暴露出来,就象它自己的接口一样。
组件程序通常有2种实现形式:一种是动态链接库,运行时客户程序与组件程序运行在同进程地址空间,故也叫进程内组件;另一种形式是EXE文件,这种组件运行时,客户程序和组件程序运行在不同的进程地址空间,故也叫进程外组件。
当跨越机器的边界时,为适应分布式环境,微软推出了DCOM,进一步提供位置透明性。
总的来说,COM的特点有:语言无关性。它采用的是一种二进制代码级的标准,而非源代码级的标准;进程透明性。客户与服务器既可以在一个进程中,也可不在一个进程中;位置透明性。客户与服务器既可以在1台机器上,也可跨越网络;版本兼容。组件可以在不妨碍已有客户的情况下被升级。
1.3 COM组件开发
现在微软公司在VisualC++中提供了2种方法来开发COM组件:MFC库(MicrosoftFoundationClassLibrary)和ATL模板库(ActiveTemplateLibrary)。MFC不仅可用于建立COM应用,而且是一套Windows平台上各种应用开发的基本类库。ATL主要侧重于开发一些小巧、快捷的COM组件。
2 电力系统实时图形系统设计方法
2.1 总体设计
文章致力于利用MFC库开发一个可复用的电力系统实时的图形系统,从而为众多电力系统应用软件提供开放的、统一的图形用户界面。系统的总体结构如图1所示。

作为一个图形子系统,要有良好的用户界面,每种图元都应有显示、编辑、删除等功能,即图形元件的显示、旋转、缩放、移动、填充颜色、状态改变等子操作。
为保证图形系统实时反映设备当前状态,需要将本系统与实时数据库相连,动态刷新设备当前状态,以满足电力系统对图形系统实时的要求。
为保证绘图子系统有更好的重用性,本系统还将图元属性保存在数据库中,以便与其它系统更高效地进行数据交换。数据库要保留元件的静态参数和状态属性。
2.2 绘图子系统功能实现
在开发时,我们选用MFC库来开发各组件对象。MFC库作为事实上的Windows类库标准,也提供了全面的COM支持,可方便地开发出各种COM应用。
根据面向对象的思想,将电力系统中的各设备元件都封装成相应的类(如图2)。

以开发一个断路器组件为例,介绍主要开发过程。
首先利用VisualC++6.0新建一工程,工程类型为MFCAppWizard(DLL),选择Automation支持,其它保持缺省设置,从而获取动态链接库的6个标准导出函数。
在工程中新建一文件用于定义一组接口。接口均直接派生于IUnknown。按照系统功能,定义的主要接口有:
IInit用于初始化元件的各种属性;IShow用于元件的显示、编辑、修改等功能;IState用于设置与查询元件状态;IRealTimeDB用于与实时数据库相连,以及时更新设备状态;IDatabase用于处理该图形与数据库连接,保存图元各种属性。


由此定义具体的COM组件类。
利用ClassWizard新增断路器类CBreak,该类派生于CcmdTarget类,将接口定义文件加到该类声明中,用MFC提供的宏可方便的为COM类增加类厂支持和接口支持。



在实现文件中,根据断路器的具体情况书写各接口函数。这样利用MFC提供的聚合模型实现了一个COM组件(见图3),最后编译成独立的DLL文件(Dynamic-linklibrary),经过注册之后,便可方便地实现动态联接。


在以后的系统功能升级中,若不满意当前某个接口的具体实现,我们可直接更改它的具体实现,编译注册后,便实现了升级,而不需客户程序作任何改动。若随着系统的要求变化,组件要增加新的功能,我们只需定义新的接口及接口函数,在组件中实现即可。
2.3 与数据库的连接
在组件类的实现中,为了能与电力系统其它应用系统方便地交换数据,我们采用了数据库文件来存储图形的各种属性信息。我们用ADO(ActiveXDataObject)来访问数据库〔4〕,ADO是微软公司继ODBC,DAO,RDAO,OLEDB之后新近推出的基于COM双接口的数据访问方法,它具有方便灵活,简单易用的优点。
为使用ADO模型需要[1][2]下一页
安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 安防之家 的产品:
  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved