WinCC和EXCEL数据传递

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”

图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的通讯,我看了些书,在西门子的论坛上看到了一个现场做好的通讯成功例子.通过自己来做,通讯成功.

例子地址:https://www.360docs.net/doc/2810825816.html,/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()

' 目的:连接至OPC_server,创建组和添加条目

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

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

Sub StartClient()

' On Error GoTo ErrorHandler

'----------- 可以自由选择ClientHandle和GroupName

For ii = 1 To 6

ClientHandles(ii) = ii

Next ii

GroupName = "MyGroup"

'----------- 从单元“A1”得到ItemID

NodeName = Range("c2").Value

ItemIDs(1) = Range("c3").Value

ItemIDs(2) = Range("c4").Value

ItemIDs(3) = Range("c5").Value

ItemIDs(4) = Range("c6").Value

ItemIDs(5) = Range("c7").Value

ItemIDs(6) = Range("c8").Value

'----------- 得到一个OPC服务器的实例

Set MyOPCServer = New OPCServer

MyOPCServer.Connect ServerName, NodeName

Set MyOPCGroupColl = MyOPCServer.OPCGroups

'----------- 为添加组设置缺省的激活状态

MyOPCGroupColl.DefaultGroupIsActive = True

'----------- 添加组至收集

Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)

Set MyOPCItemColl = MyOPCGroup.OPCItems

'----------- 添加一个条目、返回ServerHandles

MyOPCItemColl.AddItems 6, ItemIDs(), ClientHandles(), ServerHandles(), Errors

'----------- 用于接受不同的信息组

MyOPCGroup.IsSubscribed = True

Exit Sub

ErrorHandler:

MsgBox "Error: " & Err.Description, vbCritical, "ERROR"

End Sub

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

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

' Sub StopClient()

' 目的:从服务器释放对象并且断开连接

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

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

Sub StopClient()

'----------- 释放组和服务器对象

MyOPCGroupColl.RemoveAll

'----------- 与服务器断开连接并且清除

MyOPCServer.Disconnect

Set MyOPCItemColl = Nothing

Set MyOPCGroup = Nothing

Set MyOPCGroupColl = Nothing

Set MyOPCServer = Nothing

End 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 NumItems

itemv(ClientHandles(ii)) = itemvalues(ii)

Next ii

Range("d3").Value = https://www.360docs.net/doc/2810825816.html,/qz.q/CStr(itemv(1))

Range("d4").Value = https://www.360docs.net/doc/2810825816.html,/qz.q/CStr(itemv(2))

Range("d5").Value = https://www.360docs.net/doc/2810825816.html,/qz.q/CStr(itemv(3))

Range("d6").Value = https://www.360docs.net/doc/2810825816.html,/qz.q/CStr(itemv(4))

Range("d7").Value = https://www.360docs.net/doc/2810825816.html,/qz.q/CStr(itemv(5))

注意:excel启动宏之前先启动WINCC运行。

在本实例中,将在Microsoft Excel中使用Visual Basic编辑器创建一个OPC DA 客户机。OPC DA客户机读取WinCC OPC DA服务器的WinCC项目中的一个WinCC 变量,并将值写入单元格中。如果在单元格中输入一个新值,该值将会被传送到WinCC OPC DA服务器。

需要一台上面同时安装了WinCC和Microsoft Excel的计算机来设置连接。

组态步骤

在Microsoft Excel中需要进行下列组态:

1.在Microsoft Excel的Visual Basic编辑器中创建一个OPC DA客户机

引言

要将Microsoft Excel用作OPC DA客户机,必须在Microsoft Excel的Visual Basic编辑器中创建相应的脚本。

要求

如何在Microsoft Excel中使用Visual Basic编辑器的基本知识。

步骤

步骤

1打开Microsoft Excel,将出现新的工作簿。

2在“工具”菜单中,选择“宏”“Visual Basic编辑器”。这将启动Microsoft Excel的Visual Basic编辑器。

3在“Visual Basic编辑器”的“工具”菜单中选择“引用...”。出现标题为“引用 - VBAProject”的对话框。在可用参考的列表中找到条目

“Siemens OPC DAAutomation 2.0”。标记相应的复选框。单击“确定”。4单击此处。复制脚本。该脚本仅在在线帮助中可用。

5双击Visual Basic编辑器项目窗口中的“Sheet1”,打开新的代码窗口。6将脚本粘贴到代码窗口中。

7从“文件”菜单中选择“保存”。从“文件”菜单中选择“关闭并返回到Microsoft Excel”。

2.在Microsoft Excel中组态对一个WinCC变量的访问

引言

