在wincc 中怎么做才能把报表生成按日期的excel 文件
西门子wincc数据报表的实现方式
西门子wincc数据报表的实现方式【摘要】随着工业领域的不断发展,用户需求一种以人机界面为控制主体的视窗控制体系的过程监控系统,以此来取代原来的以现场操作按钮和仪表为主的操作体系。
通过开放性、灵活性的可视化界面,迅速并直接的处理生产过程中的事件信息。
凭借这种战略思想,WINCC,运行于Windows系统下的控制中心,已发展成为工业市场领域的领导者,乃至业界遵循的标准。
Wincc集生产自动化和过程自动化于一体,应用于各种工业自动化领域,是提高工厂生产效率的上乘之选,并支持多种语言。
工业生产中,报表系统通常是控制系统中非常重要的一部分,是企业管理的基本措施和途径,它通常用来记录重要的现场工艺参数和统计信息。
早期,都是由人工记录的方式进行统计汇总,数据也只能有一种几乎只有记录员才能理解的表现形式,且这种形式难于更改。
当进入计算机时代后,报表这部分工作完全可以由计算机软件来实现,数据动态化,格式多样化,用户可以自己修改数据或格式。
针对自动化工程师而言,如何利用wincc软件来开发适合用户需求的报表,并且高效灵活的解决统计数据是自动化工程师必须掌握的一门技术,也是企业日常生产维护和管理中不可或缺的管理手段之一。
报表的变现形式分为许多种,大体上可分为两种形式:曲线格式和表格格式。
曲线形式主要是利用WINCC自带控件来实现,在控件属性中,可对趋势、常规、字体、趋势窗口、时间轴、数值轴、工具栏、状态栏、在线组态、导出中具体参数进行设置,以符合用户的生产需求和审美要求。
例如,时间轴可设成1分钟,1小时或者1天的形式,数值轴可以设置成根据实际测量值实时改变数值轴的范围。
应用在线趋势曲线的前提条件是,用户需要在变量记录里设置需要归档的变量内容和归档周期等一系列参数。
针对于一些特殊归档要求,曲线形式的归档可能满足不了用户的需求,往往用户需要生成一种支持打印功能并以表格形式查询的数据归档报表。
针对于这类复杂的报表,可以通过用户归档和Wincc报表编辑器来实现此类功能。
wincc报表时间列时间的设置
wincc报表时间列时间的设置
用wincc6.0做了一个报表,列表示每一个变量,行则表示时间,现在我想实现:1.数据间隔为2个小时记录一次;
2.只打印该天的数据(即从0点到24点的数据,12行)并且只打印改天的;
3.设置个时间段也可以,但是这个时间段的编程我不知道该怎么做,听说可以建两个变量来设置起始时间变量,不过我不太明白,这两个变量该设置成什么样的?
最佳答案
参考
深入浅出西门子WINCC6.0:
/SearchDatum.aspx?query=深入浅出&psort=&brand=&area=&industry=
使用用户归档实现报表:
/download/Upload/AS/applicati on/A0296.zip
WINCC数据报表实现方法:
/download/Upload/AS/applicati
on/A0300.pdf。
最新wincc生成excel
1给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。
方便初学者学习!//log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次//如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。
//本程序主要是演示数据记录的过程。
//在c:\建立一个excel文件,该文件可以是你的报表模版Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim tagshijian,sheetname,username,zhushiDim tagdayDim 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,a40Dim i,j,t,countDim msgDim patch,fnDim d,m,y,oh,mm,ssd=" "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 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") Set a16=HMIRuntime.Tags("a16") Set a17=HMIRuntime.Tags("a17") Set a18=HMIRuntime.Tags("a18") Set a19=HMIRuntime.Tags("a19") Set a20=HMIRuntime.Tags("a20") Set a21=HMIRuntime.Tags("a21") Set a22=HMIRuntime.Tags("a22") Set a23=HMIRuntime.Tags("a23")Set a25=HMIRuntime.Tags("a25") Set a26=HMIRuntime.Tags("a26") Set a27=HMIRuntime.Tags("a27") Set a28=HMIRuntime.Tags("a28") Set a29=HMIRuntime.Tags("a29") Set a30=HMIRuntime.Tags("a30") Set a31=HMIRuntime.Tags("a31") Set a32=HMIRuntime.Tags("a32") Set a33=HMIRuntime.Tags("a33") Set a34=HMIRuntime.Tags("a34") Set a35=HMIRuntime.Tags("a35") Set a36=HMIRuntime.Tags("a36") Set a37=HMIRuntime.Tags("a37") Set a38=HMIRuntime.Tags("a38") Set a39=HMIRuntime.Tags("a39") Set a40=HMIRuntime.Tags("a40")Set count=HMIRuntime.Tags("count")sheetname="Sheet1"tagshijian=NowSet objExcelApp=CreateObject("Excel.Application") objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activatecount.Readt=count.Value +1If t<4 Thencount.Write 4t=4Elsecount.Write tEnd IfIf t>10080 Thencount.Write 3t=4End IfFor t=t To tWith objExcelApp.worksheets(sheetname).cells(t,1).value=tagshijiana1.Read.cells(t,2).value=a1.Valuea2.Read.cells(t,3).value=a2.Valuea3.Read.cells(t,4).value=a3.Valuea4.Read.cells(t,5).value=a4.Valuea5.Read.cells(t,6).value=a5.Valuea6.Read.cells(t,7).value=a6.Valuea7.Reada8.Read.cells(t,9).value=a8.Value a9.Read.cells(t,10).value=a9.Value a10.Read.cells(t,11).value=a10.Value a11.Read.cells(t,12).value=a11.Value a12.Read.cells(t,13).value=a12.Value a13.Read.cells(t,14).value=a13.Value a14.Read.cells(t,15).value=a14.Value a15.Read.cells(t,16).value=a15.Value a16.Reada17.Read.cells(t,18).value=a17.Value a18.Read.cells(t,19).value=a18.Value a19.Read.cells(t,20).value=a19.Value a20.Read.cells(t,21).value=a20.Value a21.Read.cells(t,22).value=a21.Value a22.Read.cells(t,23).value=a22.Value a23.Read.cells(t,24).value=a23.Value a24.Read.cells(t,25).value=a24.Value a25.Reada26.Read.cells(t,27).value=a26.Value a27.Read.cells(t,28).value=a27.Value a28.Read.cells(t,29).value=a28.Value a29.Read.cells(t,30).value=a29.Value a30.Read.cells(t,31).value=a30.Value a31.Read.cells(t,32).value=a31.Value a32.Read.cells(t,33).value=a32.Value a33.Read.cells(t,34).value=a33.Value a34.Reada35.Read.cells(t,36).value=a35.Value a36.Read.cells(t,37).value=a36.Value a37.Read.cells(t,38).value=a37.Value a38.Read.cells(t,39).value=a38.Value a39.Read.cells(t,40).value=a39.Value a40.Read.cells(t,41).value=a40.ValueEnd WithNextobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//SAVE子程序//保存文件//读出系统时间,把文件保存为以日期为文件名的文件//每周日的23:59:10执行一次Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim sheetname,usernameDim tagdayDim i,j,tDim msgDim patch,fnfn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))+CStr(Hour(Now)) &CStr(Minute(Now))patch="c:\"&fn&".xls"sheetname="Sheet1"Set objExcelApp=CreateObject("Excel.Application")objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activateobjExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//delete子程序//删除模版,拷贝空白模版到当前目录//有人会问,为什么不用vb清空当前已经记录数据的模版文件//问的好,如果这个模版里面已经存了几万条数据了呢?//所以最快的方法是用vc脚本,将当前模版删除,拷贝一个空的模版到c:/ /每周日的23:59:30执行一次#include "apdefap.h"int gscAction( void ){#pragma option(mbcs)// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END#pragma code("kernel32.dll")long CopyFileA(LPCTSTR,LPCTSTR,long);long DeleteFileA(LPCTSTR);#pragma code()DeleteFileA("C:\\Table.xls");CopyFileA("C:\\bak\\Table.xls","C:\\Table.xls",TRUE);// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_ENDreturn 0;}2。
wincc 通过excel生成 日报表 月报表
wincc 通过excel生成日报表月报表
请教:怎样把wincc的归档变量存储到excel中,而且每天生成一个日报表,每月生成一个月报表
问题补充:
请教范范老师,因为我对vb实在是不熟悉,还得请教两个问题:1.这个脚本是不是编在vb的全局脚本里面,2.你说到的执行时间,我不知道要怎么控制这个时间,3.我把变量导入到excel里的是瞬时值还是平均值,因为我想在excel 里显示一个小时的平均值,需要怎么做呢
最佳答案
要做这个需要有一定的VB功底,你可以抄一抄别人的程序,然后运行试验试验,最后把程序变成自己的,这样最快最容易达到目的。
下面是我写的一段日报表,已经投入项目使用。
需要注意的是脚本执行的时间要控制好。
因为字数限制发的是图片版的,还需要敲一下程序。
图片说明:1,程序2,程序23,程序3
标签。
WINCC嵌入式EXCEL报表系统使用手册
WINCC 嵌入式EXCEL 报表系统使用手册1、打开报表画面点击主画面中“报表”按钮,打开报表画面:2、界面介绍报表画面功能介绍时间设置3、选择报表文件在“报表选择”栏中选择需要生成报表的名称:4、选择报表类型在“类型选择”栏选择报表类型:日报表、月报表、年报表、自由报表,具体介绍如下:●日报表——为一天的报表数据,每小时产生一个记录,共24条记录,时间为“00:00:00”至“23:59:59”。
●月报表——为一月的报表数据,每天产生一个记录,根据月份的不同分别产生28-31条记录,时间为“01 00:00:00”至“30 23:59:59”(或“2823:59:59”/“29 23:59:59”/“31 23:59:59”)。
●年报表——为一年的报表数据,每月产生一个记录,共12条记录,时间为“01-01 00:00:00”至“12-31 23:59:59”。
●自由报表——为指定时间段的报表数据,时间段由“开始时间”和“结束时间”共同决定,每一个“时间间隔”产生一个记录,记录条数由时间段和时间间隔决定。
5、设置报表时间根据报表类型,选择报表时间。
点击“日历”可以打开日历控件,控件中可以快速选择日月年,也可以通过下拉窗口进行选择。
当为日报表时,需要设置“年”、“月”、“日”;当为月报表时,需要设置“年”、“月”;当为年报表时,需要设置“年”;当为自由报表时,需要设置开始和结束时间的“年”、“月”,“日”、“时”、“分”等全部项,间隔时间也需要设置。
6、生成报表当“报表选择”、“类型选择”和时间选择均设置完成后,点击“生成报表”按钮,系统将开始在右边表格中生成出报表,在生成报表的过程中能看见表格中数据逐渐显示,也能通过下方进度条看见完成情况。
生成报表时,空数据区用“#”填充,错误数据区用“##”填充,报表生成完毕后将有“成功生成数据文件!”提示。
同时,报表生成后将自动保存到项目中“report”文件夹下。
wincc报表打印中选定时间范围
wincc报表打印中选定时间范围
做wincc报表打印中选定时间范围,看到一篇文章里面有三个程序,后面贴了个图片!可是不知道怎么组态的!
图片说明:1,wincc报表打印中选定时间范围
最佳答案
1)首先新建两个文本8位字符集变量,begintime和endtime,用于存放起始时间和终止时间,然后新建12个文本8位字符集变量,分别是起始的年、月、日、时、分、秒,终止的年、月、日、时、分、秒,即图中的12个io域,输入完成时,用脚本将起始的年、月、日、时、分、秒和终止的年、月、日、时、分、秒拼成标准日期时间格式,如:2013-08-0911:16:00,然后将标准时间格式赋给begintime 和endtime;
2)新建页面布局,在页面布局中添加在线表格控件,双击控件,在连接选项卡中双击分配参数,组态要打印的归档变量,在“列”选项卡中取消选择时间的更新和时间范围,点击确定,然后双击动态参数,找到begintime,双击,选择之前创建的文本8位字符集变量begintime,找到endtime,双击,选择之前创建的文本8位字符集变量endtime,点击
确定;
3)新建打印作业,调用刚才新建的页面布局;
4)在画面上创建两个按钮,“打印预览”中调用函数:标准函数---report----rptjobpreview,“打印”中调用函数:标准函数---report----rptjobprint;。
(完整word版)在WinCC中如何使用VBS读取变量归档数据到EXCEL
(完整word版)在WinCC中如何使⽤VBS读取变量归档数据到EXCEL⽂档类型常问问题, 条⽬ID:77940055, ⽂档发布⽇期2013年7⽉23⽇4)(评估在WinCC中如何使⽤VBS读取变量归档数据到EXCEL推荐⽂档: 西门⼦⼯程师推荐本⽂档!1概述介绍如何在WinCC项⽬中使⽤VBS脚本读取变量归档值,并把获取的数据保存成新的Excel⽂件。
⽂中⽰例代码仅适⽤于以绝对时间间隔⽅式访问。
2软件环境Windows XP SP3中⽂版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接⼝才能够解压并读取这些数据。
关于WinCC连通性软件包的详细信息请参考连接:37436159当使⽤OLE-DB⽅式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。
连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中Catalog为WinCC运⾏数据库的名称,当修改项⽬名称或在其它计算机上打开原项⽬时, Catalog会发⽣变化。
建议使⽤WinCC内部变量“@DatasourceNameRT”获得当前项⽬的Catalog。
Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。
3.1 查询语句格式数据的查询语句的格式要求如下:8 字节长ValueID 的请求:TAG_LLVID:R,,,[,][,]4 字节长ValueID 的请求:TAG:R,ValueName>,,[,][,]其中:ValueID:过程值归档变量的唯⼀标识符。
ValueName:过程值归档变量的名称,格式为“ArchiveName\Value_Name”,可以使⽤多个名称。
WinCC设备运行数据-日报表
WinCC设备运行数据-日报表
原创作者:张占领 - 西门子工业技术支持中心
在实际生产过程中,需要对机床,压机之类设备的启停时间、耗电量以及产品数量等运行数据进行统计,生成日报表,分析企业生产运营状况。
运行效果:
1. 通过下拉列表选择设备
2. 通过时间控件选择日期
3. 生成日报表
日报表中呈现的数据不是原始采集的直接数据,需要做简单计算,如运行时间,用电量。
实现方法简述:WinCC自动存储设备运行数据到第三方数据库(简单起见,这里采用Access数据库),然后通过脚本查询数据库,将数据填充到excel模板并另存为htm文件,再通过WinCC画面中的web控件加载此htm文件,呈现日报表。
实现上述功能的WinCC V7.5 SP1源程序链接:
https:///s/17PZ_lqrCwhyN9I2LccGqqA
详细的开发步骤,这里不详述。
WinCC用户归档在报表中的应用
技术推广WinCC用户归档在报表中的应用余丹(江西工业职业技术学院,江西南昌330096)摘要:为了在监控系统中对过程数据进行归档和对复杂报表进行自定义编辑,采用了WinCC的选件用户归档来实现。
通过VBScript脚本语言实现数据存储,形成生产作业的日报表、月报表和年报表,并结合数据库和Excel知识,可定时生成Excel文件,以及选择性地显示和打印报表。
关键词:WinCC;用户归档;VBScript脚本;报表西门子公司的WinCC组态软件适合于各个行业和各种技术系统,用于在生产和过程自动化环境中实现可视化和过程控制任务。
WinCC软件本身提供了变量记录归档数据,对于过程归档数据的访问,虽可以使用WinCC在线表格控件和在线趋势控件进行数据的显示和打印,但不能直接对过程归档数据进行访问和处理,且系统未激活时不能访问归档数据,使得变量记录不能满足复杂报表的要求“」。
WinCC的附加选件用户归档能连续保存过程数据,存储必要的文本,在图形编辑器中,可以组态WinCC用户归档表格元素来以表格形式显示运行系统中用户归档的在线数据。
WinCC在处理报表时能对用户归档的历史数据进行任意查询、过滤和导出,通过VBScript编程能将历史数据自动保存为Excel文件,使得用户可以用Excel来灵活处理数据巴本文采用用户归档和VBScript自定义复杂报表,为解决WinCC软件制作复杂报表问题提供了一条有效的途径。
1用户归档介绍用户归档编辑器提供2种数据库表格:(1)用户归档。
用户归档是用户可在其中创建自己的数据域的娜库表格。
用户归档用于存储数据,并根据SQL数据库规则提供对这些数据的标准化访问。
(2)视图。
视图接收来自用户归档的数据并用于数据的相加。
用户归档利用4个控制变量来触发用户归档。
控制变量有用于记录编号的ID、进行读、写、删除的Job、归档域的数组Field和数值Value。
2用户归档实现报表2.1报表规划在本项目中,为了将桥式起重机每班的起重量、班次、桥机号、投料口、日期和日期与时间,在到达确切位置时就触发数据记录。
WINCC通过工业数据桥将数据记录导出到Excel
WINCC通过工业数据桥将数据记录导出到ExcelWINCC通过工业数据桥将数据记录导出到Excel表格一软件版本说明1.经典版WINCC V7.4SP12.Industrial Data Bridge V7.4SP13.Excel 2007 包含多种版本都可使用,本实例为2007版本。
二组态wincc画面1.组态内部变量tag2_datalog:用不变量记录数据tag1_tigger:触发变量,用于触发记录数据2.组态变量记录4.组态画面准备工作:在计算机-属性-启动-选择变量记录运行系统。
组态画面三工业数据桥设置1.创建连接打开工业数据桥组态软件,创建一个新的连接数据提供方:OPC Data Access数据消费方:Excel分别在下拉列表中选择上述参数。
2.设置数据提供方数据点击Provide(OPCDA)组态数据OPC服务器:OPC Server. WINCC节点名称:Localhost 本地主叫2.消费方组态设置文件路径为设计文件夹下-IDB文件夹。
高级选项中的设置可全部为默认设置即可。
3 设置项目设置传送选项触发变量:选择定义好的触发变量触发值为1:当触发值设置为1时记录一次数据。
确认值2:将提供方数据与消费方数据一一映射。
3.保存工业数据桥组态数据点击下图红色圈内的箭头,将数据保存在设计文件-IDB文件夹下即可。
四.设置工业数据桥运行系统1 选择组态文件双击打开idb2即可。
接下来电机connect 和start 即可进行数据传送传送结束,点击stop和disconnect即可完成数据传输,自动生成Excel数据表格。
在设计文件下-IDB文件夹下打开EXCEL文件即可。
WinCC中全局脚本VBS归档到Excel
WinCC中全局脚本VBS归档到Excel中用一个变量触发数据归档到Excel中,请高手看看我写的为何不能运行。
Sub procedure1If Item.OutputValue = "NewTag" ThenDim oVar,oBlendingVar,objExcelApp,oWorkBook,ExcelTableFull,oFileNameOn Error Resume NextExcelTableFull=0Set objExcelApp=CreateObject("Excel.Application")objExcelApp.Visible=FalseSet oWorkBook=objExcelApp.Workbooks.Open("D:\BKHL_HXBJ\模板\Receipt_Table.xls") Dim iBlankLineiBlankLine=oWorkBook.ActiveSheet.Columns(1).Find("0").Row'MsgBox("iBlankLine="&iBlankLine)If iBlankLine<504 ThenobjExcelApp.Cells(iBlankLine,1).Value=HMIRuntime.SmartTags("Recipe_Number").Value objExcelApp.Cells(iBlankLine,2).Value=HMIRuntime.SmartTags("BaseOil_Percent_1").Value objExcelApp.Cells(iBlankLine,3).Value=HMIRuntime.SmartTags("BaseOil_Percent_2").Value objExcelApp.Cells(iBlankLine,4).Value=HMIRuntime.SmartTags("BaseOil_Percent_3").Value objExcelApp.Cells(iBlankLine,5).Value=HMIRuntime.SmartTags("BaseOil_Percent_4").Value objExcelApp.Cells(iBlankLine,6).Value=HMIRuntime.SmartTags("BaseOil_Percent_5").Value objExcelApp.Cells(iBlankLine,7).Value=HMIRuntime.SmartTags("BaseOil_Percent_6").Value objExcelApp.Cells(iBlankLine,8).Value=HMIRuntime.SmartTags("BaseOil_Percent_7").Value objExcelApp.Cells(iBlankLine,9).Value=HMIRuntime.SmartTags("BaseOil_Percent_8").Value objExcelApp.Cells(iBlankLine,10).Value=HMIRuntime.SmartTags("Additive_Percent_1").Value objExcelApp.Cells(iBlankLine,11).V alue=HMIRuntime.SmartTags("Additive_Percent_2").Value objExcelApp.Cells(iBlankLine,12).Value=HMIRuntime.SmartTags("Additive_Percent_3").Value objExcelApp.Cells(iBlankLine,13).Value=HMIRuntime.SmartTags("Additive_Percent_4").Value objExcelApp.Cells(iBlankLine,14).Value=HMIRuntime.SmartTags("Additive_Percent_5").Value objExcelApp.Cells(iBlankLine,15).Value=HMIRuntime.SmartTags("Additive_Percent_6").Value objExcelApp.Cells(iBlankLine,16).Value=HMIRuntime.SmartTags("Additive_Percent_7").Value objExcelApp.Cells(iBlankLine,17).Value=HMIRuntime.SmartTags("Additive_Percent_8").ValueElse'MsgBox("Data Table Full,Copy to the backup file,continue ?")objExcelApp.displayalerts=FalseoFileName=CStr("D:\BKHL_HXBJ\模板\运行数据_"&Month(Date)&"月"&Day(Date)&"日"&"_"& Hour(Time)&"时"&Minute(Time)&"分"&".xls")oWorkBook.Saveas(oFileName)ExcelTableFull=1objExcelApp.displayalerts=TrueEnd IfoWorkBook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp=NothingSet oWorkBook=NothingIf ExcelTableFull=1 Then'MsgBox("Data Table Full, Clear the current data table, continus?")Set objExcelApp=CreateObject("Excel.Application")objExcelApp.Visible=FalseSet oWorkBook=objExcelApp.Workbooks.Open("D:\BKHL_HXBJ\模板\Receipt_Table_Templet.xls")objExcelApp.displayalerts=FalseoWorkBook.Saveas("D:\BKHL_HXBJ\模板\Receipt_Table.xls")objExcelApp.displayalerts=TrueoWorkBook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp=NothingSet oWorkBook=NothingEnd IfEnd IfEnd Sub本文转自亿万论坛:/a/a.asp?B=302&ID=1218853&q=1&r=140751。
wincc生成excel
wincc生成excel给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。
方便初学者学习!//log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次//如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。
//本程序主要是演示数据记录的过程。
//在c:\建立一个excel文件,该文件可以是你的报表模版Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim tagshijian,sheetname,username,zhushiDim tagdayDima1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a 19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a3 7,a38,a39,a40 Dim i,j,t,countDim msgDim patch,fnDim d,m,y,oh,mm,ssd=" "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")Set a16=HMIRuntime.Tags("a16")Set a17=HMIRuntime.Tags("a17")Set a18=HMIRuntime.Tags("a18")Set a19=HMIRuntime.Tags("a19")Set a20=HMIRuntime.Tags("a20")Set a21=HMIRuntime.Tags("a21")Set a22=HMIRuntime.Tags("a22")Set a23=HMIRuntime.Tags("a23")Set a24=HMIRuntime.Tags("a24")Set a25=HMIRuntime.Tags("a25")Set a26=HMIRuntime.Tags("a26")Set a27=HMIRuntime.Tags("a27")Set a28=HMIRuntime.Tags("a28")Set a29=HMIRuntime.Tags("a29")Set a30=HMIRuntime.Tags("a30")Set a31=HMIRuntime.Tags("a31")Set a32=HMIRuntime.Tags("a32")Set a33=HMIRuntime.Tags("a33")Set a34=HMIRuntime.Tags("a34")Set a35=HMIRuntime.Tags("a35")Set a36=HMIRuntime.Tags("a36")Set a37=HMIRuntime.Tags("a37")Set a38=HMIRuntime.Tags("a38")Set a39=HMIRuntime.Tags("a39")Set a40=HMIRuntime.Tags("a40")Set count=HMIRuntime.Tags("count")sheetname="Sheet1"tagshijian=NowSet objExcelApp=CreateObject("Excel.Application") objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activatecount.Readt=count.Value +1If t<4 Thencount.Write 4t=4Elsecount.Write tEnd IfIf t>10080 Thencount.Write 3t=4End IfFor t=t To tWith objExcelApp.worksheets(sheetname) .cells(t,1).value=tagshijiana1.Read.cells(t,2).value=a1.Valuea2.Read.cells(t,3).value=a2.Valuea3.Read.cells(t,4).value=a3.Valuea4.Read.cells(t,5).value=a4.Valuea5.Read.cells(t,6).value=a5.Valuea6.Read.cells(t,7).value=a6.Valuea7.Read.cells(t,8).value=a7.Valuea8.Read.cells(t,9).value=a8.Valuea9.Read.cells(t,10).value=a9.Valuea10.Read.cells(t,11).value=a10.Valuea11.Read.cells(t,12).value=a11.Valuea12.Read.cells(t,13).value=a12.Valuea13.Read.cells(t,14).value=a13.Valuea14.Read.cells(t,15).value=a14.Valuea15.Read.cells(t,16).value=a15.Valuea16.Read.cells(t,17).value=a16.Valuea17.Read.cells(t,18).value=a17.Valuea18.Read.cells(t,19).value=a18.Valuea19.Read.cells(t,20).value=a19.Valuea20.Read.cells(t,21).value=a20.Value a21.Read .cells(t,22).value=a21.Value a22.Read .cells(t,23).value=a22.Value a23.Read .cells(t,24).value=a23.Value a24.Read .cells(t,25).value=a24.Value a25.Read .cells(t,26).value=a25.Value a26.Read .cells(t,27).value=a26.Value a27.Read .cells(t,28).value=a27.Value a28.Read .cells(t,29).value=a28.Value a29.Read .cells(t,30).value=a29.Value a30.Read .cells(t,31).value=a30.Value a31.Read .cells(t,32).value=a31.Value a32.Read .cells(t,33).value=a32.Value a33.Read .cells(t,34).value=a33.Value a34.Read .cells(t,35).value=a34.Value a35.Read .cells(t,36).value=a35.Value a36.Read .cells(t,37).value=a36.Value a37.Read.cells(t,38).value=a37.Value a38.Read.cells(t,39).value=a38.Value a39.Read.cells(t,40).value=a39.Value a40.Read.cells(t,41).value=a40.ValueEnd WithNextobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//SAVE子程序//保存文件//读出系统时间,把文件保存为以日期为文件名的文件//每周日的23:59:10执行一次Option ExplicitFunction actionDim objExcelApp,objExcelbook,objExcelSheetDim sheetname,usernameDim tagdayDim i,j,tDim msgDim patch,fnfn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))+C Str(Hour(Now))&CStr(Minute (Now))patch="c:\"&fn&".xls"sheetname="Sheet1"Set objExcelApp=CreateObject("Excel.Application")objExcelApp.visible=FalseobjExcelApp.workbooks.open "C:\Table.xls"objExcelApp.worksheets(sheetname).activateobjExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.ActiveWorkbook.SaveobjExcelApp.ActiveWorkbook.closeobjExcelApp.ActiveWorkbook.QuitSet objExcelApp=NothingEnd Function//delete子程序//删除模版,拷贝空白模版到当前目录//有人会问,为什么不用vb清空当前已经记录数据的模版文件//问的好,如果这个模版里面已经存了几万条数据了呢?//所以最快的方法是用vc脚本,将当前模版删除,拷贝一个空的模版到c://每周日的23:59:30执行一次#include "apdefap.h"int gscAction( void ){#pragma option(mbcs)// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END#pragma code("kernel32.dll")long CopyFileA(LPCTSTR,LPCTSTR,long);long DeleteFileA(LPCTSTR);#pragma code()DeleteFileA("C:\\Table.xls");CopyFileA("C:\\bak\\Table.xls","C:\\Table.xls",TRUE);// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_END return 0;}。
将WinCC的历史数据写入Excel文件
将WinCC的历史数据写入Excel文件最近,几个客户提到了一个共性的需求:定期将WinCC的历史归档数据导出到Excel文件中,供第三应用去访问。
实现这个需求的方法很多,如:1)通过IDB(Industrial Databridge工业数据桥选件), 通过简单的组态就能实现,操作视频链接:/xxym.aspx?id=124622)手动点击画面中的表格或趋势控件上的导出按钮,将数据导出;或通过定期(如每小时)执行全局脚本控制表格或趋势控件上的导出按钮导出数据。
核心VBS代码如下:TableControl1.Online = 0 '设置表格控件停止实时更新TableControl1.TimeColumnRangeType=1'设置表格控件时间范围为“开始到结束”TableControl1.TimeColumnBeginTime=XXX'设置表格控件的开始时间TableControl1.TimeColumnEndTime=YYY'设置表格控件的结束时间TableControl1.ExportShowDialog=False'取消表格控件导出时弹出对话框TableControl1.ExportDirectoryname=BBB'设置导出的目录TableControl1.ExportFilename=AAA'设置导出的文件名TableControl1.Export()'执行表格控件的导出动作注意:此种方式,控件所在画面要为当前运行画面或用全局脚本将其置为当前画面,否则全局脚本无法操作此控件。
3)通过脚本调用WinCC OLE DB接口直接读取历史数据,写入到Excel文件中----------------------------------------------这里重点介绍第3)种:VBS访问WinCC OLE DB接口读取历史数据,写入Excel(Connectivitypack连通包提供此接口)这种方式核心代码包括A和B这2部分A. 调用WinCC OLE DB接口读取历史数据核心代码及注解:A1. 查询归档数据scon='Provider=WinCCOLEDBProvider.1;Catalog=CC_test03 _20_06_12_17_50_01R;Data Source=.\WinCC''建立到归档数据库的连接字符串'Catalog为WinCC数据库的名称(内部系统变量@DatasourceNameRT的值),Data Source为服务器名称,本地用“.\WinCC”即可。
在wincc 中怎么做才能把报表生成按日期的Excel 文件
在wincc 中怎么做才能把报表生成按日期的Excel 文件VBS脚本实现,就是把文件名称以变量的形式表示。
参考'关闭保存Dim patch,filenamefilename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))+CStr(Minute(Now))&CStr(Second(Now)) patch= "d:\"&filename&"demo.xls"objExcelApp.ActiveWorkbook.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= Nothing对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。
Dim excelappDim aa,bb,ccSet excelapp = CreateObject("Excel.Application")Set aa = HMIRuntime.tags("tag1")excelapp.visible = False'Trueexcelapp.workbooks.open "D:\excel.xls"bb = Now 'getcurrent_datetime()aa.ReadMsgBox CStr(bb)excelapp.cells(1,1).value = "rrrrrr"'111111excelapp.cells(1,2).value = CStr(bb)excelapp.cells(2,2).value = CStr(aa.value)excelapp.cells(3,2).value = CInt(aa.value)excelapp.cells(4,2).value = CSng(aa.value)excelapp.cells(5,2).value = CDbl(aa.value)excelapp.cells(6,2).value = CLng(aa.value)excelapp.cells(3,3).value = ScreenItems("33").outputvalueexcelapp.cells(4,4).value = ScreenItems("35").outputvaluecc = "D:\excel" + Mid(CStr(bb), 1, 4)+ Mid(CStr(bb), 6, 2)+ Mid(CStr(bb), 9, 2)+ Mid(CStr(bb), 12, 2)+ Mid(CStr(bb), 15, 2)+ Mid(CStr(bb), 18, 2) + ".xls"MsgBox ccexcelapp.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖excelapp.activeworkbook.saveas cc '根据当前日期时间,另存为新的文件'excelapp.activeworkbook.save ’对打开的文件,直接保存'excelapp.activeworkbook.saveAs "D:\excelcopy.xls" ’直接另存为新的文件excelapp.workbooks.closeexcelapp.quitSet excelapp = Nothing这个报表的数据采集没有难度;唯一的难度在于4班3 倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法的。
21.Wincc控件制作报表以及导出EXCEL方法介绍
21.Wincc控件制作报表以及导出EXCEL⽅法介绍假设希望做这样⼀个报表界⾯,可以根据⽇期查询:希望导出的excel报表⽂件在C盘根⽬录,是这个样⼦:接下来我们⼀步步实现这个功能。
1. Wincc历史趋势的数据库表结构有点不好理解,我们新建⼀个数据库名字叫做Report,新建⼀张表,结构是这个样⼦:注意开放sa⽤户,设置sa⽤户有管理report数据库权限,使⽤sql登陆模式。
2. 我们每5秒往report表写⼊⼀条记录,在全局VBS脚本写⼊如下代码:Option ExplicitFunction action'添加纪录Dim T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2Dim ors,conn,con,ssql,ocomDim PCNamePCName=hmiruntime.Tags("@LocalMachineName").ReadT1=HMIRuntime.Tags("温度1").ReadT2=HMIRuntime.Tags("温度2").ReadP1=HMIRuntime.Tags("压⼒1").ReadP2=HMIRuntime.Tags("压⼒2").ReadF1=HMIRuntime.Tags("流量1").ReadF2=HMIRuntime.Tags("流量2").ReadL1=HMIRuntime.Tags("液位1").ReadL2=HMIRuntime.Tags("液位2").ReadA1=HMIRuntime.Tags("分析仪1").ReadA2=HMIRuntime.Tags("分析仪2").ReadS1=HMIRuntime.Tags("转速1").ReadS2=HMIRuntime.Tags("转速2").Readcon="Provider = SQLOLEDB.1;password = sa;user id = sa;Initial Catalog =Report;Data Source = " & PCName & "\WINCC" Set conn=CreateObject("ADODB.Connection")conn.ConnectionString=conconn.Cursorlocation=3conn.openssql="insert into Report(CurDateTime,T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2) values(Getdate()," _& T1 & "," & T2 & "," & P1 & "," & P2 & "," & F1 & "," & F2 & "," & L1 & "," & L2 & "," & A1 & "," & A2 & "," & S1 & "," & S2 & ")"Set ors=CreateObject("ADODB.RecordSet")Set ocom=CreateObject("mand")Set ocom.activeconnection=connmandType=1mandText=ssqlSet ors=ocom.ExecuteSet ors=Nothingconn.closeSet conn=NothingEnd Function脚本中的函数不做解释。
wincc6 实时向excel传送数据 并保存以当天日期为名
主题:wincc6实时向excel传送数据并保存以当天日期为名建立一个模本excel文件d:\ExcelExample.xlswincc里创建内部变量i,无符号32位在全局脚本vb创建两个动作1、复制另存ExcelExample.xls,并改名为当天日期,触发周期为1天,i被赋值为2Option ExplicitFunction actionDim fso,myfile,daystr,dstr,fnamedstr = FormatDateTime(Date)fname="d:\" + dstr + ".xls"Set fso = CreateObject("s cripting.FileSystemObject")Set MyFile = fso.GetFile("d:\ExcelExample.xls")MyFile.Copy (fname)HMIRuntime.Tags("i").write 2End Function2、往当天的excel文件里写数据,并保存Option ExplicitFunction actionDim fso,myfile,daystr,dstr,fnamedstr = FormatDateTime(Date)fname="d:\" + dstr + ".xls"Dim ObjExcelAppSet objExcelApp = CreateObject("Excel.Application")objExcelApp.Workbooks.Open fnameDim iHMIRuntime.Tags("i").write HMIRuntime.Tags("i").Read+1i=HMIRuntime.Tags("i").ReadobjExcelApp.worksheets ("sheet1").Cells(i, 2).VAlue = HMIRuntime.Tags("I-COD").readobjExcelApp.worksheets ("sheet1").Cells(i, 3).VAlue = HMIRuntime.Tags("I-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 4).VAlue = HMIRuntime.Tags("I-PH").readobjExcelApp.worksheets ("sheet1").Cells(i, 5).VAlue = HMIRuntime.Tags("I-F").readobjExcelApp.worksheets ("sheet1").Cells(i, 6).VAlue = HMIRuntime.Tags("I-FI").readobjExcelApp.worksheets ("sheet1").Cells(i, 7).VAlue = HMIRuntime.Tags("O-COD").readobjExcelApp.worksheets ("sheet1").Cells(i, 8).VAlue = HMIRuntime.Tags("O-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 9).VAlue = HMIRuntime.Tags("O-NH4N").readobjExcelApp.worksheets ("sheet1").Cells(i, 10).VAlue = HMIRuntime.Tags("0-P").readobjExcelApp.worksheets ("sheet1").Cells(i, 11).VAlue = HMIRuntime.Tags("O-F").readobjExcelApp.worksheets ("sheet1").Cells(i, 12).VAlue = HMIRuntime.Tags("O-FI").readobjExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue =NowobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.ClosEobjExcelApp.QuiTSet ObjEXceLapp = NothingEnd Function问题:怎么在退出wincc时,保存i的值,使wincc再激活时,向excel最后位置写数据注:从wincc帮助抄的程序试了啊不过现在的程序改了第一段:Option ExplicitFunction actionDim fso,myfile,daystr,dstr,fnamedstr = FormatDateTime(Date)fname="d:\" + dstr + ".xls"Set fso = CreateObject("s cripting.FileSystemObject")Set MyFile = fso.GetFile("d:\ExcelExample.xls")MyFile.Copy (fname)End Function第二段:Option ExplicitFunction actionDim fso,myfilep,daystr,dstr,fnameSet fso = CreateObject("s cripting.FileSystemObject")dstr = FormatDateTime(Date)HMIRuntime.Tags("i").write fso.GetAbsolutePathName("") fname=HMIRuntime.ActiveProject.Path++dstr+.xlsDim ObjExcelAppSet objExcelApp = CreateObject("Excel.Application")objExCelApp.Visible = TrueobjExcelApp.Workbooks.Open fnameDim ii=1Do While objExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue<>""i=i+1LoopobjExcelApp.worksheets ("sheet1").Cells(i, 2).VAlue = HMIRuntime.Tags("I-COD").readobjExcelApp.worksheets ("sheet1").Cells(i, 3).VAlue = HMIRuntime.Tags("I-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 4).VAlue = HMIRuntime.Tags("I-PH").readobjExcelApp.worksheets ("sheet1").Cells(i, 5).VAlue = HMIRuntime.Tags("I-F").readobjExcelApp.worksheets ("sheet1").Cells(i, 6).VAlue = HMIRuntime.Tags("I-FI").readobjExcelApp.worksheets ("sheet1").Cells(i, 7).VAlue = HMIRuntime.Tags("O-COD").readobjExcelApp.worksheets ("sheet1").Cells(i, 8).VAlue = HMIRuntime.Tags("O-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 9).VAlue = HMIRuntime.Tags("O-NH4N").readobjExcelApp.worksheets ("sheet1").Cells(i, 10).VAlue = HMIRuntime.Tags("0-P").readobjExcelApp.worksheets ("sheet1").Cells(i, 11).VAlue = HMIRuntime.Tags("O-F").readobjExcelApp.worksheets ("sheet1").Cells(i, 12).VAlue = HMIRuntime.Tags("O-FI").readobjExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue =NowobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.ClosEobjExcelApp.QuiTSet ObjEXceLapp = NothingEnd Function其中objExCelApp.Visible = True可以去掉,就是后台操作了这两段程序分别是两个动作第一段的触发周期是一天,作用是复制另存ExcelExample.xls,并改名为当天日期第二段是忘当天的excel文件里写数据的,触发周期根据个人情况,测试时可以定为10秒,就是每10秒写一次数据另外第二段里的HMIRuntime.Tags都是我wincc里的变量,要根据自己的情况修改。
wincc报表打印中选定时间范围
wincc报表打印中选定时间范围
做wincc报表打印中选定时间范围,看到一篇文章里面有三个程序,后面贴了个图片!可是不知道怎么组态的!
图片说明:1,wincc报表打印中选定时间范围
最佳答案
1)首先新建两个文本8位字符集变量,begintime和endtime,用于存放起始时间和终止时间,然后新建12个文本8位字符集变量,分别是起始的年、月、日、时、分、秒,终止的年、月、日、时、分、秒,即图中的12个io域,输入完成时,用脚本将起始的年、月、日、时、分、秒和终止的年、月、日、时、分、秒拼成标准日期时间格式,如:2013-08-0911:16:00,然后将标准时间格式赋给begintime 和endtime;
2)新建页面布局,在页面布局中添加在线表格控件,双击控件,在连接选项卡中双击分配参数,组态要打印的归档变量,在“列”选项卡中取消选择时间的更新和时间范围,点击确定,然后双击动态参数,找到begintime,双击,选择之前创建的文本8位字符集变量begintime,找到endtime,双击,选择之前创建的文本8位字符集变量endtime,点击
确定;
3)新建打印作业,调用刚才新建的页面布局;
4)在画面上创建两个按钮,“打印预览”中调用函数:标准函数---report----rptjobpreview,“打印”中调用函数:标准函数---report----rptjobprint;。
在WINCC中选定时间打印报表
WINCC报表打印中选定时间范围选择时间打印的程序,在一些细节问题上决定能否成功实现。
1.报表编辑器-〉布局,新建动态对象中的动态表格。
然后连结表格。
如下图:2.取消时间范围的选择,并建立好变量选择,这里的变量应该是变量记录中的归档变量,其采集时间是从归档变量中设置的。
3.完成后退出并新建打印作业。
取消启动参数的选择,选择时间范围中的绝对时间。
如下图。
4.实现打印功能最关键的是一个新建的项目函数,西门子的教程上有例子。
我已将条是调试通过。
/*****************************************************************************/ // 函数名:ModifyPrintJob// 功能:修改打印作业的绝对时间/*****************************************************************************/BOOL ModifyPrintJob(SYSTEMTIME st1, SYSTEMTIME st2, char jobname[200]) {BOOL fRet;PCMN_ERROR pError;HPROPERTIES hProp;LPVOID ptr1, ptr2;DWORD typ;DWORD dwVal;char propname1[200],propname2[200];TCHAR g_szProj[MAX_PATH+1];typ = VT_DATE;strcpy( propname1, "ABSOLUTESELECTIONFROM" );strcpy( propname2, "ABSOLUTESELECTIONTO" );ptr1 = (LPVOID)&st1;ptr2 = (LPVOID)&st2;if( !DMGetRuntimeProject( g_szProj, MAX_PATH, pError ) ){printf( "Error DMGetRuntimeProject(...)\r\n" );return FALSE;}hProp = RPJCreatePropertyHandle( g_szProj, pError );if( !hProp ){printf( "Error RPJCreatePropertyHandle(...)\r\n" );return FALSE;}if( !RPJGetJobProps( hProp, jobname, pError ) ){printf( "Error RPJGetJobProps(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}if( !RPJSetProperty( hProp, propname1, ptr1, (V ARTYPE)typ, 200, pError ) ) {printf( "Error RPJSetProperty(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}if( !RPJSetJobProps( hProp, jobname, pError ) ){printf( "Error RPJSetJobProps(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}if( !RPJGetJobProps( hProp, jobname, pError ) ){printf( "Error RPJGetJobProps(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}if( !RPJSetProperty( hProp, propname2, ptr2, (V ARTYPE)typ, 200, pError ) ){printf( "Error RPJSetProperty(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}if( !RPJSetJobProps( hProp, jobname, pError ) ){printf( "Error RPJSetProps(...)\r\n" );RPJDeletePropertyHandle( hProp, pError );return FALSE;}fRet = RPJDeletePropertyHandle( hProp, pError );return TRUE;}/*****************************************************************************/ // 函数名:TimeFrom// 功能:打印时间的开始时间/*****************************************************************************/ SYSTEMTIME TimeFrom(){SYSTEMTIME st;st.wYear = GetTagWord("FromYear");st.wMonth = GetTagWord("FromMonth");st.wDay = GetTagWord("FromDay");st.wHour = GetTagWord("FromHour");st.wMinute = GetTagWord("FromMinute");st.wSecond = GetTagWord("FromSecond");return st ;}/*****************************************************************************/ // 函数名:TimeTo// 功能:打印时间的结束时间/*****************************************************************************/ SYSTEMTIME TimeTo(){SYSTEMTIME st;st.wYear = GetTagWord("ToYear");st.wMonth = GetTagWord("ToMonth");st.wDay = GetTagWord("ToDay");st.wHour = GetTagWord("ToHour");st.wMinute = GetTagWord("ToMinute");st.wSecond = GetTagWord("ToSecond");return st ;}以上的这些函数都是新建立的项目函数(可以直接粘贴使用,已经过调试)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在wincc 中怎么做才能把报表生成按日期的excel 文件在wincc 中怎么做才能把报表生成按日期的Excel 文件VBS脚本实现,就是把文件名称以变量的形式表示。
参考'关闭保存Dim patch,filenamefilename=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.QuitSet objExcelApp= Nothing对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。
Dim excelappDim aa,bb,ccSet excelapp = CreateObject("Excel.Application") Set aa = HMIRuntime.tags("tag1")excelapp.visible = False'Trueexcelapp.workbooks.open "D:\excel.xls" bb = Now'getcurrent_datetime()aa.ReadMsgBox CStr(bb)excelapp.cells(1,1).value = "rrrrrr"'111111excelapp.cells(1,2).value = CStr(bb)excelapp.cells(2,2).value = CStr(aa.value) excelapp.cells(3,2).value = CInt(aa.value) excelapp.cells(4,2).value = CSng(aa.value)excelapp.cells(5,2).value = CDbl(aa.value) excelapp.cells(6,2).value = CLng(aa.value) excelapp.cells(3,3).value = ScreenItems("33").outputvalue excelapp.cells(4,4).value = ScreenItems("35").outputvaluecc = "D:\excel" + Mid(CStr(bb), 1, 4)+ Mid(CStr(bb), 6, 2)+Mid(CStr(bb), 9, 2)+ Mid(CStr(bb), 12, 2)+ Mid(CStr(bb), 15, 2)+ Mid(CStr(bb), 18, 2) + ".xls"MsgBox ccexcelapp.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖excelapp.activeworkbook.saveas cc '根据当前日期时间,另存为新的文件'excelapp.activeworkbook.save ’对打开的文件,直接保存'excelapp.activeworkbook.saveAs "D:\excelcopy.xls" ’直接另存为新的文件excelapp.workbooks.closeexcelapp.quitSet excelapp = Nothing这个报表的数据采集没有难度;唯一的难度在于4班3 倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法的。
这个报表用WinCC完全可以实现。
关键就是如何存储数据。
方法一 WinCC 支持VBS 脚本,其实通过VBS 和VB本质是没有区别的,都是通过ADO 方式,存储数据格式化数据的存储。
WinCC的用户归档说白了就是WinCC提供的一个操作数据库表的工具。
我们可以通过用户归档,创建数据库表。
然后存储数据。
显示的话通过报表系统的连接外部ODBC数据库,通过 SQL 脚本格式化输出。
就ok了。
方法二这个报表的关键就在于如何确定班别和数据之间的关系。
四班三运转在连续生产的行业是很常见的。
首先确定班别和数据的对应关系。
在WinCC 归档的方式中有一种是通过事件触发的。
那么我们可以通过不同的用户登录来确定归档的启动或者停止,WinCC中对应一个变量可以生成几个归档变量,那么我们就能确定班次和数据的关系。
比如:一个变量A,在归档中我们可以建两个归档变量和它对应,一个是aa,一个是bb。
A班用户登录时启动aa的归档,停止bb 的归档;B班用户登录时启动bb 归档,停止aa 归档,依次类推。
至于得到数据的方法,可以使用WinCC 的标准归档查询实现。
数据的显示,通过WinCC 报表的变量直接连接显示。
觉得和VB相比,方法各有千秋。
但是这样就省去了多加一个应用程序了。
WinCC里面做复杂报表的方法。
WinCC 自带的报表编辑器确实功能有限,还好WinCC 本身功能是强大的,可以通过脚本来完成复杂报表功能。
目前我也是这么做的。
报表的思路如下:1、用excel我们也做一个符合自己实际需要报表(日报)的空白模板,我称它为Day_Report.xls; 相信各位大侠的excel表格都比我做的精美;我不懂关系数据库,但各位大侠肯定比我精通excel 各单元格之间的加、减、乘、除,甚至更加复杂的运算,并把运算结果放在你需要放置的单元格内,关系数据之间的运算,要在excel模板里面预先设置好。
我们要充分利用excel强大的数据处理能力~~~ 2、在WinCC 里面写一个全局脚本,在每天的00:00:01触发,执行复制Day_Report.xls并以此刻的年月日加载到模板文件名里面,将复制新生产的“Day_Report年月日.xls”存盘到你指定的目录。
这样当天的空白日报文件也就有了。
全局脚本代码如下:(本人测试通过,仅供参考) #include "apdefap.h"int gscAction( void ){#pragma code ("kernel32.dll")//调用动态链接库VOID GetLocalTime(LPSYSTEMTIME lpSystemTime); #pragma code ()#pragma code("Shell32.dll")//调用动态链接库VOID ShellExecuteA(HWND, LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT);#pragma code()char FileName[30] = ""; char DateTime[30] = ""; SYSTEMTIME sysTime;__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");GetLocalTime(&sysTime);sprintf(FileName,"d:\\Day_Report_%02d-%02d-%02d.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);pExcel = __object_create("Excel.Application");pExcel->Visible = 0;//控制生成的excel 文件是否可见,当1 时,生成excel 文件时可见. pExcel->Workbooks ->Open ("d:\\Day_Report.XLS"); pExcel->ActiveWorkbook->SaveAs(FileName);//存盘//pExcel->ActiveWorkbook->PrintPreview();//可以预览//pExcel->ActiveWorkbook->PrintOut();//直接打印pExcel->Workbooks->Close();//关闭文件pExcel->Quit();//退出Excel__object_delete(pExcel);return 0;}3、再写一个全局脚本,整点触发,把你需要记录的变量写到“Day_Report年月日.xls”相应的单元格里面并存盘;这样就完成了报表的数据存储和打印。
也就是说,我们可以在电脑里面存放一份报表,并打印一份报表。
同样也实现了数据的存储。
相关脚本代码如下:(当时是以分钟来做测试的,仅供参考;注意此段代码缺少对其它excel进程的判断,在此脚本执行前,不要有其它excel应用~切记哦~~~呵呵。
)#include "apdefap.h"int gscAction( void ){int i;#pragma code ("kernel32.dll")//调用动态链接库VOID GetLocalTime(LPSYSTEMTIME lpSystemTime); #pragma code ()#pragma code("Shell32.dll")//调用动态链接库VOID ShellExecuteA(HWND, LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT);#pragma code()char FileName[30] = "";SYSTEMTIME sysTime;__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");GetLocalTime(&sysTime);//***********************************SetTagWord("Minute",sysTime.wMinute); i=GetTagWord("Minute")+3;if (i>26) { GetTagWord("Minute") ;} else if (i<=26){sprintf(FileName,"d:\\Day_Report_%02d-%02d-%02d.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);pExcel = __object_create("Excel.Application"); pExcel->Visible =0;//控制生成的excel 文件是否可见,当1 时,生成excel文件时可见. pExcel->Workbooks ->Open (FileName); pExcel->Worksheets("sheet1")->Range("X1")->Value=GetTagChar("@ServerName");//Return-Type: char* 读取当前计算机名pExcel->Worksheets("sheet1")->Range("X2")->Value=GetTagChar("@CurrentUser");//Return-Type: char* 读取当前操作员pExcel->Worksheets("sheet1")->Cells(6,i)->Value=GetTagChar("TAG1"); pExcel->Worksheets("sheet1")->Cells(7,i)->Value=GetTagFloat("TAG2"); pExcel->Worksheets("sheet1")->Cells(8,i)->Value=GetTagFloat("TAG3"); pExcel->Worksheets("sheet1")->Cells(9,i)->Value=GetTagFloat("TAG4");pExcel->Worksheets("sheet1")->Cells(10, i)->Value=GetTagFloat("TAG5"); pExcel->Worksheets("sheet1")->Cells(11, i)->Value=GetTagFloat("TAG6"); pExcel->ActiveWorkbook->Save;//As(FileName);//存盘~//pExcel->ActiveWorkbook->PrintPreview();//可以预览//if (i>=27) { pExcel->ActiveWorkbook->PrintOut(); }//直接打印pExcel->Workbooks->Close();//关闭文件pExcel->Quit();//退出Excel__object_delete(pExcel);}return 0;}下面是赠送的励志散文欣赏,不需要的朋友下载后可以编辑删除~~上面才是您需要的正文。