VB编写OPC客户端程序

上传人:z**** 文档编号:127269551 上传时间:2022-07-29 格式:DOCX 页数:5 大小:16.35KB
收藏 版权申诉 举报 下载
VB编写OPC客户端程序_第1页
第1页 / 共5页
VB编写OPC客户端程序_第2页
第2页 / 共5页
VB编写OPC客户端程序_第3页
第3页 / 共5页
资源描述:

《VB编写OPC客户端程序》由会员分享,可在线阅读,更多相关《VB编写OPC客户端程序(5页珍藏版)》请在装配图网上搜索。

1、如何用VB编写OPC客户端程序一、引言在工业自动化领域,计算机早已成为必不可少的工具,计算机技术的不断发展,大大加速了工业自动化技术的进步,而各种各样的工业控制应用软件正是具体实现这一进程的最重要的工具。以往,应用软件开发商要为每一种硬件开发驱动程序,由于硬件的种类繁多,特征各异,软件开发商的负担异常繁重,尤其是如果硬件特征发生了变化,整个应用软件相应的驱动程序也要相应地修改,这对软件开发商,对整个工程都是很不利的。而且由于驱动程序的不统一,不同应用程序访问同一硬件设备时常常发生冲突。OPC(OLEforProcessControl)技术标准正是在这种情况下产生的。OPC基于微软的OLE、CO

2、M和DCOM技术,而且它本身就是一种特殊的COM,也正因为有微软的参与,以及以已经成熟的技术为基础,它比一般的工业标准制定的效率更高,它从开始制定到第一个可运行的规范开始运行,只用了不到一年的时间。二、OPC原理及应用OPC技术为工业自动化软件面向对象的开发提供了统一的标准。它大大减轻了软件开发商的负担,软件开发商不必再为每一硬件单独编写驱动程序,只要硬件的特征符合统一的OPC接口程序标准,或者硬件生产商提供OPC服务器,如图一所示,不同的应用软件开发商都可以采用OPC标准设计工控软件,以标准规定的统一接口通过OPC服务器存取现场数据。这样,当现场设备发生变化或系统中加入新设备时,OPC服务器

3、的提供商需要重新实现服务器接口,以适应硬件的变化,但由于服务器所提供的接口的一致性,工控软件不作更改即可继续使用,只是某些情况下可能需要重新组态(如添加新的PLC站点等),这样,软件开发商可以节省大量的时间致力于工控软件的性能方面的提高,不必再考虑硬件变化带来的影响,大大减小了软件维护的工作量。这正如OPC规范里所说,OPC将应用软件和硬件设备划清了界限。2.1OPC基本结构OPC服务器有两类接口:定制接口(CustomInterface)、自动化接口(AutomationInterface),定制接口比较低级,它提供更多的功能,效率也比后者高,可以用C+语言调用此类接口,自动化接口主要用于V

4、B、DELPHI等开发工具。按照OPC规范,定制接口是服务商必须提供的,而自动化接口则是可选的,不过,OPC基金会(管理OPC标准的国际组织)提供了一个叫做“自动化包装器”的动态连接库,用于在两者间转换。如图二所示:在OPC的早期规范里主要包括OPC数据存取规范、OPC报警和事件、OPC历史数据存取规范。OPC数据存取规范详细规定了客户程序和服务器程序进行数据通信的机制,其它类型的OPC服务器往往是在数据存取服务器的基础上通过增加对象、扩展接口而来的,所以该规范也是其它OPC规范的基础。OPC数据存取规范规定的基本对象有三类:OPCServer、OPCGroup和OPCItem,OPCServ

5、er包含服务器的所有信息,也是OPCGroup的容器,OPCGroup除了包含它自身信息外,还负责管理OPCItem。它们的结构如图三所示。每一个OPCItem代表到数据源的一个连接,但它没有提供外部接口,客户端程序无法对OPCItem直接进行操作,应用程序必须依靠OPCItem的容器OPCGroup来对它进行操作,这在下面的程序中会有具体说明。2.2OPC数据访问方式OPC客户程序对OPC服务器中数据的存取方式分为同步读写方式和异步读写方式。客户程序可按照一定的周期调用OPCGroup对象的IOPCSyncIO接口对服务器程序进行数据同步存取操作,此时客户方的调用函数一直运行到所有数据读写完

6、成,然后才能执行其它操作,因此,这种方法适合与读取少量数据,如果数据多的话,会使系统处于假死状态,无法进行操作。IOPCSynclO2是从3.0版才出现的,是对IOPCSynclO的增强。IOPCAsynclO2和IOPCAsyncIO3是异步方式中使用的接口,异步访问时,当客户端对服务器提出访问要求后,立即返回到OPC应用程序执行其它操作,无须等待,当OPC服务器完成数据读取后通知OPC应用程序,应用程序从而得到数据。其中前者是在2.0版本中新定义的,具有较高的通信性能;后者则是在3.0版本中才刚刚出现,同IOPCSyncIO2类似,IOPCAsynclO3是对IOPCAsynclO2的增强

7、。在异步方式下,服务器程序收到读请求后,调用客户程序方的lOPCDataCallback接口,将数据发送给客户程序。异步方式中允许服务器将读写操作进行排队,使客户方的调用函数可立刻返回,当服务器读写操作完成后再通知客户程序。显然,异步通报方式的通信效率更高,这种方式也是本文所要讨论的方式,但有多个客户程序与服务器相连时,同步读写方式更具时效性。对于每个组对象,客户程序可根据需要采用其中一种数据存取方式,而不能两者都使用。异步读取还有一种特殊的方式,叫做订阅方式(Subscribe)这种情况下,应用程序不需要发出读请求,OPC服务器在定期更新数据的时候,如果发现数据有一定变化,则自动向应用程序发

