VB编写OPC客户端程序

上传人:无*** 文档编号:147804727 上传时间:2022-09-03 格式:PDF 页数:6 大小:180.14KB
返回 下载 相关 举报
VB编写OPC客户端程序_第1页
第1页 / 共6页
VB编写OPC客户端程序_第2页
第2页 / 共6页
VB编写OPC客户端程序_第3页
第3页 / 共6页
点击查看更多>>
资源描述
如何用 VB 编写 OPC 客户端程序一、引言在工业自动化领域,计算机早已成为必不可少的工具,计算机技术的不断发展,大大加速了工业自动化技术的进步,而各种各样的工业控制应用软件正就是具体实现这一进程的最重要的工具。以往,应用软件开发商要为每一种硬件开发驱动程序,由丁硬件的种类繁多,特征各异,软件开发商的负担异常繁重,尤其就是如果硬件特征发生了变化,整个应用软件相应的驱动程序也要相应地修改,这对软件开发商,对整个工程都就是很不利的。而且由丁驱动程序的不统一,不同应用程序访问同一硬件设备时常常发生 冲突。OPC(OLE for Process Control)技术标准正就是在这种情况下产生的。OPC 基丁微软的 OLE、COM 与 DCOM 技术,而且它本身就就是一种特殊的 COM,也正因为有微软的参与,以及以已经成熟的技术为基础,它比一般的工业标准制定的效率更高,它从开始制定到第一个可运行的规范开始运行,只用了不 到一年的时间。二、OPC 原理及应用OPC 技术为工业自动化软件面向对象的开发提供了统一的标准。它大大减轻了 软件开发商的负担,软件开发商不必再为每一硬件单独编写驱动程序,只要硬件的特征符合统一的 OPC 接口程序标准,或者硬件生产商提供 OPC 服务器,如图 一所示,不同的应用软件开发商都可以采用 OPC 标准设计工控软件,以标准规定 的统一接口通过 OPC 服务器存取现场数据。这样,当现场设备发生变化或系统中加入新设备时,OPC 服务器的提供商需要重 新实现服务器接口,以适应硬件的变化,但由丁服务器所提供的接口的一致性,工控软件不作更改即可继续使用,只就是某些情况下可能需要重新组态(如添加新 的 PLC 站点等),这样,软件开发商可以节省大量的时间致力丁工控软件的性能 方面的提高,不必再考虑硬件变化带来的影响,大大减小了软件维护的工作量。这 正如 OPC 规范里所说,OPC 将应用软件与硬件设备划活了界限。2、1 OPC 基本结构OPC 服务器有两类接口:定制接口(Custom Interface)、自动化接口(AutomationInterface),定制接口比较低级,它提供更多的功能,效率也比后者高,可以用 C+语言调用此类接口,自动化接口主要用丁 VB、DELPHI 等开发工具。按照 OPC 规范,定制接口就是服务商必须提供的,而自动化接口则就是可选的,不过,OPC 基金会(管理 OPC 标准的国际组织)提供了一个叫做“自动化包装器”的动态连 接库,用丁在两者问转换。如图二所示:在 OPC 的早期规范里主要包括 OPC 数据存取规范、OPC 报警与事件、OPC 历史数据存取规范。OPC 数据存取规范详细规定了客户程序与服务器程序进行 数据通信的机制,其它类型的 OPC 服务器往往就是在数据存取服务器的基础上 通过增加对象、扩展接口而来的,所以该规范也就是其它 OPC 规范的基础。OPC 数据存取规范规定的基本对象有三类:OPC Server、OPC Group 与 OPC Item,OPC Server 包含服务器的所有信息,也就是 OPC Group的容器,OPC Group除了包含它自身信息外,还负责管理 OPC Item。它们的结构如图三所示。每一个 OPC Item 代表到数据源的一个连接,但它没有提供外部接口,客户端程 序无法对 OPC Item直接进行操作,应用程序必须依靠 OPC Item的容器 OPC Group来对它进行操作,这在下面的程序中会有具体说明。2、2 OPC 数据访问方式OPC 客户程序对 OPC 服务器中数据的存取方式分为同步读写方式与异步读写 方式。客户程序可按照一定的周期调用 OPC Group对象的 IOPCSyncIO 接口对 服务器程序进行数据同步存取操作,此时客户方的调用函数一直运行到所有数据 读写完成,然后才能执行其它操作,因此,这种方法适合与读取少量数据,如果数据多的话,会使系统处丁假死状态,无法进行操作。IOPCSyncIO2 就是从 3、0 版才出现的,就是对IOPCSyncIO 的增强。IOPCAsyncIO2 与 IOPCAsyncIO3 就是异步方式中使用的接口,异步访问时,当客户端对服务器提出访问要求后,立 即返回到 OPC 应用程序执行其它操作,无须等待,当 OPC 服务器完成数据读取 后通知 OPC 应用程序,应用程序从而得到数据。其中前者就是在 2、0 版本中新 定义的,具有较高的通信性能;后者则就是在 3、0 版本中才刚刚出现,同 IOPCSyncIO2 类似,IOPCAsyncIO3 就是对IOPCAsyncIO2 的增强。在异步方 式下,服务器程序收到读请求后,调用客户程序方的 IOPCDataCallback 接口,将 数据发送给客户程序。异步方式中允许服务器将读写操作进行排队,使客户方的调用函数可立刻返回,当服务器读写操作完成后再通知客户程序。显然,异步通报方式的通信效率更高,这种方式也就是本文所要讨论的方式,但有多个客户程序与服务器相连时,同步读写方式更具时效性。对丁每个组对象,客户程序可根据需要采用其中一种数据存取方式,而不能两者都使用。异步读取还有一种特殊的方式,叫做订阅方式(Subscribe)这种情况下,应用程序 不需要发出读请求,OPC 服务器在定期更新数据的时候,如果发现数据有一定变 化,则自动向应用程序发出通知与传输变化的数据。2、3 编写 OPC 客户端应用程序VB 简单实用,就是比较理想的 OPC 应用程序快速开发工具,若要用 VB 开发 OPC应用程序,必须要使用 OPC 自动化包装器,这在前文已经提过,这种包装器 一般由OPC 服务器的供应商以 DLL 形式提供,下面就以 SIEMENS 提供的sopcdaauto、dll 为例,介绍如何开发 OPC 应用程序,这也正就是笔者在最近的工 程中实际应用到的,这就是基丁 DA2、0 的版本。首先,新建 VB 工程后,作图四所示的引用:2、3、1 建立 OPC 对象首先申明 OPC 对象:Option Base 1Dim WithEvents ServerObj As OPCServer OPC Server 对象,连接 OPC 服务器Dim GroupsObj As OPCGroups OPC Groups 对象,添加 OPC 组Dim WithEvents GroupObj As OPCGroup OPC Group 对象Dim ItemsObj As OPCItemsDim ServerHandles()As LongDim ClientHandles()as LongDim ItemId(2)As StringDim Errors()As Long接下来,生成各个对象:If ServerObj Is Nothing Then Set ServerObj=New OPCServer连接 OPC 服务器If ServerObj、ServerState=OPCDisconnected ThenServerObj、Connect(OPC、SimaticNET)假设 OPC 服务器运行在本机End IfIf GroupsObj Is Nothing Then Set GroupsObj=ServerObj、OPCGroupsIf GroupObj Is Nothing Then Set GroupObj=GroupsObj、AddIf ItemsObj Is Nothing Then Set ItemsObj=GroupObj、OPCItemsGroupObj、IsActive=True 设置组为活动状态假设有两个数据源,一个就是 8 位开关量输入,一个就是 8 位开关量输出ItemId(1)=S7:S7 connection_1 IB0ItemId(2)=S7:S7 connection_1QB0ClientHandles(1)=1ClientHandles(2)=2添加组项目,ServerHandles 数组的值为各个 OPC Item 的服务器句柄,ClientHandles 数组的值为各个 OPC Item 的客户端句柄,由应用程序设定Call ItemsObj、AddItems(2,ItemId,ClientHandles,ServerHandles,Errors)2、3、2 异步数据读取OPC Item 集合,服务器端 OPC Item 的句柄客户端 OPC Item 的句柄OPC Item 的服务器句柄,添加 OPC Item 时由服务器分配Dim TempServerHandles(l)As Long事务标志符,由客户端产生,它包含的信息提供给 OnReadComplete 事件Dim TransactionlD As Long取消标志符,服务器端产生,用丁操作需要被取消的时候Dim CancellD As Long包含读取每个 OPC Item 时返回的信息Dim ErrorNr()As LongTempServerHandles(1)=ServerHandles(l)对应第一个 OPC ItemGroupObj、AsyncRead 1,TempServerHandles,ErrorNr,TransactionID,CancelID第一个参数就是要读的 OPC Item 的个数,这里只含有一个 OPC Item。读取的结果由 OPC 服务器通过 IconnectionPointContainer 接口配合IOPCDataCallback 接口反调用应用程序的事务处理程序:Private Sub GroupObj_AsyncReadComplete(ByVal TransactionID As Long,ByVal NumItems As Long,ClientHandles()As Long,ItemValues()As Variant,Qualities()As Long,TimeStamps()As Date,Errors()As Long)这里的参数 ClientHandles 与 AddItems 方法中的 ClientHandles 就是对应的,用判断哪一个 OPC Item 在被读取。其它参数的说明如下:TransactionID:客户端自由使用,应用程序开发商自定义;NumItems:表示读取的 OPC Item 的个数;ItemValues():各个 OPC Item 连接的数据源的值,类型为 Variant;Qualities():OPC Item 的品质值;TimeStamps():时间戳;Errors():记录服务器返回的信息。2、3、3 异步数据写入Dim TempServerHandles(1)As LongDim VValue(1)As VariantDim ErrorNr()As LongDim TransactionID As LongDim CancelID As Long丁TempServerHandles(1)=ServerHandles(2)VValue(1)=1假设要将“1”写入 ClientHandle 为 2 的 OPC Item GroupObj、AsyncWrite 1,TempServerHandles,VValue,ErrorNr,TransactionID,CancelID同样,AsyncWrite 也对应一个事务处理程序:Private Sub groupObj_AsyncWriteComplete(ByVal TransactionID As Long,ByValNumItems As Long,ClientHandles()As Long,Errors()As Long)它的参数的含义与 AsuncReadComplete 中的含义就是类似的,这里一般需要处 理的就是写数据之后的返回状态,这里不再赘述。2、3、4 断开与服务器的连接ItemsObj、Remove ItemsObj、Count,ServerHandles,Errors 清除清除 OPC ItemSet ItemsObj=Nothing 释放资源,下同If Not GroupObj Is Nothing ThenGroupsObj、Remove GroupObj、ServerHandle 删除组删除组End IfIf Not GroupsObj Is Nothing ThenSet GroupsObj=NothingEnd IfIf Not ServerObj Is Nothing ThenIf ServerObj、ServerState OPCDisconnected ThenServerObj、Disconnect 断开与服务器的连接End IfSet ServerObj=NothingEnd If三、结束语由丁 OPC 技术的不断发展,现场设备与系统软件的连接越来越方便与灵活,应用程序的制作与升级也越来越简单。正就是因为OPC 显著的优越性,越来越多的工业硬件制造商开始支持 OPC,近年来,除了以前的一些知名大公司,如 ABB、西门子等,乂有许多公司加入了 OPC 基金会,随着 OPC 规范的广泛使用,整个自 动化领域必将得到更快的发展。VB 编写 OPCg 户端程序
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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