




已阅读5页,还剩50页未读, 继续免费阅读
(模式识别与智能系统专业论文)opc历史数据访问服务器的研究与开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北电力大学硕士学位论文 捅要 随着工业生产中自动化水平的提高,人们要处理包括历史数据在内的越来 越多的信息。o p c 历史数据服务器提供了一种标准的历史数据访问机制给那些 对历史数据感兴趣的用户。本文要解决的任务就是如何开发o p c 历史数据服务 器。论文首先通过介绍o p c 技术产生的背景,以及它的主要特点与发展状况入 手,深入剖析了其核心c o m d c o m 技术。然后分析了o p c 历史数据访问服务器 的模型及对象、接口构成,对其包含的对象与自定义接口的定义与使用功能进 行了详细剖析,最后通过客户与服务器设计实例及测试阐述了开发o p t 历史数 据访问服务器的原理及具体的实现方法。 关键词:c o m d c o m 技术,o p c 技术,活动模版库,接口 a b s t r a c t w i t ht h el e v e lo fa u t o m a t i o nt h a ti sb e i n ga p p l i e di nm a n u f a c t u r i n g ,p e o p l e a r ed e a l i n gw i t hh i g h e ra n dh i g h e ra m o u n t so fi n f o r m a t i o ni n c l u d i n gh i s t o r i c a ld a t a o p ch i s t o r i c a ld a t aa c c e s ss e r v e rp r o v i d e sak i n do fs t a n d a r dm e c h a n i s mo fd a t a a c c e s sf o rt h eu s e r sw h oa r ei n t e r e s t e di nh i s t o r i c a ld a t a t h em i s s i o nt h a tt h i s a r t i c l ew a n t st os o l v ei sh o wt od e v e l o pt h eo p ch i s t o r i c a ld a t aa c c e s ss e r v e r f i r s t t h ea r t i c l ei n t r o d u c e st h e p r o d u c i n gb a c k g r o u n d ,m a i n c h a r a c t e r i s t i c sa n d d e v e l o p m e n tc o n d i t i o no fo p ct e c h n i q u e ,t h e na n a l y z e s i t sc o r ec o m d c o m t e c h n i q u e s e c o n dt h ea r t i c l ea n a l y z e st h em o d e lo f0 p ch i s t o r i c a ld a t aa c c e s s s e r v e ra n dt h es t r u c t u r eo fi t so b j e c t sa n di n t e r f a c e s t h ed e f i n i t i o na n df u n c t i o no f i t so b j e c t sa n di n t e r f a c e sa r ea n a l y z e di nd e t a i l f i n a l l y ,t h i sp a p e rp r o v i d e st h e t e c h n i q u e sa n dr e a l i z a t i o nt h a ta r eu s e dt od e v e l o p0 p ch i s t o r i c a ld a t aa c c e s s s e r v e rb yd e s c r i b i n gt h ee x a m p l eo fc u s t o m e ra n ds e r v e rd e s i g n i n g y a ns h i y u e ( p a t t e r nr e c o g n i t i o na n di n t e l l i g e n ts y s t e m ) d i r e c t e db ya s s o c i a t ep r o f l uh u i m i n g k e yw o r d s :c o m d c o mt e c h n i q u e ,o p ct e c h n i q u e ,a t l - a c t i v et e m p l a t el i b r a r y , i n t e r f a c e 华北电力大学硕士学位论文 捅要 随着工业生产中自动化水平的提高,人们要处理包括历史数据在内的越来 越多的信息。o p c 历史数据服务器提供了一种标准的历史数据访问机制给那些 对历史数据感兴趣的用户。本文要解决的任务就是如何开发o p c 历史数据服务 器。论文首先通过介绍o p c 技术产生的背景,以及它的主要特点与发展状况入 手,深入剖析了其核心c o m d c o m 技术。然后分析了o p c 历史数据访问服务器 的模型及对象、接口构成,对其包含的对象与自定义接口的定义与使用功能进 行了详细剖析,最后通过客户与服务器设计实例及测试阐述了开发o p t 历史数 据访问服务器的原理及具体的实现方法。 关键词:c o m d c o m 技术,o p c 技术,活动模版库,接口 a b s t r a c t w i t ht h el e v e lo fa u t o m a t i o nt h a ti sb e i n ga p p l i e di nm a n u f a c t u r i n g ,p e o p l e a r ed e a l i n gw i t hh i g h e ra n dh i g h e ra m o u n t so fi n f o r m a t i o ni n c l u d i n gh i s t o r i c a ld a t a o p ch i s t o r i c a ld a t aa c c e s ss e r v e rp r o v i d e sak i n do fs t a n d a r dm e c h a n i s mo fd a t a a c c e s sf o rt h eu s e r sw h oa r ei n t e r e s t e di nh i s t o r i c a ld a t a t h em i s s i o nt h a tt h i s a r t i c l ew a n t st os o l v ei sh o wt od e v e l o pt h eo p ch i s t o r i c a ld a t aa c c e s ss e r v e r f i r s t t h ea r t i c l ei n t r o d u c e st h e p r o d u c i n gb a c k g r o u n d ,m a i n c h a r a c t e r i s t i c sa n d d e v e l o p m e n tc o n d i t i o no fo p ct e c h n i q u e ,t h e na n a l y z e si t s c o r ec o m d c o m t e c h n i q u e s e c o n dt h ea r t i c l ea n a l y z e st h em o d e lo f0 p ch i s t o r i c a ld a t aa c c e s s s e r v e ra n dt h es t r u c t u r eo fi t so b j e c t sa n di n t e r f a c e s 、t h ed e f i n i t i o na n df u n c t i o no f i t so b j e c t sa n di n t e r f a c e sa r ea n a l y z e di nd e t a i l f i n a l l y ,t h i sp a p e rp r o v i d e st h e t e c h n i q u e sa n dr e a l i z a t i o nt h a ta r eu s e dt od e v e l o p0 p ch i s t o r i c a ld a t aa c c e s s s e r v e rb yd e s c r i b i n gt h ee x a m p l eo fc u s t o m e ra n ds e r v e rd e s i g n i n g y a ns h i y u e ( p a t t e r nr e c o g n i t i o na n di n t e l l i g e n ts y s t e m ) d i r e c t e db ya s s o c i a t ep r o f l uh u i m i n g k e yw o r d s :c o m d c o mt e c h n i q u e ,o p ct e c h n i q u e ,a t l - a c t i v et e m p l a t el i b r a r y , i n t e r f a e e 声明 知,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表或撰写过的研 究成果,也不包含为获得华北电力大学或其他教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了 谢意。 学位论文作者签名:! 坠二! 叁 日 期:乏翌生:兰:竖 关于学位论文使用授权的说明 本人完全了解华北电力大学有关保留、使用学位论文的规定,即:学校有权保管、 并向有关部门送交学位论文的原件与复印件;学校可以采用影印、缩印或其它复制手 段复制并保存学位论文;学校可允许学位论文被查阅或借阅;学校可以学术交流为 目的,复制赠送和交换学位论文;同意学校可以用不同方式在不同媒体上发表、传播学 位论文的全部或部分内容。 ( 涉密的学位论文在解密后遵守此规定) 作者签名: 煎 吠 日期:竺! ! :! ! ! 导师签名:t 婆釜! ! 日期:型:墨! 弓 华北电力大学硕士学位论文 1 1o p c 技术概述 1 11 o p c 概念 第一章引言 o p c 是o l ef o rp r o c e s sc o n t r o l ( 用于过程控制的o l e ) 的简称。它是o p c 基金会组织制定的工业控制软件互操作性规范,是微软为了把w i n d o w s 应用于控制 系统和控制界共同推出的一项新技术。 o p c 为诸如d c s ,p l c ,智能仪表的数据服务器定义了建立在o l e 或c o m 组件技术 上的标准的对象、方法和属性。通过该服务器,标准的支持o l e 的客户机就可以与 系统通信。o p c 主要设计为从网络上访问数据,也可以应用于其它地方。在最低级 它可以从物理设备得到数据并将它们送到s c a d a 或d c s 中,或者从s c a d a 或d c s 中 将数据送到应用程序。o p c 应用不应该局限于应用程序与现场设备的接口,应该认 为它是一种w in d o w s 应用程序相互交换数据的通用规范。 o p c 是以o l e c o m 机制作为应用程序的通讯标准。o l e c o m 是一种客户n 务器 模式,具有语言无关性,代码重用性,易于集成性等优点。o p c 规范了接口函数, 不管现场设备以何种形式存在,客户都以统一的方式去访问,从而保证软件对客户 的透明性,使得用户完全从底层的开发中脱离出来。 1 1 2o p c 产生的背景 在o p c 产生以前,传统系统中的s c a d a ( 远方监控系统) 、h m i ( 人机接口) 等应 用程序是通过独立开发的驱动程序数据包访问数据源的数据。 传统驱动程序存在的问题: - 重复劳动 每个人都必须为一个特定的硬件生厂商编写驱动程序 - 驱动程序的不足 硬件特性不能被所有的驱动程序开发者所支持。 硬件特性改变 硬件特性的变动可能会使一些驱动程序不能工作。 访问冲突 两个程序包一般不可以同时访问同一个装置,因为它们包含不同的驱动程序。 硬件厂商不能通过改进驱动程序来解决以上问题,它被不同的客户程序协议所 阻挠。 这就需要建立一个标准的用于与众多的数据源( 或者是工厂设备,或者是控制 1 华北屯力大学硕士学位论文 室内的数据库) 通信的机制( m e c h a n i s m ) 。0 p c 解决了这个问题,它提供了一个数据 源与客户应用程序进行通信的一个机制,可通过标准方式通信。卖方可以开发一个 可复用的,高优化的服务器用于与数据源通信,并保证这种有效地访问数据源或设 备的机制。 1 13o p c 的优势 o p c 规范以o l e d c o m 为技术基础,而0 l e d c o m 支持t c p i p 等网络协议,因此 可以将各个子系统从物理上分开,分布于网络的不同节点上。 0 p c 按照面向对象的原则,将一个应用程序( 0 p c 服务器) 作为一个对象封装 起来,只将接口方法暴露在外面,客户以统一的方式去调用这个方法,从而保证软 件对客户的透明性,使得用户完全从低层的开发中脱离出来。 o p c 实现了远程调用,使得应用程序的分布与系统硬件的分布无关,便于系统 硬件配置,使得系统的应用范围更广。 采用0 p c 规范,便于系统的组态,将系统复杂性大大简化,可以大大缩短软件 开发周期,提高软件运行的稳定性,便于系统的升级与维护。 o p c 规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去 访问,从而实现系统的开放性,易于实现与其它系统的接口。 1 1 4o p c 技术介绍及发展 o p c 技术标准是由世晁上占领先地位的自动化系统和硬件、软件公司与微软 ( m i c r o s o f t ) 紧密合作而建立的。0 p c 是0 l ef o rp r o c e s sc o n t r o l ( 用于过程 控制的0 l e ) 的简称,意思是把0 l e 技术应用于工业控制领域。o l e 原意是对象链 接与嵌入,随着0 l e 2 0 的发布,其范围已远远超出了这个概念,已成为独立与计 算机语言、操作系统甚至硬件平台的一种规范,是面向对象程序设计概念的进一步 延伸。0 p c 建立在0 l e 规范之上,它为工业控制领域提供了一种标准的数据访问机 制。 o p c 服务器实现了一套标准的c o m 接口,即o p c 接口。o p c 技术规范定义了o p c 服务器程序和客户机程序进行通讯的一种规则,但没有规定实现接口的细节。而如 何实现0 p c 接口正是本文的主要内容。 o p c 标准可以分成许多块,如图l1 i 所示: 它涵盖了已经开发完成的和为开发完成的0 p c 协议规范。 已经存在的0 p c 规范: o p cd a t aa c c e s s3 0 o p cc o m p l i a n c e d a2 0 4 a e1 0 2 华北电力大学硕士学位论文 a l a r ma n de v e n t s1 1 r h i s t o r i c a ld a t aa c c e s s1 2 b a t c hd a t aa c c e s s2 0 s e c u r i t y o p cx m l d a o p cd a t ae x c h a n g e ( o p cd x ) 正在研发的o p c 规范: o p cc o m m o ni o o p cc o m p l e xd a t a 0 p cu p n p o p cc o m m a n de x e c u t i o n 随着0 p c 技术的不断进步,它所涵盖的范围将越来越广。 1 - 1o p c 规范 o p c 发展历程如图i 2 ,直观的说明了o p c 一步步完善和发展的过程。 1 - 2o p c 发展历程图 3 华北电力大学硕l 学位论文 目前o p c 基金会会员有2 2 0 多家,仍在不断增加,基于o p c 的技术产品已有几 百种,软件厂商和硬件厂商都在急于开发出自己的产品,目前能够开发出o p c 产品 的厂家还不太多,但很快会增多,不久的将来主要监控系统都会支持o p c 。 新规范的推出,必然有新的o p c 服务器和客户应用程序与之相对应,所以丌发 o p c 服务器是势在必行。 o p c 技术的采用,使得可以以更低的价格、更简单的系统结构、更长的寿命解 决工业控制成为可能。随着o p c 技术的发展,很容易设计出控制要求高度网络化、 高度分散化的控制系统。 i 2 课题背景及任务 1 2 1 开发设计0 p o 历史数据服务器的必要性 如今,随着工业生产中自动化水平的提高,人们要处理越来越多的信息。历史 数据引擎又使得对历史数据感兴趣的用户可以获得更多的信息。然而,现在大多数 的历史系统用自己特有的接口来分发数据,各种系统之间没有兼容。这就需要开发 者根据自己的产品重新开发基本结构,其他独立的卖主也是独立的开发。 为了达到在各种各样的层次上聚合数据( 就像在o p cd a t a 背景资料中陈述的 一样) ,历史信息可以认为是另一种数据类型。这些信息是o p c 数据规范中信息框 架的重要组成部分。厂商署用户想从卖主那里得到不用定制的,开放的解决方案, 这比单单解决特定的问题更有价值。因此要根据o p c 规范开发o p c 服务器。 o p c 规范有很多种:数据访问( d a t aa c c e s s ) 规范,报警与事件( a l a r m a n de v e n t ) 规范,历史数据访问( h i s t o r i c a ld a t aa c c e s s ) ) 规范,还 有批量数据访问( b a t c hd a t aa c c e s s ) 规范,安全性( s e c u r i t y ) 规范等 许多其他规范。 每种规范对应着一种类型的服务器和客户程序的开发,它们的区别是 实现功能的侧重点不同。就拿o p c 数据访问服务器和o p t 历史数据访问服务器 来说,客户端通过它们提供的服务,都可以对数据进行访问,但是访问的数据有所 不同。o p c 数据访问规范是o p c 基金会最初制定的1 个工业标准,其重点是对现场设 备的在线数据进行访问,访问的是实时数据,数据量小。若需要访问历史数据时, 由于访问的数据量通常比较大,就不能使用o p c 数据访问服务器。而需要开发另外 一种服务器,o p c 历史数据访问服务器。 1 2 2 课题任务 本课题的主要任务是开发一个0 p c 历史数据访问服务器,它的功能是可以实现 华北电力大学硕 :学位论文 对不同的数据源进行数据读写,并能以标准通用的方式为上层客户端程序提供所有 有用的数据信息。开发依据的标准是o p ch i s t o r i c a ld a t aa c c e s sc u s t o mi n t e r f a c e s t a n d a r dv 1 2 。 1 2 3 开发工具 当前开发符合o p c 规范的应用程序一般有两种方式,一是利用某些软件开发商 提供的快速开发工具,它把服务器的对象与接口部分进行了封装,能提高o p c 服务 器程序的开发速度和质量,而且设计者不需了解o p c 对象的实现细节。但快速开发 工具中某些实现部分是通过d l l 的形式封装起来,当用户需要增加某些特定功能时 会受到一些限制,而且它们的价格不菲。即使用户使用快速开发工具开发o p c 服务 器,也必须熟悉工具开发商提供的开发文档,这也不是一件容易的事情。二是根据 o p c 基金会免费提供的规范直接开发,这需要了解o p c 规范的许多细节,并且对c o m d c o m 知识也要熟悉,其优点是实现方式自由,可以选择实现的功能,使用灵活, 且有自己的产权,一旦掌握,则后续o p c 应用程序的开发就非常容易了。 1 2 4 本论文内容 ( 1 ) 系统全面的阐述了o p c 技术的核心c o m d c o m 技术。 ( 2 ) 剖析了o p c 历史数据访问访问规范,详细介绍了o p c 历史数据访问的技术 特点,并分析了规范对o p c 应用程序的具体要求。 ( 3 ) 本文重点是完成o p c 服务器程序的软件开发,所以详细分析了o p c 服务器 开发最通常的工具a t l ( 活动模板库) ,并对o p c 历史数据服务器的开发框架,开发 步骤进行了深入的研究。 ( 4 ) 对o p c 服务器程序进行测试。 华北电力人学硕j - 学位论义 第二章o l e c o m 技术 o p c 技术是基于微软的o l e c o m 技术而建立起来的一项技术,在详细描述o p c 规范以前,需要对o p t 规范所涉及到的o l e c o m 技术深入分析。 2 1c o m 技术简介 2 1 1c o m 、o l e 和a c t i v e x c o m 、o l e 、a c t i v e x 之间是紧密联系的。c o m 是一个系统级别( s y s t e m l e v e l ) 的标准,它提供了基本的对象模型服务,通过使用该服务可以建立其它高级别的功 能。c o m 的全称是组件对象模型( c o m p o n e n to b j e c tm o d e l ) 。从基本概念上讲, c o m 是一个软件交互操作标准( s o f t w a r e i n t e r o p e r a b i l i t ys t a n d a r d ) 。o l e 和 a c t i v e x 是高级别服务的范例,它是建立在软件交互操作标准之上的高级别服务。 o l e 和a c t i v e x 提供了应用级别( a p p l c a t i o n 一1 e v e l ) 的特性,它们是通过使用 c o m 的服务建立起来的。所以c o m 、o l e 和a c t i v e x 这些术语在某种程度上是可以 互换的,它们具有紧密相关的功能和特性。然而,这三个术语中的每一个都描述了 一套独立的高级别技术,虽然它们之问有很多重合的地方。 2 1 2c o m 概念 c o m ,即对象组件模型,是一种以组件为发布单元的对象模型,这种模型使各 软件组件可以用一种统一的方式迸行交互。c o m 既提供了组件之间进行交互的规范, 也提供了实现交互的环境。c o m 是个与平台无关的组件软件模型,虽然c o m 最初 源于m i c r o s o f tw i n d o w s 平台,c o m 的实现部分很多地方直接用到了w i n d o w s 系统 的一些特性,系统注册表、动态连接库等,但实际上在w i n d o w s 上使用的c o m 标准 只是c o m 对象的一个具体实现。c o m 组件对象之间的交互规范不依赖于任何特定的 语言,所以c o m 也可以是不同语言协作开发的一种标准。 在c o m 标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库 ( d l l ) ,被称为进程内组件( i n p r o c e s sc o m p o n e n t ) :也可以是一个可执行程序 ( e x e ) ,被称作进程外组件( o u t p r o c e s sc o m p o n e n t ) 。一个组件程序可以包含一 个或多个组件对象,因为e 嘶是以对象为基本单元的模型,所以在程序与程序之间 进行通信时,通信的双方应该是组件对象( 或c o m 对象) ,而组件程序( 或c o m 程 序) 无论是d l l 程序还是e x e 程序都是提供c o m 对象的代码载体。 2 1 ,3c o m 对象 华北电力人学硕j j 学位论文 在c o m 规范中,并没有对c o m 对象进行严格的定义,但c o m 提供的是面向对象 的组件模型,c o m 组件提供给客户的是以对象形式封装起来的实体。客户程序与c o m 组件程序进行交互的实体是c o m 对象,它并不关心组件模块的名称和位置,但它必 须知道自己在与哪个c o m 对象进行交互。 类似与c + + 语言中类的概念,c o m 对象也包括属性和方法,对象的属性反映了 对象的存在,也是区别于其他对象的要素;而对象所提供的方法就是对象提供给外 界的接口,客户必须通过接口才能获得对象的服务。对于c o m 对象来说,接口是它 与外界进行交互的唯一途径,因此,封装性是c o m 对象的基本特征。 可重用性是面向对象系统的重要特性,因此也是c o m 对象和c + + 对象的共同特 性,但两者的表现形式不同,c o m 对象的可重用性表现在c o m 对象的包容和聚合, 一个对象可以使用另一个对象的全部功能;而c 十十对象是通过继承实现重用,派生 类可以调用其父类的非私有成员函数。 c o m 对象具有多态性,通过接口来体现其多态性;而c + + 对象是通过其虚函数 体现多态性。 2 1 ,4o o m 接口 c o m 对象和它的客户之间通过接口进行交互。c o m 规范的核心内容就是关于接 口的定义。从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构, 客户代码可以调用组件对象的功能。接口定义了一组成员函数,这组成员函数是组 件对象暴露出来的所有信息,客户程序利用这些函数获得组件对象的服务。 客户程序用一个指向接口数据结构的指针来调用接口成员函数。如图2 1 所示, 接口指针实际上又指向另一个指针,这第二个指针指向一组函数,成为接口函数表, 接口函数表中每一项为4 个字节长度的函数指针,每个函数指针与对象的具体实现 连接起来。通过这种方式,客户只要获得了接口指针,就可调用到对象的实际功能。 一圊一一 圈2 】接口结构 通常我们把接口函数表称为虚函数表( v i r t u a lf u n c t i o nt a b l e ,简称v t a b l e ) , 指向v t a b l e 的指针为p v t a b l e 。对于一个接口来说,它的虚函数表v t a b l e 是确定 的,因此接口成员函数个数是不变的,而且成员函数的先后顺序也是不变的;对于 华北电力大学硕士学位论文 每个成员函数其参数和返回值也是确定的。 c o m 接口规范规定了二进制级的标准,并不建立在任何编程语言的基础上, 因此,任何语言只要有足够的表达能力,它就可以对接口进行描述,从而可以用于 与组件程序有关的应用开发。 c o m 接口具有接口不变性的特点。接口是客户程序和组件对象之间的桥梁,接 口如果经常发生变化,则客户程序和组件程序也要跟着变化,这对于应用系统的开 发非常不利。c o m 接口不变性就解决了该问题,只要客户程序和组件程序都按照既 定的接口设计进行开发,则可以保证在两者独立开发结束后,它们的写作运行能力 能达到预期的效果。 c o m 接口具有继承性。c o m 接口的继承只是说明继承,即派生的接口只继承了 其接口的成员函数说明,并没有继承其接口的实现,因为接口定义不包括函数的实 现部分。其次,接口继承只允许单继承,不允许多重继承。 c o m 对象具有多态性。c o m 对象的多态性通过c o m 接口体现。多态性使得客户 程序可以用统一的方法处理不通的对象,甚至是不同类型的对象,只要它们实现了 同样的接口。如果几个不同的c o m 对象实现了同一个接口,则客户程序可以用同样 的代码调用这些c o m 对象。 2 1 5i u n k n o w n 接口 c o m 定义的每一个接口都必须从i u n k n 0 1 l r n 继承过来,其原因在于i u n k n o w n 接 口提供了两个非常重要的特性:生存期控制和接口查询。客户程序只能通过接口与 c o m 对象进行通信,虽然客户程序可以不管对象内部的实现细节,但它要控制对象 的存在与否。如果客户还要继续对对象进行操作,则它必须保证对象能一直存在于 内存中;如果客户对对象的操作已经完成,以后也不再需要该对象了则它必须及时 地把对象释放掉,以提高资源的利用率。i u n k n o w n 引入了“引用计数”( r e f e r e n c e c o u n t i n g ) 方法,可以有效地控制对象的生存周期。 另一方面,如果一个c o m 对象实现了多个接口,在初始时刻,客户程序不太可 能得到该对象的所有接口指针,它只会拥有一个接口指针。如果客户程序需要其它 的指针,则可利用i u n k n o w n 的“接口查询”方法来完成接口之间的跳转。 i 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 h r e s u l tq 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 ) ; 华北电力大学硕十学位论文 ) 注: i n 表示输入参数, o u t 表示输出参数。 由上可见,i 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 f 、r e l e a s e 。 函数q u e r y i n t e r f 8 c e 用于查询c 对象的其它接口指针,函数h d d r e f 和r e l e a s e 用于对引用计数进行操作。 2 1 6 客户服务器模型 对象和客户之间的相互作用是建立在客户服务器模型的基础上的,客户服 务器模型的一个很大的优点是稳定性好,丽稳定性f 是c o m 模型的目标,尤其对于 跨进程的程序通信,稳定性更会带来性能上的高可靠性。 c o m 不仅仅是一种简单的客户服务器模型,有时客户也反过来提供服务,或 者服务方本身也需要其它对象的一些功能,在这些情况下,一个对象可能即是服务 器也是客户,c o m 能够有效地处理这些情况。 客户服务器模型是一种发展比较成功的软件模型,c o m 就是以客户服务器 模型为基础,并灵活的使用了这种模型。如图2 2 ,四种c o m 模型中每一个箭头就 代表了一个客户一服务器关系。 匿口圃 ( a ) 占罐面谪 ( b ) 叫麓l 母竹筠1i 悃ll 岖羽l ( e )( d ) ( ) 蔺单喜户,庸备嚣模型( 喜户,魔轰器曩嘲的;夔重靖拘 ( c ) c o 鼻_ 中| 的氆毒镆型 ce 1 ) c o x , , 的籍考摸磐 图2 2c o m 中的客户服务器模型的几种用法 2 1 7 进程内组件和进程外组件 进程是个正在运行的程序,它有单独的内存地址空间,拥有自己的一些系统 资源。如果我们用动态连接库的方式实现组件程序,则客户程序调用组件程序的服 务时,会把组件程序装入到自己的进程中,所以客户程序和组件程序运行在同一个 进程空间中,我们也把这种组件程序成为进程内组件。实现组件程序的另一种形式 是e x e 程序,这种组件程序在被调用时有其自己的进程空间,它运行在与客户程序 同一个机器上或者在远程机器上的另一个进程空间内,所以客户程序和组件程序运 华北电力大学硕士学位论文 行在不同的进程空间中,我们把这种组件程序称为进程外组件。 虽然c o m 对象有不同的进程模型,但这种区别对于客户程序来说是透明的,因 此客户程序在使用组件对象时可以不管这种区别的存在,只要遵照c o m 规范即可。 进程内模型的优点是效率高,但组件不稳定会引起客户进程崩溃;进程外模型的优 点是稳定性好,组件进程不会危及客户程序,但进程外组件开销大,而且调用效率 相对低些。用户可根据自己的需要选择进程模型。 对于进程外组件需要注意的问题是进程之间如何进行通信的。c o m 采用了本地 过程调用( l p c ) 和远过程调用( r p c ) 的方法进行进程之问的通信。l p c 用于同一 个机器上的进程之间的通信,r p c 用于不同机器上的进程问的通信,它们机理相同, 但r p c 要涉及网络传递信息,要比l p c 复杂。 客户程序和进程外组件的调用关系如矧2 - - 3 所示,客户程序只与同一进程中的 代理( p r o x y ) 对象打交道,组件程序只与同一进程中的存根d l l 打交道,l p c 调用 只在代理对象和存根d l l 之间进行,当客户程序需要调用组件提供的功能服务时, 它需要执行图中的六个步骤刁1 可完成一个函数调用。 裔馥器鼙 r 盛户蠛用嫠l 口哦易厦教l 客户程序 ( 客户进程) 一 陌酾 o o 代理对象、墁i l p c 嘲用组律存 i 参本撮孤l 通过 l p c 返回嫱幕 一一组件程序 一 f 组件型蛹 陌丽 存根d l l 雩嚣耋酽 l o 蝇用组忭 耐象接1 3 瞍易羁散 图2 - 3 进程外组件与客户程序协作的结构图 代理d l l 和存根d l l 除了完成l p c 调用之外,它还需要对参数和返回值进行翻 译和传递。客户程序调用的参数,首先经过代理d l l 的处理,把参数以及其它的调 用信息组装成一个数据包传递给组件进程,这个过程称为参数列集( m a r s f a li n g ) ; 组件程序接收到数据包后,要进行解包操作,把参数信息提取出来,这个过程被称 为散集( u n m a r s f a l n g ) ;然后再进行实际的接口调用。函数的返回值和输出参数 在返回的过程中也要进行列集和散集操作,只是在存根d l l 一端进行列集、在代理 d l l 一端进行散集,最后把散集后的结果值返回给客户程序,完成一次功能调用。 所有这些特性的实现可以建立在操作系统提供的l p c 和r p c 模块基础上,不需 要应用系统开发人员去考虑这些底层的细节技术问题。为了实现进程外组件,我们 除了实现组件程序外,还应该实现代理d l l 和存根d l l 两个程序模块。如果我们使 用自定义的c o m 接口,应建立自己的d l l 程序,如果我们使用已定义的标准接口或 者o l e 接e l ,可直接使用系统提供的d l l ,c o m 库会为我们处理这些细节。 华北电力人学硕士学位论文 2 1 bo o m 对象的管理 c o m 规范使用1 2 8 位g u i d 来标识c o m 对象和接口,客户程序通过这些g u i d 值 来创建c o m 对象并与对象进行交互。因为客户程序与组件程序是独立的,客户程序 在创建对象时并不一定知道组件程序的确切位置,按照c o m 规范,客户程序通过c o m 库完成对象的创建工作。c o m 库通过系统注册表所提供的信息进行组件的创建工作, 系统注册表是一个全操作系统范围公用的信息仓库,其中包含了所有的c o m 组件必 要的信息以及其它一些信息。 组件程序把它所实现的c o m 对象的信息以及接口信息都保存到注册表中,这个 步骤称为组件的注册,如果组件程序具有自注册能力则我们称该组件程序为可自注 册的( s e l f - r e g i s t e r i n g ) 组件:客户程序在创建组件对象时,也需要直接或者间 接地访问注册表中的信息。 c o m 组件的注册信息,只用到系统注册表的h k e y c l a s s e s b o o t 键,在 h k e yc l a s s e sb o o t 键下最主要的是c l s i d 子键,在c l s i d 子键列出了当前机器上 所有组件的信息。每个c l s i b 键下面包含了与该组件对象相关的一些信息。在 h k e yc l a s s e sb o o t 键下,还有i n t e r f a c e 子键给出了当前系统中一些c o m 接口的 配置信息,t y p e l i b 子键给出了当前系统中类型库的信息。如果一个接口被用于进 程外组件,那么针对该接口,必须配有相应的代理d l l 和存根d l l ,这些信息被保 存在接e l 子键下,其子键名为p r o x y s t u b c l s i d 或p r o x y s t u b c l s i d 3 2 。 在w i n d o w s 系统中,除了c l s i d 子键可以唯一标识一个c o m 对象外,同时也可 以用字符串对组件对象命名,这样的名字信息称为p r o g l d ( p r o g r a mi d e n t i f i e r , 程序标识符) ,被直接放在注册表的h k e y c l a s s e s b o o t 键下。还有个组件对象 可以被分到多个类别中,如果c o m 组件支持同样一组接口则可以把它们分到同一个 类别中。类别信息也用一个g u i d 来描述,称为c a t i d ,在每个对象的c l s i d 键下包 含一个“i m p l e m e n t e dc a t e g o r i e s ”子键,其中记录了该对象所属的类别。类别特 性只是c o m 对象的部分特性,但如果c o m 对象要加入到某个类别中,则必须实现该 类别指定的所有接口。在h k e yc l a s s e s b o o t 键下有一个子键“c o m p o n e n t c a t e g o r i e s ”包含了当前机器上所有的组件类别,其中列出了每个类别的c a t i d , 我们可使用v i s u a lc + + 提供的o l e v i e w e x e 实用工具列出当前机器上的所有的类别 信息,以及每一类别下的组件对象列表。 对于有自注册能力的组件分两种情况进行注册工作,进程内组件本身是一个动 态链接库,不能直接运行,要靠其它程序调用才能获得控制。w i n d o w s 系统提供实 用工具r e g s v r 3 2 e x e 对其进行注册,只要进程内组件提供了相应的入口函数 d l i r e g i s t e r s e r v e r 和d 1 1 u n r e g i s t e r s e r v e r 就可完成对组件的注册与注销工作。 其格式如下: 华北电力大学硕上学位论文 r e g s v r 3 2x x x x d ll注册操作 r e g s v r 3 2 u x x x x d 1 1 注销操作 进程外组件是一个可执行程序,它不能提供入口函数供其它程序调用,因此c o m 规范规定支持自注册的进程外组件必须支持两个命令行参数r e g s e r v e r 和 u n r e g s e r v e r 以便完成注册和注销工作。 2 1 9 可连接对象 在客户与组件程序的交互过程中,如果客户是主动的,而组件是被动的,通过 自身暴露给客户的接口监听客户的请求,一旦组件接收到客户的请求便作出反应, 我们把这样的接口称为入接口( i n e o m i n gi n t e r f a c e ) ;与之对应,如果组件对象 要主动与客户进行通信,对象也可提供出接口( o u t g o i n gi n t e r f a o e ) 来实现。出 接口不由对象来实现,而是由客户程序来实现,客户实现这些接口,并把接口指针 告诉对象,以后对象利用此接口指针与客户进行通信。在客户程序方,实现这些出 接口的对象被称为接受器( s i n k ) ,接受器本身也是一个c o m 对象,但它往往比较 简单,只用于监听并处理组件对象的通知或请求。注意入接口和出接口是一个相对 的概念,它们只用于通信的一个方向。 如果一个c o m 对象支持一个或多个出接口,则我们称这样的对象为可连接对象 ( c o n n e c t a b l eo b j e c t ) ,有时也称为源对象( s o u r c e ) 。客户与可连接对象之间的 通信是双向的。客户、可连接对象和接受器之间的关系可由矧2 4 简单描述。 客户 接受嚣l _ 图2 - 4 简单客户与可连接对象的模型图 可连接对象可以支持一个或多个接口,它通过接口i c o n n e c t i o n p o i n t c o n t a i n e r 管理所有的出接口。对应于每一个出接口,可连接对象又管理了一个称 为连接点( c o n n e c t i o np o i n t ) 的对象,每一个连接点对象实现了i c o n n e c t i o n p o i n t 接口,客户通过连接点对象建立接受器与可连接点对象的连接。由于连接点对象被 包含在可连接对象的内部,所以连接点对象既可以访问可连接对象的内部信息,又 可以访问客户方的接受器,而且连接点对象的引用计数可以包含在可连接对象的引 用计数器内,即它可直接使用可连接对象的引用计数器,因此只要连接点存在,可 连接点对象总不会释放。 华北电力大学硕十学位论文 客户方除了要实现接收器对象之外,还必须建立接收器与连接点对象之间的连 接关系。接收器对象是客户程序的内部对象,它不必通过类厂创建,也不需要c l s i d 。 其连接关系的建立由客户方控制,客户首先询问对象是否为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年四年级英语上册 Module 10 Unit 2 Merry Christmas说课稿 外研版(三起)
- 第32 思い出の場所说课稿-2025-2026学年新版标准日本语中级下册-新版标准日本语
- unit 6 Review说课稿-2025-2026学年小学英语六年级上册北师大版(一起)
- 盾构机在城市地下空间中的应用研究-洞察及研究
- 纳米材料在生物成像中的研究-洞察及研究
- 卵泡膜相关蛋白与卵泡破裂的作用-洞察及研究
- 数字化时代下的房地产协同设计创新路径-洞察及研究
- 课程差异化设计-洞察及研究
- 山岳型景区安全防控-洞察及研究
- 智能化仓储安全监控-洞察及研究
- 保护环境的课件
- 华电集团就业协议书
- 拆旧建屋合同协议书
- 图深度强化学习在配电网故障恢复中的应用研究
- 中国电信云网资源管理技能认证考试题及答案
- (2017)海南省房屋建筑与装饰装修工程综合定额交底资料
- 拆除重建工程施工方案
- 《社会科学研究方法》课件
- 《基础护理学》第七版考试题库大全-上部分(600题)
- 基坑安全事故及防范措施
- 2024年供应链管理师(二级)资格考试复习题库(含答案)
评论
0/150
提交评论