8、出通知和传输变化的数据。2.3编写OPC客户端应用程序VB简单实用,是比较理想的OPC应用程序快速开发工具,若要用VB开发OPC应用程序,必须要使用OPC自动化包装器,这在前文已经提过,这种包装器一般由OPC服务器的供应商以DLL形式提供,下面就以SIEMENS提供的sopcdaauto.dll为例,介绍如何开发OPC应用程序,这也正是笔者在最近的工程中实际应用到的,这是基于DA2.0的版本。首先,新建VB工程后,作图四所示的引用:2.3.1建立OPC对象首先申明OPC对象:OptionBase1DimWithEventsServerObjAsOPCServerOPCServer对象,连接OP

9、C服务器DimGroupsObjAsOPCGroupsOPCGroups对象,添加OPC组DimWithEventsGroupObjAsOPCGroupOPCGroup对象DimItemsObjAsOPCItemsDimServerHandles()AsLongDimClientHandles()asLongOPCItem集合服务器端OPCItem的句柄客户端OPCItem的句柄Dimltemld(2)AsStringDimErrors()AsLong接下来,生成各个对象:IfServerObjIsNothingThenSetServerObj=NewOPCServer连接OPC服务器IfSe

10、rverObj.ServerState=OPCDisconnectedThenServerObj.Connect(OPC.SimaticNET)假设OPC服务器运行在本机EndIfIfGroupsObjIsNothingThenSetGroupsObj=ServerObj.OPCGroupsIfGroupObjIsNothingThenSetGroupObj=GroupsObj.AddIfItemsObjIsNothingThenSetItemsObj=GroupObj.OPCItemsGroupObj.IsActive=True设置组为活动状态假设有两个数据源,一个是8位开关量输入,一个是8

11、位开关量输出ItemId(1)=S7:S7connection_1IB0ItemId(2)=S7:S7connection_1QB0ClientHandles(1)=1ClientHandles(2)=2添加组项目,ServerHandles数组的值为各个OPCItem的服务器句柄,ClientHandles数组的值为各个OPCItem的客户端句柄,由应用程序设定CallltemsObj.Addltems(2,Itemld,ClientHandles,ServerHandles.Errors)232异步数据读取OPCItem的服务器句柄,添加OPCItem时由服务器分配DimTempServe

12、rHandles(1)AsLong事务标志符,由客户端产生,它包含的信息提供给OnReadComplete事件DimTransactionlDAsLong取消标志符,服务器端产生,用于操作需要被取消的时候DimCancelIDAsLong包含读取每个OPCItem时返回的信息DimErrorNr()AsLongTempServerHandles(1)=ServerHandles(1)对应第一个OPCItemGroupObj.AsyncRead1,TempServerHandles,ErrorNr,TransactionID,CancelID第一个参数是要读的OPCItem的个数,这里只含有一个

13、OPCItem。读取的结果由OPC服务器通过IconnectionPointContainer接口配合IOPCDataCallback接口反调用应用程序的事务处理程序:PrivateSubGroupObj_AsyncReadComplete(ByValTransactionsAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate,Errors()AsLong)这里的参数ClientHandles和AddItems方法中的ClientHa

14、ndles是对应的,用于判断哪一个OPCItem在被读取。其它参数的说明如下:TransactionID:客户端自由使用,应用程序开发商自定义;NumItems:表示读取的OPCItem的个数;ItemValues():各个OPCItem连接的数据源的值,类型为Variant;Qualities():OPCItem的品质值;TimeStamps():时间戳;Errors():记录服务器返回的信息。233异步数据写入DimTempServerHandles(1)AsLongDimVValue(1)AsVariantDimErrorNr()AsLongDimTransactionlDAsLongD

15、imCancellDAsLongTempServerHandles(1)=ServerHandles(2)VValue(1)=1假设要将“1”写入ClientHandle为2的OPCItemGroupObj.AsyncWrite1,TempServerHandles,VValue,ErrorNr,TransactionID,CancelID同样,AsyncWrite也对应一个事务处理程序:PrivateSubgroupObj_AsyncWriteComplete(ByValTransactionlDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong

16、,Errors()AsLong)它的参数的含义和AsuncReadComplete中的含义是类似的,这里一般需要处理的是写数据之后的返回状态,这里不再赘述。234断开与服务器的连接ItemsObj.RemoveItemsObj.Count,ServerHandles,Errors清除OPCItemSetItemsObj=Nothing释放资源,下同IfNotGroupObjIsNothingThenGroupsObj.RemoveGroupObj.ServerHandle删除组EndIfIfNotGroupsObjIsNothingThenSetGroupsObj=NothingEndIfIfNotServerObjIsNothingThenIfServerObj.ServerStateOPCDisconnectedThenServerObj.Disconnect断开与服务器的连接EndIfSetServerObj=NothingEndIf三、结束语由于OPC技术的不断发展,现场设备与系统软件的连接越来越方便和灵活,应用程序的制作和升级也越来越简单。正是因为OPC显著的优越性,越来越多的工业硬件制造商开始支持OPC,近年来,除了以前的一些知名大公司,如ABB、西门子等,又有许多公司加入了OPC基金会,随着OPC规范的广泛使用,整个自动化领域必将得到更快的发展。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!