(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf_第1页
(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf_第2页
(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf_第3页
(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf_第4页
(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(计算机软件与理论专业论文)关于组态软件开发的关键技术及其设计模式的研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 组态软件在工业控制和管理上发挥着越来越重要的作用,它以灵活多样的 组态方式( 而不是编程方式) 提供良好的用户开发界面和简捷的使用方法,其预 设置的各种软件模块可以非常容易地实现和完成监控层的各项功能。组态软件的 灵活性和通用性导致了组态软件开发的复杂性,增加了组态软件设计的难度。本 文采用c o m 技术把组态软件的开发分割成一些小的,功能相对简单的模块开发。 从而降低开发的复杂度,减少重复性编程,提高软件的重用性。应用a c t i v e x s c r i p t i n g 技术的主要目的是使组态软件在不被修改的情况下,可以使用各种脚 本语言编辑脚本。以达到同一种方式来处理各种脚本语言,因此二次开发的用户 可以采用他们自己熟练的任意脚本语言书写脚本程序。o p c 技术的出现为基于 w i n d o w s 平台的组态软件和基于现场控制的控制器之间的数据交换提供了切实 可行的方法。组态软件可以按照o p c 服务器提供的接口访问现场控制设备的数 据,避免了重复开发设备驱动程序的问题,提高了软件的开放性和灵活性。 组态的核心思想是将工业控制系统分解成许多实体,通过配置各个实体的属 性和各个实体间的关系来完成整个系统的搭建,这种思想符合面向对象的思维方 式,而面向对象技术在提高软件的灵活性和扩展性方面有着明显的优势,因此用 面向对象的设计方法开发组态软件是最佳选择。面向对象的设计难点在于如何识 别出系统中的对象,并在计算机系统中建立起对象模型和对象间的通信关系。设 计模式是面向对象设计的精髓,它表达了解决特定问题的设计方法和设计结构, 在面向对象的设计中具有重要的指导意义。本文在详细介绍组态软件开发的关键 技术的基础上,对设计模式在组态软件设计中的应用进行较深入地研究,并结合 实例,分析模式应用的场合,比较模式具体应用时的变化及其不同实现间的差异, 探讨设计模式在解决实际问题时的思想过程及其产生的效果。全文主要就组态软 件框架的设计,图形元素的设计,图形操纵的设计,动画系统的设计等方面的内 容展开论述。 关键词:组态软件;面向对象;设计模式;工业控制系统。 a b s t r a c t c o n f i g u r a t i o ns o f t w a r ep l a y sm o r ea n dm o r ei m p o r t a n tp a r ti ni n d u s t r i a lc o n t r o l a n dm a n a g e m e n t ,i tp r o v i d e su s e r - f r i e n d l yi n t e r f a c ea n ds i m p l em a n i p u l a t i o nb y f l e x i b l ea n dd i v e r s ec o n f i g u r a t i o nn o tp r o g r a m m e e a c hp r e f a b r i c a t e dm o d u l eo ft h e c o n f i g u r a t i o ns o f t w a r ec a nb ee a s i l ym a d eu s eo fr e a l i z i n ga n da c c o m p l i s h i n ga n y f u n c t i o ni nt h es u p e r v i s e c o n t r o ll a y e r t h ef l e x i l i t ya n du n i v e r s a l i t yb r i n go nt h e d i f f i c u l t i e si ns o f t w a r ed e s i g na n dp r o g r a m m e i nt h ed i s s e r t a t i o n ,c o mt e c h n o l o g yi s u s e dt od e v i d ec o n f i g u r a t i o ns o f t w a r ei n t os o m er e l a t i v e l ys m a l la n ds i m p l em o d u l e s s ow ec a l lr e d u c et h ec o m p l e x i t ya n dr e p e a t i n gp r o g r a m m e t h ea p p l i c a t i o no f a c t i v e xs c r i p t i n gt e c h n o l o g yi si no r d e rt oe d i ts c r i p tb ya n ys c r i p tl a n g u a g ew i t h o u t m o d i f i n gc o n f i g u r a t i o ns o f t w a r e a n dt h eo p ct e c h n o l o g yp r o v i d e saf e a s i b l ew a yt o d a t a e x c h a n g eb e w t e e nc o n f i g u r a t i o n s o f t w a r eb a s e do nw i n d o w ss y s t e ma n d c o n t r o l l e rd e v i c e s c o n f i g u r a t i o ns o f t w a r ec a na c c e s sd a t a so ft h es p o tc o n t r o l l e r d e v i c e sa c c o r d i n gt ot h ei n t e r f a c e so fo p cs e r v e r , a v o i dr e p e a t i n gp r o g r a m m eo fi 0 d r i v e r s ,b o o s tt h eo p e n n e s sa n df l e x i b i l i t y t h ec o r ei d e ao fc o n f i g u r a t i o ni st h a ti n d u s t r yc o n t r o ls y s t e mi sd i v i d e di n t oal o t o fe n t i t i e s ,a n dw ec a nc o n f i g u r et h ep r o p e r t i e sa n dt h er e l a t i o no ft h ee n t i t i e si no r d e r t ob u i l dt h es y s t e m t h ec o r ei d e ao f c o n f i g u r a t i o na c c o r d sw i t h0 0 ( o b j e c to r i e n t e d ) 。 t h e o r y , b e s i d e s0 0t e c h n o l o g yh a sd i s t i n c ta d v a n t a g ei ne n h a n c i n gf l e x i l i t ya n d e x p a n s i b i l i t y , s oo o p ( o b j e c to r i e n t e dp r o g r a m m i n g ) i s t h eb e s tc h o o s ei n c o n f i g u r a t i o ns o f t w a r ep r o g r a m m e t h ed i f f i c u l t yo fo o p i sh o wt oi d e n t i f yo b j e c t si n t h es y s t e m ,a n dh o wt ob u i l do b j e c tm o d e la n dc o m m u n i c a t i o nb e t w e e no b j e c t si nt h e c o m p u t e rs y s t e m d e s i g np a t t e r n sw h i c hi st h ee s s e n c eo ft h eo o d ( o b j e c to r i e n t e d d e s i g n ) a n de x p r e s s e st h ed e s i g nm e t h o da n ds t r u c t u r eo fag i v e np r o b l e m ,p l a y sa l l i m p o r t a n tr o l e i no o d i nt h i sd i s s e r t a t i o n ,f i r s t l yt h ek e yt e e h n o l o g i e su s e di n c o n f i g u r a t i o ns o f t w a r ed e v e l o p m e n ta r ei n t r o d u c e di nd e t a i l ,t h e nt h ed e s i g np a t t e r n s i n c o n f i g u r a t i o ns o f t w a r e a r e s t u d i e d ,w h i c ha p p l i e do c c a s i o n s a r ea n a l y z e d c o m b i n i n gw i t ht h ei n s t a n c e s n e x t ,t h ea u t h o rp r o b e si n t ot h ei d e aa n de f f e c tw h e n t h ed e s i g np a t t e r n sa r eu s e di ns o l v i n gt h ea c t u a lp r o b l e m s i nt h ew h o l ed i s s e r t a t i o n t h es o f t w a r ef r a m ed e s i g n m e n t ,g r a p he l e m e n t sd e s i g n m e n t ,g r a p hm a n i p u l a t i o n d e s i g n m e n t ,a n i m a t i o ns y s t e md e s i g n m e n ta n ds oo na r ed i s c u s s e dd e t a i l e d l y k e yw o r d s :c o n f i g u r a t i o ns o f t w a r e ;0 0 ;d e s i g np a t t e r n s ;i n d u s t r i a lc o n t r o ls y s t e m 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得或其他教育机构的学位或证书而使用过的材料。与我一同工作 的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表 示谢意。 学位论文作者签名:签字日期:年月 日 学位论文版权使用授权书 本学位论文作者完全了解江西师范大学研究生院有关保留、使用 学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印 件和磁盘,允许论文被查阅和借阅。本人授权江西师范大学研究生院 可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采 用影印、缩印或扫描等复制手段保存、汇编学位论文。 。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名: 签字日期:年月 日 导师签名: 签字日期:年月 日 关于组态软件开发的关键技术及其设计模式的研究 1 绪论 1 组态软件的概念与现状 、组态的概念最早来自英文,其含义c o n f i g u r a t i o n 是使用软件工具对计算机 及软件的各种资源进行配置,包括进行对象的定义、制作和编辑,并设定其状态 特征属性参数,达到使计算机或软件按照预先设置,自动执行特定任务,满足使 用者要求的目的。通俗地说,组态是指由操作人员根据应用对象及控制任务的要 求,配置并生成用户应用软件的过程。与传统的工业控制软件不同,组态软件作 为一种“应用程序生成器 【1 】,必须向用户提供二次开发的平台和环境。 随着工业自动化水平的迅速提高以及计算机在工业领域的广泛应用,人们对 工业自动化的要求越来越高,使得传统的工业控制软件己无法满足用户的各种需 求。在开发传统的工业控制软件时,当工业被控对象一旦有变动,就必须修改其 控制系统的源代码,导致软件的开发周期长。已开发成功的工控软件又由于每个 控制项目的不同而使其重复使用率很低,导致它的价格非常昂贵。在修改工控软 件的源程序时,倘若原来的编程人员离去时,则必须同其他人员或新手进行源程 序的修改,因而更是相当困难。通用型的工业自动化组态软件的出现为解决上述 实际工程问题提供了一种崭新的方法,因为它能够很好地解决传统工业控制软件 存在的种种问题,使用户能根据自己的控制对象和控制目的任意组态,完成最终 的自动化控制工程。具体地说,组态软件指一些数据采集与过程控制的专用软件, 它们是在自动控制系统监控层一级的软件平台和开发环境,能以灵活多样的组态 方式( 而不是编程方式) 提供良好的用户开发界面和简捷的使用方法,其预设置 的各种软件模块可以非常容易地实现和完成监控层的各项功能,并能同时支持各 种硬件厂家的计算机和i o 设备,与高可靠的工控计算机和网络系统结合,可向 控制层和管理层提供软、硬件的全部接口,进行系统集成。 组态软件主要特点有【2 】: ( 1 ) 具有较强的灵活性和可扩展性。用通用组态软件开发的应用程序,当现 场( 包括硬件设备或系统结构) 或用户需求发生改变时,不需作很多修改就可以 方便地完成软件的更新和升级; ( 2 ) 封装性:通用组态软件所完成的功能都被封装起来,对于用户而言不需 要掌握太多的编程语言技术( 甚至不需要编程技术) ,就能很好地完成一个复杂 工程所要求的所有功能; ( 3 ) 通用性。每个用户根据工程实际情况,利用通用组态软件提供的底层设 硕士学位论文 备( 如p l c 、智能仪表、智能模块、板卡、变频器等) 的i od r i v e r 、开放式的 数据库和画面制作工具,就能完成一个不受行业限制的工程。 由于国外的工业现代化进程比较早,因此组态软件产品在8 0 年代中期已经 在国外出现了,但是组态软件进入中国较晚。进入9 0 年代以后,国内外推出了 不少组态软件产品,有的是随集散系统一起推出的作为专用配套软件,有的是通 用软件,如美国i n t e l l u t i o n 的f i x 、德国s m a t i c 公司的、矾n c c ,美国w o n d e r w a r e 公司的i n t o u c h 及国内的组态王飚n g v i e w 等等。 1 2 工业自动化软件设计的特点 虽然工业自动化软件的设计开发涉及面比较宽广,但是一个完整的工业自动 化软件一般由以下几个大的子系统:画面编辑模块、画面运行模块、变量管理模 块、设备管理模块、用户管理模块、脚本模块、报表打印、文件记录( 报警记录、 趋势记录) 等在内的人机接口模块所构成。由于这些子系统在各种类型的工业自 动化软件中所体现出来的在很大程度上的一致性和不变性,奠定了它们的可抽象 性,从而形成可复用性的基础。从自动化软件设计的发展趋势来看,打破“孤岛 式的割据状态,实现系统的开放性、通用性的呼声越来越高,各个公司、各个厂 家生产的系统要求能够进行相互联结,相互通信。如果能有一种技术,使得可以 在一套系统中无缝地集成不同厂家按照某种一致的标准而独立地设计的功能模 块,而且都不需要相互了解对方的实现,则上述问题自然迎刃而解。而软件复用 技术【3 】发展到今天,设计这样的系统已基本上可以实现。 1 3 工业自动化软件中采用的复用技术 在目前的工业自动化软件中,已有不少的软件复用技术在使用,从大的方面 分,主要表现为源代码复用和函数库复用两种形式。 1 3 1 源代码复用 这种形式的复用主要体现为在同一个单位内部采用函数、封装类的形式在源 代码级进行复用。这种复用形式虽然可以在单位内部对软件系统的前后延续、缩 短开发进程方面起到一定的作用,而且在目前所采用的软件复用技术中占有相当 大的比例,然而它存在有以下的比较大的缺点:首先是编程语言的障碍,为了复 用对象,以后系统的设计必须采用与当初设计该复用对象时相同的编程语言,无 法做到编程语言的独立性,更无法做到分布式跨平台的软件复用。其次是通过复 用生成新的系统时,必须经过编译,无法做到即插即用。 2 关于组态软件开发的关键技术及其设计模式的研究 1 3 2 函数库复用 使用函数库( 包括静态链接库和动态链接库) 的形式进行复用比源代码复用 有较大的改进,由于库是一种二进制的形式,故可以做到一定程度上的语言无关 性,然而静态链接库仍然解决不了分布式跨平台的复用和编译问题;动态链接库 依旧在版本控制、对系统支撑平台的最少依赖性和软件升级方面存在有较大的技 术问题。 1 4 工业自动化软件新技术组件技术【4 】 软件复用技术使得软件开发不再一切“从零开始 ,避免软件开发中的重复 劳动。组件& 术即将一个设计良好的应用系统往往切分成一些组件,这些组件可 以单独开发,单独编译,甚至单独调试和测试。当所有的组件开发完成后,把它 们组合在一起就得到了完整的应用程序。当系统的外界软硬件环境发生变化或者 用户的需求有所更改时,只需对受影响的组件进行修改,然后重新组合得到新的 升级软件。对于复杂的应用,实现组件化结构模型并不是很轻松的事情。需要把 应用分成一些独立的组件,而且这种切分还要尽可能符合系统的应用逻辑和业务 要求,这是一门新的组件化程序设计技术。它不同于传统的结构化程序设计技术 和现在被广泛应用的面向对象程序设计技术。 工业控制系统中所要集成的软硬件系统已变得更加庞大与复杂,工业控制软 件不仅要处理分散于现场各种型号的仪器仪表,还要与厂际监控系统以及其他管 理系统进行通讯,在这种情况下,面向对象技术就表现出了其缺乏通用性与复用 性的缺点,而组件技术便得到了迅速的发展。组件技术是面向对象技术的最新发 展,它具有开放性、灵活性、可管理性、安全性和透明性等特点,因此在工业自 动化软件中采用组件技术可以极大地扩展软件的结构和功能。 1 5 本文的主要研究内容 本文主要结合作者在工控组态软件的实际开发,详细地介绍了其中的关键技 术,并且深入研究和实际应用到软件开发与设计中。在组态软件的开发设计中, 人机界面是一个很重要的部分,生动、灵活的动画是组态软件中不可缺少的部分, 它能对现场的情况做出形象的图形动态模拟,能够提供监控工程师现场的实时信 息,能给监控工程师直观、醒目的提示信息。通过这些信息,工程师们相应的采 取相应的操作策略,让生产过程达到最优化。图形开发系统是组态软件的一个子 系统,通过此系统能够为用户提供丰富的图形元素去构建工厂的各种工艺流程画 面。动画系统也是组态软件的一个子系统,通过该系统,我们可以灵活的为各种 图形配置动画,也可以将图形和数据相关联,使图形状态能够反映出生产过程的 硕士学位论文 参数的状态,达到监控的目的。本文将详细阐述关于图形开发系统和动画系统的 设计细节并介绍与之相关的设计模式。 4 关于组态软件开发的关键技术及其设计模式的研究 2 组态软件总体设计 软件的总体设计是整个软件开发最重要的环节之一。它的正确性、可行性、 先进性等因数直接决定了软件的功能和性能,并对软件的可靠性、实时性、可扩 展性以及运行效率等性能指标有很大的影响。与其它软件开发一样,在设计组态 软件的总体结构前,首先需要了解监控组态软件自身的特点,所要实现的基本功 能并结合用户的实际需求,制定合理、有效的设计方案。 2 1 组态软件的特点 组态软件与传统的工业控制软件相比,有其自身的特点: ( 1 ) 组态软件最突出的特点是实时多任务。例如,数据采集与输出,数据处 理与算法实现,图形显示及人机对话,实时数据及历史数据的存储和检索,实时 通讯等多个任务要在同一台计算机上同时进行。 ( 2 ) 安全性和可靠性。要求在计算机和数据采集控制设备正常工作的情况下, 软件系统能够连续不间断的安全可靠的工作。 ( 3 ) 适应性。系统配置灵活,对现场适应性好,可根据应用规模和用户的要 求配置各种大、中、小型监控系统。 ( 4 ) 系统可维护性。需要提供大量用户可维护的工具和接口,提高其可维护 性。 ( 5 ) 节省开发费用。特别是当以后控制系统的改造和更新时,能大大缩短控 制软件的开发周期和投入。有助于减少枯燥、繁琐的重复性工作,易于复用和协 作开发,提高劳动生产率。 2 2 组态软件的基本功能 ,( 1 ) 监控功能即系统的实时测量和控制功能,包括对设备和仪表的开关量输 入输出、模拟量的输入输出的测量、控制功能。 ( 2 ) 组态功能即人机图形界面功能,包括根据实际控制网络及对象给出形象 而具体的图形界面,方便操作人员进行实时监视和控制。 ( 3 ) 数据库管理功能,要求组态软件应支持实时和历史数据库操作,即对现 场全部运行当前及历史数据进行存储、查询和分析的功能。 5 硕士学位论文 2 3 系统总体设计 2 3 1 软件体系结构 组态软件从总体上来看,可分为系统开发环境、系统运行环境和管理数据库 三大部份,其体系结构及各组成部分的相互关系如图2 1 所示。 图2 1 工业监控组态软件的体系结构 ( 1 ) 系统开发环境 它是客户应用程序的集成开发平台,用户通过简单的操作即能实现满足自己 应用需要的系统。系统的开发环境是组态软件的一个子系统图形开发系统。 用图形开发子系统,通过对控制系统现场环境的认识和分析,建立工艺流程图对 控制现场进行描述。通过使用图形方式对现场环境中的客观存在的事物进行抽 象,并且建立它们之间的关系,形成简洁、直观的工艺流程图以及用户与系统之 间的交互图。图形开发子系统应具备基本图元( 线,圆,弧,多边形,填充图形, 文字,位图等) 的绘制功能,增删图库资源的功能,图元与变量的连接,变量的 定义和报警设置功能,脚本开发功能,实时和历史趋势曲线控件等a c t i v e x 控件 的插入和配置功能,读写服务器端特征数据库的功能。 ( 2 ) 系统运行环境 系统的运行环境也是组态软件的一个子系统动画系统。它将用户在开发 环境下定义的图形组态和数据库组态与服务器端数据库中的数据联系起来生成 能反映工业现场工作情况的动画效果,并能通过实时及历史趋势曲线控件、报表 控件等a c t i v e x 控件显示和分析从i 0 设备采集的数据。除此之外,还提供一定 的控制功能,用于人机交互。例如,在历史趋势曲线控件中,用户可以根据需要 显示某一时间段内某一值域范围内的数据;能通过按钮控件控制服务器端i 0 变 量的数值,从而实现对被控对象的控制。 6 关于组态软件开发的关键技术及其设计模式的研究 ( 3 ) 管理数据库 。这部分是整个组态软件的核心,主要用来读写外围f o 设备的状态和数值, 并将其保存在数据库中。同时管理数据库用于响应客户端的请求,发送和接受数 据。 2 3 2 软件模块划分 从软件工程的角度出发,为了便于软件开发,应根据软件的体系结构,功能 需求将其模块化。模块与模块之间应尽量独立,模块接口应尽量简单。针对监控 软件的特点以及如上所述的体系结构,将其划分为工程管理模块、图形绘制模块、 网络通信模块、数据库访问模块、命令语言解释模块、读写硬件i 0 模块等几 个部分,各模块之间的相互关系如图2 2 所示。 图形蝓捌梧终 图形对象 ii 图形编辑ii 动面】圭;接 子镬疑 l i子慎块li子馕疑 控件 | | 图库和文件 子镬典| i 存储子凄典 变量氩据库i i 命寺雾妻斛辱 r 让l l 工倥饥li 片_ l l 一五曩 硬件i l o 谴写 幔失 通讯横疑 - - 1 图2 2 各模块之间的相互关系 2 3 3 模块功能介绍 ( 1 ) 工程管理器模块 具有搜索工程,新建工程,删除工程,工程备份和工程恢复等功能。可以直 接由工程管理器进入某一具体工程的开发环境。用于管理和维护工程中的各种信 息。 , ( 2 ) 图形绘制模块 图形绘制模块完成所有组态画面的绘制,是组态软件中最主要的开发模块之 一。根据所完成的功能不同,我们又将它划分为以下几个子模块: 对象子模块 图形对象子模块的主要功能是完成对各图元( 如线、圆、半圆、椭圆、矩形、 多边形、正多边形、文字、填充图形、位图等) 的绘制,实现对图元操作的统一 接口,为图形编辑提供具体实现。 7 硕士学位论文 图形编辑子模块 图形编辑子模块完成各图元的缩放、移动、拉伸变形、复制、粘贴、旋转、 组合、打散等功能。 动画连接子模块 动画连接子模块是组态画面动画显示的核心。通过它将图元的属性、位置和 状态信息与变量的数值或条件表达式等联系起来,从而实现动画效果。 控件子模块 控件的使用是组态软件功能扩展的一种表现。丰富的控件库不仅美化了组态 画面,更增强了它的功能。组态软件中要具备的基本控件包括:实时历史趋势图、 日报表、报警报表、事件报表、实时报表等。 图库和文件存储子模块 该模块完成图库的建立、删除以及文件的存储功能。 ( 3 ) 数据库访问模块 数据库是整个组态软件的核心部分。为了提高数据库读写效率,我们将数据 库设计成实时和历史数据库两大部分。实时数据库【5 】用来保存由命令语言执行后 得到的内存变量的实时值和从i o 设备读出的i o 变量的实时值。并定时将实时 数据写到历史数据库。该模块还负责完成远程数据库建表、查询、读写、删除等 操作。 ( 4 ) 网络通信模块 , 网络通讯模块和本机或者远程计算机进行通讯,取得数据库中的数据或者系 统配置参数,以使系统能够正确运行,并且定时刷新画面以正确跟踪设备的当前 状态。 ( 5 ) 读写硬件i o 模块 读写硬件模块完成上位机与下位机的通信功能,主要是采集实时数据和完成 对加设备的控制。 ( 6 ) 脚本开发模块 脚本语言的使用能最大限度的提高系统的灵活性,是组态软件的精髓所在。 主要完成的功能为脚本语言的解释和执行。 2 4 本章小结 本章论述了组态软件不同于其它软件的自身特点,以及组态软件所要实现的 基本功能,然后从用户的具体需求出发给出了系统的总体结构以及模块划分,并 介绍了各模块所要实现的基本功能。 8 关于组态软件开发的关键技术及其设计模式的研究 3c o m 组件技术及应用 随着软件科学的不断发展,软件系统的复杂程度变得越来越高,所以必须把 复杂的应用程序分割成一些小的,功能相对简单的模块,这种方法就是组件技术。 组件技术标准有m i c r o s o f t 公司的c o m ( c o m m o no b j e c tm o d e l ) 标准,o m g ( o b j e c tm a n a g e m e n tg r o u p ) 的c o r b a ( c o m m o no b j e c tb r e a k e ra r c h i t e c t u r e ) 标准和s u n 公司的e j b 标准。本文主要讨论怎么使用m i c r o s o f t 公司的c o m 组 件技术来实现组态软件,组态软件能够应用于不同的工业系统,减少了重复性编 程工作,提高了软件重用的效率,也提高了系统的扩展性和可维护性。 3 1c o m 组件技术 c o m ( c o m p o n e n to b j e c tm o d e l ,组件对象模型) 技术【6 】是微软公司提出的一 种基于二进制标准的、语言和位置无关的组件通信标准与规范。它使各软件组件 以一种统一的方式进行交互。c o m 依赖自身的语言无关性、高封闭型和出色的 重用性,被越来越多的程序员所接受。c o m 的组件技术使得开发的软件易维护, 因此c o m 技术被广泛应用。 c o m 的主要特性有【7 】: ( 1 ) 语言无关性:c o m 规范的定义不依赖于特定的语言,因此编写组件对 象所使用的语言与编写客户程序使用的语言可以不同,只要它们能够生成符合 c o m 规范的可执行代码即可。c o m 标准是一种二进制代码级的标准,而不是 源代码级的标准。与c o m 规范最贴近并且最能够反映c o m 特性的是c 或者 c + + 。 。 ( 2 ) 进程透明性:在客户服务器模型的软件结构中,运行在客户端的代码 和服务器端的代码,既可以在同一个进程中,也可以在不同的进程中。c o m 所 提供的服务组件对象在实现时有两种进程模型,进程内对象和进程外对象。进程 内对象在客户的进程空间中运行,运行效率很高,但组件不稳定会引起客户进程 崩溃。进程外对象运行在同一机器上的另一进程空间或者在远程机器的进程空间 中。进程外对象的优点是稳定性好,组件进程不会危及客户进程,一个组件进程 可以为多个客户进程提供服务,但开销大,而且调用效率相对低一些。客户程序 可以不管组件对象的进程模型,也不用知道组件对象的实现在哪儿,即组件对象 对客户程序来说是透明的。 ( 3 ) 可重用性:对于大型的软件系统来说,可重用性非常重要。c o m 标准 9 硕士学位论文 是建立在二进制代码级的,因此c o m 对象的可重用性与面向对象语言如c + + 中对象的重用过程不同。对于c o m 对象的客户程序来说,它只是通过接口使 用对象提供的服务,饼不知道对象的内部实现过程,因此,组件对象的重用性建 立在组件对象的行为方式上,而不是具体实现上。c o m 用两种机制实现对象的 重用,包容方式和聚合方式。对象重用是c o m 规范很重要的一个方面,体现 了面向对象的思想。虽然c o m 机制很复杂,内容也很多,但鉴于o p c 是建 立在c o m 的基础上的,所以有必要在下面几节详细介绍一下c o m 的一些基 本概念,如对象、接口、c o m 库等,从而对o p c 的底层机制有一个较为清楚 的认识。 3 2c o m 对象和接口 c o m 提供的是面向对象的组件模型,c o m 组件提供给客户的是以对象形 式封装起来的实体。客户程序与c o m 组件程序进行交互的实体是c o m 对象。 c o m 规范对接口使用的约定是c o m 标准的核心,其他所有的高级技术都建立 在此基础上。 3 2 1c o m 对剩8 1 类似于c + + 语言中类的概念,c o m 对象也包括属性( 也称为状态) 和方法( 也 称为操作) ,对象的状态反映了对象的存在,也是区别于其他对象的要素;而对 象所提供的方法就是对象提供给外界的接口,客户必须通过接口才能获得对象的 服务。接口是c o m 对象与外界进行交互的唯一途径。封装性是c o m 对象的 基本特性。c o m 组件的位置对客户来说是透明的,因为客户并不直接去访问 c o m 组件,客户程序通过一个全局标识符进行对象的创建和初始化工作。c o m 规范采用了1 2 8 位全局唯一标识符g u i d 来标识c o m 对象。g u i d 是一个 随机数,不需要专门机构进行分配和管理,理论上会存在重复,但实际出现的可 能性非常非常小。下面给出一个用1 6 进制表示的1 2 8 位的g u i d 的例子: 5 4 b f 6 5 6 7 1 0 0 2 1 1 d 3 b 9 a a 2 3 4 4 5 6 1 2 2 9 9 7 。在c c + + 语言中可以用下面的结 构来描述: t y p e d e fs t r u e t _ g u i d d w o r dd a t a l ; w o r dd a t a 2 ; w o r dd a t a 3 : b y t e d a t a 4 8 ; g u i d : , v c + + 提供了两个工具来产生g u i d :u u i d g e n e x e 和g u i d g e n e x e 。c o m l o 关于组态软件开发的关键技术及其设计模式的研究 库也有一个产生g u i d 的a p i 函数:h r e s u l tc o c r e a t e g u i d ( g u i d 奉p g u i d ) 。 g u i d 并不是专门用来定义c o m 对象标识符的,它也用于定义其它实体的标 识符,如接口标识符等。c o m 对象和c c + + 对象有明显的不同。c o m 对象是 建立在二进制一级的基础上,而c c + + 对象是建立在源代码一级的基础上。数 据封装性是两者都具有的特性,但其形式有所不同。在c o m 对象中,数据是 完全封装在对象的内部,外部不可能直接访问对象的数据属性,只能通过对象提 供的接口函数访问对象的属性。c o m 对象可以对新的属性值进行有效性检查, 增强了c o m 对象的安全性。c c + + 对象的封装性使使用者可以直接访问对象中 的公共数据成员。可重用性也是c o m 对象和c c + + 对象的共同特性,但二者 的表现形式不同。c o m 对象的可重用性表现在c o m 对象的包容和聚合,一个 对象可以完全使用另一个对象的所有功能,而c c + + 对象的可重用性表现在 c + + 类的继承性,派生类可以调用其父类的非私有成员函数。虽然c o m 对象和 c + + 对象的重用性层次不同、机制不同,但由于在c + + 语言中,通常用类来实现 c o m 组件对象,所以可以在源代码一级利用c + + 类的重用性,在组件一级利用 c o m 对象的重用性。 3 2 2c o m 接口【9 】 每个c o m 接口都包含了一系列虚函数,用于直接操作类中的数据。这些函 数规定了实现接口的对象和客户使用这些对象所遵从的协议。指向接口的指针 v p t r 指向函数指针的数组,也就是虚拟函数表( v t a b l e ) ,被v t a b l e 成员指向的函 数称为接口方法或成员函数。其接口内存模型如图3 1 所示。当某个对象的用户 首次获得该对象的指针时,它只是获得了指向对象的某一个接口的指针,该接口 指针允许用户调用这一接口函数表中的函数。但通过接口指针,用户不能访问该 对象的数据成员,也不能直接访问其它接口。这种接口的封装性使得在开发o p c 应用程序时,可以不考虑服务器的内部多样性,只要符合一套接口规范,就可以 以做到各种o p c 服务器端对客户端的统一。 , l 彦m l b z 一 跳a b l e癌口描述 服务器服务 图3 1c o m 接口模型 c o m 规范的核心内容是关于接口的定义。在一个接口的定义中,所有信息 硕士学位论文 都必须在二进制一级确定,不管什么语言,只要能支持这样的内存结构描述,就 可以定义接口。c + + 中c l a s s 的v t a b l e 与c o m 接口结构中的v t a b l e 完全一致, 因此,用类描述c o m 接口是最方便的方法。比如可以像下面这样定义一个接口: c l a s si d i c t i o n a r y v i r t u a lb o o l i n i t i a l i z e ( ) = 0 ; w r t u a lb o o l l o a d l i b r a r y ( s t r i n g ) = o ; v i r t u a lb o o l i n s e r t w o r d ( s t r i n g ,s t r i n g ) = o ; v a r t u a lb o o l l o o k u p w o r d ( s t r i n g ,s t r i n g 木) = o ; v i r t u a lb o o l r e s t o r e l i b r a r y ( s t r i n g ) = 0 ; v i r t u a lv o i df r e e l i b r a r y 0 = 0 ; ) ; c o m 规范在采用o s f 的d c e 规范描述远程调用接口i d l 1 0 ( i n t e r f a c e d e s c r i p t i o nl a n g u a g e ,接口描述语言) 的基础上,进行扩展形成了c o m 接口的描述 语言。c o m 规范使用的i d l 接口描述语言不仅可用于定义c o m 接口,同时还 定义了一些常用的数据类型,也可以描述自定义的数据结构,对于接口成员函数, 可以指定每个参数的类型、输入输出特性,甚至支持可变长度数组的描述。可以 用下面的代码描述上面的接口: i n t e r f a c ed i c t i o n a r y h r e s u l ti n i t i a l i z e 0 ; h r e s u l t l o a d l i b r a r y ( i n s t r i n g ) ; h r e s u l t i n s e r t w o r d ( i n 】s t r i n g , i n 】s t r i n g ) : h r e s u l t l o o k u p w o r d ( i n 】s t r i n g , o u t 】s t r i n g ) ; h r e s u l t r e s t o r e l i b r a r y ( i n 】s t r i n g ) ; 、h r e s u l t f r e e l i b r a r y 0 ; ) ; v c + + 提供的m i d l 工具,可以把i d l 接口描述文件编译成c c + + 兼容的 接1 3 描述头文件( h ) 。c o m 接口有以下一些鲜明的特点: 二进制特性:接口规范并不建立在任何编程语言的基础上,而是规定了 二进制一级的标准。任何语言只要有足够的数据表达能力,就可以对接 口进行描述。c + + 的类可以以最简捷的方式描述c o m 接口。 接口不变性:接口是组件客户程序和组件对象之间的桥梁,因此接口应 该保持不变,以使两者的开发相互独立。接口不变性要求在定义组件对 象的接口时,要充分考虑组件对象所提供功能的一般性特征,以使接口 1 2 关于组态软件开发的关键技术及其设计模式的研究 描述更为通用。 继承性( 扩展性) :c o m 接口具有不变性,但并不意味着接口不再发展, 接口也可以继承发展。接口继承是说明继承,即派生的接口只继承了基 接口的成员函数说明,并没有继承基接口的实现。 多态性:多态性是面向对象系统的重要特性,c o m 对象也具有多态性。 多态性使得客户程序可以用统一的方法处理不同的对象。如果几个不同 的c o m 对象实现了同一个接口,则客户程序可以用同样的代码调用这 些c o m 对象。c o m 对象的多态性可以在每个接口上得到体现。, 3 3iu n k n o w n 接口 c o m 定义的每一个接口都必须从i u n k n o w n 接口继承过来,原因是 i u n k n o w n 接口提供了两个非常重要的特性:生存期控制和接口查询。虽然客户 程序可以不管对象内部的实现细节,但它要控制对象的存在与否。如果客户要继 续对对象进行操作,则它必须保证对象能一直存在于内存中;如果客户对对象的 操作已经完成,以后也不再需要该对象了,则它必须及时地把对象释放掉,以提 高资源的利用率。i u n k n o w n 引入了“引用计数 方法来有效地控制对象的生存 周期。另外,客户程序不太可能得到对象的所有接口指针,它只会拥有一个接口 指针。如果客户程序需要其它的指针,它必须能通过这个接口指针获得另一个接 口指针。i u n k n o w n 使用“接口查询( q u c r y i n t e r f a c e ) 的方法来完成接口之间的 跳转。下面是 - u n k n o w n 接口的i d l 定义: i n t e r f a c ei u n k n o w n j 1 ,h r e s u l t q u e r y i n t e r f a c e ( i n r e f i i di i d , o u t 】v o i d 料p p v ) : u l o n ga d d r e f ( v o i d ) ; u l o n gr e l e a s e ( v o i d ) : ) ; 1 u n k n o w n 接口包含三个成员函数:q u e r y i n t e r f a c e 、a d d r e lr e l e a s e 。函数 q u e r y i n t e r f a c e 用于查询c o m 对象的其他接口指针,函数a d d r e f 和r e l e a s e 用于对引用计数进行操作。 3 3 1 引用计刿1 2 1 、 对于c o m 对象来说,只要客户程序有一个逻辑模块还需要使用它,那么 它就必须驻留在内存中,不能释放自己。c o m 采用了“引用计数 技术来解决 内存管理的问题。每个c o m 对象都记录了一个称为“引用计数”的数值, 该数值的含义为有多少个有效指针在引用该c o m 对象。当客户程序得到了一 1 3 硕士学位论文 个指向该对象的接口指针时,引用计数值增1 ;当客户用完了该接口指针后,引 用计数减1 。当引用计数减到0 时,c o m 对象就应该把自己从内存中清除掉。 当客户程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论