OPCDAAUTO.DLL 文件下载位置 (OPCDAAuto.dll下载)

槑孖罘槑

宣布于:2010-06-1315:43:127楼如何用VB编写OPC客户端程序一、引言在工业智能化畛域,计算机早已成为必无法少的工具,计算机技术的不时开展,大大减速了工业智能化技术的提高,而各种各样的工业控制运行软件正是详细成功这一进程的最关键的工具。以往,运行软件开发商要为每一种配件开发驱动程序,由于配件的种类单一,特色各异,软件开发商的累赘意外惨重,尤其是假设配件特色出现了变动,整个运行软件相应的驱动程序也要相应地修正,这对软件开发商,对整个工程都是很不利的。而且由于驱动程序的不一致,不同运行程序访问同一配件设施时经常出现抵触。OPC(OLEforProcessControl)技术规范正是在这种状况下发生的。OPC基于微软的OLE、COM和DCOM技术,而且它自身就是一种不凡的COM,也正由于有微软的介入,以及以曾经成熟的技术为基础,它比普通的工业规范制订的效率更高,它从开局制订到第一个可运转的规范开局运转,只用了不到一年的期间。二、OPC原理及运行OPC技术为工业智能化软件面向对象的开发提供了一致的规范。它大大减轻了软件开发商的累赘,软件开发商不用再为每一配件独自编写驱动程序,只需配件的特色合乎一致的OPC接口程序规范,或许配件消费商提供OPC主机,如图一所示,不同的运行软件开发商都可以驳回OPC规范设计工控软件,以规范规则的一致接口经过OPC主机存取现场数据。运行程序1运行程序2OPC主机AOPC主机BOPC主机C设施A1设施A2设施B1……这样,当现场设施出现变动或系统中参与新设施时,OPC主机的提供商要求从新成功主机接口,以顺应配件的变动,但由于主机所提供的接口的分歧性,工控软件不作更改即可继续经常使用,只是某些状况下或许要求从新组态(如参与新的PLC站点等),这样,软件开发商可以节俭少量的期间努力于工控软件的性能方面的提高,不用再思考配件变动带来的影响,大大减小了软件保养的上班量。这正如OPC规范里所说,OPC将运行软件和配件设施划清了界限。2.1OPC基本结构OPC主机有两类接口:定制接口(CustomInterface)、智能化接口(AutomationInterface),定制接口比拟低级,它提供更多的性能,效率也比后者高,可以用C++言语调用此类接口,智能化接口关键用于VB、DELPHI等开发工具。依照OPC规范,定制接口是服务商必定提供的,而智能化接口则是可选的,不过,OPC基金会(治理OPC规范的国内组织)提供了一个叫做"智能化包装器"的灵活衔接库,用于在两者间转换。如图二所示:OPC定制接口OPC智能化接口OPC智能化包装器C++程序OPC主机VB程序物理设施图二OPC典型结构在OPC的早期规范里关键包括OPC数据存取规范、OPC报警和事情、OPC历史数据存取规范。OPC数据存取规范详细规则了客户程序和主机程序启动数据通讯的机制,其它类型的OPC主机往往是在数据存取主机的基础上经过参与对象、裁减接口而来的,所以该规范也是其它OPC规范的基础。OPC数据存取规范规则的基本对象有三类:OPCServer、OPCGroup和OPCItem,OPCServer蕴含主机的一切消息,也是OPCGroup的容器,OPCGroup除了蕴含它自身消息外,还担任治理OPCItem。它们的结构如图三所示。每一个OPCItem代表到数据源的一个衔接,但它没有提供外部接口,客户端程序无法对OPCItem间接启动操作,运行程序必定依托OPCItem的容器OPCGroup来对它启动操作,这在上方的程序中会有详细说明。IOPCServerIConnectionPointContainerIOPCCommonIOPCBrowseIOPCItemIOIUnknownOPCServerIOPCGroupStateMgtIOPCItemMgtIConnectionPointContainerIOPCItemDeadBandMgtIOPCSyncIOIOPCAsyncIO2IOPCSyncIO2IOPCGroupStateMgt2IOPCAsyncIO3OPCGroupIUnknown图三规范OPCServer和OPCGroup对象(DA3.0版)2.2OPC数据访问方式OPC客户程序对OPC主机中数据的存取方式分为同步读写方式和异步读写方式。客户程序可依照必定的周期调用OPCGroup对象的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工程后,作图四所示的援用:图四VB援用选项的设置2.3.1建设OPC对象首先声明OPC对象:OptionBase1DimWithEventsServerObjAsOPCServer‘OPCServer对象,衔接OPC主机DimGroupsObjAsOPCGroups‘OPCGroups对象,参与OPC组DimWithEventsGroupObjAsOPCGroup‘OPCGroup对象DimItemsObjAsOPCItems‘OPCItem汇合DimServerHandles()AsLong‘主机端OPCItem的句柄DimClientHandles()asLong‘客户端OPCItem的句柄DimItem_Id(2)AsStringDimErrors()AsLong接上去,生成各个对象:IfServerObjIsNothingThenSetServerObj=NewOPCServer‘衔接OPC主机IfServerObj.ServerState=OPCDisconnectedThenServerObj.Connect("OPC.SimaticNET"‘假定OPC主机运转在本机EndIfIfGroupsObjIsNothingThenSetGroupsObj=ServerObj.OPCGroupsIfGroupObjIsNothingThenSetGroupObj=GroupsObj.AddIfItemsObjIsNothingThenSetItemsObj=GroupObj.OPCItemsGroupObj.IsActive=True‘设置组为优惠形态‘假定有两个数据源,一个是8位开关量输入,一个是8位开关量输入Item_Id(1)="S7:[S7connection_1]IB0"Item_Id(2)="S7:[S7connection_1]QB0"ClientHandles(1)=1ClientHandles(2)=2‘参与组名目,ServerHandles数组的值为各个OPCItem的主机句柄,‘ClientHandles数组的值为各个OPCItem的客户端句柄,由运行程序设定CallItemsObj.AddItems(2,Item_Id,ClientHandles,ServerHandles,Errors)2.3.2异步数据读取‘OPCItem的主机句柄,参与OPCItem时由主机调配DimTempServerHandles(1)AsLong‘事务标记符,由客户端发生,它蕴含的消息提供应OnReadComplete事情DimTransactionIDAsLong‘敞开标记符,主机端发生,用于操作要求被敞开的时刻DimCancelIDAsLong‘蕴含读取每个OPCItem时前往的消息DimErrorNr()AsLongTempServerHandles(1)=ServerHandles(1)‘对应第一个OPCItemGroupObj.AsyncRead1,TempServerHandles,ErrorNr,TransactionID,CancelID第一个参数是要读的OPCItem的个数,这里只含有一个OPCItem。读取的结果由OPC主机经过IconnectionPointContainer接口配合IOPCDataCallback接口反调用运行程序的事务处置程序:PrivateSubGroupObj_AsyncReadComplete(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate,Errors()AsLong)这里的参数ClientHandles和AddItems方法中的ClientHandles是对应的,用于判别哪一个OPCItem在被读取。其它参数的说明如下:TransactionID:客户端自在经常使用,运行程序开发商自定义;NumItems:示意读取的OPCItem的个数;ItemValues():各个OPCItem衔接的数据源的值,类型为Variant;Qualities():OPCItem的质量值;TimeStamps():期间戳;Errors():记载主机前往的消息。2.3.3异步数据写入DimTempServerHandles(1)AsLongDimVValue(1)AsVariantDimErrorNr()AsLongDimTransactionIDAsLongDimCancelIDAsLongTempServerHandles(1)=ServerHandles(2)VValue(1)=1‘假定要将"1"写入ClientHandle为2的OPCItemGroupObj.AsyncWrite1,TempServerHandles,VValue,ErrorNr,TransactionID,CancelID雷同,AsyncWrite也对应一个事务处置程序:PrivateSubgroupObj_AsyncWriteComplete(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,Errors()AsLong)它的参数的含意和AsuncReadComplete中的含意是相似的,这里普通要求处置的是写数据之后的前往形态,这里不再赘述。2.3.4断开与主机的衔接ItemsObj.RemoveItemsObj.Count,ServerHandles,Errors‘肃清OPCItemSetItemsObj=Nothing‘监禁资源,下同IfNotGroupObjIsNothingThenGroupsObj.RemoveGroupObj.ServerHandle‘删除组EndIfIfNotGroupsObjIsNothingThenSetGroupsObj=NothingEndIfIfNotServerObjIsNothingThenIfServerObj.ServerState<>OPCDisconnectedThenServerObj.Disconnect‘断开与主机的衔接EndIfSetServerObj=NothingEndIf三、完结语由于OPC技术的不时开展,现场设施与系统软件的衔接越来越繁难和灵敏,运行程序的制造和更新也越来越繁难。正是由于OPC清楚的优越性,越来越多的工业配件制造商开局支持OPC,近年来,除了以前的一些出名大公司,如ABB、西门子等,又有许多公司参与了OPC基金会,随着OPC规范的宽泛经常使用,整个智能化畛域必将获取更快的开展。 回复 援用 投诉

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论