WinCC和EXCEL数据传递

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、DDE简介

动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE

客户则是从服务器获得这些数据的程序。

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

开始了。

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

服务器发送数据的方式称为冷链。

一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地)

1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn”

图1

2、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中:

“计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图2

3、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行

第一列的单元格),重复步骤3可以加入更多的DDE变量

图3

4、Excel程序

图4

Wincc程序

图5

5完成

用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,myfile

Set fso = CreateObject("scripting.FileSystemObject")

Set MyFile = fso.GetFile("d:\Excelcode.xls")

Dim ObjExcelApp

Set objExcelApp = CreateObject("Excel.Application")

'objExcelApp.Visible = True

objExcelApp.Workbooks.Open MyFile

'上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件

objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").read

objExcelApp.ActiveWorkbook.Save

'上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下

Dim coldold

Set coldold=HMIRuntime.Tags("usercodeold1")

coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value

'上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面

objExcelApp.Workbooks.Close

objExcelApp.Quit

Set ObjEXceLapp = Nothing

'到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了

coldold.Write

'最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中

End Sub

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

估计考虑到后些天要用到EXCEL与WINCC的通讯,我看了些书,在西门子的论坛上看到了一个现场做好的通讯成功例子.通过自己来做,通讯成功.

例子地址:/club/bbs/post.asp?b_id=5&a_i

d=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-->f

6 在EXCEL总,工具-->宏,选择sheet1.startclient,启动

7 完了

代码:

Option Explicit

Option Base 1

Const ServerName = "OPCServer.WinCC"

Dim WithEvents MyOPCServer As OPCServer

Dim WithEvents MyOPCGroup As OPCGroup

Dim MyOPCGroupColl As OPCGroups

Dim MyOPCItemColl As OPCItems

Dim MyOPCItems As OPCItems

Dim MyOPCItem As OPCItem

Dim ClientHandles(6) As Long

Dim ServerHandles() As Long

Dim Values(1) As Variant

Dim Errors() As Long

Dim ItemIDs(6) As String

Dim GroupName As String

Dim NodeName As String

Dim itemv(6) As Variant

Dim ii As Integer

'-------------------------------------------------

--------------------

' Sub StartClient()

相关文档
最新文档