当前位置:文档之家› WinCC和EXCEL数据传递

WinCC和EXCEL数据传递

1、DDE简介动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。

DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE客户则是从服务器获得这些数据的程序。

DDE对话是由客户程序发动的。

客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows 程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就开始了。

DDE的对话方式有3种: ①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、服务器发送数据的方式称为冷链。

一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地)1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn”图12、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中:“计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图23、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行第一列的单元格),重复步骤3可以加入更多的DDE变量图34、Excel程序图4Wincc程序图55完成用OPC做比较省事。

WinCC做OPC Server,Excel做OPC Client。

这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。

对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。

计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。

看你需要啦!其次是WINCC软件里的通讯协议要与PC机对应。

WINCC提供了SIMATIC S7 PROTOCOL SUITE 通讯驱动程序,包含了多种通讯协议!最终还有自己亲自实际操作了才有深刻的了解的!!Sub X6309X94AE9X0000X6539_OnClick(Byval Item)Dim fso,myfileSet fso = CreateObject("scripting.FileSystemObject")Set MyFile = fso.GetFile("d:\Excelcode.xls")Dim ObjExcelAppSet objExcelApp = CreateObject("Excel.Application")'objExcelApp.Visible = TrueobjExcelApp.Workbooks.Open MyFile'上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").readobjExcelApp.ActiveWorkbook.Save'上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下Dim coldoldSet coldold=HMIRuntime.Tags("usercodeold1")coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value'上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面objExcelApp.Workbooks.CloseobjExcelApp.QuitSet ObjEXceLapp = Nothing'到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了coldold.Write'最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中End Sub上面这个例子已经调试通过。

网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

估计考虑到后些天要用到EXCEL与WINCC的通讯,我看了些书,在西门子的论坛上看到了一个现场做好的通讯成功例子.通过自己来做,通讯成功.例子地址:/club/bbs/post.asp?b_id=5&a_id=53940&s_id=0&num=49#anch现总结一下:1 WINCC作为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编辑器里,工具-->引用,在弹出窗口中,找Siemens OPC DAAutomation 2.0,勾上 :)4 双击sheet1,打开sheet1的代码窗口,然后将程序(程序代码在页面的最后)复制到代码窗口.5 在EXCEL的上分别对应C2-->计算机名 C3-->a C4-->b C5-->c C6-->d C7-->e C8-->f6 在EXCEL总,工具-->宏,选择sheet1.startclient,启动7 完了代码:Option ExplicitOption Base 1Const ServerName = "OPCServer.WinCC"Dim WithEvents MyOPCServer As OPCServerDim WithEvents MyOPCGroup As OPCGroupDim MyOPCGroupColl As OPCGroupsDim MyOPCItemColl As OPCItemsDim MyOPCItems As OPCItemsDim MyOPCItem As OPCItemDim ClientHandles(6) As LongDim ServerHandles() As LongDim Values(1) As VariantDim Errors() As LongDim ItemIDs(6) As StringDim GroupName As StringDim NodeName As StringDim itemv(6) As VariantDim ii As Integer'---------------------------------------------------------------------' Sub StartClient()' 目的:连接至OPC_server,创建组和添加条目'---------------------------------------------------------------------Sub StartClient()' On Error GoTo ErrorHandler'----------- 可以自由选择ClientHandle和GroupNameFor ii = 1 To 6ClientHandles(ii) = iiNext iiGroupName = "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服务器的实例Set MyOPCServer = New OPCServerMyOPCServer.Connect ServerName, NodeNameSet MyOPCGroupColl = MyOPCServer.OPCGroups'----------- 为添加组设置缺省的激活状态MyOPCGroupColl.DefaultGroupIsActive = True'----------- 添加组至收集Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)Set MyOPCItemColl = MyOPCGroup.OPCItems'----------- 添加一个条目、返回ServerHandlesMyOPCItemColl.AddItems 6, ItemIDs(), ClientHandles(), ServerHandles(), Errors'----------- 用于接受不同的信息组MyOPCGroup.IsSubscribed = TrueExit SubErrorHandler:MsgBox "Error: " & Err.Description, vbCritical, "ERROR"End Sub'---------------------------------------------------------------------' Sub StopClient()' 目的:从服务器释放对象并且断开连接'---------------------------------------------------------------------Sub StopClient()'----------- 释放组和服务器对象MyOPCGroupColl.RemoveAll'----------- 与服务器断开连接并且清除MyOPCServer.DisconnectSet MyOPCItemColl = NothingSet MyOPCGroup = NothingSet MyOPCGroupColl = NothingSet MyOPCServer = NothingEnd Sub'---------------------------------------------------------------------' Sub MyOPCGroup_DataChange()' 目的:组中的数值、质量或时间标志改变时,该事件激活'---------------------------------------------------------------------'----------- 如果OPC-DA Automation 2.1被安装,使用:Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, itemvalues() As Variant, Qualities() As Long, TimeStamps() As Date)'----------- 设置数据表单元值为数值读For ii = 1 To NumItemsitemv(ClientHandles(ii)) = itemvalues(ii)Next iiRange("d3").Value = /qz.q/CStr(itemv(1))Range("d4").Value = /qz.q/CStr(itemv(2))Range("d5").Value = /qz.q/CStr(itemv(3))Range("d6").Value = /qz.q/CStr(itemv(4))Range("d7").Value = /qz.q/CStr(itemv(5))注意:excel启动宏之前先启动WINCC运行。

相关主题