WINCC+VBS报表
- 格式:docx
- 大小:351.59 KB
- 文档页数:18
西门子wincc数据报表的实现方式【摘要】随着工业领域的不断发展,用户需求一种以人机界面为控制主体的视窗控制体系的过程监控系统,以此来取代原来的以现场操作按钮和仪表为主的操作体系。
通过开放性、灵活性的可视化界面,迅速并直接的处理生产过程中的事件信息。
凭借这种战略思想,WINCC,运行于Windows系统下的控制中心,已发展成为工业市场领域的领导者,乃至业界遵循的标准。
Wincc集生产自动化和过程自动化于一体,应用于各种工业自动化领域,是提高工厂生产效率的上乘之选,并支持多种语言。
工业生产中,报表系统通常是控制系统中非常重要的一部分,是企业管理的基本措施和途径,它通常用来记录重要的现场工艺参数和统计信息。
早期,都是由人工记录的方式进行统计汇总,数据也只能有一种几乎只有记录员才能理解的表现形式,且这种形式难于更改。
当进入计算机时代后,报表这部分工作完全可以由计算机软件来实现,数据动态化,格式多样化,用户可以自己修改数据或格式。
针对自动化工程师而言,如何利用wincc软件来开发适合用户需求的报表,并且高效灵活的解决统计数据是自动化工程师必须掌握的一门技术,也是企业日常生产维护和管理中不可或缺的管理手段之一。
报表的变现形式分为许多种,大体上可分为两种形式:曲线格式和表格格式。
曲线形式主要是利用WINCC自带控件来实现,在控件属性中,可对趋势、常规、字体、趋势窗口、时间轴、数值轴、工具栏、状态栏、在线组态、导出中具体参数进行设置,以符合用户的生产需求和审美要求。
例如,时间轴可设成1分钟,1小时或者1天的形式,数值轴可以设置成根据实际测量值实时改变数值轴的范围。
应用在线趋势曲线的前提条件是,用户需要在变量记录里设置需要归档的变量内容和归档周期等一系列参数。
针对于一些特殊归档要求,曲线形式的归档可能满足不了用户的需求,往往用户需要生成一种支持打印功能并以表格形式查询的数据归档报表。
针对于这类复杂的报表,可以通过用户归档和Wincc报表编辑器来实现此类功能。
如何实现wincc用VBS做报表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,<ValueID或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]4 字节长ValueID 的请求:TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]其中:ValueID:过程值归档变量的唯一标识符。
Excel批量模板生成文件用于WINCC报表生成。
dim i,j,mDim fsoOn Error Resume Next‘**************************************************生成目录set fso=createobject("scripting.filesystemobject")if fso.FolderExists("F:\报表") then '判断生成目录为报表生成做准备如果存在什么都不干elseSet objFolder=fso.CreateFolder("F:\报表")'如果不存在则生成它(下面的一样)end ifif fso.FolderExists("F:\报表\日报") thenelseSet objFolder=fso.CreateFolder("F:\报表\日报")end iffor m=1 to 12if fso.FolderExists("F:\报表\日报\"&m&"月") thenelseSet objFolder=fso.CreateFolder("F:\报表\日报\"&m&"月")end ifnextSet fso = Nothing'**************************************************生成目录On Error Resume Nextset fso1=createobject("scripting.filesystemobject")Filename="F:\Repot.xls" '模板提取'**************************************************生成保存文件Set oExcel= CreateObject("Excel.Application")Set oWb = oExcel.Workbooks.Open(Filename) '打开Filenames的文件Set fso1 = CreateObject("Scripting.FileSystemObject")for i=1 to 12 '12个月for j=1 to 31 '每个月算31天patch="F:\报表\日报\"&i&"月\"&Year(Now )&"年"&i&"月"&j&"日.xls" '组建地址If fso1.FileExists(patch) Then '判断文件是否存在如果存在什么都不干else oExcel.ActiveWorkBook.SaveAs( patch ) '假如不存在则另存为(地址)end ifnextnext'**************************************************生成保存文件Set fso1 = NothingoExcel.WorkBooks.CloseoExcel.QuitSet oExcel = NothingOn Error Resume Next'********************************************结束进程Sub CloseProcess(sProcessName)For each Process inGetObject("winmgmts:{impersonation Level=impersonate}").InstancesOf("Win32_process") '利用wimp遍历所有进程If Process. Name = sProcessName Then '判断进程名称Process. terminate '关闭指定进程End IfNextEnd Sub'********************************************结束进程CloseProcess "EXCEL.EXE"'********************************************结束EXCELVBS 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 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第一段: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").read objExcelApp.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").read objExcelApp.worksheets ("sheet1").Cells(i, 8).VAlue = HMIRuntime.Tags("O-SS").readobjExcelApp.worksheets ("sheet1").Cells(i, 9).VAlue = HMIRuntime.Tags("O-NH4N").read objExcelApp.worksheets ("sheet1").Cells(i, 10).VAlue = HMIRuntime.Tags("0-P").readobjExcelApp.worksheets ("sheet1").Cells(i, 11).VAlue = HMIRuntime.Tags("O-F").read objExcelApp.worksheets ("sheet1").Cells(i, 12).VAlue = HMIRuntime.Tags("O-FI").read objExcelApp.worksheets ("sheet1").Cells(i, 1).VAlue =NowobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.ClosEobjExcelApp.QuiTSet ObjEXceLapp = NothingEnd Functionc。
在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。
早期是由人工抄录然后统计出相关的报表。
进入计算机控制阶段,这份工作就需要工控软件来实现。
对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。
论坛上很多人都在寻求灵活高效的解决方法。
经过这段时间的网上讨论。
综合网友们的意见和建议,我们做了总结。
并结合WinCC软件本身作了相关的说明。
希望能对大家在以后的报表开发中有所帮助。
接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。
最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。
一.报表的需求分析从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。
1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。
下面是一个很典型的报表需求,就很能说明这样的问题:图1. 月报表分析此报表是典型的工业现场应用,在数据采集没有难度。
唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。
此类报表在连续生产的行业需求很广泛。
比如:钢铁冶金行业需要一天24小时不停运转的系统。
还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分数据的统计,比如汇总、求和、平均等。
如下图也是很典型的应用。
图2. 总分报表另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。
如下图。
图3. 复杂报表这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。
既有历史数据也有实时信息。
当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。
用户自己可以灵活的定义报表的内容和样式。
关于WinCC通讯、报表及变量管理的总结关于WinCC的总结一、通讯问题1、采用MPI与SIMATIC S7通信(1)PC上MPI通信卡的安装和设置打开PC\PG接口,选择PC Adapter适配器,再单击属性选择‘连接到’(一般是USB或者RS232),最后单击确定。
(2)选择WinCC通信卡在WinCC的变量管理器中添加驱动程序,选择MPI,然后右击MPI 选择系统参数,此刻需要需要说明的是在‘逻辑设备名称’选项中要根据情况选择,如果有适配器则选择相应的适配器,否则应该选择仿真器(PLCSIM(MPI))。
(3)WinCC的MPI通道单元连接右击MPI通道单元,单击属性找到连接参数将插槽号改为2即可。
2、采用PROFIBUS通信采用PROFIBUS通信其设置大致相同其通信卡都是(CP5611或CP5613)其他就不在赘述了与MPI大同小异。
3、通道单元(1)采用这种通信方法首先需要安装(CP1613或普通网卡),然后在PG\PC接口找到TCP\IP,最后确定。
(2)其他地方的设置于MPI相同,需要注意的是在‘逻辑设备名称’中要选择ISOInd.Ethernet.二、关于报表到目前为止本人只会采用两种办法制作报表1、采用控件(在线表格)首先在报表编辑器里面将需要的表格制作好,静态部分按照所需制作即可,而动态部分需右击在线表格,点击参数分配将参数一一分配到表格里去(注意:在做表格之前需要先在变量纪录将项目进行归档,至于归档按照向导指示即可)2、将报表设计好之后命名(命名没有特殊要求)3、打开打印设置,新建打印布局此时我们应该选择上述做好的表格,名字要和上述表格命名相同4、打开画面编辑器把相应的控件拖进去(主要是在线报表和趋势两个控件)5、在画面编辑器里拖一个按钮出来,命名打印,鼠标动作右击C 动作打开标准函数,选择标准函数的Report里面的RPTjobprint在弹出的新的一列代码中将RPTjobprint的名字改成打印作业的名字即可。
基于数据库查询的WINCC报表制作步骤一、报表优点:1、数据写入SQL数据表,数据不容易丢失,保存时间长,数据库容量大;2、数据从数据库里面查询和统计,冗余少,速度快,具有直接性、可靠性和稳定性。
3、查询方便灵活,依靠SQL强大的查询和统计功能,想怎么查询就怎么查询,并依靠MSFlexGrid控件做显示,做出来的不仅报表美观大方。
而且还可根据做出很复杂的报表。
二、报表制作流程1、创建SQL数据库,打开Microsoft SQL Server2005,选择SQL Server Manage Studio,点击Connect2、在Databases,右键选择New Database,在Database Name处输入数据库名称,如SQL-Report3、点击Databases,此时可以看到刚才新建的数据库SQL-Report,点击该数据库,右击Tables,选择New Table,在Column Name、Data Type处输入变量名称并选择数据类型,输入完成后,保存并输入表格名称。
4、在WINCC的全局脚本中编写用于写入SQL报表的脚本程序,脚本正常运行后,打开Databases---SQL-Report---Tables---Report会看到记录的数据二、 WINCC报表画面组态在组态报表画面时,需要用到MSFlexGrid控件、DT Picker控件。
选定ActiveX Controls,右键选择Add/Remove,从弹出菜单中选择Microsoft FLexGrid Control,Version 6.0和Microsoft Date and Time Picker Control 6.0(SP4)控件。
从ActiveX Controls中将这两个控件拖到日报表画面,可以在其属性中更改控件的名称,设置MSFlexGrid控件属性。
注意:通常情况下,直接选择Microsoft FLexGrid Control,Version 6.0控件时,需要注册。
无锡康博自动化设备工程有限公司WINCC报表详细做法2014年2月10日珍藏版(如有雷同,就是盗版)一、报表的需求分析从需求上讲报表一般分为:①内容上的需求:涉及求和、平均、最大值和最小值的计算,同时还有复杂报表中混合排列上的处理。
②样式上的需求:简单报表的样式多为固定格式,固定内容。
复杂报表的样式可以有用户自己设计和决定显示的内容,甚至涉及历史趋势及报警信息。
③任务上的需求:报表不仅能显示查看,重要的是打印任务,WINCC的全局脚本能够实现事件触发打印或者定时打印。
报表实例:汉阴污水厂二、WINCC的数据存储④WINCC自带强大的数据归档功能,WINCC的数据记录已包含周期记录归档、非周期动作触发、动作触发的周期记录,甚至在数据处理中可以自动统计出平均值、最大值、最小值以及求和等数据信息。
④对于过程归档的访问,我们可以使用WINCC的在线表格,报表编辑器中自带的打印控件实现报表数据记录功能。
④对于存储数据的访问,WINCC提供了另外一个数据存储和处理工具就是用户归档。
报表实例:用户归档界面三、报表的具体做法关键词:④①报表编辑④②用户归档④③全局脚本④④创建打印任务④⑤画面编辑关于报表编辑器④WINCC的报表制作完成后存储在当前项目下的PRT文件夹内,可以直接复制粘贴到其他项目内使用,只需要修改数据库链接变量即可。
④对于大量数据信息存储的项目,可以创建多张报表进行分类,更准确直接的查看和生成报表。
④每一张报表对应一个新的打印作业,并且需要与用户归档里记录的数据库信息一一对应,下面将一一介绍详细。
报表编辑器—编辑报表报表编辑器—编辑报表动态数据库的创建链接报表编辑器—编辑报表动态数据库的创建链接报表编辑器—编辑报表静态文本的编辑报表编辑器—编辑报表一张完整的报表格式,可以查询10个数据,如果数据较多,可以创建多张报表关于用户归档④WINCC变量记录是系统的存储部分,使用的是SQL数据块。
而用户归档是基于数据库而生成的记录表。
WINCC+VBS报表
1概述
介绍如何在WinCC项目中使用VBS脚本读取变量归档值,并把获取的数据保存成新的Excel文件。
文中示例代码仅适用于以绝对时间间隔方式访问。
2软件环境
Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007
3访问原理
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,<ValueID或
ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep> ]
4 字节长 ValueID 的请求:
TAG:R,<ValueID 或
ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep> ]
其中:
ValueID:过程值归档变量的唯一标识符。
ValueName:过程值归档变量的名称,格式为
“ArchiveName\Value_Name”,可以使用多个名称。
TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD
hh:mm:ss.msc”。
SQL_Clause:SQL 语法中的过滤标准。
TimeStep:时间间隔。
使用 <TimeStep> 时,必须将 <TimeBegin> 指定为绝对时间。
禁止使用相对语句“0000-00-00
00:00:00.000”。
其中ValueID和ValueName的对应关系如下图所示:。