利用visualbasic所开发的opc客户端应用程序主要采用自动化通信接口和opc服务器程序实施通信。而opc基金会提供的opc自动化接口opcdaauto.dll动态链接库集成了所有用于对opc服务器进行访问的对象、属性和方法,为利用visualbasic开发opc客户端应用程序提供了极大方便。程序设计时,opc客户程序应当首先生成opc服务器支持的opc对象,然后再使用opc对象支持的属性和方法,实现对opc服务器的操作和访问。opc数据访问对象主要包括opc服务器(opcserver)、opc组集合(opcgroups)、opc组(opcgroup)、opc标签集合(opcitems)、opc标签(opcitem)、opc浏览器(opcbrowser)等几个部分。程序设计时,要首先在visualbasic环境下选择对opcautomation2.0接口的引用,此时,opc对象会被自动添加到正在开发的工程项目中,然后,再根据需要建立这些对象的实例并利用其属性和方法来实现对opc服务器的访问。对opc服务器的访问主要包括声明opc对象实例、连接opcserver、添加标签变量、读写opc服务器(同步/异步)、断开连接等几个步骤。opc对象实例的声明主要包括对opc服务器、opc组集合、opc组、opc标签集合、opc服务器句柄的声明及程序所需要的其它实例的声明。opc客户端和opcserver的连接主要靠调用opc服务器对象实例的connect方法函数来完成,例如,连接本地计算机dassidirect和rslinxopcserver的代码分别为connect(archestra.dassidirect.1)和connect(rslinxopcserver)连接网络远程计算机(ip地址为10.144.45.45)上dassidirect和rslinxopcserver的代码分别为connect(archestra.dassidirect.1,\10.144.45.45)和connect(rslinxopcserver,\10.144.45.45)需要说明的是当进行远程opc连接时,必须在远程计算机上运行dcomcnfg程序,并启动该计算机opc服务器的dcom服务。标签变量的添加主要由opc标签集合的additems方法函数实现,该函数定义了添加的标签数量、标签变量名(数组)、应用程序句柄(数组)、opc服务器句柄(数组)、错误代码(数组)等方面的信息。例如,为dassidirect和rslinxopc服务器添加标签变量的代码为tagnms(1)=”portcps7.jsbf.db2,x48.0”或者tagnms(1)=”linxlogixtag”my_items.additemsitmnum,tagnms,clienthdls,svrhandles,err其中,my_items为opc标签集合的一个实例。标签变量添加完成后,可通过syncread、syncwrite和asyncread、asyncwrite四个函数实现对opc服务器中相应数据的读写操作。在读写操作完成后,程序将会自动执行syncreadcomplete、syncwritecomplete和asyncread-complete、asyncwritecomple-te等过程,opc客户端应用程序的数据显示、故障诊断等功能可在该段程序代码中实现。此外,在对opc服务器完成读写后,可以调用opc服务器的disconnect方法来断开与相应opc服务器的连接。不过,为了节省系统开支,增加程序稳定性,通常要在断开和opc服务器连接前先移除opc服务器中的opc标签和opc组,并将opc集合对象都置为nothing,然后再执行disconnect操作并将opcserver对象实例置为nothing。在PC上装SIMATICNET软件,先将PC与S7-300/400PLC建立起连接,VB通过OPC方式访问SIMATICNETOPC即可。=4&qu=OPC&pa=dcA0030通过ETHERNET建立SIMATICNETOPC服务器与PLC的S7连接(更新版)一、通过STEP7软件建立一个新项目OPC,在项目中添加SIMATIC300站和一个PC站,其中PLC站中第四个槽安装的CP343模块。PC站的第一个槽为OPCSERVER,第三个槽为IEGENERAL,然后在NETPRO下配置PLC和PC站的网络连接:(注意:是在PC站上新建的网络连接,连接类型选的S7连接)二、通过stationconfigurator软件配置本机的PC站(要和STEP7中配置的相同),然后把PLC和PC站都下载下去(注意:下载PC站的时候要把S7ONLINE(STEP7)---;PCinternal(local))。三、打开OPCScout,(Start;SIMATIC;SIMATICNet;OPCScout),双击“OPCSimaticNet”在随之弹出的“ADDGroup”对话框中输入组名,本例命名为“OPC”。点击OK确认;;双击已添加的连接组(OPC),即弹出“OPCNavigator”对话框,此窗口中显示所有的连接协议。双击“S7”,在PCStation组态NetPro中所建的连接名会被显示(S7connection_1)。双击此连接,即可出现有可能被访问的对象树(objectstree),在PLCCPU中已存在的DB块也会出现以上完成的OPCSERVER部分的配置。四、用VB编写了OPC客户端应用程序。主要程序代码如下:在VB中引在VB中还要引用siemensopcdaautomation2.0(1)连接OPC服务器DimWithEventsMyOPCServerAsOPCServer‘定义服务器对象变量MyOPCServerDimWithEventsMyOPCGroupAsOPCGroup‘定义OPC组对象变量MyOPCGroupSetMyOPCServer=NewOPCServerMyOPCServer.ConnectOPC.SimaticNET‘连接SIMATICNET的OPC服务器(2)添加OPC组对象SetMyOPCGroup=MyOPCServer.OPCGroups.Add(Group1)‘添加OPC组对象MyOPCGroup.IsSubscribed=True‘设置该组数据为后台刷新MyOPCGroup.IsActive=True‘设置该组为激活状态MyOPCGroup.UpdateRate=1000‘设置数据刷新时间为1000(3)添加数据项DimabItemIDs()AsString‘项标识符DimabClientHandles()AsLong‘客户端句柄DimabServerHandles()AsLong‘服务器端句柄DimabErrors()AsLongDimiAsLongItemCount=3abItemIDs(1)=S7:【S7connection_1】IB1abItemIDs(2)=S7:【S7connection_1】MB1abItemIDs(3)=S7:【S7connection_1】QB1fori=1to3abClientHandles(i)=i‘给客户端句柄赋值NextMyOPCGroup.OPCItems.AddItemsItemCount,abItemIDs,abClientHandles,abServerHandles,abErrors‘添加数据项操作(4)同步数据读写OPC数据存取有同步方式和异步方式两种。异步读写数据复杂,需要与事件结合使用,与同步相比速度慢但准确性高。同步读写数据简单,直接使用OPCItem的方法即可。DimOneAsOPCItemDimIndexAsLong‘Index为标签顺序号DimOneReadAsStringDimXieAsStringSetOne=MyOPCGroup.OPCItems(Index)One.ReadOPCCacheOneRead=One.Value‘读数据MyOPCGroup.SyncWriteItemCount,ServerHandles,valuess,Errors‘同步写数据MyOPCGroup.SyncReadOPCCache,ItemCount,ServerHandles,ReadValue,Errors‘同步读数据One.Write(Xie)‘写数据若只读取数据,可以使用DataChange事件,当控制器中所要访问的数据一旦发生改变时将会触发该事件,并将该数据自动读到TxtValue文本框。PrivateSubMyOPCGroup_DataChange(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate)‘自动刷新数据DimiAsLongFori=1ToNumItemstxtValue(ClientHandles(i))=ItemValues(i)‘获取项的值txtTime(ClientHandles(i))=TimeStamps(i)‘获取项的时间戳txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i))‘获取项的品质NextiEndSub(5)断开OPC服务器MyOPCServer.OPCGroups.RemoveAll‘移除所有OPCGroup,空出资源SetMyOPCGroup=NothingMyOPCServer.Disconnect‘断开连接OPC通信遵循于服务器---客户端式的基本结构。也就是说,OPC服务器和客户端是构成OPC通信的基本要素,也是OPC通信发生的必要条件。OPC服务器之间不能直接对话,OPC客户端之间也不能,除非借助于其他OPC工具或产品(比如MatrikonOPCDataManager,它可以实现两个OPC服务器之间的通信)。