




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Y 7 9 1 3 0 9 分类号1 l 三兰2 生 丁密级 坌五 U D C 业b 拿 学号 0 2 0 7 7 2 东南大掌 硕士掌位论文 通用O P C 服务器研究与设计 研究生姓名 导师姓名 申请学位专业 控制理诠生控制王猩 论文提交日期 2 Q Q 鳗 Q 垒 答辩委员会主席星塑基救爱 申请学位级别王堂亟 论文答辩日期丝芷 丝 评阅人里堑燃 达琶鹏缀 2 0 0 5 年0 3 月0 4 日 摘要 近年来 随着信息技术在自动控制领域的不断发展 自动化系统对大范围信息共享 的需求愈加强烈 因而对工业控制系统的开放性提出了越来越高的要求 在这种情况的 驱使下 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 的出现 为现场设备 自动控制应用 企业管理应用软件之间提供了开放 一 致的接口规范 为来自不同供应商的软硬件提供了 即插即用 的连接 使来自不同数 据源的数据与运行在各种平台上的应用软件能够顺利地集成在一起 目前 O P C 技术 已经成为工业控制中系统集成与数据交换的重要工具 然而 O P C 规范仅仅定义了一套标准的接口 而O P C 服务器的具体实现还需要因 底层设备的不同而不同 这就意味着每个设备生产厂家都需要为其设备开发一个O P C 服务器 并且他们所开发的O P C 服务器只能简单地用于某种或某几种设备 这无疑是 一种冗余劳动 此外 O P C 是一套非常复杂的规范 所包含的内容非常庞大 具有比 较难于掌握的缺点 因而对很多小型的硬件生产厂家来说 O P C 服务器的开发依然是 个技术难关 针对O P C 以上的不足 本文提出了通用O P C 服务器的新技术 不仅规范了O P C 服 务器与应用程序的接口 而且规范了O P C 服务器与硬件设备的接口 使O P C 服务器能 适用于任意类型的设备 扩展了O P C 技术的开放性 同时 由于服务器与设备的接口 规范具有简单的优点 硬件设备生产商只需要提供简单的设备驱动程序即可通过通用 O P C 服务器与应用程序集成在一起 从而减轻了硬件设备生产商的开发负担 关键词 C O M O P C 服务器 组 项 同步 异步 地址空间 A b s t r a c t I nr e c e n ty e a i r s w i t ht h er a p i dd e v e l o p m e n to fi n f o r m a t i o nt e c h n o l o g yi nt h ea u t o m a t i c c o n t r o lf i e l d i n f o r i l l a t i o ns h a r i n gi nv e r yl a r g ea r e ai sn e e d e ds t r o n g e ra n ds t r o n g e ri n a u t o m a t i cs y s t e m s T h e r e f o r e t h eo p e n i n gf o ri n d u s t r ya u t o m a t i cs y s t e m si Sa l S On e e d e d h i g h e ra n dh i 曲e LI t sj u s td r i v e nb yt h i S t h a tt h eO P Ct e c h n o l o g ye m e r g e d O P C w h i c h m e a n sO L Ef o rp r o c e s sc o n t r o l i sas e to fi n t e f f a c es t a n d a r df o ri n d u s t r yc o m m o n l y d e v e l o p e db ys e v e r a lb i ga u t o m a t i o nc o m p a n i e s s o f t w a r ea n dh a r d w a r ev e n d e r s a n d M i c r o s o f tc o m p a n y T h ee m e r g i n go fO P C n o to n l yp r o v i d e das e to fo p e n i n ga n da c c o r d a n ti n t e r f a c e s p e c i f i c a t i o n sf o rf i e l dd e v i c e s a p p l i c a t i o n so fa u t o m a t i cc o n t r 0 1 a n da p p l i c a t i o ns o f t w a r e f o re n t e r p r i s em a n a g e m e n t b u ta l s oe n a b l e d r a n d o m l y p l u ga n dr a n d o m l y u s e c o n n e c t i o n s b e t w e e ns o f t w a r ea n dh a r d w a r ef r o md i f f e r e n tv e n d e r s A tp r e s e n t O P Ct e c h n o l o g yh a s b e c o m ea ni m p o r t a n tt o o lf o rs y s t e mi n t e g r a t i o na n dd a t ae x c h a n g ei ni n d u s t r i a lc o n t r 0 1 H o w e v e r O P Cs p e c i f i c a t i o nd o e sn o t h i n go t h e rt h a nd e f i n e sas e to fs t a n d a r di n t e r f a c e a n dt h ei m p l e m e n t a t i o no fO P Cs e r v e rm u s tb ed i f f e r e n tb yd e v i c e s W h a ti si m p l i e di St h a t e v e r yd e v i c ev e n d e rn e e d st od e v e l o pa l lO P Cs e r v e rf o ri t sd e v i c eW h i c hg e n e r a l l yC a no n l y b eu s e df o ro n eo rs e v e r a ld e v i c e s E v i d e n t l y i t sak i n do fr e d u n d a n c y m a t Sm o r e 0 P C s p e c i f i c a t i o ni se x t r e m e l yc o m p l i c a t e da n di n c l u d e sag r e a tm a n yc o n t e n t sS Ot h a tm a s t e r i n g O P Ct e c h n o l o g yi So fS Om u c hd i m c u l t y T om a n ys m a l lh a r d w a r em a n u f a c t u r e r s t h e d e v e l o p m e n to f O P Cs e r v e ri ss t i l Iat e c h n i c a lp r o b l e m I nr e g a r do fa t o v ed i s a d v a n t a g e so fO P C t h i sp a p e rp r e s e n t e dt h en e wt e c h n o l o g yo f U n i v e r s a lO P CS e r v e rw h i c hs t a n d a r d i z e dt h ei n t e r f a c eb e t w e e nO P Cs e r v e r sn o to n l ya n d a p p l i c a t i o np r o g r a m s b u ta l s oa n dh a r d w a r ed e v i c e s T h i st e c h n o l o g ye n a b l e sO P C s e w e rt o b eu s e df o ra l lk i n d so fd e v i c e s a n de x t e n d st h eo p e n i n go fO P Ce v e nf u r t h e r M e a n w h i l e b e c a u s eo ft h es i m p l i c i t yo fn e wi n t e r f a c es p e c i f i c a t i o nb e t w e e ns e r v e r sa n dd e v i c e s h a r d w a r ed e v i c em a n u f a c t u r e r sn e e dn o t h i n gb u ts i m p l ed r i V e tp r o g r a m sf o rt h e i rd e v i c e st o i n t e g r a t et h e nw i t ha p p l i c a t i o np r o g r a m sb yu n i v e r s a lO P C s e r v e r A sar e s u l t t h ed e v e l o p i n g b u r d e nw i l la l S Ob er e l e a s e dg r e a t l y K e yw o r d s C O M O P C S e r v e r C r o u p I t e m S y n c h r o n o u s A s y n c h r o n o u s A d d r e s ss p a c e I I 东南大学学位论文独创性声明 本人声明所呈交的学位论文是我个入在导师指导下进行的研究工作及取得的研究 成果 尽我所知 除了文中特别加以标注和致谢的地方外 论文中不包含其他人已经发 表或撰写过的研究成果 也不包含为获得东南大学或其它教育机构的学位或证书而使用 过的材料 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明 并表示了谢意 研究生签名 选垒因 日期 兰型 j 东南大学学位论文使用授权声明 东南大学 中国科学技术信息研究所 国家图书馆有权保留本人所送交学位论文的 复印件和电子文档 可以采用影印 缩印或其他复制手段保存论文 本人电子文档的内 容和纸质论文的内容相一致 除在保密期内的保密论文外 允许论文被查阅和借阆 可 以公布 包括刊登 论文的全部或部分内容 论文的公布 包括刊登 授权东南大学研 究生院办理 研究生签名 够鲤导师签名 善呤日舭 东南大学硕士学位论文 第一章绪论 O P C 0 L Ef o rP r o c e s sC o n t r o l 用于过程控制的0 L E 是一个工业标准 它是许多世界领 先的自动化和软 硬件公司与微软公司合作的结晶 这个标准定义了应用M i c r o s o f t 操作系统在基 于P C 的客户机之间交换自动化实时数据的方法 最初 为了解决过程控制系统中不同设备供应商所提供的驱动程序不一致所带来的种种问题 一个由F is h e r R o s e m o u n t R o c k w e l l 软件公司 0 p t o2 2 I n t e l l u t i o n 和I n t u i t i v eT e c h n o l o g y 公司组成的 r 作组联合M i c r o s o f t 公司提山了一个基于O L E c o M 技术的开放的 灵活的 即插即用 的上业标准 o P C 并经过一年的开发 与1 9 9 6 年8 月发布了简化的第一阶段的O P C 标准 随着1 9 9 7 年2 月M i c r o s o f t 公司推出W i n d o w s 9 5 支持的D C O M 技术 1 9 9 7 年9 月成立了0 P C 基 金会 并对0 P C 规范进行修改 增加了数据访问等一些标准 0 P C 规范从而得到了进一步的完善 目前 基金会的会员单位在世界范丽内已超过5 0 0 个 包括世界上所有主要的自动化控制系统 仪 器仪表及过程控制系统的公司 0 P C 标准发布后 由丁 其开放性 产业性 互连性等优点 立即受到了全世界自动控制领域的 热烈欢迎 在这种情况下 0 P C 技术发展非常迅速 在控制领域的应用也越来越广泛 国际上许多 公司都纷纷住自己的产晶中增加0 P C 特性 包括为控制应用软件添加0 P C 客户端的功能 为现场设 备提供O P C 服务器等 一些公司还提供了0 P C 服务器的开发工具软件 不少爿j 户在仪表与系统选型 时开始考虑系统是否具备0 P C 接口 0 P C 已成为许多新型控制系统数据传递的核心技术 1 1 研究背景 随着自动控制和计算机技术的进一步融合 计算机在自动控制中日益发挥着不可替代的作用 工业控制中的各种仪器 仪表 P L C 和单片机系统等都提供了与计算机的通讯协议 从而为计算机 控制系统的设计提供了极大的方便 但是 在计算机控制系统的发展过程中 不同的厂商提供的协 议不同 甚至同一厂商的不同类型设备和计算机通信的协议也不相同 在计算机系统中 不同的编程 语言对驱动程序的接口有不同的要求 所以每一个客户的应用程序在从数据源 数据库或设备 读取 数据时 由于软件或硬件的不一致性 对于不同的设备都要开发不同的驱动程序 这样就存在以下 问题 a 对每个厂商不同类型的设备开发的驱动程序不能为其他设备所利用 造成重复性劳动 b 硬件的特性不能得到所有的程序开发者的支持 导致驱动程序的不一致性 c 硬件的任何变化都可能破坏驱动程序的正常执行 因此要求驱动程序对硬件变化的支持 d 两个应用程序通常不能同时访问同一设备 存在访问冲突 虽然各方都想解决这一问题 但 由于客户协议的不同 问题不能解决 正是在这种背景下 0 P C 技术应运而生 0 P C 规范的出现为现场设备与过程管理级之间的数据交换提供了更强的互操作性 它以0 L E C O M 机制作为应用程序级的通信标准 采用C 1 l e n t S e r v e r 模式 将硬件供应商和软件开发商有效地分 离开来 硬件生产厂商负责开发设备数据的访问接口 并以服务器的形式提供给客户端 而由客户端 来负责创建服务器的对象及访问服务器所支持的接口 客户端和服务器通过标准的0 P C 接口无缝地结 台起来 总的来说 0 P C 具有以下优点 a 用标准的W i n d o w s 体系接口 硬件制造商为其设备提供的接口程序的数量减少到一个 软 件制造商也仅需要开发一套通讯接口程序 既有利于软硬件开发商 更有利于最终用户 b 0 P C 按照面向对象的原则 将一个应用程序 0 P C 服务器 作为一个对象封装起来 只将接 口方法暴露在外面 客户以统一的方式去调用这个方法 从而保证软件对客户的透明性 l 第一章绪论 使得用户完全从底层的开发中脱离山来 从而大大缩短软件开发周期 提高软件运行的可 靠性和稳定性 便于系统的升级与维护 C O P C 实现了远程调用 使得应用程序的分布与系统硬件的分布无关 便于系统硬件配置 使得系统的应用范围更广 如图卜l 所示 传统的过程控制系统是一对一的系统 任何一种H M I 等上位监控软件或其它应 用软件 如趋势图软件 数据报表与分析等 在使用某种硬件设备时都需要开发专用的驱动程序 相比之下 O P C 采用软件总线的结构 为不同供应商的软硬件提供了 即插即用 的连接 O P C 诞生前 O P C 诞生后 图卜1O P C 诞生前后的过程控制系统结构 综上所述 O P C 是对传统过程控制系统的根本性变革 打破了长期以来上业界各生产厂家自成 体系 不同设备信息封闭的格局 为不同厂商生产的软硬件进行系统集成和信息交换提供了一种非 常有效的方式 然而 随着信息技术在控制领域的进一步发展 O P C 规范难于掌握的缺点日益显露出来 O P C 采用客户端 服务器模式 O P C 服务器开发的任务落到了设备生产商的头上 这对很多小型乃至中型 的硬件供应商而言 开发一个可靠的O P C 服务器依然是一个技术难关 即使对一些大型的生产商来 说 他们也需要在服务器开发上花相当的精力 此外 由于所有的O P C 服务器都遵循同一标准 因 而在实现上都有很大的相似之处 而目前几乎所有的O P C 服务器都只能支持一种或某几种现场设备 这就意味着 每个设备生产商都需要为其设备开发一个或多个O P C 服务器 这无疑是一种冗余劳动 图1 2 通用0 P c 服务器与普通O P C 服务器构建系统的结构比较图 针对当前O P C 规范的缺点与不足 本文提出了通用O P C 服务器 不仅继承了普通O P C 与客户应 用程序的接1 3 规范 而且规范了服务器与设备的接口 大大简化了O P C 规范 从而使得设备供应商 从繁重的O P C 服务器开发中解脱出来 降低了开发成本 同时 由于服务器与设备的接口也变得规 范化 服务器即可与任意设备进行连接 在同时访问多个设备的情况下 通用O P C 服务器将系统中 的O P C 服务器减少到一个 因而重用性更高 更加易于维护和扩展 2 i 王量葚禹 粤车由 查塑查堂堡主兰篁笙苎 如图卜2 我们可以看出 通用O P C 服务器将复杂的O P C 规范封装起来 将规范中与设备无关的 部分隐藏起来 并将简化后的接口暴露给硬件生产商 提高了硬件供应商的开发效率 进一步扩展 了O P C 技术的开放性 1 2 内容提要 本论文章节安排如下 除本章之外 第二章对C O M D C O M 原理进行了简单的介绍 由于O P C 技术 是以C O M D C O M 为基础 因而在整篇论文中都处处与C O M D C O M 相关 事实上 O P C 服务器就是一个 进程外的C O M 组件 要了解O P C 规范 熟悉C O M D C O M 是关键 该章第一节从总体上介绍了C O M 的概 念 C O M 的特点及现实意义 第二节阐述了C O M 中最根本的两个术语 对象和接口 O P C 规范的全 部内容也就是定义了一些C O M 对象以及对象上的接口 第三节详细分析了C O M 组件程序和客户程序 交互的本质 第四节从可连接对象的原理开始 分析了C O M 模型中如何实现服务器向客户端的回调a 第五节以一个简单的例子说明了复合文件的具体存储方法 第六节具体讨论了C O M 的线程模型 重 点比较了套间线程和自由线程的工作模式及各自的优缺点 第七节概括了C O M 在分布式系统中的应 用 也就是D C O M 第八节则将具体介绍C O M 组件的快速开发工具A T L 以及采用A T L 开发C O M 组件 的几个要点 第三章对O P C 规范及其实现方式展开了讨论 其中主要是O P C D Ac u s t o ms p e c i f i c a t i o n3 0 0 该章第一节首先介绍了O P C 家族所包括的一些规范及相应的功能 然后在第二节详细讨论了O P C D A 服务器的内部结构以及内部的数据组织方式 在第三 四节将分别对O P CS e r v e r 对象和O P CG r o u p 对象以及对象上的所有接口进行分析 从而弄清O P C D A 服务器进行数据交换的本质 最后 在第五 节将简要提到O P C 规范和 规范的具体内容 A E O P C H D A 第四章对O P C D A 服务器的结构进行了新的划分 指出所有的O P C D A 服务器都由O P C 服务器框架 服务器地址空间和O P C 数据访问通道三个部分 相应地分为三个小节作了比较深入的研究和探索 根据新的服务器结构划分 论文在第一节着重分析了O P C 服务器框架的内部结构 讨论了几个在实 现过程中的儿个至关重要的问题 并分别给出了相应的解决方案 第二节讨论了服务器地址空间的 通用性实现问题 由于不同设备的数据存在较大的差异 故通用性也比较难于提取 为了达到目的 系统设计了一个通用的模板 而模板中的内容则采用专门的配置程序实现 第三节重点阐述了O P C 数据访问通道的设计 本节对设备的数据访问进行了强制性的统一 设计了一套功能齐全 简单而 又高效的数据访问接口 并介绍了其详细的设计过程 在系统的总体结构确定之后 论文在第五章各个模块的划分 对每个模块内部的实现进行了进 一步的讨论 重点在于系统的详细设计及最终的编码实现 首先在第一节确定了系统整体结构的实 现方法 如何将系统的三个模块有效地组织协调起来 第二节针对O P C 服务器框架 对该模块中的 一些难点问鹿给出了具体的解决方案 主要内容包括服务器的注册 O P CS e r v e r 对象 O P CG r o u p 对象以及O P CI t e m 的组建问题 因而又分为四个小节来分别介绍 主要包括对象的管理和异步访问 的实现等问题 论文给出了详细的流程图 有些地方给出了实现的代码 第三节主要设计T J i 务器 地址空间的组织结构 为了方便地进行浏览和数据标签的访问 系统采用了结构化存储技术 将地 址空间的整个结构都保存到文件 使得地址空间的加载也更加简单 另外 本节还对服务器地址空 间的配置程序也做了详细的设计 该程序提供了友好的人机界面 用户对地址空间的配置操作更加 方便 本章第四节重点介绍了服务器数据访问通道的实现 由于该模块的重点在于与设备驱动接口 的设计 当接口确定下来之后 对数据访问就变得非常容易了 本节设计出了一种高性能的数据采 集方案 最后一节对设计出的通用哦平常服务器进行了一定的测试工作 并给出了具体的测试结果 到此为止 通用O P C 服务器的开发工作就基本完成了 在本论文的最后一章对设计出的通用O P C 服务器仍然存在的不足作了简要的概括 并给出了几种可能的解决方案 由于时间仓促 进一步的 研究留给实验室的其他人来完成 论文的最后对通用O P C 服务器的未来进行了充分的肯定 相信通 用O P C 服务器也能在工业控制领域中发挥巨大的作用 第二章C O M D C O M 原理 第二章C O M D C O M 原理 O P C 技术是以C O S D c 0 M 技术为基础的 在O P C 规范的整个家族中 C O M D C O M 技术都发挥着最根 本的作用 实质上 O P C 规范就是定义了一些用于数据访问 事件和报警处理 历史数据访问的C O S 对象和接口 冈此 耍掌握O P C 规范 弄清C O M D C O M 原理是关键 2 1 概念及其特性 C O S 意为C o m p o n e n tO b j e c tM o d e l 即组件对象模型 是一种以组件为发布单元的对象模型 这种模型可以用一种统一的方式进行交互 C O S 既提供了组件之间进行交互的规范 也提供了实现 交互的环境 因为组件对象模型之间交互的规范不依赖于任何特定的语言 所以C O S 也可以是不同 语言协作开发的 种标准 C O S 最初的目标是提供对O L E O b j e c tL i n k i n ga n dE m b e d d i n g 的支持 其基本的想法是以文 档为中心的观点 在这种观点下 用户可以从一个字处理程序中编辑电子表格 O L E 的第一个版本 使用动态数据交换 D D E 的作为客户及组件的通信方式 并没有引入C O S D D E 是在W i n d o w s 消息 传递架构的基础上建立起来的 它运行非常之慢 并且编写出能够正确工作的D D E 代码是一件相当 困难的上作 另外 D D E 的健壮性和灵活性也比较差 因此 必须寻找一种更好的方法 解决问题的方法就是C O S 相比D D E 而言 C O S 更小 更快 更加健壮和灵活 因此 O L E 的第 二个版本使用了C O S 而不再使用D D E 这样C O S 就成了O L E 新的基础 但由于O L E 是开发出来的第 一个C O S 系统 O L E 不能很好地说明c 叫的功能与作用 在实现上 O L E 显然比较庞大 缓慢 并且 难于编码 但这并不是由于使用C O S 而造成的 这样 C O S 自身与O L E 脱离开来 并得到了很大的发展 现在已经遍布于M i c r o s o f t 的各种软 件产品中 C O S 采用组件化的设计结构 不仅继承了组件易于定制和升级灵活等优点 而且引入面向对象 的思想 规范了组件之间通信的接口 在C O S 规范中 C O S 对象和接口是两个非常活跃的元素 一 个C O S 组件通常是包含一个或多个C O S 对象 而在C O S 对象上则可实现多个接口 C O S 规范采用客 户朋 务器通信模型 客户端总是先创建服务器对象 然后获得对象上的接口进行通信 除此之外 c 0 M 规范还具有语言无关性 进程透明性和可蘑用机制三个非常重要的特性 1 语言无关性 C O S 标准与面向对象的编程语言 O O P o b j e c t o r i e n t e dp r o g r a m m i n g 不同 它采用的是一 种二进制代码级的标准 而不是源代码级的标准 C O S 对象把O O P 语亩中的对象封装起来 提供一 致的接口使得它可以被各种不同的语言所使用 例如用c 实现的C O M 组件中的对象 可以很容易 地在其他语言如J a v a 中被使用 因此 C O S 的语言无关性实际上为我们跨语言合作提供了统一标准 2 进程透明特性 在客户 l J l l 务器模型的软件结构中运行在客户端的代码和运行在服务器端的代码既可以在同一 个进程中 也可以在不同的进程中 如果它们运行在同一个进程中 则由于组件和客户共享了进程 的资源 因而无论对于编程还是运行效率都是很有益的 但实际情况往往不是这样简单 因为服务 程序并不总是作为D L L 被装入到客户进程中 它也经常是一个E X E 可执行程序 因此 跨进程操作 是很必要的 C O M 所提供的服务组件对象在实现时有两种进程模型 进程内对象和进程外对象 而进程外对 象义分为本地的和远程的两种 进程内服务程序 服务程序被加载到客户进程空间 在W i n d o w s 环境下 通常服务程序的代码 以动态链接库 D L L 的形式实现 本地服务程序 服务程序与客户程序运行在同一台机器上 服务程序是一个独立的应用程序 4 东南人学硕士学位论文 通常是一个E X E 文件 远程服务程序 服务程序运行在与客户不同的机器上 它既可以是一个D L L 模块 也可以是一 个E x E 文件 如果远程服务程序以D L L 形式实现的话 则远程机器上会创建一个代理进程 虽然C O M 对象有不同的进程模型 但这种区别对于客户程序来说是透明的 因此客户程序在使 用组件对象时可以不管这种区别的存在 只要遵照C O M 规范即可 3 可重用性 可重用性是任何对象模型的实现目标 尤其对于大型的软件系统 可重用性非常重要 而且 由于c 0 M 标准是建立在二进制代码级 因此C O M 对象的可重用性又不同于一般的面向对象的重用过 程 对于C O M 对象的客户进程来说 它只是通过接口使用对象提供的服务 它并不知道对象内部的 实现过程 因此 组件对象的重用性可建立在组件对象的行为方式上 而不是具体的实现上 这是 建立重用的关键 C O M 用包容和聚合两种机制实现对象的重用 我们假定有两个C O M 对象 对象l 希望能重H j 对 象2 的功能 我们把对象1 称为外部对象 对象2 称为内部对象 如图2 一l 显示了对象包容和聚合 的示意图 包容集合 图2 1 对象包容和聚合示意图 a 包容方式 对象1 包含了对象2 当对象1 需要用到对象2 的功能时 它可以简单地把实 现交给对象2 来完成 虽然对象1 和对象2 支持同样的接口 但对象1 在实现接口时实际上调用了 对象2 的实现 b 聚合方式 对象1 只需简单地把对象2 的接口递交给客户即可 对象1 并没有实现对象2 的 接口 但它把对象2 的接口也暴露给客户程序 而客户程序并不知道对象2 的存在 2 2C O M 对象和接口 2 2 1C O M 对象 在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 对象的基本特征 客户程序不可能赢接访问对象的数据属性 5 第二章C O M D C O M 原理 上面已经提到 C O M 组件的位置对客户来说是透明的 因为客户程序并不直接去访问C O M 组件 而是通过一个全局标识符进行对象的创建和初始化工作 为了保证组件对象的唯一陛 C O M 规范采 用了1 2 8 位全局唯一标志符G U I D 这是一个随机数 并不需要专门的机构进行分配和管理 由于G U I D 的随机性 所以不能绝对保证其唯一性 但发生标识符重复的可能性非常小 从理论上讲 如果每 台机器每秒产生1 00 0 00 0 0 个G U I D 则可以保证 概率意义上 3 2 4 0 年不重复 我们在实际使用 过程中可以不用担心G U I D 会重复的危险 下面是一个G U I D 的例子 f 9 A E 6 b D E 5 C C 7 3 4 F C F B F S F C C 5 4 3 8 8 2 3 3 4 B 在C C 语言中 G U I D 用卜面的结构来描述 t y p e d e fs t r u c t G U I D u n s i g n e dl o n gx u n s i g n e ds h o r t s l u n sJ g n e ds h o r t s 2 t i n S i g n e dc h a r c 8 G U I D 于是前面的G U I D 例子可以定义为 e x t e r n C c o n s tG U I DC L S I DO P C S e r v e r O x 9 a e 6 d d e 5 0 x c c 7 3 O x 4 f c f O x b f O x 5 f O x c c 0 x 5 4 O x d b 0 x 8 2 O x b 3 0 x 4 b 手工构造1 2 8 位的G U I D 或编写程序来产生G U I D 是一件很麻烦的事 为此 M i c r o s o f t 提供了 两个丁具实现这样的目的 U U I D G e n e x e 刭G U I D G e n e x e 前者是 个命令行程序 后者是一个基于 对话框的应用程序 C O M 库也提供了以下A P t 函数可以产生G U D 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 在实际使用中 通常用C L S I D 来标识C O M 对象的G U I D C L S I D 在结构上与G U I D 一致 2 2 2C O M 接口 客户与C O M 对象之间是通过接口进行交互的 所以组件之间的接口的定义至关重要 C O M 规范 的核心内容是关于接口的定义 虽然C O M 接口本身并不复杂 但围绕C O M 接口有很多内容值得仔细 探讨 图2 2 接口结构 C O M 接口是包含了 组函数的数据结构 通过这组数据结构 客户代码可以调用组件对象的功 能 接口定义了一组成员函数 这组成员函数是组件对象暴露出来的所有信息 客户程序利用这些 函数获得组件对象的服务 客户程序用一个指向接口数据结构的指针来调用接口成员函数 如图2 2 6 东南大学硕士学位论文 所示 接口指针实际上又指向另一个指针 这第二个指针指向一组函数 称为接口函数表 接口函 数表中每一项为4 个字节长的函数指针 每个函数指针与对象的具体实现连接起来 通过这种方式 客户只要获得了接口指针 就可以调用到对象的实际功能 对于一个接口来说 它的虚函数表v t a b l e 是确定的 因此接口的成员函数的个数 顺序以及每 个成员函数的参数和返回值都是确定的 在一个接口定义中 所有这些信息都必须在二进制一级确 定 不管什么语言 只要能支持这样的内存结构描述 就可以定义接口 接口的定义一般要符合以下几个规则 a 接口本身并不独立使用 它必定存在于某个C O M 对象上 因此 在接口定义时必须提供对 象实例的属性信息 以便在调用时接口可以知道是在对哪个对象进行操作 b 在接口成员函数中 字符串变量必须用U n i c o d e 字符指针 C O M 规范要求使用U n i c o d e 字 符 而且C O M 库中提供的A P I 函数也使用U n i c o d e 字符 所以 如果在组件程序内部用到了A N S i 字符 则需要进行两种字符的转换 c 接口的成员函数要求使用同样的调用习惯 在W i n d o w s 平台上 通常有 c d e c l 和s t d c a l l 两种调用习惯 C O M 规范也采用这两种调用习惯 如果接口成员函数使用一c d e d 调用习惯 则C C 之外的大多数语言就不能使用这样的接口 d 接口定义只是描述了接口 并没有提供具体的实现 对于客户程序来说 它只需要这样的 描述即可调用c 0 M 对象和接口 而对于组件程序 基于这样的描述 必须提供具体的实现过程 e 类似于C O M 对象的标识方法 c o M 接口也采用G U I D 来标识 在使用中 通常采用l l D 来标 识C O M 接口的G U I D C O M 规范采用I D L i n t e r f a c ed e s c r i p t i o n l a n g u a g e 接口描述语言 来定义C O M 接口 接口 描述语言提供了一种不依赖与任何语言的接口描述方法 因此 它可以称为组件程序和客户程序之 间的共同语言 I D L 不仅用于定义C O M 接口 同时还可以定义一些常用的数据类型 自定义的数据结构 对丁 接口成员函数 还可以指定每个参数的类型 输入输出特性 甚至可变长度数组的描述 例如 在O P C 规范中 l O P C C o m m o n 接口定义如下 o b j e c t u u i d F 3 1 D F D E 2 一O B 6 一i I d 2 一B 2 D 8 一0 0 6 0 0 8 3 B A i F B p o i n t e r d e f a u l t u n i q u e i n t e r f a c el O P C C o m m o n I U n k n o w n H R E S U L TS e t L o c a l e I D i n L C I Dd w L c i d H R E S U L TG e t L o c a l e l D o u t L C I D p d w L c i d H R E S U L TQ u e r y A v a i a b l e L o c a l e I D s o u t D W O R D p d w C o u n t o u t s i z e i s p d w C o u n t L C I D p d w L c i d H R E S U L TG e t E r r o r S t r i n g i n H R E S U L Td w E r r o r o u t s t r i n g L P W S T R p p S t r i n g H R E S U L TS e t C l i e n t N a m e i n s t r i n g L P C W S T Rs z N a m e 1 2 2 3C O M 对象的接口原则 C O M 对象总是通过接口与客户程序进行交互 C O M 对象必须至少实现一个接口 没有接口的对象 是没有意义的 同样 C O M 接口也不可能独立存在 它必须存在于某个对象上 C O M 规范定义了一个 最基本的接口I U n k n o w n 并规定所有的C O M 接口都必须从该接口继承 所有的C O M 对象也都必须实 现I U n k n o w n 接口 7 第二章C O M D C O M 原理 I U n k n o w n 接口提供了两个非常重要的特性 生存期控制和接口查询 客户程序只能通过接口与 C O M 对象进行通信 虽然客户程序可以不管对象内部的实现细节 但它要控制C O M 对象的存在与否 如果客户还要继续对对象进行操作 则它必须保证对象能一直存在与内存中 如果客户对对象的操 作已经完成 j I f J 必须及时地把对象释放掉 以提高资源利用率 I U n k n o w n 引入了 引用计数 方法 可以有效地控制对象的生存周期 另 方面 如果一个C O J 对象实现了多个接口 在初始时刻 客 户程序不太可能得到该对象所有的接口指针 它只会拥有一个接口指针 为了客户程序能方便地得 到其他接口的指针 I U n k n o w n 提供了 接口查询 J 勺方法来完成接口之间的跳转 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 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 G R e e a s e v o i d 每一个C O M 对象都记录了一个称为引用计数的数值 该数值的含义为有多少个有效指针在引用 该C O M 对象 当客户得到一个指向该对象的接口指针时 引用计数增1 当客户用完该接口指针后 引用计数减1 当引用计数减到0 时 C O b l 对象就应该把自己从内存中清除掉 I U n k n o w n 的接口成 员函数A d d R e f 和R e l e a s e 分别完成引用计数的增1 和减l 操作 一个C O M 对象可以实现多个接口 客户程序可以通过舢e r y I n t e r f a c e 函数来查询对象的接E l 但客户创建C O M 对象之后 创建函数总会返回一个接口指针 由于所有的接口都继承 丁二I U n k n o w n 故所有的接口都有Q u e r y I n t e r f a c e 成员函数 客户可以通过该函数获得对象所支持的任何一个接口 指针 2 3C O M 实现本质 2 3 1 通过注册表管理C 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 库根据客户程序给定的G U I D 在注 册表中搜索组件程序所在的位置 然后启动组件程序 创建C O M 对象 C O M 组件的注册信息主要包括对象的C L S I D 信息和P r o g I D 信息 接口的l I D 信息等 田钼c I b r t h p c o t h 怔州 自圈c I b r t h p c 劬m w t 1 圈圈却 臼盛IC L S I D 自圈 0 0 X 0 0 0 t 4 F E F I O D 3 日3 F M l 鲫 蝌 自翻 o m I n m I o 蛳 晰D 审钼 1 1 l 壬 啪 伽拟 目a o t x x m o t a o m o l A 6 D m 由衄 2 0 l e 日2 开 9 轴鲥拼积日7 7 9 目盛 6 e 2 2 1 1 D O 9 O 0 0 A O C 9 2 e 7 7 A g F 日翻 4 6 A E B 3 0 1 6 3 0 0 4 0 6 F A 7 9 4 6 E B 2 1 E 7 17 0 0 1 自叠l m 一 n c k u 翻 6 c F E 一I l d t B K 日 3 M l m 锄 荆 氆D 7 州l 蚴舶龆 铆 一盔h 幽州鼎一D A M y O P C c o d e 0 P c D A s c 舳岫归P c D A s e 眦 e x 12 自P m O P C X i a o 宙圈 1 4 6 E 3 1 3 7 0 3 F T A l l 饪 B 6 o 弧 6 l i 时 自由 6 F 7 l c 2 l I D 3 9 c o P l 讣 田圈 7 E E 争6 5 儿 4 椎 n 能固7 图2 3C L S I D 注册信息示意图 东南大学硕士学位论文 对象的C L S I D 信息位3 H K E YC L A S S E S R O O T 键的C L S I D 子键下面 如图2 3 所示 图中显示的 是通用O P C 服务器中O P CS e r v e r 对象的C L S I D 信息 其中I m p l e m e n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自主创新战略合作协议的重心
- 2025国家电网电力安全事故警示教育考试及答案
- 2026年中考语文热点备考方向 新国潮新中式(含答案)
- 2024河南省偃师市中考数学题库及参考答案详解(综合题)
- 2024自考专业(工商企业管理)真题标准卷附答案详解
- 2024-2025学年度社区工作人员试题附完整答案详解(典优)
- 医师定期考核考试彩蛋押题含答案详解(A卷)
- 2024临床执业医师模考模拟试题及完整答案详解【历年真题】
- 2024年注册公用设备工程师模考模拟试题及参考答案详解【夺分金卷】
- 注册公用设备工程师考前冲刺测试卷含答案详解【黄金题型】
- 小学道德与法治学科教师专业素质考试试题及答案
- 全国质量奖现场汇报材料(生产过程及结果)课件
- 政策评价-卫生政策分析课件
- 短歌行(优质课一等奖).课件
- 高中物理实验—测定物体的速度及加速度(含逐差法)
- 北师大版小学数学五年级上册第一单元《练习一》同步练习带答案
- 球墨铸铁管规格尺寸理论重量表
- 饮食习惯与健康
- 华为人力资源管理纲要2.0
- 第二章 园艺设施的类型、结构、性能及应用
- 银行卡收单外包服务协议范本
评论
0/150
提交评论