Excel OPC DA客户机读取WinCC OPC DA服务器的WinCC变量并将变量值写入单元格中。在WinCC OPC DA服务器的WinCC项目中,变量值显示在一个I/O域内。如果单元格中的变量值改变,则在WinCC OPC DA服务器I/O域中的数值也随之改变。

先决条件

?在WinCC OPC DA服务器的WinCC项目中,组态名称为“OPC_Excel”,数据类型为“有符号16位数”的内部变量。

?将“OPC_Excel”变量的数值写入WinCC OPC DA服务器的WinCC项目的I/O域内。

?启用WinCC OPC DA服务器的WinCC项目。

步骤

步骤

1 在Microsoft Excel的单元格A1中,输入用作OPC服务器的计算机名称。

在单元格A2中,输入变量名称“OPC_Excel”。

2 在Excel的“工具”菜单中,选择“宏”“宏...”。出现“宏”对话框。

从宏列表中选择条目“Sheet1.StartClient”。单击“运行”以启动OPC客户机。

3 在单元格B2中写入变量的数值,在C2中写入质量代码,在D2中写入时间

标志..

4 在单元格B3中输入新的数值。更改后的数值将显示在WinCC OPC DA服务器

上的I/O域内。

5 在Excel的“工具”菜单中,选择“宏”“宏...”。出现“宏”对话框。

从宏列表中选择条目“Sheet1.StopClient”。单击“运行”停止OPC客户机。

WINCC报表详解

在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。早期是由人工抄录然后统计出相关的报表。进入计算机控制阶段,这份工作就需要工控软件来实现。对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。论坛上很多人都在寻求灵活高效的解决方法。 经过这段时间的网上讨论。综合网友们的意见和建议,我们做了总结。并结合WinCC软件本身作了相关的说明。希望能对大家在以后的报表开发中有所帮助。 接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。 一.报表的需求分析 从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。 1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。下面是一个很典型的报表需求,就很能说明这样的问题: 图1. 月报表分析 此报表是典型的工业现场应用,在数据采集没有难度。唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。此类报表在连续生产的行业需求很广泛。比如:钢铁冶金行业需要一天24小时不停运转的系统。 还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分 数据的统计,比如汇总、求和、平均等。如下图也是很典型的应用。

图2. 总分报表 另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。如下图。 图3. 复杂报表 这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。既有历史数据也有实时信息。 当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。用户自己可以灵活的定义报表的内容和样式。比如下图。

WinCC数据报表实现方法介绍

WinCC数据报表实现方法介绍 在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。早期是由人工抄录然后统计出相关的报表。进入计算机控制阶段,这份工作就需要工控软件来实现。对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。 接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。最后总结出WinCC报表系统在应用的优缺点和常见的问题的 解决方法。 1.报表的需求分析 从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。 内容需求 内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系 的处理,比如班组相关对应信息的统计分析等。下面是一个很典型的报表需求,就很能说明这样的问题: 图1. 月报表分析 此报表是典型的工业现场应用,在数据采集没有难度。唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。此类报表在连续生产的行业需求很广泛。比如:钢铁冶金行业需要一天24小 时不停运转的系统。 还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部

分数据的统计,比如汇总、求和、平均等。如下图也是很典型的应用: 图2. 总分报表 另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。如下图: 图3. 复杂报表 这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。既有历史数据也有实时信息。 当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。用户自己可以灵活的定义报表的内容和样式。比

最新wincc生成excel

1 给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。 //本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a1 8,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a3 5,a36,a37,a38,a39,a40

Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5")

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel 我们在用户归档中得到数据之后,如果想导出到excel,思路是和把MSHFGrid数据导出类似的。网上有些文章是直接从后台数据表读取数据,本文介绍从数据归档控件导出数据。 1. 假设wincc项目已经创建了用户归档,画面上有一个用户归档控件,名字叫做UA,设置一个按钮,按钮点击事件添加以下vbs脚本 Sub OnClick(ByVal Item) Dim UA,col,row,rows Dim xlapp,objsheet Dim i,j,k,m,n,filename Set UA=ScreenItems("UA") Set rows=UA.GetRowCollection m=rows.Count n=UA.ColumnCount If m>1 Then '如果用户归档控件有记录 Set xlapp=CreateObject("Excel.Application") xlapp.visible=False xlapp.workbooks.add Set objsheet=xlapp.worksheets(1) For k=1 To n ua.ColumnIndex=k objsheet.cells(3,k)=ua.ColumnCaption '字段名称 Next objsheet.cells(1,1)="XX用户归档" For i=1 To m For j= 1 To n objsheet.cells(i+3,j)=ua.GetRow(i).celltext(j) Next Next '以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版 objsheet.range("a1:d1").mergecells=True 'objsheet.range("a1").ColumnWidth =20 '列宽度 objsheet.cells(2,1)="生成时间:" objsheet.cells(2,2)=Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日" objsheet.cells(1,1).HorizontalAlignment = 3 objsheet.range("a3:d" &CStr(3+m)).borders(1).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(1).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(2).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(2).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(3).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(3).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(4).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(4).weight=2 '保存文件 filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成用户归档.xlsx"

