已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学学士学位论文OPC服务器设计开发研究1 绪 论1.1 OPC技术产生的背景1.1.1 传统的工控软件开发存在的问题随着我国工业的高速发展,工业生产规模不断扩大,过程控制复杂程度也大大提高。种类繁多的控制设备和过程监控装置在工业领域的应用,使得传统的工业控制软件已无法满足用户的各种需求。在传统的工业控制软件开发过程中,一旦工业被控对象有变动,就必须修改其控制系统的源程序,导致其开发周期长;已开发成功的工控软件又由于每个控制项目的不同而使其重复使用率很低,导致它的价格非常昂贵;在修改工控软件的源程序时,倘若原来的编程人员因工作变动而离去时,则必须同其他人员或新手进行源程序的修改,因而更是相当困难。此外,由于工控系统需要集成数量和种类不断增多的现场信息,而不同厂家的设备又具有不同的通信机制,迫使工控软件中包含了越来越多的底层通讯模块。由于不同工控软件中的通讯模块访问接口不尽相同,因而造成了工控软件相互之间不能通信,软件资源不能共享的普遍的问题。并且,由于程序中软件硬件接口的复杂性,导致将来系统升级比较困难。硬件设备的改进很可能导致整个软件的改动,给工控软件的设计和维护造成了极大的不便。1.1.2 工控软件的发展与OPC技术的产生 传统的工业控制系统由于不具备开放性,导致大量繁琐的软硬件修改工作。通用工业自动化组态软件的出现为解决上述实际工程问题提供了一种崭新的方法,因为它能够很好地解决传统工业控制软件存在的种种问题,使用户能根据自己的控制对象和控制目的任意组态,完成最终的自动化控制工程。通用组态软件的主要特点有:1、 延续性和可扩充性。用通用组态软件开发的应用程序,当现场(包括硬件设备或系统结构)或用户需求发生改变时,不需作很多修改即可方便地完成软件的更新和升级;2、 封装性(易学易用)。通用组态软件所能完成的功能都用一种方便用户使用的方法包装起来,对于用户,不需掌握太多的编程语言技术(甚至不需要编程技术),就能很好地完成一个复杂工程所要求的所有功能;3、 通用性。每个用户根据工程实际情况,利用通用组态软件提供的底层设备(PLC、智能仪表、智能模块、板卡、变频器等)的I/O 驱动程序、开放式的数据库和画面制作工具,就能完成一个具有动画效果、实时数据处理、历史数据和曲线并存、具有多媒体功能和网络功能的工程,不受行业限制。目前,工控组态软件的最大特点就是它们的“开放性” ,即尊重用户对外部设备的选择,并尽最大努力使工控组态软件与外部设备配合良好,一般工控组态软件都提供较多厂家的设备驱动程序供用户使用。如Wincc、InTouch、Citech、FIX、组态王,Control X2000等都带有大量的通用设备驱动程序,给用户的开发带来了很大的便利并缩短了开发时间。但是在实际应用中,由于所用设备的特殊性或者由于工程的需要,设备的驱动程序的提供总是有限的,因此人们迫切需要一种标准途径从数据源(服务器)提取数据并且传输到应用程序(客户端)的机制,此外为了实现不同厂家之间的软件与硬件的集成,从而实现多种现场总线间的数据共享也需要这样一种标准的数据采集机制,这是一种开放、高效的通信机制。OPC正是为适应这一需要而产生的。OPC是OLE for Process Control的缩写,是为保证工业软件和设备的互联性,由世界上一些著名的自动化系统软、硬件公司和微软(Microsoft)紧密合作而制订的程序接口国际标准。它满足开放性和互操作性,并由OPC基金会这个国际组织管理。OPC为不同的厂商的硬件设备、软件和系统定义了公共的接口,使得过程控制和工厂自动化中的不同的系统、设备和软件之间能够互相连接、通信,操作。OPC设计的目的就是使用标准接口实现从网络上任意支持该标准的节点获取数据,而不需要考虑底层的变化。其实质是在硬件供应商和软件开发商之间建立了一套完整的“规则” ,硬件供应商无需考虑应用程序的多种需求和传输协议,软件开发商也无需了解硬件的实质和操作过程。只要符合OPC服务器的规范,OPC客户都可与之进行数据交互,而无需了解设备究竟是PLC还是仪表,甚至可以在数据库系统上建立OPC规范,使OPC客户也可与之方便地实现数据交互,因此从这个意义上我们可以说OPC扩展了设备的概念。OPC的主要技术优势是硬件驱动程序开发单一化,应用软件接口统一化,用户设备选型自主化,以及控制系统组态化。1.2 OPC技术的规范及优点1.2.1 OPC技术规范简介随着OPC技术的广泛应用及不断发展,OPC基金会制定了很多种OPC技术规范和版本,不同的版本通常都有着不同的特性。OPC 标准详细说明了其本身的警报和事件、历史数据存取和安全性等等内容。OPC技术规范参见表1。OPC规范以微软的OLE/COM/DCOM技术为基础,从而使COM技术适用于过程控制和制造自动化等应用领域,并因此实现了OPC客户、服务器在物理上的分开,使之可以分布于网络的不同节点上。OLE/COM/DCOM具有语言无关性、代码重用性和易于集成等优点。OPC规范了接口函数,使现场设备不管以何种形式存在,客户都能以统一的方式去访问,从而保证了工业现场的数据能从车间级汇入到整个企业信息系统中去。基于OPC技术规范的过程控制系统结构采用客户/服务器模式,通常把符合OPC规范的设备驱动程序称为OPC服务器,而将符合OPC规范的应用软件都统称为OPC客户。一个服务器可以和多个客户相联,而多个服务器也可以和一个客户相联。OPC 客户与OPC服务器的关系如图1.1所示。表1 OPC技术规范标准版本内容Data Access3.00,2.05,2.00,1.00数据访问规范Alarms and Events1.10,1.00报警和事件规范Historical Data Access1.20,1.00历史数据存取规范Batch2.00,1.00批量过程规范Security1.00安全性规范OPC XML1.01,1.00过程数据的XML规范OPC Exchange1.00数据交换规范OPC Commands1.00命令规范OPC Common 1.10,1.00公共规范图1.1 OPC 客户程序/OPC服务器关系服务器充当客户与硬件设备之间的桥梁,客户对硬件设备数据的读写操作由服务器代理完成,客户不需要同硬件设备直接打交道,或者说客户是独立于设备的(即不管现场设备以何种形式存在,客户都以统一的方式去访问)。在客户端和服务器端各自定义了统一的标准“接口” ,接口具有不变特性,OPC所提供的接口标准事实上是一种“软件接口标准”或“软件总线” ,它明确定义了客户同服务器之间的通信机制,是连接客户同服务器的桥梁和纽带。这样,我们可以自由选择最符合我们实际要求的软、硬件产品,然后将它们像“搭积木”一样组合在一起进行无缝连接地工作,这一切都来源于OPC所提供的强大互操作性的特点,对此可以用一个比喻来说明:尽管家用电器的种类繁多,但它们的电源插头与插座却是统一的。可以说,统一的标准接口是OPC的实质和灵魂。OPC规范包含了两套接口:自定义接口(Custom Interface)和自动化接口(Automation Interface)。自定义接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C+和PASCAL等语言设计,并可实现最佳运行性能的客户应用程序;自定义接口没有项的对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据的接口,它方便了Visual Basic、Excel及其它可以使用OLE自动化的服务器应用程序接口的高级商业软件使用,但数据传输效率较低。自动化接口实际上是在自定义接口上的自动化封装,为此,OPC基金会提供了一套标准的自动化包装器(wrapperDLL),这个包装器可用来包装任何客户化服务。利用这两种接口与OPC服务器通信的方式见图1.2。图1.2 自定义接口与自动化接口的关系1.2.2 OPC数据存取(Data Access)规范在OPC所有的规范中,应用最广泛的当属 OPC 数据存取(Data Access)规范(OPC DA),实际上OPC服务器的核心是数据访问服务器,其他类型的OPC服务器都是在数据访问服务器的基础上通过增加对象,扩展接口而来的。它用于将实时数据从 PLC、DCS,FCS或其他控制设备转移到 HMI(Human Machine Interface) 或在其它客户端上显示。本文所要研究和实现的OPC服务器也是基于该规范来进行的。OPC数据存取规范规定,一个OPC的数据存取服务器一般包括:服务器对象(OPC Server)、组对象(OPC Group)和项对象(OPC Item)。OPC服务器对象维护有关服务器的信息并作为OPC组对象的容器,可动态地创建或释放组对象,而OPC组对象维护有关其自身的信息,提供包容OPC项的机制,并管理OPC项。这种结构如图1.3所示。图1.3 OPC Server,Group和Item对象关系图OPC服务器对象主要实现IUnknown和IOPCServer接口,OPC客户通过OPC服务器的接口进行通信。IOPCServer接口为OPC客户提供了方便有效的管理OPC组的一种方法。OPC组提供了客户程序组织数据的手段,每个组中都可以包含一个或多个OPC项。1、 OPC SERVER对象及接口简介 根据OPC DA 3.0标准的规定,OPC SERVER对象及接口描述如下:图1.4 标准的服务器对象各接口概述如下:IUnknown:COM标准接口;IOPCCommon:其他OPC服务器如报警与事件服务器将共享该接口;IOPCServer:OPC服务器的主要接口,所有OPC服务器都必须提供该接口; IOPCBrowse:该接口为客户提供浏览服务器中可用数据项的方法; IOPCItemIO:客户通过该接口可以浏览项对象属性;IConnectionPointContainer:提供访问客户端的IOPCShutdown的接口。OPC Server对象提供的功能主要表现为:创建和管理OPC Group对象;管理服务器内部的状态信息;将服务器的错误代码翻译成描述性语句;浏览OPC服务器内部的数据组织结构。2、 OPC GROUP对象及接口简介图1.5 标准的组对象各接口概述如下:IUnknown:COM标准接口;IOPCItemMgt:客户通过该接口进行添加,删除和控制组对象的操作;IOPCGroupStateMgt2:允许客户管理组的所有状态;IOPCSyncIO:允许客户对服务器执行同步读写操作;IOPCSyncIO2:对IOPCSyncIO接口的加强,用于提供组级别的同步写Time Stamp和Quality信息服务; IOPCAsyncI02:允许客户通过该接口对服务器执行异步读写操作; IOPCAsyncI03:对IOPCAsyncI02接口的加强。提供组级别的异步写Time Stamp和Quality信息服务;IOPCItemDeadBandMgt:为项设置死区的百分比;IOPCItemSamplingMgt:可选接口,用于管理项的采样速率。OPCGroup对象的主要功能表现为:管理OPC Group对象的内部状态信息;创建和管理Items对象;对OPC服务器内部的实时数据提供存取服务(同步与异步方式)。OPC组对象有以下几个主要属性:Name:组的名字;Active:组的激活状态标志;Update Rate OPC:服务器向客户程序提交数据变化的刷新率;Percent Deadband:数据死区,即能引起数据变化的最小数据百分比。从OPC Group对象的功能可以看出,该对象面向OPC服务器中的数据存取信息,对实时数据源的依赖性很强,需要从用户数据源处获取信息。3、 OPC ITEM对象及接口简介项对象不是真正的COM对象,因此它没有相应的接口,它在OPC标准中用来描述实时数据,仅用于表示与OPC 服务器中数据的连接,并不表示数据源,它包括以下四个基本属性:1、项的数值(Value),类型为VARIANT;2、品质(Quality),表示数值的可信度,类型为SHORT;3、时间戳(Time Stamp),表示数据的采集时间;4、项的激活状态(Active)。4、 对象之间的关系OPC服务器对象和组对象之间是聚合的关系,即OPC 服务器对象创建OPC组后,将组对象的指针传递给客户,由客户直接操纵组对象。OPC 组对象和项对象之间只是简单地包容关系,客户程序可以通过组对象管理OPC项。OPC客户端与OPC服务器连接并通过接口与OPC服务器通信,OPC服务器对象向OPC客户端提供创建和操纵OPC组对象的功能。这些组允许OPC客户对它们要访问的数据进行组织。1个组可以作为1个单元被激活或失活。1个组也可以提供1种方法允许客户“订阅“项目列表,以便在项目变化时它能得到通知。客户只能看到接口,所有的COM对象只能通过接口进行交互。这样,这里所描述的对象只是逻辑表示,与服务器的内部执行无关。客户访问服务器的过程见图1.6。图1.6 客户访问服务器的流程图在设计过程中,只调用了部分接口程序,如添加或删除组对象,添加或删除项对象,设置项状态,获取服务器状态。其他的接口由于知识了解的还不够深刻,无法正确调用,故在此只是列出。1.2.3 OPC技术的优点1、 几种数据采集方案的比较当前被广泛用于工业控制系统中的数据采集方案主要有:驱动程序法,动态数据交换法(DDE)和OPC技术方案。以下对它们分别进行分析和比较。(1) 驱动程序法(Drive)驱动程序法(Drive)是针对不同的设备,通过编写定制一对一的的驱动程序和接口程序的方法来进行数据采集。如图1.7所示。应用程序A应用程序B服务器1服务器2服务器3图1.7 驱动程序法的数据访问方式(每条线代表一个驱动程序)此种方法是在应用程序中挂接“驱动程序”来存取现场控制设备和控制室数据库的数据。该种方法存在以下缺陷:(1) 尽管可以编写定制的驱动程序和接口程序,但因为多种不同类型的控制设备和软件包需要通信,使得程序的种类迅速的增长。驱动程序数量的增加加深了解决已经存在问题的困难程度,例如不同设备供应商的驱动程序之间的不一致、硬件性能不能得到广泛支持、驱动程序不能适应升级后的硬件以及发生的存取冲突(两个应用程序因为使用相互独立的驱动程序,因而不能同时访问同一设备),更糟糕的情况是驱动程序不适用于特定设备的应用程序或内部应用程序的组合,这就限制了最终用户的选择或迫使他们不得不编写自己的驱动程序(以及调试)。 (2) 对于开发监控程序软件的技术人员来说,有20%30%的时间是用于编写通信驱动程序。每次,一个供应商需要将一个新的控制器投入销售时,所有的软件开发人员就不得不重新编写一个新的驱动程序。应用软件的提供者花费太多的资金开发和维护专用接口,这不仅增加了用户的负担,而且在实际上并不能解决不同系统的互操作性,在某种意义上,用户被他们的软件提供者所控制。(2) 动态数据交换法(DDE)DDE即动态数据交换(Dynamic Data Exchange),是OLE技术的前身,是在微软的Win32应用程序接口(API)上所开发的应用程序之间动态交换数据一种方法。DDE协议在应用程序间传送信息,使得应用程序共享数据和采用共享的内存交换数据。应用程序采用DDE协议,可以一边传送数据,一边交换数据,这样,应用程序就可以相互更新数据,因而得到的总是最新的数据。在OPC技术产生之前,硬件制造商尽管认识到需要开发软件程序以连接他们的硬件,但由于受通信驱动程序开发的能力限制,因而程序开发的选择范围只能局限在DDE和一个专用的DDE导出表之间。选择任何一个DDE进行程序开发,都有可能要么限制用户对软件的选择,要么妨碍用户对硬件的接受。且由于DDE是基于Windows的消息(Message)传递而建立的技术,所以DDE技术存在以下的问题:数据的传送速度较慢;没有安全性的管理机制;开发难度大;功能缺乏柔韧性;可靠性也难以令人满意。(3) OPC技术方案OPC技术方案为过程控制和工厂自动化提供真正的即插即用软件技术,使得过程控制和工厂自动化的每一个系统、每一种设备、每一个驱动程序能够自由的连接和通信。有了OPC标准,使得系统及设备之间,包括从车间级到MIS(管理信息系统)或到更远距离的网络,进行完全无缝地、真正开放和方便地进行企业级的通信成为可能。利用OPC技术构建的系统,由按应用程序(客户程序)的要求提供数据采集服务的OPC服务器,OPC接口,以及接受服务的OPC应用程序(OPC客户端)所构成,如图1.8所示。OPC服务器是根据各个供应厂商的硬件所开发的符合OPC标准的驱动程序,使用它可以消除各个供应厂商硬件和系统的差异,从而实现不依存于硬件的系统构成。同时利用一种叫Variant的数据类型,可以不依存于硬件中固有的数据类型,按照应用程序的要求提供数据格式。图1.8 利用OPC的控制系统构成2、 OPC技术的优越性通过OPC技术和DDE技术以及在应用程序中内嵌Drive的方案的比较不难发现OPC技术在以下方面显示出它的优越性:(1) 高速的数据传输性能。(2) 基于分布式COM的安全性管理机制。 (3) 开发成本的降低。 (4) 实现具有高度柔韧性功能的系统。 (5) 实现具有高可靠性的系统。 所以基于先进的COM技术的OPC技术将逐渐取代在过程控制中广泛使用的DDE的地位,OPC技术的发展将给工业软件和硬件带来利益,如同标准的打印机驱动程序使得文字处理焕然一新那样。1.3 OPC技术在工业控制领域的应用及影响1.3.1 OPC技术在工业控制领域的应用OPC标准的制定虽然主要由少数几家公司所推动,但是已制定的OPC标准由来自90多家公司的专家参与,并参考了来自300多个合作伙伴的评论意见,所以具有广泛的代表性。一批国际知名的控制类公司,如ABB、AspenTech、Eurotherm、Foxboro、Honeywell、NationalInstruments、Siemens、Toshiba、JohnsonYokogawa、GEFanuc等相继宣布支持OPC标准。在这种情况下,毫无疑问OPC将会在控制领域发挥重大的作用,OPC将会成为大势所趋。目前OPC技术已经广泛应用于过程控制和制造自动化的各个领域。全球有300家以上的生产厂商在积极开发OPC服务器及客户端,世界上工控领域的主要软硬件设备开发商都提供了OPC的技术支持。比如德国西门子公司的SINMATIC.NET开发系统就提供一套完整的OPC服务器,提供SINMATIC.NET工业通讯网络的访问。Wonderware公司原来一直采用NetDDE开发其软件产品,但鉴于OPC正在成为业界标准的形式,现在正逐步转向采用OPC标准开发其软件产品。USDATA公司开发了一种叫做OPC友好插座的产品,该产品允许任何符合OPC标准的对象加入到该公司的软件中。在已开发成功的FisherRosemount的DeltaV过程系统中采用了OPC技术。Intellution作为OPC董事会成员,在推行OPC标准方面始终是不遗余力,现已利用OPC技术开发出了VisualBatch、FIXDynamics等组件产品。近年来OPC在国内引起了广泛的关注,不少高等院校、研究机构和制造厂商都展开了对OPC技术的研究和应用。一些公司如北京华控公司,华富惠通公司也加入了OPC基金会,成为其成员单位。国内的组态软件,也有一部分开始支持OPC接口。比如组态王,Control X2000等系统就既可以作为OPC服务器,又可以作为OPC客户程序。为了简化OPC系统的开发过程,一些厂商开发了OPC服务器/客户快速开发工具,以提高OPC开发效率。比如,沈阳自动化研究所研制的具有自主的软件注册版权的OPC数据存储服务器快速开发工具SmartOPC。开发工具减少用户的开发细节和不必要的开发专业知识,使用户在工程中和相应的产品中节省宝贵的时间,带来更大的社会及经济价值。这些开发工具的出现,进一步加速了OPC技术的发展。由于OPC技术的采用,使得可以以更简单的系统结构、更长的寿命、更低的价格解决工业控制成为可能。同时现场设备与系统的连接也更加简单、灵活、方便。因此OPC技术在我国的工业控制领域得到了广泛的应用,目前主要应用的领域有以下几个方面:1、 数据采集技术。在数据采集软件中OPC技术得到了广泛应用。现在众多硬件厂商提供的产品均带有标准的OPC接口,OPC实现了应用程序和工业控制设备之间高效、灵活的数据读写,可以编制符合OPC标准的客户端应用软件完成数据的采集任务。2、 历史数据访问。OPC提供了读取存储在过程数据存档文件、数据库或远程终端设备中的历史数据以及对其操作、编辑的方法。3、 报警和事件处理。OPC提供了OPC服务器发生异常时,以及OPC服务器设定事件到来时向OPC客户发送通知的一种机制,通过使用OPC技术,能够更好的捕捉控制过程中的各种报警和事件并给予相应的处理。4、 数据冗余技术。工控软件开发中,冗余技术是一项最为重要的技术,它是系统长期稳定工作的保障。OPC技术的使用可以更加方便的实现软件冗余,而且具有较好的开放性和可互操作性。5、 远程数据访问。借助Microsoft的DCOM(分散式组件对象模型)技术,OPC实现了高性能的远程数据访问能力,从而使得工业控制软件之间的数据交换更加方便。1.3.2 OPC技术对工业控制系统影响OPC技术对工业控制系统影响和作用是基础性和革命性的,简单地说,它的作用主要表现在一下几个方面:1、 OPC解决了设备驱动程序开发中的异构问题。有了OPC后,由于有了统一的接口标准,硬件厂商只需提供一套符合OPC技术的程序,软件开发人员也只需编写一个接口,而用户可以方便地进行设备的选型和功能的扩充,只要它们提供了OPC支持。所有的数据交换都通过OPC接口进行,而不论连接的控制系统或设备是哪个具体厂商提供。2、 OPC解决了现场总线系统中异构网段之间数据交换的问题。现场总线系统仍然存在多种总线并存的局面,因此系统集成和异构控制网段之间的数据交换面临许多困难。有了OPC作为异构网段集成的中间件,只要每个总线段提供各自的OPC服务器,任一OPC客户端软件都可以通过一致的OPC接口访问这些OPC服务器,从而获取各个总线段的数据;并可以很好地实现异构总线段之间的数据交互。而且,当其中某个总线的协议版本做了升级,也只需对其对应总线的程序作升级修改。3、 OPC可作为访问专有数据库的中间件。实际应用中,许多控制软件都采用专有的实时数据库或历史数据库,这些数据库由控制软件的开发商自主开发。对这类数据库的访问不像访问通用数据库那么容易,只能通过调用开发商提供的API函数或其它特殊的方式。然而不同开发商提供的API函数是不一样的,这就带来和硬件驱动器开发类似的问题:要访问不同监控软件的专有数据库,必须编写不同的代码,这样显然十分繁琐。采用OPC则能有效解决这个问题,只要专有数据库的开发商在提供数据库的同时也能提供一个访问该数据库的OPC服务器,那么当以用户要访问时只需按照OPC规范的要求编写OPC客户端程序而无需了解该专有数据库特定的接口要求。4、 OPC便于集成不同的数据,为控制系统向管理系统升级提供了方便。当前控制系统的趋势之一就是网络化,控制系统内部采用网络技术,控制系统与控制系统之间也网络连接,组成更大的系统,而且,整个控制系统与企业的管理系统也网络连接,控制系统只是整个企业网的一个子网。在实现这样的企业网络过程中,OPC也能够发挥重要作用。OPC服务器在企业信息系统中的作用见图1-9。在企业的信息集成,包括现场设备与监控系统之间、监控系统内部各组件之间、监控系统与企业管理系统之间、以及监控系统与Internet之间的信息集成,OPC作为连接件,按一套标准的COM对象、方法和属性,提供了方便的信息流通和交换。无论是管理系统还是控制系统,无论是PLC(可编程控制器)还是DCS,或者是FCS(现场总线控制系统),都可以通过OPC快速可靠的彼此交换信息。换句话说,OPC是整个企业网络的数据接口规范,所以,OPC提升了控制系统的功能,增强了网络的功能,提高了企业管理的水平。5、 OPC使控制软件能够与硬件分别设计、生产和发展,并有利于独立的第三方软件供应商产生与发展。从而形成新的社会分工,有更多的竞争机制,为社会提供更多更好的产品。图1.9 OPC服务器在企业信息系统中的作用1.4 本论文的选题及解决的问题1.4.1 选题的依据 基于COM技术的OPC技术规范在短短几年内获得了极大的发展,并得到了国际上自动化领域领先的厂商的广泛支持。采用OPC技术规范的产品实现了工业自动化系统中软件之间的互操作和无缝集成,以及现场监测、控制设备的即插即用,为该领域的硬件、软件厂商及最终用户带来了直接和明显的经济利益。目前工控产品的OPC支持性能,已经成为其综合性能的一个重要方面。符合OPC规范的硬件、软件产品开始大量地开发并得到广泛应用,支持OPC技术开发的各种开发工具正在不断地得到完善,OPC技术因而具有良好的发展前景。本论文之所以选择“OPC DA服务器的研究”为研究课题,其原因主要有以下几方面:1、 通过对OPC DA服务器所需技术的研究,熟悉并掌握OPC技术,以便跟踪并充分把握这一国际发展新趋势。2、 选择根据OPC DA标准而不是其他OPC标准进行开发的原因。主要是因为目前OPCDA服务器应用范围比较广,接口的数目十分庞大,开发的难度相对较高;而其他规范的OPC服务器应用较少,与OPC DA服务器相比只是接口定义不同,其实现方法基本类似,故本文只以数据存储规范为例,介绍了OPC服务器的实现,但对其它接口的规范,本文同样具有重要的参考价值。1.4.2 本论文的主要工作目前OPC服务器的开发大体可分为两种方式。一是利用某些软件开发商的快速开发工具,它对服务器的对象与接口部分进行了封装,能提高OPC服务器程序的开发速度和质量,设计者不需了解OPC 对象的实现细节。由于快速开发工具中某些实现部分是通过DLL 的形式封装起来,因此当用户需要增加某些特定功能时会受到一些限制,而且它们的价格昂贵。二是根据OPC 基金会免费提供的规范直接开发,但需要了解OPC 规范的许多细节,并且对COM/ DCOM技术规范也要熟悉,这种开发方式的优点是实现方式自由,可以选择实现的功能,使用灵活,且有自己的产权。为了更好地掌握OPC技术,本课题选择第二种方法来开发OPC服务器,即根据OPC DA规范,采用分布式Client/Server模式,结合COM/DCOM技术标准,对OPC服务器的整体架构、组件的注册等进行了深入地研究和分析,实现了OPC DA数据存取服务器的主要功能。2 OPC DA的核心技术-OLE/COM/DCOM简介2.1 COM对象与接口2.1.1 COM对象OPC技术本质是采用了MICROSOFT的COM/DCOM(组件对象模型/分布式组件对象模型)技术,只有充分了解COM的基本原理并熟练掌握COM技术才能开发出功能强大的OPC DA服务器。COM的主要任务是为了实现软件复用和互操作,并且为基于Windows的程序提供了统一的、可扩充的、面向对象的通讯标准。它不仅定义了组件程序之间进行交互的标准,并且也提供了组件程序运行所需的软件环境。在 COM 的标准中,一个组件程序也被称为一个模块,它可以是一个动态链接库,被称为进程内组件(In Process Component);也可以是一个可执行程序(即 EXE 程序),被称作进程外组件(Out of Process Component)。一个组件程序可以包含一个或多个组件对象,因为COM是以对象为基本单元的模型,所以在程序与程序之间进行通信时,通信的双方应该是组件对象,同时也叫做COM对象,而组件程序(或称作COM程序)是提供COM对象的代码载体。在COM规范中,并没有对COM对象进行严格的定义,但COM提供的是面向对象的组件模型,COM组件提供给客户的是以对象形式封装起来的实体。客户程序与COM程序进行交互的实体是COM对象,它并不关心组件模型的名称和位置(即位置透明性),但它必须知道自己在与哪个 COM对象进行交互。COM对象不同于一般面向对象语言(如 C+ 语言)中的对象概念,它是建立在二进制可执行代码级的基础上,而C+等语言中的对象是建立在源代码级基础上的,因此COM对象是语言无关的。这一特性导致用不同编程语言开发的组件对象进行交互成为可能。COM对象是某个类(CLASS)的一个实例;而类则是一组相关的数据和功能组合在一起的一个定义。使用了对象的应用(或另一个对象)称为客户,有时也称为对象的用户。2.1.2 COM接口从技术上讲,接口是包含了一组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。通常我们把接口函数表称为虚函数表(Vtable),指向Vtable的指针为pVtable。对于一个接口来说,它的虚函数表是确定的,因此接口的成员函数个数是不变的,而且成员函数的先后顺序也是不变的;对于每个成员函数来说,其参数和返回值也是确定的。在一个接口的定义中,所有这些信息都必须在二进制一级确定,不管什么语言,只要能支持这样的内存结构描述,就可以使用接口。COM的接口结构如图2.1所示。由图2.1可知,客户程序不能直接访问接口函数,它必须通过指向接口的指针来调用接口函数,接口指针实际上也不是直接指向接口而是指向另一个指针,这第二个指针指向接口函数表通常也称为虚函数表(Virtual function table,简称Vtable),接口函数表里保存的是函数指针。函数指针与对象的具体实现相连。通过这种方式,客户只要获得接口指针,就可以调用到对象的实际功能。VtablepVtable接口指针指针指针函数1指针函数2指针函数3对象实现 图2.1 COM接口结构每一个接口成员函数的第一个参数为指向对象实例的指针,这是因为接口本身并不独立使用,它必须存在于某个COM对象上,因此该指针可以使提供对象实例的属性信息,在被调用时,接口可以知道是对哪个COM对象在进行操作。在接口成员函数中,字符串变量必须用Unicode字符指针,COM规范要求使用Unicode字符,而且COM库中提供的COM API函数也使用Unicode字符。所以如果在组件程序内部使用到了ANSI字符的话,则应该进行两种字符表达的转换。当然,在既建立组件程序又建立客户程序的情况下,可以使用自己定义的参数类型,只要它们与COM所能识别的参数类型兼容即可。COM定义的每一个接口都是对IUnknown的继承。因为IUnknown接口提供了两个重要的特性:生存期控制和接口查询。客户程序只通过接口与COM对象进行通信,对象的具体实现对客户来说是不可知的,但它能控制可以对象的存在与否。这主要依靠IUnknown的“引用计数”来实现。IUnknown包含了三个成员函数: AddRef、Release和QueryInterface。其中AddRef、Release函数用于操作引用计数。当客户获得一个接口指针时,函数AddRef使引用计数加1,当客户用完一个接口指针后,Release函数使引用计数减1,当引用计数为0时,表明该COM对象已没有客户使用,于是从内存中消失。接口查询主要通过函数QueryInterface完成,因为一般COM对象不只实现一个接口,而客户程序一开始也不可能得到该对象的所有接口指针,它只拥有一个接口指针,如果它需要获得其他接口的功能,则只有通过“接口查询”来完成。在 COM 模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。每一个接口都完全由一个128位的全局唯一标识符(GUID,Global Unique Identifier)来标识。客户通过 GUID 来获得接口的指针,再通过接口指针,客户就可以调用其相应的成员函数。与接口类似,每个组件也用一个 128 位 GUID来标识,称为CLSID(Class Identifer,类标识符或类 ID),用 CLSID 标识对象可以保证(概率意义上)在全球范围内的唯一性。实际上,客户成功地创建对象后,它得到的是一个指向对象某个接口的指针,因为 COM 对象至少实现一个接口(没有接口的 COM 对象是没有意义的),所以客户就可以调用该接口提供的所有服务。根据COM规范,一个COM对象如果实现了多个接口,则可以从某个接口得到该对象的任意其他接口。从这个过程我们也可以看出,客户与COM对象只通过接口打交道,对象对于客户来说只是一组接口。2.2 COM库COM除了是一个组件之间进行交互的规范以外,还存在着一个实现部分,即COM库。COM库是一些核心的系统级代码,没有这些代码的支撑,对象与客户之间就不可能通过接口在二进制代码级进行交互。COM库与操作系统平台环境密切相关。而在Microsoft Windows操作系统环境中, COM库以动态链接库的形式存在,它的内容主要包括了以下几个方面:1、 提供了少量的API函数实现客户和服务器端COM应用的创建过程。客户端,主要是一些创建函数如:用于获取对象类厂(Class Factory)的CoGetClassObject函数,用于创建COM对象的CoCreateInstance函数,用于创建远程COM对象并可以指定多个接口的CoCreateInstanceEx函数,用于注册一个对象,以便其他客户端可以连接到该对象的CoRegisterClassObject函数等;而在服务器端,提供对一些对象的访问支持。2、 COM通过注册表查找本地服务器即EXE程序,以及程序名与CLSID的转换等。比如说:通过调用CLSIDFromProgID函数,可以将字符串形式的对象标识转化为CLSID的形式,而StringFromCLSID函数则为了实现将对象的CLSID转化为字符串的功能。3、 提供了一种标准的内存控制方法,用于控制进程中内存的分配。用于内存管理的函数有:内存分配函数CoTaskMemAlloc,内存重新分配函数CoTaskMemReaAlloc,内存释放函数CoTaskMemFree,获取COM库内存管理器接口的函数 CoGetMalloc。2.3 COM进程模型COM 所提供的服务组件对象在实现时有两种进程的模型:进程内对象和进程外对象。如果是进程内对象,则它在客户进程空间中运行;如果是进程外对象,则它运行在同机器上的另一个进程空间或者在远程机器的空间。进程内服务程序:服务程序被加载到客户的进程空间,在Windows环境下,通常服务程序的代码以动态连接库(DLL)的形式实现。本地服务程序:服务程序与客户程序运行在同一台机器上,服务程序是一个独立的应用程序,通常它是一个EXE文件。远程服务程序:服务程序运行在与客户不同的机器上,它既可以是一个 DLL 模块,也可以是一个EXE文件。如果远程服务程序是以 DLL 形式实现的话,则远程机器会创建一个代理进程。虽然 COM 对象有不同的进程模型,但这种区别对于客户程序来说是透明的,因此客户程序在使用组件对象时可以不管这种区别的存在,只要遵照 COM 规范即可。然而,在实现 COM对象时,仍需慎重选择进程模型。进程内模型的优点是效率高,但组件的不稳定会引起客户进程崩溃,因此组件可能会危及客户;进程外模型的优点就是稳定性好,组件进程不会危及客户程序,而且一个组件进程可以为多个客户进程提供服务,但进程外组件开销大,调用效率相对较低。2.4 COM的特性 2.4.1 COM的线程特性在介绍COM线程特性之前我们先介绍线程和进程的含义以及两者之间的关系。所谓“进程”是指应用程序的执行实例,每个进程由私有的虚拟地址空间、代码、数据和其他各种系统资源组成,进程在运行中创建的资源随着进程的终止而销毁,所使用的系统资源也在进程终止前被释放和关闭。所谓”线程“ 则是指进程中一段并发运行的代码,即一个函数或过程(对Delphi而言)。每个Win32的应用程序中都至少有一个线程(即主线程,由系统启动应用程序后自动创建),用户也可以根据实际需要在应用程序中创建多个子线程来执行不同的任务。线程与进程之间的关系是:系统创建完进程后,即启动执行了该进程的主线程,主线程终止时,进程也随之终止。当一个进程中用到超过一个线程时,就是所谓的“多线程”也可称之为应用程序内的多任务。多个线程可以并发运行在同一个进程中,在并发运行时如果一个线程的执行要依赖另一个线程的执行结果,需使用线程的同步技术,以保证多个线程能正确,协调地执行。在这里如果把线程比作工人,把线程使用的全局变量比作工人操作的机器,那么当两个工人均需要使用同一台机器时,这两个工人就必须互相协调。如果工人甲把机器的加工速度设置为10,在他还没有开始加工零件时,工人乙又将加工速度定为了100,如果甲不知道,就有可能导致事故发生。这就是所谓的线程冲突。因此,当多个线程都需要操作进程中某块内存时,这块内存就和“机器的加工速度”一样,对其的改变需要施加同步手段以防止出现问题。因此可以规定这个机器只能在一个工人操作完后才允许另一个工人操作,这种同步手段在编程时是通过在程序中设置临界区来实现的。除了设置临界区当然也可采取其他同步技术保证线程之间的协调运行。除了线程冲突外,还有一种称为死锁(Deadlock)的线程安全问题。比如工人甲为了加工A零件在等待工人乙提供B零件,而乙正好在等待应由甲加工提供的C零件以装配B零件。如果他们之间没有其他通信手段,则双方将一直处于等待状态。这就是死锁,即双方互相等待,此本属于逻辑错误,并不像线程冲突那样可以通过固定的方法解决,这是设计算法时犯下的错误,当线程较多,相互间关系较复杂时是很容易产生的。当一段代码不会发生线程冲突或死锁时,我们称这段代码是线程安全的。在COM里存在两种线程类型:套间线程(Apartment)和自由线程(Free)。套间线程通过消息循环调用有关的消息控制函数,所以这些消息控制函数被自动同步,不需要附加同步处理。套间线程属于单一线程模型。运行在套间线程外的客户只能通过代理/存根调用此对象。因此它是线程安全的。套间线程的主函数中必须调用Colnitialize函数。自由线程属于多线程模型,可以自由创建多个线程。在自由线程的主函数中不包括消息循环。同一进程中其他线程可以直接调用自由线程中的对象成员函数,因此容易发生线程冲突,对象成员函数必须进行同步处理,以保证其线程安全特性。在自由线程的主函数中,必须调用CoInitializeEx函数,而且在dwColnit参数必须指定为COINIT_ MULTITHREADED,以便COM知道这是一个自由线程。支持自由线程模型的COM对象要用到Win32中多线程编程方面的知识,包括线程同步对象,如互斥体、事件、信号、临界区等,以及WaitForMultipleObjects和WaitForSingleObject等API函数。2.4.2 COM的可重用性由于 COM 标准是建立在二进制代码级的,因此 COM 对象的可重用性与一般的面向对象语言如 C+ 中对象的重用过程不同。对于 COM 对象的客户程序来说,它只是通过接口来使用对象提供的服务,它并不知道对象内部的实现过程,因此,组件对象的重用性可建立在组件对象的行为方式上,而不是具体实现上,这是建立重用的关键。COM 用两种机制实现对象的重用。我们假定有两个 COM 对象,对象1 希望能重用对象2 的功能,我们把对象1 称为外部对象,对象2 称为内部对象。1、 包容方式 对象1 包含了对象2,当对象1需要用到对象2的功能时,它可以简单地把实现交给对象2 来完成,虽然对象1和对象2支持同样的接口,但对象1在实现接口时实际上调用了对象2的实现。2、 聚合方式 .对象1 只需简单地把对象2 的接口递交给客户即可,对象1 并没有实现对象2 的接口,但它把对象2 的接口也暴露给客户程序,而客户程序此时并不知道内部对象2 的存在。COM是一个二进制标准,是DCOM、 ActiveX和OLE技术的核心。2.5 可连接对象2.5.1 可连接对象和连接点机制的基本原理在客户与组件之间进行交互时,组件通过向客户暴露接口监听客户的请求,一旦接收到客户的请求便作出相应的反应,在这种情况下通信是单向的,客户处于主动状态,而组件处于被动状态。我们把组件的这种接口叫入接口(incoming interface)。对于一个全面的交互过程来说,只有单向通信是不够的。为了在组件对象和客户之间提供更大的交互能力,组件对象有时也需要主动与客户进行通信。组件对象通过出接口(Outgoing Interface)与客户进行通信。所谓出接口也是COM接口。每个出接口包含一组成员函数,每个成员函数代表了一个事件、一个通知或者一个请求。当组件对象的属性变化时,组件可以向客户发出一个通知;当特定的某件事情发生时,比如鼠标操作发生时,组件产生一个事件发送给客户,等待客户处理;当对象需要客户提供某些信息时,它向客户发送一个请求,等待客户应答。不管是事件,通知还是请求,它们都通过出接口的成员函数来实现。之所以把这些接口叫出接口是因为这些接口并不由对象实现,而是由客户程序来实现,客户实现这些接口并把接口指针告诉对象,对象通过此接口指针与客户通信。这些接口是在客户的事件接收器(sink)中实现的,事件接收器本身也是一个COM对象,用于监听并处理组件对象的通知或请求。因此我们可以说入接口和出接口只是一个相对的概念,而对象与客户之间的关系大多也是相对的,虽然多数情况下是对象提供服务,客户调用服务,但这并不是一直如此。如果一个组件对象定义了一个或者多个出接口则此组件对象叫做可连接对象。可连接对象必须实现一个IConnectionPointContainer接口用于管理所有的出接口。每个出接口对应一个连接点的对象,连接点对象也就实现了IConnectio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年西餐烹饪技术试题及答案
- 2025年泌尿外科复试真题及答案
- 电子驾驶证考试题目及答案
- 2025年小奶猫钻洞测试题及答案
- 应用题乘法题试卷及答案
- 2025年技师理论基础知识题库及答案
- 2025年乙卷文科数学真题及答案
- 模拟电路期末试题及答案
- 基于生成式人工智能的跨区域初中数学解题教学协作模式构建与实践教学研究课题报告
- 南京急救证考试题库及答案
- HGT21581-2012 自控安装图册
- 标识标牌制作服务方案
- JBT 7927-2014 阀门铸钢件外观质量要求
- 胃肠镜健康宣教胃肠镜检查注意事项适应症与禁忌症宣传课件
- 麻醉与复苏技术教案课件
- 专题10 几何图形初步中动角问题压轴题真题分类(原卷版)-2023-2024学年七年级数学上册重难点题型分类高分必刷题(人教版)
- 家用吸尘器测试标准
- 高低温测试报告表
- 新人教版四年级上册数学同步练习册
- 《两次鸦片战争》同步练习
- 生态保护红线内人类活动生态环境影响评价技术指南
评论
0/150
提交评论