您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > WinCC和EXCEL数据传递
1、DDE简介动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE客户则是从服务器获得这些数据的程序。DDE对话是由客户程序发动的。客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就开始了。DDE的对话方式有3种:①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、服务器发送数据的方式称为冷链。一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地)1、在变量管理上按鼠标右键--添加新的驱动程序--选“windowsdde.chn”图12、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中:“计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。图23、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行第一列的单元格),重复步骤3可以加入更多的DDE变量图34、Excel程序图4Wincc程序图55完成用OPC做比较省事。WinCC做OPCServer,Excel做OPCClient。这种情况下,WinCC端不需要做任何设置,只要在Excel里用少量的代码就能实现双方的通讯。对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。看你需要啦!其次是WINCC软件里的通讯协议要与PC机对应。WINCC提供了SIMATICS7PROTOCOLSUITE通讯驱动程序,包含了多种通讯协议!最终还有自己亲自实际操作了才有深刻的了解的!!SubX6309X94AE9X0000X6539_OnClick(ByvalItem)Dimfso,myfileSetfso=CreateObject(scripting.FileSystemObject)SetMyFile=fso.GetFile(d:\Excelcode.xls)DimObjExcelAppSetobjExcelApp=CreateObject(Excel.Application)'objExcelApp.Visible=TrueobjExcelApp.Workbooks.OpenMyFile'上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件objExcelApp.worksheets(sheet1).Cells(1,1).VAlue=HMIRuntime.Tags(usercodenew1).readobjExcelApp.ActiveWorkbook.Save'上面两行的作用是将wincc变量usercodenew1的值写到Excel表中的A1格子里面,并且保持一下DimcoldoldSetcoldold=HMIRuntime.Tags(usercodeold1)coldold.Value=objExcelApp.worksheets(sheet1).Cells(1,1).value'上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到usercodeold1变量中,当然现在其实并没有存入usercodeold1变量,只是存在了叫coldold的临时变量里面objExcelApp.Workbooks.CloseobjExcelApp.QuitSetObjEXceLapp=Nothing'到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了coldold.Write'最后是把读到的excel值从临时变量coldold中写入它对应的usercodeold1变量中EndSub上面这个例子已经调试通过。网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。估计考虑到后些天要用到EXCEL与WINCC的通讯,我看了些书,在西门子的论坛上看到了一个现场做好的通讯成功例子.通过自己来做,通讯成功.例子地址:=5&a_id=53940&s_id=0&num=49#anch现总结一下:1WINCC作为OPC服务器,勿需添加OPC通道.在例子中,只在内部变量中,建立6个内部变量,内部变量为有符号的16位数,名称分别为,a,b,c,d,e,f.(当然如果身边有PLC在,可以建立过程变量,为了方便运行,建立内部变量),分别在a,b,c,d,e,f中的限制/报表中,设置其开始值,为1,2,3,4,5,6.注意:计算机--属性中的计算机名称要与本计算机名称一致在WINCC中建立一页面,用按钮来改变a,b,c,d,e,f的值,如果通讯成功,在EXCEL中也会随之改变.2新建立一个EXCEL文件,打开文件,工具--宏--VB编辑器,打开EXCEL的VB编辑器.3在VB编辑器里,工具--引用,在弹出窗口中,找SiemensOPCDAAutomation2.0,勾上:)4双击sheet1,打开sheet1的代码窗口,然后将程序(程序代码在页面的最后)复制到代码窗口.5在EXCEL的上分别对应C2--计算机名C3--aC4--bC5--cC6--dC7--eC8--f6在EXCEL总,工具--宏,选择sheet1.startclient,启动7完了代码:OptionExplicitOptionBase1ConstServerName=OPCServer.WinCCDimWithEventsMyOPCServerAsOPCServerDimWithEventsMyOPCGroupAsOPCGroupDimMyOPCGroupCollAsOPCGroupsDimMyOPCItemCollAsOPCItemsDimMyOPCItemsAsOPCItemsDimMyOPCItemAsOPCItemDimClientHandles(6)AsLongDimServerHandles()AsLongDimValues(1)AsVariantDimErrors()AsLongDimItemIDs(6)AsStringDimGroupNameAsStringDimNodeNameAsStringDimitemv(6)AsVariantDimiiAsInteger'---------------------------------------------------------------------'SubStartClient()'目的:连接至OPC_server,创建组和添加条目'---------------------------------------------------------------------SubStartClient()'OnErrorGoToErrorHandler'-----------可以自由选择ClientHandle和GroupNameForii=1To6ClientHandles(ii)=iiNextiiGroupName=MyGroup'-----------从单元“A1”得到ItemIDNodeName=Range(c2).ValueItemIDs(1)=Range(c3).ValueItemIDs(2)=Range(c4).ValueItemIDs(3)=Range(c5).ValueItemIDs(4)=Range(c6).ValueItemIDs(5)=Range(c7).ValueItemIDs(6)=Range(c8).Value'-----------得到一个OPC服务器的实例SetMyOPCServer=NewOPCServerMyOPCServer.ConnectServerName,NodeNameSetMyOPCGroupColl=MyOPCServer.OPCGroups'-----------为添加组设置缺省的激活状态MyOPCGroupColl.DefaultGroupIsActive=True'-----------添加组至收集SetMyOPCGroup=MyOPCGroupColl.Add(GroupName)SetMyOPCItemColl=MyOPCGroup.OPCItems'-----------添加一个条目、返回ServerHandlesMyOPCItemColl.AddItems6,ItemIDs(),ClientHandles(),ServerHandles(),Errors'-----------用于接受不同的信息组MyOPCGroup.IsSubscribed=TrueExitSubErrorHandler:MsgBoxError:&Err.Description,vbCritical,ERROREndSub'---------------------------------------------------------------------'SubStopClient()'目的:从服务器释放对象并且断开连接'---------------------------------------------------------------------SubStopClient()'-----------释放组和服务器对象MyOPCGroupColl.RemoveAll'-----------与服务器断开连接并且清除MyOPCServer.DisconnectSetMyOPCItemColl=NothingSetMyOPCGroup=NothingSetMyOPCGroupColl=NothingSetMyOPCServer=NothingEndSub'---------------------------------------------------------------------'SubMyOPCGroup_DataChange()'目的:组中的数值、质量或时间标志改变时,该事件激活'---------------------------------------------------------------------'-----------如果OPC-DAAutomation2.1被安装,使用:PrivateSubMyOPCGroup_DataChange(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,itemvalues()AsVariant,Qualities()AsLong,TimeStamps()AsDate)'-----------设置数据表单元值为数值读Forii=1ToNumItemsitemv(ClientHandles(ii))=itemvalues(ii)NextiiRange(d3).Value=(itemv(1))Range(d4).Value=(itemv(2))Range(d5).Value=(itemv(3))Range(d6).Value=
本文标题:WinCC和EXCEL数据传递
链接地址:https://www.777doc.com/doc-5377599 .html