李 贵 刘卫红 金 旭 江 辉
(浙江浙大中控信息技术有限公司,310053,杭州∥第一作者,工程师)
组件对象模型技术在地铁综合监控系统的应用
李 贵刘卫红金 旭江 辉
(浙江浙大中控信息技术有限公司,310053,杭州∥第一作者,工程师)
摘 要阐述了组件对象模型(COM)技术在地铁综合监控系统软件平台开发中的应用情况,详述了COM技术在基于组态软件平台Cimplicity HMI上进行二次开发时的应用。通过与传统开发模式的对比,展现了COM技术在Cimplicity HMI平台上开发的优势。COM技术可解决传统开发模式存在的代码碎片化、控制代码与画面视图严重耦合、代码编号不方便、调试困难、难以版本管理、代码无法保密等问题,具有较好的实用性,值得推广。
关键词轨道交通;综合监控;组件对象模型;组态软件平台
Author's address Zhejiang SUPCON Information Co.,Ltd,310053,Hangzhou,China
目前,优秀的上位机组态软件较多,由GE IP公司开发的Cimplicity HMI便是其中之一。Cimplicity HMI支持OLE、COM组件(Active X DLL),画面编辑简单易用,可提供报警、日志、趋势、远程浏览、冗余等功能。
由于应用行业的不同,每个监控工程的功能是不同的。Cimplicity HMI可以创建程序脚本正是解决此问题的关键。它允许用户用类似于Visual Basic类型的编程语言(Basic Control Language,简为“BCL”)在其提供的编译环境(Basic Control Environment,简为“BCE”)中创建程序。BCE提供了一个用户根据自身需求进行二次开发的编译环境,用户可以在BCE的全局模块或者各个画面中创建变量、结构体、函数等代码。
目前流行的做法是:分别在每个画面中创建相应的功能函数,部分公共函数从全局模块中调用。GE官方提供的二次开发样例也是如此。但是,这样的开发模式会导致代码碎片化、代码编写调试困难、版本管理混乱等一系列问题。本文以在Cimplicity HMI上进行综合监控软件平台客户端(下称“客户端”)的二次开发为例,介绍一种以COM组件嵌入BCE的全新开发方式,很好地解决了这些问题。
BCE提供了一个与Visual Basic语言极为相似的用户命令环境,内置了一个超过600个标准功能函数的程序集,并且提供相应的访问接口。通过这些接口,可以访问或控制Cimplicity的数据点、报警和错误记录等数据。通过BCE可以实现算术运算、逻辑运算、字符串处理、文件处理、数组处理、DDE通信、Windows界面交互等各种功能。
1.1传统开发模型
在BCE提供的开发环境下,传统的二次开发模型如图1所示。
工程组态时,一个画面通常会绘制多个图元,包括普通的矩形、多边形、圆形、图片、按钮、文本、OLE(对象连接与嵌入)对象、微软.NET控件、趋势控件等。当图元需要执行或响应一个操作时,就需要在相应的图元上绑定一个对应的脚本。脚本可以调用一个公共的全局模块脚本,由此可以实现某些公共变量或者函数的共享和控制。脚本可以控制画面中的各个图元的多种状态,如位置、大小、颜色、文本等。
1.2传统开发模型存在的问题
(1)代码碎片化。BCE并没有提供一个类似于VC++或者VB的集成编译环境,所有的代码都分布在全局脚本以及各个画面的图元中,如果画面较多,且每张画面中的图元层次和数量也较多时,代码编写、维护的工作量将明显增大。特别是像地铁行业,各个图元的组态都是比较复杂的,以电力监控系统中的一个电动开关为例,不仅要考虑开关的开、关状态,还要考虑开关设备的断线、维修等状态,每个状态都需要对此开关图元中的子图元进行组态,因此层次可能较深,数量也可能较多。类似的图元可能在整个监控平台中的很多地方出现,意味着相应的代码可能分布在不同的地方。这样就导致了代码的碎片化现象。代码碎片化给代码的维护和调试带来了很大的困难,因为调试前必须找到相应的代码进行断点,而当图元结构层次和数量都很多时,工作量大大增加。
(2)控制代码与画面视图严重耦合。此问题造成的后果是:代码编写和画面制作无法很好地由两组人员完成,且改动也将受到牵制。必须先由画面组态人员绘制完画面后,开发人员才能进行相应的编码工作;且一旦涉及更改,必须由画面组态人员再次提供相应的画面后,方能进行代码更改,否则将导致混乱的对应状态。
(3)BCE存在缺陷。BCE虽然是一个脚本代码的编写环境,却存在以下问题:①代码没有智能提示;②函数有顺序限制;③无法跨模块使用全局变量;④不能使用Byte数据类型;⑤函数不能返回数组;⑥不能使用Replace、Split等字符串常用函数。此缺陷造成无法有效、高效地进行代码编写。
(4)调试工作困难。BCE编译环境中,不能像普通编译器一样对任意编写的函数进行断点调试,必须在每处函数调用入口设置断点后才能进入需要的调试状态。另外,编译器提供的监视功能只能监视数值和文本,当监视对象类型的变量时,不能显示对象的属性及属性值,对解决问题时的调试几乎没有作用。
(5)版本管理困难。BCE没有单个整体代码工程的概念,所有的代码“散落”在各画面的图元中,所以代码的版本管理比较困难。
(6)代码公开化问题。代码直接绑定到图元中,导致接触到客户端的人都可以点开各个图元而看到里面绑定的脚本代码,对代码的规范管理存在一定风险。
COM(Component Object Model,组件对象模型)是一种以组件为发布单元的对象模型,可使各软件组件用一种统一的方式进行交互。COM既提供了组件之间进行交互的规范,也提供了实现交互的环境,并且组件对象之间交互的规范不依赖于任何特定的语言。
客户端使用Visual Basic 6.0作为编译环境,创建Active X DLL工程,最终编译形成单独的DLL文件,进行开发、调试、编译、部署等工作。
2.1COM开发模型
整体的开发模型如图2所示。可见,COM开发模型不再将功能脚本写到每个图元里,而是将全部的具体实现的功能代码都放到COM组件中,实现代码的集中管理。在每个图元中只有标准的调用代码,BCE全局脚本中也只有统一的调用代码,真正实现的代码全部移入COM组件工程中。其结合软件设计模式中的“简单类工厂模式”,动态地创建相应的类,有效地实现了内存管理并取得了良好的系统性能。
2.2COM开发模型实现
COM组件有三种形式:①进程内(组件以DLL方式存在,它与客户在同一进程内);②进程间(以EXE方式存在,它与客户在同一台机器却不在同一进程内);③不同机器上以EXE方式存在。不论何种形式,客户都不必知道使用的是哪种组件,因为COM组件对象是位置透明的。本文详细介绍采用第一种COM组件形式,现实地铁综合监控系统软件平台客户端的二次开发。具体构成如图3所示。
整体函数调用和控制的实现原理,如图4所示。
图2 COM开发模型
图3 COM组件存在形式
详细实现过程如图5所示。
首先,需要响应图元的事件必须在相应的图元上绑定执行脚本。图元所能触发的事件仅是Cimplicity提供的20多种事件,所以图元需要绑定的脚本也就20多个代码段。以响应鼠标点击事件为例,画面图元中On MouseUp调用全局脚本中的On MouseUpEx函数。
gISCSLib在全局脚本中,主要用于存放其模块的20多个事件的响应调用对象。它是后台COM组件ISCSLib的一个实例。ISCSLib工程中的Main类包含了On MouseUp集中响应函数,此函数中实现简单类工厂的代码如下:
Select Case sScr Name
Case"startmimic.cim"
Set oScrCOM = New Scr_StartMimmic
Case"navigator.cim"
Set oScrCOM = New Scr_NaviSymbols
End Select
CallByName oScrCOM,"OnMouseUp",VbCallType.VbMethod,X,Y,flags,oControl
在On MouseUp事件中通过简单类工厂模式,很好地解决了多类型对象的实例化问题,并最终通过执行的CallBy Name函数,利用“反射”机制调用具体类中的函数,达到控制或者执行某个具体功能函数的目的。
图4 COM模型调用原理
图5 COM模型实现过程
2.3COM开发模型的优势
使用COM技术在Cimplicity HMI平台上进行二次开发,非常巧妙地克服了传统开发模式的各种缺点。
(1)代码管理集约化。具体现实代码被全部转移到COM工程后,一个工程就能管理所有的实现代码,并可充分利用VB编译器的各种功能,方便代码的编写和维护,大大提高工作效率。
(2)控制代码与画面视图解耦。图元和全局脚本中只剩少量的“接口型”标准调用代码,组态人员可以在画图时直接将代码复制到图元脚本中,并不用关心后续的代码编写;脚本开发人员也不再受制于图元中的代码,具体的代码全部编写到COM工程中即可。图形组态人员和代码开发人员互不干扰,可以并行开,大大提高了工作效率,降低了两者的工作冲突。
(3)标准VB开发。绝大多数代码被转移到Visual Basic 6.0开发的COM工程中,人员只要使用VB开发环境即可轻松编码。
(4)调试方便。将COM工程设置为“Active X DLL”工程类型,结合Cimplicity的BCE进行代码联调,所有在COM工程中的断点都可以正常拦截并调试,所有类型的变量都可以正常查看,调试十分方便。
(5)方便版本管理。所有功能代码集中在COM工程中,可方便地进行VB工程的代码版本管理工作。
(6)代码隐藏。COM工程最后编译生成的是一个DLL文件,关键性的代码被隐藏,从而非常有效地保护了软件代码不被泄露。
本文提出了一种基于COM技术开发地铁综合监控软件的方案。该方案基于Cimplicity HMI工控组态软件平台,结合Cimplicity支持COM组件的特性,利用COM技术开发Active X DLL,解决了传统开发模式的诸多问题,可大大节省整个系统的研发时间,以及后期系统的维护费用。
传统开发模式存在代码碎片化、控制代码与画面视图严重耦合、代码编写不方便、调试困难、难以版本管理、代码无法保密等的缺点,COM开发模式可很好地解决这些问题。该技术可运用于不同行业中相类似的开发过程,能解决非常实际的开发问题,值得推广。
参考文献
[1] Curland Matthew J,Storage,Bill.Advanced Visual Basic 6 [M].涂翔云,刘玉印,刘岩,译.北京:中国电力出版社,2001.
[2] 程杰.大话设计模式[M].北京:清华大学出版社,2007.
[3] 张娅.COM研究及其在组态软件中的应用[J].微计算机信息,2006,22(34):49.
[4] 王海刚.COM中的设计模式[J].计算机仿真,2004,21 (5):184.
[5] 欧建斌.工厂设计的模式研究[J].微型电脑应用,2010,26 (12):15.
[6] 张伟.用VB实现COM组件的包容[J].计算机应用,2001,21 (10):99.
[7] 吴东庆.反射机制下类工厂模式的实现与研究[J].计算机应用,2006,26(3):705.
Application of COM Technology to Metro Integrated Supervisory Control System
Li Gui,Liu Weihong,Jin Xu,Jiang Hui
AbstractThe application of COM technology in the soft platform development of metro ISCSis described,the application and research findings of COM technology on the redevelopment based on Cimplicity HMI software platform are introduced in detail.Compared with traditional application development,the technological advantages of COM development on Cimplicity HMIsoftware platform are fully displayed.It could solve many problems existing in the traditional mode such assevere coupling of coultrol code and picture,debugging difficulties,vulnerable code and so on,thus has good practicability and promotional value.
Key wordsurban rail transit;integrated supervisory control system(ISCS);component object model(COM);Cimplicity HMI software platform
中图分类号U 29-39
DOI:10.16037∕j.1007-869x.2016.01.025
收稿日期:(2014-06-03)