《基于modbus通信协议的智能仪表opc服务器的开发-学位论文.doc》由会员分享,可在线阅读,更多相关《基于modbus通信协议的智能仪表opc服务器的开发-学位论文.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本 科 生 毕 业 设 计(申请学士学位)论文题目基于Modbus通信协议的智能仪表OPC服务器的开发作者姓名 程 龙 所学专业名称 自 动 化 指导教师 汪 先 兵 2012年5月20日学 生: (签字)学 号:2008210263论文答辩日期:2012年5月26日指 导 教 师 : (签字)目 录摘要1Abstract11 绪论21.1 课题的选题背景及意义21.2 OPC技术国内外发展现状31.3 本课题主要研究内容32 Modbus总线技术42.1 现场总线技术42.2 Modbus技术历史42.3 Modbus通信协议42.3.1 Modbus数据模型42.3.2 Modbus地址参
2、数表及通信结构52.3.3 Modbus 兼容分类53 OPC技术规范63.1 OPC技术历史63.2 OPC技术规范63.3 COM技术73.4 OPC服务器数据访问方式83.4.1 同步数据访问83.4.2 异步数据访问94 Modbus OPC数据访问服务器的实现94.1 OPC服务器要求分析94.1.1 OPC服务器结构框架94.1.2 OPC服务器需要实现的功能114.2 OPC服务器开发步骤124.3 服务器组和项属性实现124.4 服务器与客户端传送机制134.4.1 服务器与客户端异步通报方式传送机制134.4.2 服务器与客户端连接点方式传送机制144.5 OPC对象和接口1
3、55 OPC服务器的实验测试15结论18参考文献18附录1 OPC组件的部分实现代码19附录2 实验设备及运行环境21致谢22滁州学院本科毕业设计基于Modbus通信协议的智能仪表OPC服务器的开发摘要: OPC(OLE for Process Control)是过程控制软硬件与基于Windows平台的应用程序之间的通信通道,它已经成为现代工业自动化控制领域的标准,被广大厂商和用户所接受。Modbus通信协议是监控系统自动化设备的通信标准,可将Modbus报文信息传输于Internet中。随着Modbus技术和OPC技术的发展,以及它们在工业领域中发挥的作用日益增加,研究基于Modbus的OP
4、C数据访问服务器成为了一个重要课题。本课题在Modbus协议和OPC规范基础上,详细介绍了基于Modbus通信协议的OPC服务器的原理和开发过程。具体论述了OPC技术优点;OPC传输的三种方法-同步访问、异步访问、订阅实现过程中的关键技术;以及服务器实现过程中的关键技术。关键词:Modbus通信协议;OPC数据服务器;COM;智能仪表OPC Server Development of Intelligent Instrument based on the Modbus Communication ProtocolAbstract: OPC (OLE for Process Control) i
5、s a process control hardware and software based on Windows platform between the application program and the communication channel, it has become a modern industrial automation and control standards, by the vast number of manufacturers and users to accept. The communication protocol of Modbus is moni
6、toring system automation equipment, communications standards, the Modbus can be message transmission in Internet. With the Modbus technology and OPC technology development, as well as in the industrial field play an increasing role, based on the Modbus OPC data access server becomes an important pro
7、blem.This topic in the Modbus agreement and the OPC standard foundation, described in detail based on the communication protocol of Modbus OPC server principle and development process. Discusses the advantages of OPC technology; OPC transmission for three methods - synchronous access, asynchronous a
8、ccess, subscribe to realize the key technology in the process of server; and the realization of the key technology.Key words: Communication protocol of Modbus; OPC server; COM; Intelligent instrument1 绪论1.1 课题的选题背景及意义计算机在当今工业自动化控制领域中发挥着日益不可替代的作用,工业控制领域中各种智能仪表都提供了和计算机的通信协议13。微电子技术和计算机技术的不断发展,引起了仪表结构的
9、根本性变革,以微型计算机(单片机)为主体,将计算机技术和检测技术有机的结合,组成新一代“智能化仪表”,在测量过程自动化、测量数据处理及功能多样化方面与传统仪表的常规测量电路相比较,取得了巨大进展。智能仪表不仅能解决传统仪表不易或不能解决的问题,还能简化仪表电路,提高仪表的可靠性,更容易实现高精度、高性能、多功能的目的。随着科学技术的进一步发展,仪表的智能化程度将越来越高。智能仪表和智能传感器一般是用在现场总线系统中,这种仪表和传感器内部嵌入的有通信模块和控制模块,可以完成数据采集,数据处理和数据通信功能。使计算机控制系统成为最为方便的自动控制方法。但是在OPC出现之前,工业领域中用到的很多现场
10、设备都存在上层软件和下层硬件不一致性的问题45,对于不同厂商开发的不同设备都必须开发对应的驱动程序如图1-1,这样造成了极大的资源浪费和设备运用的局限性。而OPC出现之后的状况则完全改变如图1-2。OPC采用客户机-服务器结构,基于COM和DCOM技术为软硬件开发商提供了一套标准的接口。软硬件开发商只用编写一套接口程序就可以满足需要,大大的节约了成本68。因此,OPC技术在几年内飞速发展并得到国际自动化领域厂商的广泛支持,各种OPC相关的产品也研发了出来,而设计一款基于Modbus通信协议的OPC服务器这个课题也就应运而生。应用程序A应用程序B驱动器A驱动器B驱动器C设备A设备B设备C图1-1
11、 OPC技术出现之前应用程序A应用程序BOPC服务器设备AOPC服务器设备BOPC服务器设备COPC客户端OPC客户端图1-2 OPC技术出现之后1.2 OPC技术国内外发展现状OPC是OPC基金会组织制定的一套工业控制领域的开放式标准。它的本质是采用了Microsoft公司的OLE/COM和DCOM技术,它包括自动化应用中使用的有一整套接口、属性和方法的标准9。OPC规范定义了一个工业标准接口,这个标准使得COM技术使用于过程控制和制造自动化等应用领域。OPC建立在OLE规范之上,它为工业控制领域提供了一种公用的数据访问机制,具有语言无关性、代码重用性和易于集成性等优点10。它使厂商不必再为
12、不同的应用需求开发不同的驱动程序,避免了控制系统中同一设备的不同驱动程序同时访问设备时造成的冲突问题。OPC规范以OLE/DCOM为基础,而OLE/DCOM支持TCP/IP等网络协议,所以可以将各个子系统分开,分布于网络的不同节点上。OPC保证了软件对客户的透明性,使得用户完全从低层的开发中脱离出来。不管过程中采用什么软件或设备,OPC为它们提供了公共的接口和以下多种访问机制:(1)客户端和服务器位于同一台计算机上;(2)客户端和服务器位于不同的计算机上;(3)单个客户端和多个服务器通信;(4)多个客户端和单个服务器通信;(5)多个客户端和多个服务器通信11。国外OPC发展迅速,应用也很广泛,
13、众多的厂家研发生产了种类众多的OPC产品,OPC基金会从成立开始会员逐年增加,到目前为止在全球范围内已有300多家公司加入了这个国际标准组织。同时由控制设备厂商和控制软件供应商提供的OPC产品也日益增加,目前已有600种以上的OPC服务器产品和OPC应用程序产品出现在由OPC基金会发行的OPC产品目录上,促成OPC成为工业控制过程国际标准的地位。不过在国内OPC产品开发目前几乎还是空白,只有少数自动化软件和大型硬件厂商实现了OPC客户或OPC服务器功能,市场开拓还处于概念宣传阶段。由于欧美的OPC服务器价格比较昂贵,国内也只有极少数的大型自动化工程购买并应用了OPC产品1213。由于OPC标准
14、的技术优势和发展前景,国内的众多自动化公司已经开始积极探索OPC技术的应用开发。1.3 本课题主要研究内容本课题主要研究的是Modbus通信协议和OPC服务器的相关内容。首先详细论述了Modbus协议的主要内容、历史和现场总线技术,介绍了Modbus数据模型、地址参数表、通信结构及兼容分类。接着分析了OPC的发展现状、COM技术、接口技术,讨论了OPC服务器的同步数据访问和异步数据访问方式,在此基础上对基于Modbus的OPC服务器的开发进行了深入的研究。研究重点是基于Modbus的OPC服务器的设计和实现。各章节主要内容如下:第一章:介绍选题背景和意义以及OPC的发展现状;第二章:Modbu
15、s通信协议的技术历史和基本内容;第三章:OPC服务器的技术规范和数据访问方式;第四章:详细论述基于Modbus的OPC服务器的设计实现;第五章:服务器的实验测试。2 Modbus总线技术2.1 现场总线技术现场总线技术是用于过程自动化、制造自动化等领域的现场智能设备相互通信的网络,它作为工业数字通信网络基础,沟通了生产过程现场及控制设备之间及其与更高控制管理层次之间的联系。它不仅是一个基层网络,而且还是一种开放式、新型全分布控制系统。这项以智能控制、数字通信等技术为主要内容的综合技术,已经受到世界范围的关注,成为自动化技术发展的焦点,并将导致自动化系统结构与设备的深刻变革。2.2 Modbus
16、技术历史Modbus是由Modicon公司在1978年发明的,它拉开了工业网络的序幕,是一个跨时代、里程碑式的网络协议,他是第一个真正永业工业现场的总线协议,全球有超过800万个安装的节点,可见其普及的程度相当高,已经成为事实上的协议标准。它有以下三点成功之处:(1)开放性:用户可以放心的免费使用Modbus协议,不用缴纳费用,不会构成侵权;(2)支持多种电气接口:RS232,RS422、RS485等,可在双绞线、光缆、无线射频等介质上传送;(3)简单易懂:其格式帧是最为简单紧凑的协议,厂商开发简单,用户使用也方便。2.3 Modbus通信协议Modbus是电子控制器应用上的通用语言,通过此协
17、议控制器之间、控制器通过网络和其他控制器之间可以通信。它主要针对单主站和多从站之间的通信规则作出约定,规定数据传输以帧为单位,将报文作为一帧数据,报文是由发送数据、发送地址、控制信息、校验信息按一定格式组成的数据单元。主站发送报文后,所有从站都会接收到报文,但只有主站发送的报文中包含寻址的从站才能执行报文操作,接着将操作结果返回给主站,如果主站发送了错误报文,从站会发送错误报告返回给主站。若主站未收到应答信息或者响应报文,会再次发送报文给从站。Modbus通信协议有两种模式分别为ASC和RTU,数据量小的常用ASC模式,通信数据量大而且是二进制时候用RTU规约。2.3.1 Modbus数据模型
18、Modbus通信协议中,一般采用面向连接的方法,联网时经过建立连接、通信、释放链接三个步骤。在Modbus变量中可通过明确的“变成路径”性能获得,这种性能要求双方按照通信协议直到连接终止。“读写通用寄存器”功能码定义可指定一个32位寄存器地址,用户寄存器起始地址是十进制数表示的1,而不是像很多其他程序一样从0开始。Modbus的数据模型主要基于以下四个表:输入开关量 单个位,由I/O系统提供只读;输出开关量 单个位,通过应用程序可变读写;输入寄存器 16位量,由I/O体统提供只读;输出寄存器 16位量,通过应用程序可变读写。2.3.2 Modbus地址参数表及通信结构Modbus数据模型的基础
19、是一系列区别不同类型参数的地址参数表,主要由以下四个参数表:开关量型输入:来自I/O系统的只读型1位布尔型数据,地址范围10001-1FFFF;开关量型输出:应用程序控制变化的可读可写型布尔型数据,地址范围00001-0FFFF;输入寄存器:来自I/O系统的只读型16位数据,地址范围30001-3FFFF;输出寄存器:由应用程序控制变化的可读可写型16位数据,地址范围40001-4FFFF。Modbus通信结构如图2-1:Modbus客户机串行链路客户机TCP网关Modbus客户机TCPModbus服务器TCPModbus服务器TCPModbus客户机TCP客户机TCP网关Modbus客户机串
20、行链路Modbus客户机串行链路Modbus串行链路Modbus TCP图2-1 Modbus通信结构图2.3.3 Modbus兼容分类Modbus采用兼容分类来避免与已有的系统发生冲突,它定义了0级和1级类,表示已经实现的应用的交易模式,达到兼容旧系统的目的。2级类代表一些特殊的功能应用,此外还通过分类来识别一些已经存在但不易解释实现的交易。0级是所有服务器和客户端都必须实现的最小功能集。读多个寄存器(功能03)写多个寄存器(功能16)1级是常用的附加功能,这些功能被客户端解释为输入输出的开关量和模拟量。读线圈(功能01)读离散量输入(功能02)读输入寄存器(功能04)写线圈(功能05)写单
21、个寄存器(功能06)读异常状态(功能07)2级是一组常规应用于人机接口程序和监控程序中的数据传输功能。写多个线圈(功能15)读文件记录(功能20)写文件记录(功能21)另外,如果过程发生状况,则由从机返回一组例外码,所有例外通过给请求的函数码加0x80来发送信号,就是将最高位置一。例外响应包括不合法的函数,不合法的数据值,不合法的数据地址,不合法的响应长度,从机设备忙,无用的确认,存储奇偶错误,网关路径难以获得,网关目标设备不能响应等。Modbus报文格式如图2-2所示。Modbus TCP应用数据单元MBAP报文头功能码数据协议数据单元图2-2 Modbus报文格式3 OPC技术规范3.1
22、OPC技术历史早期的OPC规范是由5家工业软件制造商组成的OPC小组在1995年开发的,在1996年8月完成了OPC数据访问标准版本1.0。OPC基金会在1996年9月24日在美国达拉斯举行了第一次理事会,并在同年10月7日芝加哥的第一次全体大会上宣告成立。现在的OPC基金会的理事会是由Fisher-Rosement,Honeywell,Interllution,Rockwell,Software,National Instrument以及欧洲代表的Siemens和远东代表的东芝组成的。在日本为响应以美国中心的标准活动,于1996年6月开始基金会成立的准备,于1996年10月17日正式成立了日
23、本的OPC基金会。与此同时欧洲也成立了自己的OPC基金会。中国也由5家公司作为发起人于2001年12月成立了中国OPC促进会。3.2 OPC技术规范OPC基金会制定了各种OPC规范,并且不断地进行升级和更新以便于适应日益变化发展的工业自动化领域。在设计OPC服务器或者相应程序时要按照规范去操作,以保证设备和程序的相互兼容性。OPC规范包含以下几个方面:(1)OPC数据存取规范即数据访问标准;(2)OPC报警与事件规范即报警和事件的标准;(3)OPC历史数据存取规范即历史数据访问标准;(4)OPC批处理规范即批处理的标准;(5)OPC安全规范即安全性的标准;(6)OPC数据交换规范即服务器间数据
24、交换的标准;(7)OPC_XML规范即过程数据的XML标准。3.3 COM技术COM是微软公司倡导的一个制定软件的方法,在COM的构架下可以开发出各式各样的功能专一的组件,然后按照需要将他们结合起来,构成复杂的应用系统。它可以随时为系统升级,只需将原系统中的组件用新的更换掉。一个组件也可以在多个应用系统中重复利用,还可以很方便的将应用系统至于网络之中。COM的体系结构有COM的核心、统一数据传输、智能命名和持久存储。其中COM核心包括服务控制管理员、接口基、接口代理和COM库。其定义了COM对象与客户如何通过二进制标准接口进行交互的标准。COM本身预定义了一套通用接口,用来建立基于客户服务器结
25、构的COM应用。接口是用于部件对象间作用的二进制标准,每个接口都包含了一系列函数,这些函数规定实现接口的对象和用户使用这些对象所遵循的协议,包含接口名、函数名、参数名及其类型。下面简单介绍一下COM组件、COM对象和COM接口。COM组件在windows平台上可以是DLL文件或者EXE文件,组件为COM对象提供了活动空间,一个组件程序可以包含多个COM对象,COM对象用接口的方式提供服务,一个COM对象可以拥有多个COM接口。COM支持的是面向对象的组件模型,COM组件提供给客户端的是以对象形式封闭起来的实体。客户端和COM组件程序交换数据的实体是COM对象,它无需在乎组件模块的名称和位置,但
26、要知道和自己交互的COM对象是哪个,客户程序通过一个COM对象的全局标识符来创建和初始化对象,并不直接访问COM组件。COM接口都是从IUnknown接口派生的,COM接口实现了二进制的内存结构。客户程序用指向接口数据结构的指针来调用接口函数,接口指针又指向另一个指针,这个指针指向虚函数表,虚函数表里面一项由4个字节长的函数指针组成,每一个接口的vtable是确定的,COM接口vtable的前三个指针是QueryInterface、AddRef、Release函数实现的地址,函数指针和对象的具体实现连接。客户只要获得了指针就可以调用到对象的实际功能。图3-1是接口的二进制内存结构:对象实现虚函
27、数表vtablepVtable指针接口pIXQueryinterfaceAddrefReleaseFxQueryinterfaceAddrefReleaseFx指针图3-1 COM接口二进制内存结构COM规范用128位全局唯一标识符GUID来标识COM对象和COM接口,标识的COM对象为CLSID,标识的COM接口为IID。客户程序通过指定的CLSID进行对象的创建和初始化工作,客户程序要使用COM对象的接口,它必须知道该接口的IID和接口成员函数。3.4 OPC服务器数据访问方式OPC数据访问有两种方式:同步访问和异步访问,下面分别介绍。3.4.1 同步数据访问方法调用开始方法调用结束等待处
28、理调用处理空闲空闲OPC应用程序OPC服务器时间时间图3-2 同步数据访问过程同步数据访问过程如图3-2所示,OPC服务器按照OPC客户端的要求把得到的数据访问结果作为方法参数返还给OPC客户端,OPC客户端在结果被返还之前必须处于等待状态。小批量的数据访问使用这个方法比较便捷,对于大批量的数据,就很占用OPC客户端的时间。在OPC数据存取规范中,同步数据访问方法是用IOPCSyncIO接口来实现,IOPCSyncIO接口有两个函数:Read和Write。根据OPC数据访问标准,不同的数据读取方式所需要的数据源有两种:从服务器数据缓冲区读取;二是从硬件设备直接读取。Read同步数据读取可以从数
29、据缓冲区读取或者硬件设备直接读取,从数据缓冲区读取数据时受组和项状态的影响,Write同步写操作是直接向设备写数据。3.4.2 异步数据访问方法调用开始方法调用结束调用异步访问方法等待状态事件发生事件处理结果异步访问完成事件通信空闲空闲OPC应用程序时间时间OPC服务器处理调用图3-3 异步数据访问过程异步数据访问过程如图3-3所示,OPC服务器接收到OPC客户端要求后,检查了参数中的项的服务器句柄是否有效,然后将方法返回,OPC应用程序进行处理。当OPC服务器完成数据访问时,触发OPC应用程序异步访问的完成,将数据结果返回给OPC应用程序。4 Modbus OPC数据访问服务器的实现4.1
30、OPC服务器要求分析本节主要介绍OPC服务器设计实现的主要功能和设计环境以及总体框架,初步构建起OPC服务器设计的基础。4.1.1 OPC服务器结构框架对于现代化生产来说,利用计算机监控系统实时监控现场设备的运行状态和数据对提高生产效率有非常大的帮助,上传来的数据可以作为参考来更改现场设备的运行参数也可快速的查找现场设备的故障原因,而OPC服务器就可以办得到这些。基于Modbus的智能仪表OPC服务器可以实现向下和Modbus从设备的通信,向上可以将实时数据传输到OPC客户端。其结构如下图4-1所示:监控程序和其他上层应用程序OPC客户端(接口)服务器对象组对象项对象客户端Modbus OPC
31、服务器现场设备PLCModbus从设备图4-1 OPC服务器结构框架从现场设备读取回来的数据通过Modbus协议工业以太网以数据帧的形式传到OPC服务器,经过服务器的处理再通过OPC接口上传到OPC客户端,这样就完成了远程监控现场设备运作状态的过程。现在简介一下OPC服务器关键模块管理模块的设计理念。管理模块主要处理通道的定义、标签组、标签和逻辑设备的定义、物理设备向通道和逻辑设备的映射、物理设备数据点与OPC Item的映射关系等方面的设备和数据点的管理功能。OPC服务器接口接收到客户端的请求后也必须利用管理模块提供请求的OPC Item对应的物理设备数据点的信息。其数据点监视功能使通信模块
32、在客户端界面上实现对设备数据点的读写。如图4-2所示,它包含通道定义、Modbus从设备映射、数据点映射、模拟变量变换和数据点在线监视五个模块。管理模块数据点映射模块模拟变量变换模块Modbus从设备映射模块数据点在线监视模块通道定义模块图4-2 管理模块结构通道定义模块是与远程Modbus服务器的连接属性的设置。通道由IP地址、IP端口和连接超时值组成。对于每一个IP地址、IP端口必须定义唯一一个通道,这样连接到网络上的设备就可以利用这些信息连接到确定的唯一的OPC服务器的物理设备。Modbus从设备映射模块主要功能是将物理设备的信息映射到相应的逻辑设备和通道之中。数据点映射模块将设备数据点
33、直接映射为管理模块的标签,而标签包含有的信息有:设备数据点具体的地址、储存区类型、数据类型和读取权限。OPC项代表了到数据源的连接,相当于一个指针,指向它所对应的标签,通过标签的信息完成连接。物理设备中的模拟变量是以整数或者浮点数的形式读出的,可是这些值只是存储区内的一个相对量,模拟变量模块可以将它们经过比例变换成为有意义的物理值,还需要定义物理单位、死区、上溢下溢范围等信息。数据点在线监视模块提供了设备数据点的读取功能,让服务器用户界面可以实现数据点数值的在线读取和写入。4.1.2 OPC服务器需要实现的功能在OPC规范中可以总结出OPC服务器应该实现的几项基本功能,OPC服务器要与客户端实
34、现连接,数据传输必须要有这些功能。首先OPC服务器要在客户端需要的时候提供本地连接,以便于客户端需要连接OPC服务器的时候,OPC服务器能够被找到,能够给客户端提供必要的接口。同时需要OPC服务器支持Modbus通信协议,不需要任何额外的驱动程序,在和Modbus从设备通信的时候不需要为每个通信设备提供不同的驱动程序;然后OPC服务器需要提供IOPCServer、IOPCItemMgt、IOPCCGroupStateMgt、IOPCSyncIO等接口的实现,只有实现了这些接口,客户端才能够通过该接口实现添加删除服务器的组对象,对组对象进行管理。而且无论是本机还是远程客户端都能访问服务器,支持了
35、远程启动,即使服务器不在运行状态,只要有客户端访问服务器,服务器能够自行启动。下面是OPC服务器的几个基本概念:(1)设备:指连接到OPC服务器的硬件设施(如PLC),对于Modbus OPC服务器来说,设备是指Modicon或者其他第三方Modbus兼容硬件。设备包含事务处理超时时间、连接类型等信息;(2)通道:通道为OPC服务器提供连接到硬件设备的物理连接的信息;(3)标签组:提供一种将标签成组的方法,用于生成地址空间的。标签组可以让浏览标签的客户端分层次的仔细查看标签;(4)标签:标签用于在OPC服务器中映射目标硬件数据点。它的名称可以取代PLC的以数字表示的寄存器。4.2 OPC服务器
36、开发步骤(1)定义OPC数据服务器的名称和类标识,然后根据规范对各个接口ID进行定义;(2)实现OPC数据服务器类厂对象,创建OPC服务器对象;(3)设计OPC对象。首先通过继承IUnknown类派生出OPCServer,OPCGroup和OPCItem 3个类,分别对应OPC服务器对象,组对象和项对象,并重载IUnknown类中的接口查询和引用计数函数。然后将OPC基金会网站上提供的相应的头文件添加到工程中,通过继承这些接口派生出新的接口类实现每个接口的成员函数。在OPCServer和OPCGroup类中增加指向相应接口类的指针成员变量,接着修改接口查询函数。当客户程序查询某一接口时,实例化
37、接口类,并返回接口指针变量,客户程序再通过该接口指针进一步调用接口成员函数;(4)数据存储区的设计。由于OPC服务器要对底层硬件进行读写操作,又要通过OPC接口与客户程序进行交互,所以对数据存储区的操作需要采用多线程模型,以保证数据存取的效率。为避免不同线程同时对数据区中的数据进行操作,须考虑对临界区的互斥控制;(5)界面设计。可以设计类似Windows中资源管理器的用户界面,将各数据项用树型结构表示然后设计数据项和硬件的设置界面,并与数据存储区和硬件接口联系起来,实现相应的组态功能。在OPC服务器程序关闭时,需要将数据项的属性以及硬件设置参数作为组态文件保存起来,而在程序运行时能自动调入组态
38、文件完成初始设置;(6)根据硬件的种类和特性,自行开发驱动程序,或者调用硬件厂商提供的I/ODLL实现对现场设备进行设置以及数据存取的功能;(7)获取OPC标准组件并在服务器上注册,然后利用OPC客户端程序连接OPC服务器进行测试。4.3 服务器组和项属性实现每个组有两个I/O接口:同步和异步接口。每个接口有读、写两种函数。同步函数在执行I/O操作时,会阻塞当前进程。同步读函数可以指定是读缓存还是读设备,过程如下:读缓存用于服务器立即得到最近的数据,而不执行一个较慢的I/O操作。如果项是不活动的,则返回一个坏的品质。读设备强迫服务器从所连的设备读取数据。因为这种方法较慢,它通常作诊断用。同步写
39、函数总是把数据写到设备上,返回完成状态给OPC客户。同步读写函数独立于数据连接通知。异步函数包括读、写、刷新和取消。像同步读写函数一样,异步读写函数也可以操作多个项不同的是异步函数请求动作,并且立即返回。一个独立的线程按照先后顺序处理这些操作,操作结果按请求登记顺序通过连接点通知OPC客户。读函数引起所有的请求数据返回,这个函数是独立于变化驱动通知的。异步写函数通过连接点返回给OPC客户的是I/O函数操作完后的状态。异步刷新函数仅仅影响变化驱动通知,刷新函数本质上强行更新指定项,而不管最近的改变是否通知了OPC客户。返回给OPC客户的是最近的值。品质是OPC数据必要的选项,服务器用品质来表示数
40、据不可靠或坏的。句柄是组和项的一个属性。组和项都有客户句柄和服务器句柄,客户句柄被OPC客户分配与一个对象关联,服务器在相关操作中返回这个句柄,通过句柄来识别这个对象。例如,当数据返回时,组的句柄在结构的头部,项的句柄与数据相关。OPC客户通过这种风格来分配句柄使自己工作更有效率。句柄是一个普通的数据结构、一个索引或偏移量,服务器通过句柄来联系项。OPC客户在任何操作中,通过传送句柄来向服务器表示项。服务器也采用 OPC客户一样的方法来分配句柄。4.4 服务器与客户端传送机制OPC规范发展到目前为止,针对服务器与客户端的数据传送共提出了两种方法,分别是异步数据通报和连接点方式。其中异步数据通报
41、方式应用于符合OPC规范1.0版本要求的服务器中,连接点方式用于符合OPC规范2.0版本要求的服务器中。OPC服务器与客户端数据传送机制是整个OPC服务器开发过程中的关键技术,下面对这两种数据传递方式分别进行讨论。4.4.1 服务器与客户端异步通报方式传送机制通过异步通报方式传送数据时,客户端需要实现IAdviseSink接口,服务器端需要实现IDataObject接口。IAdviseSink接口和IDataObject接口都由COM库定义。IAdviseSink接口用于接收异步通报。异步报有3种类型:复合文档、数据变化和视区变化IAdviseSink的实现者可以根据实际需要让IAdvieSi
42、nk接收一种或多种类型的异步通报,IAdvieSink的每一种方法是对应于一种特定通报的回函数。当触发异步通报发送的条件满足后,发送报的程序调用合适的IAdviseSink方法。IDataObject接口它用于处理数据变化通报,因而只实现了IDataObject的DAdvise方法和DUnadvise方法。DAdvise函数用于建立双向通信机制,客户程序调用此函数,以便在客户程序的通报接收器和对象之间建立一个通报连接,以后当对象中的据发生变化时,它可以通知客户程序的接收器DUnadvise函数用于取消通报连接。下面简单介绍下一步操作流程:在OPC中,数据传输是以组为单位进行的在实现异步操作前,
43、客户和服务器之间必须以组为单位建立连接,这个连接是由客户调用服务器的IDataObject接口中的 DAdvise函数建立的。建立好后,在服务器方将保存客户的IAdviseSink接口当需要传输数据时,就使用客户方的IAdviseSin接口向客户传输数据。具体的连接流程:(1)OPC客户调用CoCreateInstance函数创建服务器对象,获得其接口指针,客户就可以利用该指针直接调用接口成员函数。在服务器端为客户生成一个OPCServer对象;(2)用户调用服务器实现的IOPCServer:Ad2dGroup()函数添加组;(3)客户调用服务器实现的IOPCSeEver:Ad2dltem()
44、函数添加项;(4)客户生成一个IAdviseSink对象;(5)客户调用服务器端实现的DAdvise函数,与服务器建立连接。服务器在OPCGroup对象中保存客户的IAdviseSink对象和数据格式;(6)客户调用服务器IOPCASyncIO发出读/写操作,服务器给相应组和项做异步读/写标记;(7)服务器向通道发送命令,等待命令返回;(8)服务器接收通道的读/写结果,给与通道对应的OPC项置读/写完成标记;(9)服务器中建有定时器,该定时器定时扫描OPC项的异步操作标记当发现标记为完成时,调用IOPCDataObject中保存的客户的IAdviseSink对象的OnDataChange函数,
45、把项的数据传输给客户,然后给项的标记复位客户在OnDataChange 函数中,按照约定的数据格式,获得异步操作的结果。4.4.2 服务器与客户端连接点方式传送机制一般情况下,服务器组件提供的接口都是入接口,即组件处于被动状态,等待客户的请求、然后做出相应的反应。这样的结构常常不能满足实际的要求,组件对象也要主动的与客户进行通信,所以这就要求对象能够提供出接口。如果一个COM对象支持一个或者多个出接口,我们就称这样的对象为可连接对象。可连接对象管理所有的出接口。对应每一个出接口,可连接对象管理了一个称为连接点的对象,客户通过连接点对象建立接收器与可连接对象的连接。图4-3就是连接点机制的具体描
46、述:客户可连接对象接收器(客户)客户端把接收器的接口指针传给对象可连接对象调用接收器的接口成员IUnknown图4-3 连接点机制结构描述如果客户要使用连接点,接收器对象中就必须实现IUnknown接口和服务器的输出接口。客户程序开始运行后,通过可连接对象接口查询自己的接口指针,若OPC服务器提供了该接口的实现,那么客户就调用该接口的Advise方法,把在接收器中实现的IUnknown接口指针传送给服务器。服务器接着获得输出接口的指针。所以服务器需要向客户端发送数据的时候就可以调用输出接口的方法。4.5 OPC对象和接口OPC对象是OPC服务器程序与客户程序进行交互的部分,需要与数据存储区和硬件驱动部分相联系,以便获取数据区中的数据或直接访问硬件设备。实施步骤分为以下几个部分:(1)继承OPC规范中定义的OPCServer类OPCGroup类和OPCItem类,实现其接口成员函数。首先从OPC基金会定义的组对象接口派生出新的接口类并实现其成员函数的功能,然后增加指针成员变量指向这些接口类。最后在组对象的接口查询函数中增加实例化接口类的代码。OPC项表示了与数据源的连接,数据源可以是程序数据区中的数据项,也可以是某个硬件设备中的数据。OPC项没有自己的接口,无需实现任何接