(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf_第1页
(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf_第2页
(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf_第3页
(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf_第4页
(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf_第5页
已阅读5页,还剩73页未读 继续免费阅读

(计算机软件与理论专业论文)opc技术的研究、实现与扩展.pdf.pdf 免费下载

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

文档简介

南京邮电学院硕士研究生学位论文 摘要 摘要 o p c 作为开放的工业控制通信标准已经发展了1 0 个年头,但是其具体的实 现却一直被厂商作为盈利的工具而不予公开,这其实阻碍了该项技术的更广泛 地应用。本文在对o p c 技术详细研究的基础上探讨了o p c 实现的各种具体细 节,包括程序架构,算法,内存布局等,开发了一个完整的通用o p c 服务器程 序。同时考虑到由于o p c 是基于d c o m 技术的,对于网络环境下的大数据量 传输实时性效果不是很好,本文对此提出了改进方案,改善了o p c 的实时性, 使其之能更好适应各种网络环境。 a b s t r a c t o p ct e c h n o l o g ya st h es t a n d a r dc o m m u n i c a t i o np r o t o c o li na u t o m a t i cp r o c e s s c o n t r o ls y s t e m sh a sb e e nd e v e l o p e df o rm o r et h a nt e ny e a r s ,b u tt h ec o r et e c h n i q u e o fo p cs e r v e rh a sn o tb e e nr e l e a s e ds of a rb yt h eo p c p r o d u c td e v e l o p e r sb e c a u s e o fc o m m e r c i a lb e n e f i t ,w h i c hw i l ls l o wd o w nt h er a t eo fi t sw i d e r a p p l i c a t i o n t h i sp a p e rd i s c u s s e sv a r i o u sa s p e c t so fh o wt oi m p l e m e n tac o m p l e t eo p c s e r v e r , i n c l u d i n gt h ef r a m e w o r ko fo p c ,t h ea l o g o r i t h m ,a sw e l la st h em e m o r y m a n a g e m e n to ft h es y s t e m b e s i d e st h e s e ,c o n s e d e r i n gt h eu n s a t i s f y i n gr e a l - t i m e p e r f o r m a n c er e s u l t i n gf r o md c o m ,a ni m p r o v e m e n th a sb e e nm a d ei no u rs c h e m e t of i tw e l lt h en e t w o r ke n v i r o n m e n t t e s t i n gs h o w st h en e ws c h e m eh a st h eb e t t e r p e r f o r m a n c et h a nt h ee x i s t i n go n e s 1 i 南京邮电大学 硕士学位论文摘要 学科、专业:工学计算机软件与理论 研究方向: 网络环境下的软件开发技术 作 者:2 0 0 4 级研究生许骏指导教师陈慧南 题目:o p c 技术的研究、实现与扩展 英文题目: r e s e a r c h 、i m p l e m e n ta n de x t e n s i o no fo p ct e c h n o l o g y 主题词: o p c 技术c o m d c o m 技术工业控制实时效率 k e y w o r d s : o p ct e c h n o l o g yc o m d c o mt e c h n o l o g y a u t o m a t i o nc o n t r o lr e a l t i m ep e r f o r m a n c e 南京邮电学院硕士研究生学位论文 摘要 摘要 o p c 作为开放的工业控制通信标准已经发展了1 0 个年头,但是其具体的实 现却一直被厂商作为盈利的工具而不予公开,这其实阻碍了该项技术的更广泛 地应用。本文在对o p c 技术详细研究的基础上探讨了o p c 实现的各种具体细 节,包括程序架构,算法,内存布局等,开发了一个完整的通用o p c 服务器程 序。同时考虑到由于o p c 是基于d c o m 技术的,对于网络环境下的大数据量 传输实时性效果不是很好,本文对此提出了改进方案,改善了o p c 的实时性, 使其之能更好适应各种网络环境。 a b s t r a c t o p ct e c h n o l o g ya st h es t a n d a r dc o m m u n i c a t i o np r o t o c o li na u t o m a t i cp r o c e s s c o n t r o ls y s t e m sh a sb e e nd e v e l o p e df o rm o r et h a nt e ny e a r s ,b u tt h ec o r et e c h n i q u e o fo p cs e r v e rh a sn o tb e e nr e l e a s e ds of a rb yt h eo p c p r o d u c td e v e l o p e r sb e c a u s e o fc o m m e r c i a lb e n e f i t ,w h i c hw i l ls l o wd o w nt h er a t eo fi t sw i d e r a p p l i c a t i o n t h i sp a p e rd i s c u s s e sv a r i o u sa s p e c t so fh o wt oi m p l e m e n tac o m p l e t eo p c s e r v e r , i n c l u d i n gt h ef r a m e w o r ko fo p c ,t h ea l o g o r i t h m ,a sw e l la st h em e m o r y m a n a g e m e n to ft h es y s t e m b e s i d e st h e s e ,c o n s e d e r i n gt h eu n s a t i s f y i n gr e a l - t i m e p e r f o r m a n c er e s u l t i n gf r o md c o m ,a ni m p r o v e m e n th a sb e e nm a d ei no u rs c h e m e t of i tw e l lt h en e t w o r ke n v i r o n m e n t t e s t i n gs h o w st h en e ws c h e m eh a st h eb e t t e r p e r f o r m a n c et h a nt h ee x i s t i n go n e s 1 i 南京邮电大学 硕士学位论文摘要 学科、专业:工学计算机软件与理论 研究方向: 网络环境下的软件开发技术 作 者:2 0 0 4 级研究生许骏指导教师陈慧南 题目:o p c 技术的研究、实现与扩展 英文题目: r e s e a r c h 、i m p l e m e n ta n de x t e n s i o no fo p ct e c h n o l o g y 主题词: o p c 技术c o m d c o m 技术工业控制实时效率 k e y w o r d s : o p ct e c h n o l o g yc o m d c o mt e c h n o l o g y a u t o m a t i o nc o n t r o lr e a l t i m ep e r f o r m a n c e 南京邮电大学学位论文独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的 地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包 含为获得南京邮电大学或其它教育机构的学位或证书而使用过的材 料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了 明确的说明并表示了谢意。 研究生签名:日期: 南京邮电大学学位论文使用授权声明 南京邮电大学、中国科学技术信息研究所、国家图书馆有权保留 本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其 他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一 致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布 ( 包括刊登) 论文的全部或部分内容。论文的公布( 包括刊登) 授权 南京邮电大学研究生部办理c 研究生签名: 导师签名:阿琶矽 日期: 南京邮电大学硕士学位论文 第1 章o p c 技术概述 第1 章o p c 技术概述 1 1 为什么需要o p c 技术 随着工业生产的不断发展以及微电子、计算机、通信和网络等技术在自动化 领域的大规模运用,工业自动化控制技术正在发生着深刻的变化。一方面,智 能测控仪表和现场总线技术越来越多地活跃在工业现场,可以提供以前无法得 到的大量数据信息。这些数据不仅包括现场的温度、压力等被测参数,也包括 装置本身的运行状况、组态参数等。通过标准化的现场总线和测控硬件装置可 以将这些数据传输至远程监控计算机,它们通常被一种称为“组态软件”的工 业控制系统软件所接收。数据在组态软件中将以各种生动的图形方式显现出来, 如数据表格,趋势曲线图,棒状图等,同时也可以通过直观的图形点击方式向 现场的智能测控仪表发出控制指令,以达到远程监控的目的,形成了全新的分 布式控制系统。另一方面。现场控制层作为企业整个信息系统的底层部分,必 然需要与生产过程管理层和经营决策层进行集成。在这种情况下,组态软件不 断地被赋予新的内容,在工业信息化进程中逐渐扮演着信息中转站的角色。图 1 1 展现了以上的这种情况: 南京电大学硕学位论文 第1 堆o p c 技术拱述 霪五& 国龟丽 珊* m 女 图11 工业现场控制系统架掏 从_ 面我们可以看出,一方面组态软件中汇集着来自工业现场测控硬件晟 宝贵的第一手实时数据和储存相应的历史数据,另一方面,网络中的其他信息 系统( 如各种工业e i l p m i s ) 也需要有选择的获取这些数据以作为分析之用, 同时需要向组态软件中注入有效信息或向控制硬件下达操作指令。从中,我们 至少可以整理出三类数据源需要交互信息,即现场测控硬件,组志软件,各种 工业信息系统。在它们之间建立个符合工业控制标准的数据传输通信机制 正是o p c 产生的动机和原因。 现在我们来看o p c 出现之前在传统的控制系统中它们是怎样交互数据信息 二 南京邮电大学硕l 学位论文第l o p c 技术概述 的。以测控硬件和组志软件为例,首先测控硬件需要提供读写数据的操作系统 级驱动程序,同时提供各种编程语言的引用文件和链接库( 如提供c ,c + 卜h 头 文件和l - b 链接库) 。测控硬件设备与组态软件之间的信息共享是通过硬件驱 动程序来实现的。通常情况是在组态软件之中调用特定硬件驱动程序提供的引 用文件和链接库进行编程,从而形成该硬件针对该组态软件的特定的通信模块, 不同厂家的硬件设备使用不同的驱动程序,迫使组态软件中包含了大量的底层 硬件通信模块,这使得组态软件的开发规模有可能因为需要支持的硬件种数太 多失去控制而无限膨胀。同时,由于硬件的升级导致组态软件也必须相应升级 该硬件的通信模块,这样使得工业控制软硬件的配套升级和维护极其不便。还 有,在同一时刻,两套不同的组态软件一般不能对同一个硬件设备进行数据读 写,因为它们拥有不同的、相互独立的针对该硬件的特定的通信模块,同时对 同一个设备进行操作,可能会引起存取冲突,甚至导致系统崩溃。同样的道理, 组态软件和各种工业信息系统之间也存在着数摒访问接口不同一的问题,比如 组态软件向e r p 系统提供数据是通过a d o 接口,而向另一个m i s 系统提供数 据则可能要通过该系统的# 用接口,导致组态软件中关于如何提供给各种信息 系统的接口大量存在,严重影响了组态软件的稳定性。由此可见,通信规范问 题成为了制约控制系统突破“信息孤岛”的瓶颈,图l2 展示了上面的情况: 囤12o p c 出现之前控制系统的数据通信架构 南京邮电大学硕士学位论文第1 章o p c 技术概述 该图中有两个测控硬件设备,分别是p l c ( 可编程控制器) 和r t u ( 远程 终端单元) ,这是工业现场比较常见的数据采集和控制硬件模块。它们通过各自 的数据传输线路与上位机通信,并且一般来说这种通信都是独占式的串行通信 方式,即同一时刻只能有一路信号在线路中的一个方向上传输。从图中可以看 出p l c 既要和组态软件1 交互,也要和组态软件2 交互,r t u 也是同样。现 在我们假设这样一种情况,组态软件1 要求p l c 采集数据并进行传输,则数据 信号传输的方向是从p l c 至上位机中p l c 驱动程序,然后到达组态软件1 。同 一时刻组态软件2 向p l c 下发了控制指令要求其输出一个闭合动作,则此时数 据信号传输的方向是从组态软件2 至上位机中p l c 驱动程序,然后到达p l c 。 可以看出这两种信号的传输方向是相反的,必然会引起线路以及上位机中p l c 驱动程序的访问冲突,严重时会导致系统崩溃。另一种常见的情况是r t u 硬件 设备进行了升级,这在工业现场中是很常见的情况,则组态软件1 ,2 中关于 r t u 的通信模块也必须做相应的更新。如果更换设备数目很多,则这种重复开 发会大大增加项目的成本,降低系统的稳定性。同样,上图中组态软件和工业 信息系统之间的关系也是多对多的关系,组态软件需要开发和维护大量和各种 信息系统交互的接口程序。 上面所表现出来的问题其根本在于没有一种标准的工业数据通信协议嫁接 在硬件设备,组态软件,以及工业信息系统之间。使得数据能够在它们之间无 缝交互,互不干扰。 1 20 p c 如何解决问题 o p c 正是为了解决上述问题而产生的一种符合工业控制要求的通信接口规 范。o p c 是o l ef o rp r o c e s sc o n t r o l 的缩写,它定义了一组硬件和软件,软件 和软件之间交换工业自动化数据的标准接口,采用了客户服务器的运行模式。 同时,o p c 规范仅仅定义了客户程序与服务器程序进行交互的方法,但并没有 规定具体的实现,o p c 服务器可由不同供应商提供,其代码决定了服务器访问 物理设备的方式、数据处理等细节。但这些对o p c 客户程序来说都是透明的, 只需要遵循相同的规范或方法就能读取服务器中的数据。 采用这项标准后,首先,测控硬件开发商将为自己的硬件产品开发统一的 4 南京邮电大学碗学位论女第j 章o p c 技术概述 o p c 接口程序以提供硬件产生的宴时数据。而组态软件开发者可免除开发针对 该特定硬件通信模块的工作只需按照o p c 接口规范调用硬件开发商提供的 o p c 程序即可获得实时数据,从而可以把更多的精力投入到其核心软件产品的 开发上。这样不但可避免开发的重复性,也提高了系统的开放性和可互操作性。 使得软硬件的升级互不干扰。组态软件和各种工业信息系统之问的数据交互也 采用o p c 标准,它们各自都严格按照o p c 的标准实现o p c 接口,然后只需相 互调用这些标准o p c 接口交互数据即可,从而提高了系统的可复用性。对于最 终用户而言,由于无需担心互操作性,在选择和更换软硬件时有了更多的余地, 不再局限于从单一的厂商购买专用成套系统。同时在异构计算环境下的系统集 成将变得很简单,应用程序之间很容易实现信息的共享和交互。用户可以将重 点放在整个系统的功能及应用上,这也意味着成本的降低。图13 展示了j 乏用 o p c 标准后测控硬件,组志软件,各种工业信息系统是如何交互数据的: mm 圈13o p c 出现之后控制系统的数据通信架构 由上图可以看出,采用了0 p c 标准以后,测控硬件不直接和组态软件打交道, 而是通过一个o p c 的中间层,组态软件和工业信息系统之间同样如此。这样做 有什么好处呢? 首先,测控硬件本质上仍然是通过操作系统底层硬件驱动程序和计算机交 互数据,这一点和以前的控制系统是一样的,毕竟o p c 只是个数据通信标准, 南京邮电大学硕士学位论文第1 章o p c 技术概述 而不能取代传统硬件驱动程序的位置。在此基础上,硬件供应商需要提供包装 了硬件驱动程序的o p c 程序,通常情况是调用硬件驱动程序提供的引用文件和 链接库进行编程读写实时数据,再把这些数据通过同一的o p c 标准样式和标准 接口暴露出来以供别的程序调用。现在我们假设p l c 进行数据采集工作,数据 经过数据传输线到达计算机后,并不马上进入组态软件,而是停留在o p c 程序 中,再由o p c 程序把数据以统一的接口暴露给组态软件,而组态软件需要做的 仅仅是调用o p c 标准接口即可获得数据。这样的工作方式就可以解决我们上面 所提到的硬件设备访问冲突和软硬件配套升级的问题了。例如,组态软件1 要 求p l c 采集数据并进行传输,它现在只和p l c 的o p c 程序打交道,组态软件 2 向p l c 下发了控制指令要求其输出一个闭合动作,也是只和p l c 的o p c 程 序打交道,在o p c 程序中很容易使用各种同步机制( 如临界区,互斥体等) 来 防止上述操作的冲突,从而保证同一时刻只有一种对硬件的操作。同时,p l c 的硬件开发商只需要提供一套和该硬件配套的o p c 程序即可和所用遵循o p c 标准的组态软件通信,从而节约了大量的开发成本。r t u 和组态软件的交互也 是通过o p c ,假设r t u 升级换代,需要配套更换的仅仅是安装新的r t u 的硬 件驱动程序,另一方面,组态软件的升级也根本不影响r t u ,因为其中不包含 有r t u 的通信底层模块,r t u 和组态软件之间始终是通过o p c 标准接口来交 互的,而这是不变的,从而做到了软硬件升级互不干扰,平滑升级。 组态软件和各种工业信息系统之间也是同样的通过o p c 标准进行数据交 互,对组态软件来说,它提供o p c 标准接口对外发布和接收它感兴趣的数据, 对工业信息系统来说,它们把其对外的各种数据通讯接口( 如a d o ,系统专有 数据通讯接口等) 包装在o p c 标准之中,从而以一种统一的方式与外界交互。 1 30 p c 技术的本质 从上面所有对o p c 的描述中我们可以看出o p c 技术的本质其实就是进程间 通信( i p c ) 问题。在硬件开发商提供的o p c 程序和组态软件之间进行进程间 通信,以及在组态软件和各种工业信息系统之间进行进程间通信。进程间通信 的方式有许多种,低阶的通信方式如:进程间互发消息,管道,邮件槽,内存 映射文件,套接字等。高阶的通信方式有:d d e ,c o m d c o m ,x m l w e bs e r i v c e 6 南京邮电大学硕士学位论文 第1 章o p c 技术概述 等。o p c 采用c o m d c o m 作为其底层架构技术。 o p c 从一开始就和诸如t c p i p ,m o d b u s 之类的基于字节流传输数据信息的 通信协议划清了界限,o p c 不仅需要交互数据信息,同时要把交互的过程用类 似函数的形式( 即我们后面会提到的“接口 ) 严格的进行定义,数据交互就像 在程序中调用函数那样进行,由此可见,所有低阶的仅仅基于字节流的进程间 通信方式都不适合o p c 。 在o p c 出现之前,d d e ( d y n a m i c d a t ae x c h a n g e ) 作为w i n d o w s 平台上程 序之间交换数据的标准,被广泛应用于组态软件之中。1 9 8 9 年第一款基于d d e 技术的组态软件研发成功,硬件设备提供标准的d d e 驱动程序以便和组态软 件进行数据交互。然而d d e 最大的缺点在于它的数据交互实时效率不佳( 主 : 要是由于d d e 底层是基于w i n d o w s 消息机制) ,这对于实时性要求很高的工业 控制系统来说是不可接受的,同时d d e 不能够支持网络系统,数据将无法在 各种互联的控制系统之间传输共享。 随着1 9 9 2 年m i c r o s o f t 公司发布了以c o m d c o m 为底层技术基础实现的 o l e 2 0 ,一场由c o m d c o m 代替d d e 的革命开始发生。c o m d c o m 比d d e 更加灵活,更加健壮,关键在于,它能够提供更有效率的数据传输共享以及提 供对t c p i p 网络的无缝支持。1 9 9 5 ,六家世界上著名的自动化系统硬件、软件 公司( 包括f i s h e r - r o s e m o u n t ,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 ,o p t o2 2 , r o c k w e l ls o f t w a r e ,s i e m e n sa g ) 开始考虑把c o m d c o m 技术运用在工业控 制系统中,m i c r o s o f t 公司在其中充当了技术支持和顾问的角色。于是,基于 c o m d c o m 技术的o p c 标准被引入了工业界,很快便得到了国际上自动化领 域领先厂商的广泛的接受。第一个版本的o p c 技术规范o p cs p e c i f i c a t i o n v e r s i o n1 0 在1 9 9 6 年8 月发布。1 9 9 7 年9 月,产生了修订版的o p cs p e c i f i c a t i o n v e r s i o n1 0 a ,从这个版本开始o p c 技术规范的名称更加的细化了,它被更精 确的称为d a t aa c c e s ss p e c i f i c a t i o n 而不是统称为o p cs p e c i f i c a t i o n ,以表明它 只是定义了如何读取实时数据和如何写入实时数据的一组规范,同年的i s a s h o w 中展出了基于该技术规范的第一个o p c 产品。随着m i c r o s o f td c o m 技术 的发布以及工业控制技术的发展,1 9 9 8 年1 0 月又推出了d a t aa c c e s s s p e c i f i c a t i o n2 0 。以后又陆续于1 9 9 9 年1 月产生了o p ca l a r ma n de v e n t 7 南京邮电大学硕士学位论文 第1 章o p c 技术概述 s p e c i f i c a t i o n 用于表示报警事件,2 0 0 0 年9 月出台了o p ch i s t o r yd a t aa c e s s s p e c i f i c a t i o n 用于历史数据的存取,o p cs e c u r i t ys p e c i f i c a t i o n 用于安全管理, o p cb a t c hs p e c i f i c a t i o n 用于生产自动化等等。 所有以上的这些技术规范都有一个共同的特点,那就是它们都是基于 c o m d c o m 技术定义的。c o m 是c o m p o n e n to b j e c tm o d e l 的缩写,它是一种 为了实现与编程语言无关的软件组件而制定的标准,该标准将w i n d o w s 下的软 件组件定义为独立单元的各种c o m 对象,它可以使两个应用程序在运行时通 过对象预先严格定义好的接口通讯,随意拼上或移除所需要的组件,而不需要 知道对方是如何创建的。依据这样的概念,发展应用程序就像是堆积木一样, 每一个c o m 组件就是一块积木,你可以利用各式各样不同的积木,拼凑出你 所需要的应用程序。在实作上,c o m 透过一组预先定义好的接口( i n t e r f a c e ) 提 供服务,所有c o m 组件的使用者,都必须透过这些i n t e r f a c e 来使用组件提 供的功能。在w i n d o w sn t 4 0 以及更高版本的操作系统下,c o m 规范扩展到 可访问本机以外的其它对象,使得应用程序所访问的对象可以分布在网络上, c o m 的这个扩展被称为d c o m 。 所有的o p c 技术规范都是定义了一组基于c o m d c o m 的标准接口,规范 详细说明了这些接口用途和用法,但并没有提供接口的实现细节,而是由用户 开发的o p c 服务器去实现接口的功能。服务器具体确定了可以存取的设备和数 据,数据单元以何种方式命名以及对具体物理设备存取数据的细节,并且通过 o p c 标准接口开放给外部程序。像所有的c o m 实现一样,o p c 的结构是客户 机j j 艮务器模式。各个o p c 客户程序通过o p c 标准接口对各个o p c 服务器管 理的设备进行操作,而不需关心服务器的实现细节及设备内部的具体细节。同 时,由于c o m d c o m 已实作了网络部分的细节,也使得o p c 客户端对o p c 服务器进行远程访问操作非常容易。o p c 服务器通常支持两种类型的访问接 口,它们分别为不同的编程语言环境提供访问机制。这两种接口是:自动化接 口( a u t o m a t i o ni n t e r f a c e ) ;自定义接口( c u s t o mi n t e r f a c e ) 。自动化接口通常是 为基于脚本编程语言而定义的标准接口,可以使用v i s u a lb a s i c 、d e l p h i 、 p o w e r b u i l d e r 等编程语言开发o p c 的客户应用。而自定义接口是专门为c + + 等高级编程语言而制定的标准接口。由此可见,通过c o m d c o m 技术和o p c 8 南京邮电大学硕士学位论文 第1 章o p c 技术概述 标准,我们完全可以创建一个开放的、可互操作的工业控制系统。 1 4 目前o p c 技术的研究和应用现状 经验证明,一个工业标准的成功建立在很大程度上要有一个权威的组织机构 来协调各方的利益以达到均衡,从而产生共同的奋斗目标。在o p c 标准产生的 过程中,o p cf o u n d a t i o n ( 0 p c 基金会) 就是这样一个机构。在上面的各种叙 述中我们曾多次提及它。 o p c 基金会于1 9 9 6 年建立,是一个独立的、非盈利的国际组织,其宗旨是 不断发展o p c 技术使其更好的适应工业现场的需求。o p c 基金会前身是由 f i s h e r - r o s e m o u n t 、r o c k w e l ls o f t w a r e 、s i e m e n s 、o p t 0 2 2 、i n t e l l u t i o n 和i n t u i t i v e t e c h n o l o g y 等著名大公司组成的专门工作组。今天,o p c 基金会会员已近3 8 0 家,遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制 系统的公司,同时由控制设备厂商和控制软件供应商提供的o p c 产品也日益增 加,目前已有1 5 0 0 种以上的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 技术的普及有着重大的 意义 9 南京邮电大学硕士学位论文 第2 章o p c 技术的基础c o m d c o m 第2 章o p c 技术的基础c o m d c o m o p c 是基于微软的c o m d c o m 而建立起来的一项技术,在详细描述o p c 规范以前,需要对o p c 规范所涉及到的c o m d c o m 技术进行深入的分析。 2 1c o m 概述 随着计算机软件科学的发展,应用系统功能日趋复杂,程序愈加庞大,软件 开发的难度也更大。为此,需要将应用程序划分为多个功能独立的模块,由各 模块协同完成实际的任务。这些模块被称为组件,它们可以被进行单独设计、 : 编译和调试。组件与组件之间通过接口进行通信,因此,组件之间的接口就是 组件软件的关键,在同一软件中的组件必须使用同样的接口标准才能保证组件 之间可以进行通信。c o m ( c o m p o n e n to b j e c tm o d e l 组件对象模型) 就是一个由 m i c r o s o f t 公司推出的开放的组件标准。c o m 不是一种语言或者编译器,可以 把它看成是一个标准集。如果你遵循这个标准,那么你的组件就可以和其他组 件交互信息,这样实现软件组件在二进制上的兼容性。c o m 不仅仅提供了组 件之间的接口标准,它还引用了面向对象的思想。在c o m 标准中,对象是一 个非常活跃的元素,通常把它称为c o m 对象。c o m 对象被很好地封装起来, 客户无法访问对象的内部实现细节,也无法知道对象使用了什么数据结构,访 问c o m 对象的唯一途径是通过其接口。使用对象的程序称为客户。在c o m 标 准中,一个组件程序可以是一个动态连接库( d l l ) ,被称为进程内组件,也可 以是一个可执行程序( e x e ) ,被称作进程外组件。一个组件程序可以包含一个 或多个c o m 对象,因为c o m 是以对象为基本单元的模型,所以在程序与程 序之间进行通信时,通信的双方应该是c o m 对象,而组件程序是提供c o m 对 象的代码载体。 2 2c o m 对象 c o m 提供的是面向对象的组件模型,c o m 组件提供给客户的是以对象形 式封装起来的实体。客户程序与c o m 组件程序进行交互的实体是c o m 对象, 1 0 南京邮电大学硕士学位论文 第2 章o p c 技术的基础c o m d c o m 它并不关心组件模块的名称和位置,但必须知道自己在与哪个c o m 对象交互。 由于c o m 组件的位置透明性,客户程序并不直接去访问c o m 组件,而是 通过一个全局唯一标识符进行对象的创建和初始化工作。c o m 规范采用的全 局唯一标识符( g u i d ,g l o b a lu n i q u ei d e n t i f i e r ) 是一个1 2 8 位的随机数,不需要 专门机构进行分配和管理。c l s i d 是用来标识c o m 对象的g u i d ,因此c l s i d 在结构定义上与g u i d 一致。 类似于c + + 语言中类( c l a s s ) 的概念,c o m 对象也包含属性和方法,对象的 属性反映了对象的存在,也是区别于其它对象的要素。而对象所提供的方法就 是对象提供给外界的接口,客户必须通过接口才能获得对象的服务。对于c o m 对象来说,接口是它与外界进行交互的唯一途径,因此,封装特性是c o m 对 象的基本特征。 c o m 对象不同于像c + + 等面向对象语言中对象的概念,c o m 对象是建立 在二进制可执行代码级的基础上,而c + + 语言中的对象是建立在源代码级基础 上的,因此c o m 对象是语言无关的,这一特性使得用不同编程语言开发c o m 组件成为可能。 2 3c o m 接口 c o m 规范的核心内容就是关于接口的定义,虽然c o m 接口本身并不复杂, 但围绕c o m 接口有许多内容,包括接口的标识、接口函数的调用习惯、参数 处理、接口与对象的关系以及接口与c c 十+ 的关系、c o m 接口的特性等。 c o m 接口是一组逻辑上相关的函数集合,其函数也被称为接口成员函数。 每个c o m 接口都由一个g u i d 来标识。客户通过g u i d 获得接口的指针,再 通过接口指针,客户就可以调用其相应的成员函数。 2 3 1c o m 接口特性 c o m 接口具有以下特性: ( 1 ) 二进制特性。接口规范并不是建立在任何编程语言的基础上,而是规定 了二进制的标准。任何语言只要有足够的数据语言表达能力,就可以对接口进 南京邮电大学硕士学位论文 第2 章o p c 技术的基础c o m d c o m 行描述,从而可以用于组件程序有关的应用开发。 ( 2 ) 接口不变性。接口是组件客户程序和组件对象之间的桥梁,接口如果经 常发生变化,则客户程序和组件程序也要跟着变化,这对于应用系统的开发非 常不利。因此,接口应该保持不变,只要客户程序和组件程序都按照既定的接 口设计进行开发,则可以保证在两者独立开发结束后,它们的协作运行能力能 达到预期的效果。 ( 3 ) 继承性。不变性并不意味着接口不再发展,接口也需要发展,可以继承 发展。接口继承与类继承不同。首先,类继承不仅是说明继承,也是实现继承。 而接口继承只是说明继承,即派生的接口只继承了基接口的成员函数说明,并 没有继承基接1 3 的实现,因为接1 3 定义不包括函数实现部分。其次,类继承允 许多重继承,一个派生类可以有多个基类,但接口继承只允许单继承,不允许 多重继承。 2 3 2 接口描述语言i d l 在o s f ( 开放软件基金会) d c e ( d i s t r i b u t e dc o m p u t i n ge n v i r o n m e n t ,分布式计 算环境) 规范中,使用了i d l ( i n t e r f a c ed e s c r i p t i o nl a n g u a g e ,接口描述语言) 来 描述远程调用接口,c o m 规范在这个i d l 的基础上,进行扩展形成了c o m 接 口的描述语言。接口描述语言提供了一种不依赖于任何语言的接口描述方法, 因此,它成为组件程序和客户程序之间的共同语言。 c o m 规范使用的i d l 接口描述语言不仅可用于定义c o m 接口,同时还定 义了一些常用的数据类型。也可以描述自定义的数据结构,对于接口成员函数, 我们可以指定每个参数的类型、输入输出特性,甚至支持可变长度的数组的描 述。i d l 支持指针类型,与c c + + 很类似。 v i s u a lc + + 提供了m i d l 工具,可以把i d l 接口描述文件编译成c c + + 兼容 的接口描述头文件( h ) ,可被组件程序和客户程序所使用。 2 3 3i u n k n o r n 接口 所有c o m 对象必须支持i u n k n o w n 接口。应用程序通过i u n k n o w n 接口, 1 2 南京邮电大学硕士学位论文 第2 章o p c 技术的基础c o m d c o m 能获得由同一个对象支持的,并指向其它接口的指针,还能管理在对象上获得 的接口指针。i u n k n o w n 接口定义如下: i n t e r f a c ei u n k n o w n t y p e d e f 【u n i q u e 】i u n k n o w n 牛l p u n k n o w n ; h r e s u l tq u e r y i n t e f f a c e ( i n r e f i i df i i d , o u t ,i i di s ( r i i d ) v o i d 料p p v o b j e c t ) ; u l o n g a d d r e f o ; u l o n g r e l e a s e ( ) ; 由上可见,i u n k n o w n 包含了三个成员函数q u e r y i n t e f 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 a c e 用于查询c o m 对象的其它接k 1 指针,函数a d d r e f 和r e l e a s e 用于对引用计数进行操作。 2 4c o m 的实现 c o m 的实现与操作系统平台密切相关,因为c o m 源于m i c r o s o f t w i n d o w s 平台,所以c o m 实现部分( 即c o m 库) 很多地方直接用到了w i n d o w s 系统的 些特性,如系统注册表、动态链接库等等,但实际上c o m 是一个与平台无 关的组件软件模型,我们在w i n d o w s 上使用的c o m 标准只是c o m 的一个具 体实现。 2 4 1 进程内组件和进程外组件 进程是一个正在运行的程序,它有单独的内存地址空间,拥有自己的一些系 统资源。如果我们用动态连接库的方式实现组件程序,则客户程序调用组件程 序的服务时,会把组件程序装入到自己的进程中,所以客户程序和组件程序运 行在同一个进程空间中,我们也把这种组件程序成为进程内组件。实现组件程 序的另一种形式是e x e 程序,这种组件程序在被调用时有其自己的进程空间, 它运行在与客户程序同一个机器上或者在远程机器上的另一个进程空间内,所 南京邮电大学硕士学位论文第2 章o p c 技术的基础c o m d c o m 以客户程序和组件程序运行在不同的进程空间中,我们把这种组件程序称为进 程外组件。 虽然c o m 对象有不同的进程模型,但这种区别对于客户程序来说是透明 的,因此客户程序在使用组件对象时可以不管这种区别的存在,只要遵照c o m 规范即可。进程内模型的优点是效率高,但组件不稳定会引起客户进程崩溃。 进程外模型的优点是稳定性好,组件进程不会危及客户程序,但进程外组件开 销大,而且调用效率相对低一些。用户可根据自己的需要选择进程模型。 在w i n d o w s 平台上,一般用e x e 程序模块来实现进程外组件程序。本论文 实现的o p c 服务器就属于进程外组件。 2 4 2c o m 对象的管理 c o m 规范使用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 ) 组件。客户程序在创建组件对象时,也需要直接 或者间接地访问注册表中的信息。 对于有自注册能力的组件分两种情况进行注册工作,进程内组件本身是一个 动态链接库,不能直接运行,要靠其它程序调用才能获得控制。w i n d o w 系统 提供实用工具r e g s v r 3 2 e x e 对其进行注册,只要进程内组件提供了相应的入1 3 函数d l l r e g i s t e r s e r v e r 和d l l u n r e g i s t e r s e r v e r 就可完成对组件的注册与注销工 作。 进程外组件是一个可执行程序,它不能提供入口函数供其它程序调用,因此 c o m 规范规定支持自注册的进程外组件必须支持两个命令行参数r e g s e r v e r $ 口u n r e g s e r v e r 以便完成注册和注销工作。 1 4 南京邮电大学硕士学位论文 第2 章o p c 技术的基础c o m d c o m 2 5c o m 扩展 2 5 1 可连接对象 在客户与组件程序的交互过程中,如果客户是主动的,而组件是被动的,通 过自身暴露给客户的接口监听客户的请求,一旦组件接收到客户的请求便作出 反应,我们把这样的接口称为入接1 ( i n c o m i n gi n t e r f a c e ) 。与之对应,如果组件 对象要主动与客户进行通信,对象也可提供出接1 2 1 ( o u t g o i n gi n t e r f a c e ) 来实现。 出接口不由对象来实现,而是由客户程序来实现,客户实现这些接口,并把接 口指针告诉对象,以后对象利用此接口指针与客户进行通信。在客户程序方, : 实现这些出接口的对象被称为接受器( s i n k ) ,接受器本身也是一个c o m 对象, 但它往往比较简单,只用于监听并处理组件对象的通知或请求。注意入接口和 出接口是一个相对的概念,它们只用于通信的一个方向。 如果一个c o m 对象支持一个或多个出接口,则我们称这样的对象为可连接 对象( c o n n e c t a

温馨提示

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

评论

0/150

提交评论