用户归档实现wincc报表

使用用户归档实现报表简介Use User Archive Create Report

摘要 简单介绍了用户归档,介绍如何通过用户归档和WinCC报表编辑器实现复杂报表。 关键词 用户归档,报表 Key Words User Archive ,Report IA&DT Service & Support Page 2-17

目录 使用用户归档实现报表简介 (1) 一.用户归档介绍 (4) 二.用户归档的使用 (6) 三.结合用户归档实现报表 (8) 1.数据的存储 (9) 2.报表布局的设计 (12) 3.报表输出 (14) 附录-推荐网址 (17) IA&DT Service & Support Page 3-17

一.用户归档介绍 用户归档编辑器是一个WinCC的附加选件,需要安装相应的授权才能使用,否则只能使用DEMO模式。 它可以用来在服务器 PC 上连续的保存来自技术过程的数据。 在图形编辑器中,可以组态 WinCC 用户归档表格元素来以表格显示运行系统中用户归档的在线数据。用户归档还可用于准备自动化系统(例如 S5、S7)的数据。如果必要,数据可以配方或设定值的形式从控制器读出。 用户归档编辑器提供两种数据库表格: 用户归档: 用户归档是用户可在其中创建自己的数据域的数据库表格。 用户归档用于存储数据,并根据 SQL 数据库规则提供对这些数据的标准化访问。 视图: 视图接收来自用户归档的数据并用于数据的相加,例如,为获得有关产品组的概述。 其在WinCC默认情况下是不会被安装的。可以通过以下步骤安装。插入WinCC安装光盘,选择安装SIMATIC WinCC,弹出界面(图1),选择安装或者卸载的组件,在弹出的选择组件界面中左侧选择选项,右侧选中用户归档,点击下一步开始安装。 图1 安装卸载 IA&DT Service & Support Page 4-17

wincc生成excel

给wincc中通过vbs写excel的方式做报表的初学者一点脚本 我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。//本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21, a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40 Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5") Set a6=HMIRuntime.Tags("a6") Set a7=HMIRuntime.Tags("a7") Set a8=HMIRuntime.Tags("a8") Set a9=HMIRuntime.Tags("a9") Set a10=HMIRuntime.Tags("a10") Set a11=HMIRuntime.Tags("a11") Set a12=HMIRuntime.Tags("a12") Set a13=HMIRuntime.Tags("a13") Set a14=HMIRuntime.Tags("a14") Set a15=HMIRuntime.Tags("a15")

在wincc 中怎么做才能把报表生成按日期的excel 文件

在wincc 中怎么做才能把报表生成按日期的excel 文件在wincc 中怎么做才能把报表生成按日期的Excel 文件 VBS脚本实现,就是把文件名称以变量的形式表示。参考 '关闭保存 Dim patch,filename filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(N ow))+CStr(Minute(Now))&CStr(Second(Now)) patch= "d:\"&filename&"demo.xls" objExcelApp.ActiveWorkbook.SaveAs patch objExcelApp.Workbooks.Close objExcelApp.Quit Set objExcelApp= Nothing 对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。 Dim excelapp Dim aa,bb,cc Set excelapp = CreateObject("Excel.Application") Set aa = HMIRuntime.tags("tag1") excelapp.visible = False'True excelapp.workbooks.open "D:\excel.xls" bb = Now 'getcurrent_datetime() aa.Read MsgBox CStr(bb) excelapp.cells(1,1).value = "rrrrrr"'111111 excelapp.cells(1,2).value = CStr(bb)

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” 图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中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

【WinCC】使用VBS读取报警记录数据到EXCEL

【WinCC】使用VBS读取报警记录数据到EXCEL 1概述 介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。 2软件环境 Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007 3访问原理 WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。 当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。 3.1 查询语句格式 查询语句的格式要求如下: AlARMVIEW:SELECT * FROM [ WHERE……optional ] 其中参数信息如下所示: ViewName:数据库表名。必须用需要的语言指定该表。 比如:中文字符表名为:ALGVIEWCHT,英文字符表明为:ALGVIEWENU等。 Condition:为过滤标准。 详细说明请参见下表:

