OPC接口技术的介绍ppt课件.ppt
经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC接口技术接口技术谈英姿东南大学自控系工业自动化教研室东南大学自控系工业自动化教研室经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用内容提要内容提要概述概述OPC基本原理基本原理OPC DA 接口标准接口标准OPC AE 接口标准接口标准OPC HDA 接口标准接口标准OPC XML接口标准接口标准经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC基本原理基本原理通用通用OPC结构及组成结构及组成对象及接口概述对象及接口概述必需的接口定义必需的接口定义可选的接口定义可选的接口定义服务器地址空间及配置服务器地址空间及配置时间同步与顺序发送机制时间同步与顺序发送机制EnumOPC对象属性条目对象属性条目经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用通用通用OPC结构及组成结构及组成OPC数据访问规范数据访问规范OPC报警和事件规范报警和事件规范OPC数据交换规范数据交换规范OPC历史数据访问规范历史数据访问规范OPC批处理规范批处理规范OPC安全性规范安全性规范OPC XML规范规范经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用对象及接口概述对象及接口概述OPC对象对象OPC对象有三个:对象有三个:服务器服务器(OPC Server)、组组(OPC Group)和和项项(OPC Item)OPC接口接口经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用服务器服务器OPC ServerOPC Server即即OPCOPC启动服务器,通过它获得其他启动服务器,通过它获得其他对象和服务的起始类,并用于返回对象和服务的起始类,并用于返回OPC GroupOPC Group类类对象。对象。OPC ServerOPC Server级别有多种属性,其中包含一级别有多种属性,其中包含一个个OPCOPC服务器对象的状态和版本等信息。这种级服务器对象的状态和版本等信息。这种级别中的对象由客户应用创建。别中的对象由客户应用创建。IOPCServerIOPCServer接口包接口包含管理含管理OPC GroupOPC Group级别中的对象的方法。如将组级别中的对象的方法。如将组加入服务器或从服务器中删除组的方法加入服务器或从服务器中删除组的方法(AddGroupAddGroup,RemoveGroupRemoveGroup)。)。IOPCBrowseServerAddressSpaceIOPCBrowseServerAddressSpace接口包含查找服接口包含查找服务器地址空间的方法。务器地址空间的方法。IOPCCommonIOPCCommon接口方法用于接口方法用于通知服务器语言的设置和客户机的名称。通知服务器语言的设置和客户机的名称。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用标准标准OPC服务器对象服务器对象经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用必需的接口定义必需的接口定义OPC服务器必需的接口有服务器必需的接口有IunknownIOPCServer IOPCCommerIConnectionPointContainer经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用组组(OPC Group)OPC Group存储由若干存储由若干OPC Item组成组成的的Group信息,并用于返回信息,并用于返回OPC Item类对象。类对象。OPC Group级别管理被称为级别管理被称为OPC Item的各个过程变量。的各个过程变量。IOPCItemMgt接口提供将项加入组或接口提供将项加入组或从组中删除项的方法(从组中删除项的方法(“AddItem”,“RemoveItem”)。)。IOPCGroupStateMgt接口的方法用于接口的方法用于处理组专用的参数或复制组。处理组专用的参数或复制组。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用标准标准OPC组对象组对象经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用项项(OPC Item)OPC Item存储具体存储具体Item 的定义、数据的定义、数据值、状态值等信息。值、状态值等信息。OPC Item级别的一级别的一个对象代表与一个过程变量的连接。该个对象代表与一个过程变量的连接。该对象的唯一接口是对象的唯一接口是OPCItemDisp。关于。关于OPC Item的信息可以在属性表中找到,的信息可以在属性表中找到,例如数值(例如数值(“Value”)属性或存取路径)属性或存取路径(“AccessPath”)属性。)属性。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC项对象项对象经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC 的过程数据构造的过程数据构造OPC项代表了与服务器中的数据的连接。项代表了与服务器中的数据的连接。客户程序对客户程序对OPC项的操作都是通过包容项的操作都是通过包容此项的此项的OPC组来进行的,而不是直接把组来进行的,而不是直接把OPC项作为一个对象来操作。每个项作为一个对象来操作。每个OPC项都有值项都有值(Value)。品质。品质(Quality)和时和时间戳间戳(Time Stamp)三个属性。三个属性。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用EnumOPC对象属性条目对象属性条目经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC客户与客户与OPC服务器服务器经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用自定义接口与自动化接口自定义接口与自动化接口OPC AutomationwrapperAutomation client(Visual Basic,Excel,)custom interfaceserverCustom client(C+,.)custom interfaceserver经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用自定义接口与自动化接口自定义接口与自动化接口自定义接口效率高,通过该接口,客户自定义接口效率高,通过该接口,客户能够发挥能够发挥OPC服务器的最佳性能,采用服务器的最佳性能,采用C语言的客户一般采用定制接口方案;语言的客户一般采用定制接口方案;自动化接口使解释性语言和宏语言访问自动化接口使解释性语言和宏语言访问OPC服务器成为可能,采用服务器成为可能,采用VB等等语言的语言的客户一般采用自动化接口客户一般采用自动化接口 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC DA 接口标准接口标准数据访问方式数据访问方式DA功能实现过程功能实现过程DA的对象与接口的对象与接口经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据访问方式数据访问方式DA 的同步读取的同步读取DA的异步读取的异步读取DA的数据更新的数据更新DA的数据订阅的数据订阅DA的同步写入的同步写入DA的异步写入的异步写入经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用DA 的同步读取的同步读取myGroup.SynchRead()clientCallReplyserversynchronous经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用DA的异步读取的异步读取myGroup.AsyncRead()myGroup_AsyncReadComplete()serverCallReplyclient经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用DA的数据订阅的数据订阅serverSubscribeNotifymyGroup.IsSubscribedmyGroup_DataChange()myGroup_DataChange()clientNotify经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据订阅传输模式数据订阅传输模式serverSubscribeNotifymyGroup.IsSubscribedmyGroup_DataChange()myGroup_DataChange()clientNotifymyGroup.Refresh()myGroup_DataChange()Notify经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据源数据源:cache/deviceclient application(OPC client)fieldbusOPC servercachefieldbusdevicefieldbusdevicefieldbus connectionserver samples items(at the RequestedUpdateRate)and puts them into cachesynchronous call over the field bus to the end device(takes a while)no need for“device access”when fieldbus operates cyclicallyFB managerFB agentFB agentSynchRead reads the data either from cache(local to the PC)or reads synchronous from the device.Write is always to device(DA 3.0 allows write to cache)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用DA功能实现过程功能实现过程1.OPC DA客户连接到客户连接到DA服务器,建立服务器,建立OPC Group和和OPC Item;2.通过通过Group 和和Item进行数据访问;进行数据访问;3.处理完毕,关闭连接。处理完毕,关闭连接。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC DA对象的层次模型对象的层次模型OPCItemOPCBrowserOPCServerOPCGroups(collection)OPCGroupOPCItems(collection)DescriptionAn instance of an OPC Server.You must create an OPCServer object before you can get references to other objects.It contains the OPCGroups Collection and creates OPCBrowser objects.A collection containing all of the OPCGroup objects this client has created within the scope of the OPCServer that the Automation Application has connected to via OPCServer.Connect()An instance of an OPCGroup object.this object maintains state information and provides the mechanism to access data for the OPCItems Collection object that the OPCGroup object references.A collection containing all of the OPCItem objects this client has created within the scope of the OPCServer,and corresponding OPCGroup object that the Automation Application has created.An automation object that maintains the items definition,current value,status information,last update time.Note the Custom Interface does not provide a separate Item Object.An object that browses item names in the servers configuration.There exists only one instance of an OPCBrowser object per instance of an OPC Server object.OPCItemOPCItemOPCGroup经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用OPC DA 初始化连接初始化连接find out existing OPC serversconnect to that OPC servercreate an OPCBrowser objectcreate an OPCGroups objectcreate an OPCServer objectcreate an OPCGroup objectbuild array of itemschecking with the browser that these items exist in this serveradd item array to the groupactivate and subscribe groupnextgroup经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用初始化初始化myDummyServer.GetOPCServersmyServer.ConnectSetmyBrowser=myServer.BrowserSetmyGroups=myServer.GroupsmyServer=newOPCServerSetmyGroup1=myGroups.AddSetMyItems=MyGroup1.OPCItemsFQItems11=Device1.Temp1ClientHandle11=101ReDimServerHandle1(nrItems)ReDimServerErrors1(nrItems)ReDimValue1(nrItems)myGroup1.AddItemsmyGroup1.IsActivemyGroup1.IsSubscribed经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用DeclarationsOptionBase1OPCarraysindicesstartwith1DimWithEventsMyServerAsOPCServerOPCServerObject(Eventsoptional)DimWithEventsMyGroupsAsOPCGroupsOPCGroupCollection(Eventsopt.)DimWithEventsMyGroupAsOPCGroupOPCGroupObjectitemsDimnrItemsAsIntegerDimMyItemsAsOPCItemsOPCItemCollectionObjectDimMyItemAsOPCItemOPCItemObjectDimItemsID(2)AsStringfullyqualifieditems(seelater)DimClientHandles(2)AsLongDimServerHandles()AsLongmustbeadynamicarrayDimServerErrors()AsLongmustbeadynamicarrayReference:OPCAutomation2.0mustbeincludedintoVisualBasicorC#(ifmissing:copyopcdaauto.dlltoC:WINNTSystem32opddaauto)andregisterit:C:regsvr32C:WINNTSystem32opddaauto.Asimplewaytodoit:installSoftwareToolboxsTopServer(freeware)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用查找查找OPC服务器服务器The GetOPCServers function applied to a dummy Server object allow to list the existing servers on this node or on another node(over DCOM-security must be set correctly)The information about which OPC servers exist is taken from the registry,where it has been put by each server at its installation time。Private Sub ShowServers(netNodeName As String)Dim dummyServer As OPCServer Dim Servers As Variant this is an array of strings Dim cntServers As Integer Set dummyServer=New OPCServer create a dummy server object Servers=dummyServer.GetOPCServers(netNodeName)returns all available servers For cntServers=LBound(Servers)To UBound(Servers)display the names MsgBox Servers(cntServers)Next cntServers Set Getserver=Nothing delete this object(was created by New)Exit Sub经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用连接到连接到OPC服务器服务器SetMyServer=NewOPCServercreateserverobjectMyServer.Connect(Matrikon.OPC.Simulation)connecttoMatrikonserverBefore connecting,it is safe to check the name of the server from the servers list.Also,it is preferable to include the connection in a separate routine since it can fail:FunctionServerGetCare(NameAsString,ServerNodeAsString)AsOPCServerOnErrorGoToServerGetCareErrDimMyOPCServerAsNewOPCServerMyOPCServer.ConnectServerName,ServerNodeconnectriskySetServerGetCare=MyOPCServerExitFunctionServerGetCare_Err:errorhandlerifconnectfailsErr.ClearMsgBoxCouldnotconnectSetMyServer=NothingExitFunction经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用浏览服务器浏览服务器The object OPCBrowser(of type collection)acts as a pointer to the servers tree:Dim MyServer As OPCServerDim MyBrowser As OPCBrowserDim vName As VariantMyServer.Connect Matrikon.OPC.Simulation,Orion server and node name(DCOM)Set MyBrowser=MyServer.CreateBrowser create an OPC browserMyBrowser.ShowBranches show the branchesFor Each vName In MyBrowser MsgBox Branch:&vName display the branch nameNext vNameMyBrowser.ShowLeafs explore the leavesFor Each vName In MyBrowser MsgBox Leaf:&vName display the leavess nameNext vName经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用浏览浏览MyBrowser.MoveDown(strBranch)go down the selected branch treeMyBrowser.MoveUp go up the selected branch treesite propertiessite propertiesTAGServer rootServer rootLevelLevelTemperatureTemperatureValve_OnValve_OnTAGTAGTAGSite ASite AStoreStoreMachine RoomMachine RoomGrinderGrinderWash RoomWash RoomClimateClimateserverTankTankThere may be leaves at every branch,since a branch may have properties经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用获得获得 ItemIDmyOPCBrowser.MoveDown(TankArea)myOPCBrowser.MoveDown(Tank1)FQI=myOPCBrowser.GetItemId(Level)Of course,one can write an Item ID directly when defining a group,but it is safer to browse the server and get the FQI from there,since the delimiter depends on the server.To get the fully qualified itemID,one positions the browser at the place where the leaf is attached to the branch and calls GetItemIDe.g.FQI could be Controller1;Tanks!Level经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用创建创建OPCGroupsandOPCItemsSetMyGroups=MyServer.OPCGroupscreategroupscollectionSetMyGroup1=MyGroups.Add(GRP1)addgroup,nameprivateSetMyItems=MyGroup1.OPCItemsdefinetheOPCItemsofgroupFQItemIDs(1)=Area2.Tank1.LevelfullyqualifieditemIDClientHandles(1)=5arbitraryFQItemIDs(2)=Area2.Tank1.TemperaturefullyqualifieditemIDClientHandles(2)=6arbitrary(butdifferent)nrItems=2MyItems.AddItems_addstheitemstocollectionnrItems,_inputparameterFQItemIDs,_supplyfullyqualifiedIDClientHandles,_supplyClientHandlesServerHandles,_returnparameterServerHandlesServerErrorsreturnparameterServerErrorsMyGroup1.ClientHandle=1handleofthegroup(nos)!MyGroup1.IsActive=TruenowreadytosendandreceiveMyGroup1.IsSubscribed=TrueandtogenerateeventsThe role of the ServerHandles and ClientHandles will be explained later经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用客户端客户端 的数据结构的数据结构FullyQualifiedItemIDClientHandleServerHandleChannel1.Device1.Temp1communicated to server by registering groupServerError Value QualityTimeStamp100345430123.4OK 12:09.234Channel1.Device1.Speed1102225320999.8OK 12:02.214Channel1.PLC2.Door20353467600OK 12:03.002Channel1.PLC2.Valve320478723401OK 12:02.345Channel1.PLC2.CloseDoor2055843200BAD 12:02.345returned by serverwhen registeringdynamic changes(refreshed on change)The client prepares data structures for its items and gives the server the corresponding pointers so the server can update them.Items to be written and read can be mixed in the same group.The type of the item(Boolean,Float,)is implicit,but known at the server.经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 DimthisGroupAsOPCGroupDimcntItemsAsIntegerDimsourceAsIntegerDimserverHandles(2)AsLongDimvalues()AsVariantDimerrors()AsLongserverHandles(1)=ServerHandle(11)copyfromglobalvariablesserverHandles(2)=ServerHandle(14)source=OPCcachecouldalsobeOPCDevicethisGroup.SyncReadsource,nrItems,serverHandles,identifiestheitemstoberead!values,returnsbeadynamicarrayerrorsreturnsadynamicarrayForcntItems=LBound(serverHandles)ToUBound(serverHandles)1.nMsgBoxCStr(cntItems)&:&values(cntItems)NextcntItemsmyGroup.SynchRead()clientCallReplyserverGroup的同步读的同步读经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用single Items的异步读的异步读AsyncRead()AsyncReadComplete()serverDimWithEventsMyGroup.MyGroup.AsyncReadnrItems,ServerHandles,ServerErrors,TransactionID,CancelIDCallReplyclientPrivateSubMygroup_AsyncReadComplete(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate,Errors()AsLong)MsgBox(AsyncReadComplete)EndSubAsynchronous read separates Call and Reply.Call supplies the ServerHandlesReply returns the corresponding ClientHandles经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用AsyncRead(source=device)AsyncReadComplete()serverCallReplyclientAsyncRead(source=cache)AsyncRead(source=device)Although the AsynchReadComplete carries the ClientHandle of each item,it does not tell which AsynchRead caused the AsynchReadComplete event to fire.Call and Reply are linked by the TransactionID:this ID is returned in AsynchReadComplete。It can also be used to cancel the operationAsyncCancel()AsyncCancelComplete()Transaction ID经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Reading(by events)the OPC groupDimWithEventsMyGroup.PrivateSubMyGroup_DataChange(_ByValTransactionIDAsLong,_ByValNrItemsAsLong,_ClientHandles()AsLong,_returnedbytheservertotheclientItemValues()AsVariant,_Qualities()AsLong,_TimeStamps()AsDate)DimcntItemsAsIntegerForcntItems=LBound(ClientHandles)ToUBound(ClientHandles)index1.nTextValue(cntItems-1).Text=ItemValues(cntItems)displayTextTimeStamp(cntItems-1).Text=DateAdd(h,9,TimeStamps(cntItems)TextQuality(cntItems-1).Text=Qualities(cntItems)NextcntItemsEndSubThis function is called each time an item in the group changesThe ClientHandles(here:5 and 6)identifies the variables,not the“fully qualified itemID”The values are displayed in the TextValue,TextTimeStamp and TextQual