表1查询参数表 3.2查询结果 查询结果作为记录集返回。可以根据需要有选择的返回特定的数据集。例如:oRs.Fields(0).Value 返回的是消息的编号;oRs.Fields(2).Value 返回的是消息的时间戳;oRs.Fields(37).Value返回的是消息文本的内容。记录集的结构如下表所示:

Wincc报表Excel

Sub OnClick(Byval Item) Dim MyVar1 Dim MyVar2 Dim objExcel Dim wb Dim xlsheet Dim rangee Dim Years,mounth,Days,hours,min,sec,daysweek Dim jj,kk,year1,mounth1,Days1,hours1,min1,sec1 Dim yi,er,san,si,wu,i,i1,lei,lei1,lei2,lei3,lei4,lei5 Dim zhou,yue,nian Dim shi,feng,miao,mytime Dim MyHour,MyMinute,myday,mymonth,myyear,a,b,c,d,e,f Set MyVar1=HMIRuntime.Tags("MyVar1") MyVar1.Write Date Set MyVar2=HMIRuntime.Tags("MyVar2") MyVar2.Write Time year1 = CStr(MyVar1.value) mounth1 = CStr(MyVar2.value) kk="d:\report2\" jj=".xls" Set yi = HMIRuntime.Tags("hunhe_1") yi.Read Set er = HMIRuntime.Tags("hunhe_2")

er.Read Set san = HMIRuntime.Tags("hunhe_3") san.Read Set si = HMIRuntime.Tags("hunhe_4") si.Read Set wu = HMIRuntime.Tags("hunhe_5") wu.Read Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set wb=objExcel.Workbooks.Open ("c:\ExcelExample2.xls") Set xlsheet = wb.sheets("Sheet1") xlsheet.range("B4").Value=yi.Value xlsheet.range("C4").Value=er.Value xlsheet.range("D4").Value=san.Value xlsheet.range("E4").Value=si.Value xlsheet.range("F4").Value=wu.Value wb.SaveAs kk & year1 & jj wb.CLOSE objExcel.quit wb=Nothing

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例 (2009-12-30 16:47:45) 转载 标签: 杂谈 用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例子程序 求用VBS实现WINCC的用户归档输出到固定格式的EXCEL表格的方法和例子程序!我主要问题在SQL数据库的查询语句不会。 看见论坛里有关用VBS实现EXCEL的数据查询和导出,我现在想要完成如下功能:每分钟将数据归档,用户可以输入任意的时刻时间查询从任意时刻开始的之后每隔1小时的数据(有点像日报里的24个小时)。我现在对于VBS查询数据库的语句不懂,望大大赐教!谢谢 ''SQL查询语句 Dim strc as string strc = "provider=WinCCOLEDBProvider.1;catalog=CC_RebdI_09_06_22_10_3 8_35R;data source=ComputerName\WinCC" ''这个连接字符串可以在SQl2000中看到 Dim cc1 Set cc1=CreateObject("adodb.connection") cc1.ConnectionString=strc cc1.CursorLocation=3 cc1.open Dim rst As Object Set rst = CreateObject("adodb.recordset") dim ssql as string ssql = "Tag:R,'Archive_3\DB1DBD0','2009-7-29 00:00:00.0000','200 9-7-29 23:59:59.999','timestep=3600,258'" ''Archive_3\I_DB1DBD0归档和变量 ''2009-7-29 00:00:00.0000,2009-7-29 23:59:59.999时间段 ''timestep=3600,258每阁多少秒拿一个数据(3600=1小时),258表示每个时间段取最后一个数据 rst.Open ssql, cc1 ''这样查出来的数据就是一天的每小时的数据 ''对rst记录集处理就可以得到你要的数据 ==========================

wincc的excel报表实例

因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web 页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式 word页面只要在jsp头设置如下指令: <%@page contentType="application/msword;charset=GBK" %> excel如下: <%@page contentType="application/vnd.ms-excel;charset=GBK" %> 使用这种方式客户端必须安装有office软件,用户访问时将在ie中直接用word或excel打开该页面。 此方法优势是模板设计、调整方便,无需在服务器端使用复杂的POI或jxl技术,也无需在客户端使用ActiveX控件技术,更安全、方便,轻松实现较好的打印效果。 microsoft关于服务器端动态创建office文档的资料(asp示例): https://www.360docs.net/doc/2810825816.html,/default.aspx?scid=KB;en-us;301044& 简单示例: 使用word建立一文档,画表格如下: ---------------------------- | 用户名 | 真实姓名 | 性别 | ---------------------------- | guest | 路人甲 | 男 | ---------------------------- 保存为Web页test.htm,将test.htm改名为test.jsp,修改其中guest、路人甲、男为从数据库动态查询,如下: <%@ page contentType="application/msword;charset=GBK" %> <%@ page import="java.sql.*" %> 用户信息