Wincc报表案例

您所在的位置:网站首页 怎样制作报表打印报表 Wincc报表案例

Wincc报表案例

2023-12-31 16:01| 来源: 网络整理| 查看: 265

设备运行报表案例实现 目录概述三、Wincc 变量四、数据存储脚本5、报表制作5、报表制作六、导出EXCEL七、打印EXCEL

目录 概述

在工业生产中存在很多设备,例如机床,压机等,在实际生产过程中需要对这些设备的启停时间、耗电量以及生产产品的数量这些运行数据进行统计,作为分析企业生产运营情况的依据。

本文以WinCC V7.5 SP1为例,介绍WinCC如何实现设备运行数据统计并通过报表的形式展现统计数据,如图1所示: 在这里插入图片描述 可以实现如下功能: ➢ 自动记录各设备的运行数据 ➢ 自动统计各设备的运行时间 ➢ 按设备、日期呈现报表 ➢ 按日期和设备编号以EXCEL表格保存数据 ➢ 可打印存有设备运行数据的表格

本文档所使用的各软件版本如下: ➢ 操作系统版本:Windows 10 ➢ WinCC 版本: SIMATIC WinCC V7.5 SP1 ➢ Office版本: Microsoft Office 2019

2、创建数据库 WinCC自动存储设备运行数据到数据库,然后报表系统从数据库调取数据。 这里使用SQL数据库存储数据。因此需要首先创建SQL数据库。

关于数据库的结构和文件位置说明如下: 1、 每个设备创建一个数据表,表名称中只有编号不同,方便后面编程时定位相应设备的数据库表。 2、 所有表的结构都相同。表的结构如图2所示。 在这里插入图片描述其中ID需要改为标识规范,标识增量为1

在这里插入图片描述“ST_T”代表本次生产设备的启动时间,“EN_T”代表本次生产设备的停止时间。同时,报表会读取其差值作为本次生产所进行的时间。

本例中“Power_ST”和“Power_EN”分别代表设备每次启动和停止时电能表的数据,其差值就是本次生产所消耗的电能。同样“Connt_ST”和“Connt_EN”的差值代表本次所生产的产品数量。

三、Wincc 变量

本例中需要用到两种WinCC变量。一种是和设备运行数据相关的 WinCC变量,包括运行状态、电能表数据、生产数量等。另外一种是用于标识WinCC全局动作执行的WinCC变量。

设备运行相关变量以结构变量形式创建。根据需要创建结构变量的元素,本例中包括Running(运行状态)、Power(电能表数据)、Count (生产数量)三个元素,数据类型如图4所示。 在这里插入图片描述

为每个设备创建结构变量,各设备的变量名称中只有编号不同。 如图5所示。 在这里插入图片描述 运行数据写入数据是通过WinCC全局动作实现的,设备运行状态发生变化时就执行数据写入,根据设备的不同状态写入不同的数据。但是WinCC启动后默认会执行一次全局动作,这样就会造成设备状态没有发生变化,但数据被更新的情况。因此需要使用一个标识变量来避免这一问题。 为每个设备创建一个标识变量,数据类型为二进制变量。如图6所示。

在这里插入图片描述 这些变量的初始值设为0。在WinCC运行后,第一次执行全局动作时,置位相应的标识变量,当标识变量为1时才执行数据库写入操作。

四、数据存储脚本

各设备的运行数据是通过各自的WinCC全局动作写入数据库,WinCC全局动作由设备运行状态的变化触发脚本执行,全局动作脚本根据设备的状态写入不同的数据。

打开WinCC VBS全局脚本编辑器,在项目模块下创建项目函数 各设备的运行数据是通过各自的WinCC全局动作写入数据库,WinCC全局动作由设备运行状态的变化触发脚本执行,全局动作脚本根据设备的状态写入不同的数据。 在这里插入图片描述 脚本:

Function dev_record (devno) On Error Resume Next Dim DEV_ID: DEV_ID = devno Dim DeviceRunning,DeviceCount,DevicePower,flag '读取WinCC变量 Set DeviceRunning = HMIRuntime.Tags("Device" & DEV_ID & ".Running") 'WinCC变量:设备运行状态 DeviceRunning.Read Set DeviceCount = HMIRuntime.Tags("Device" & DEV_ID & ".Count") 'WinCC变量:运行数据1 DeviceCount.Read Set DevicePower = HMIRuntime.Tags("Device" & DEV_ID & ".Power") 'WinCC变量:运行数据2 DevicePower.Read Set flag = HMIRuntime.Tags("flag" & DEV_ID ) flag.Read If flag.Value = 1 Then 'WinCC启动后第一次不执行以下脚本 '-------------------数据库链接--------------------’ Dim conn '定义类对象 Dim SCon '定义数据库连接字符串 Dim oRs1 '定义获取到的数据集 Dim oCom Dim strSQL1 Dim ID Dim m Dim devx: devx = "dev" & DEV_ID 'ID = HMIRuntime.Tags("ID").Read 'MsgBox("devx=" & devx) sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG" If DeviceRunning.Value =1 Then strSQL1="INSERT INTO [dbo].["& devx &"] (dev_no,ST_T,Power_ST,Count_ST) VALUES ('"& DEV_ID & "','"& Now &"','"& DevicePower.Value &"','"& DeviceCount.Value &"')" Set conn=CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.CommandText = strSQL1 Set oRs1 = oCom.Execute Else '--------------------使用查询命令确定此时ID的数值--------------------------- strSQL1= "SELECT * FROM [dbo].["& devx &"]" Set conn=CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 Set oCom.ActiveConnection = conn oCom.CommandText = strSQL1 Set oRs1 = oCom.Execute ID = oRs1.RecordCount 'MsgBox("ID=" & ID) '--------------------得出表格ID的值,以便确定最后一行--------------------------- '数据库更新语句 '--------------------使用修改命令,来更改最后一行的结束数值--------------------------- Set conn=CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.CursorLocation = 3 conn.Open Set oRs1 = CreateObject("ADODB.Recordset") Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1 strSQL1 ="UPDATE [Hong].[dbo].["& devx &"] Set [EN_T]='" & Now & "',[Count_EN]= '" & DeviceCount.Value &"', [Power_EN] = " & DevicePower.Value& " WHERE ([ID] = " & ID & ")" Set oCom.ActiveConnection =conn oCom.CommandText = strSQL1 Set oRs1 = oCom.Execute '--------------------修改命令结束--------------------------- 'MsgBox("m="& ID) End If Set oRs1 = Nothing Set oCom = Nothing conn.Close Set conn = Nothing Else flag.Write 1 End If End Function

各设备的运行数据是通过各自的WinCC全局动作写入数据库,WinCC全局动作由设备运行状态的变化触发脚本执行,全局动作脚本根据设备的状态写入不同的数据。

在全局动作中调用全局项目函数。分别为每个设备创建一个全局动作,如图9所示。 在这里插入图片描述 在全局动作中直接调用项目函数,并输入设备编号作为参数,如图10所示为设备1的全局动作。 在这里插入图片描述 设备运行状态发生变化时执行全局动作,在全局动作中根据设备的状态写入不同的数据。因此需要设定设备状态变量作为全局动作的触发器。如图11所示为设备1的全局动作触发器。

在工业生产中存在很多设备,例如机床,压机等,在实际生产过程中需要对这些设备的启停时间、耗电量以及生产产品的数

在这里插入图片描述 使能WinCC的“全局脚本运行系统”,并激活WinCC运行。 在这里插入图片描述 当有设备启停时,会自动在数据库中记录此设备的启停时间,本次启停时刻的运行数据,如图13所示为设备1的数据库记录结果。 在这里插入图片描述

5、报表制作

报表查询的实现过程是通过脚本查询数据库,把查询结果填充到excel模板并另存为htm文件,在WinCC画面中添加web控件显示htm报表文件。 创建excel模板,如图14所示: 在这里插入图片描述 模板文件存放在WinCC项目文件夹\report\模板下,如图15所示。 在这里插入图片描述

5、报表制作

报表查询的实现过程是通过脚本查询数据库,把查询结果填充到excel模板并另存为htm文件,在WinCC画面中添加web控件显示htm报表文件。

在WinCC报表查询画面上,可以按照设备编号和日期来查询报表。需要在画面中添加日期选择控件、选项组控件和web控件,如图16所示

在这里插入图片描述 按如下步骤添加Microsoft Date and Timer Picker Control和 Microsoft Web Browser。 第一步,在ActiveX控件上右键,选择“添加/删除”,然后在OCX控件列表中选择Microsoft Date and Timer Picker Control和 Microsoft Web Browser。如图17所示。 在这里插入图片描述 第二步,添加控件到画面分别拖拽Microsoft Date and Timer Picker Control和 Microsoft Web Browser控件到画面中。如图18所示。

在这里插入图片描述第三步,添加组合框控件 在画面上添加组合框控件,用来选择设备。可以从智能对象下拖拽组合框控件直接添加到画面,并设置属性。步骤如图19所示。 在这里插入图片描述 第四步,创建生成报表的脚本 在画面中添加按钮用来生成报表并显示在Microsoft Web Browser控件中, 按钮脚本:

Sub OnClick(Byval Item) On Error Resume Next item.Enabled = False '获取设备编号和报表日期 Dim dev_ID,timepicker Dim date_select,strStartTime,strEndTime Set dev_ID = ScreenItems("组合框1")'获取设备编号。"组合框2"为组合框名称 Set timepicker = ScreenItems("控件2")'获取报表日期。"控件2"为时间控件名称 date_select = FormatDateTime(timepicker.Value,2) strStartTime = date_select & " 00:00:00.000" strEndTime = date_select & " 23:59:59.999" 'MsgBox("strStartTime="&strStartTime) 'SQL Dim conn '定义类对象 Dim SCon '定义数据库连接字符串 Dim oRs1 '定义获取到的数据集 Dim oCom Dim m Dim strSQL1 Dim ReportSelect Dim devx: devx = "dev" & dev_ID.SelIndex sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG" strSQL1= "SELECT * FROM [dbo].["& devx &"] Where EN_T >=' "&strStartTime&" ' and EN_T =' 2021-08-04 08:57:54.000 '" 'strSQL1= "SELECT * FROM [dbo].[dev1] Where EN_T =' 2021-08-04 08:57:54.000 '" 'Where EN_T > 2021-08-04 08:57:52.000 'strSQL1= "SELECT * FROM [dbo].[dev1] Where EN_T >= #" & strStartTime & "# and EN_T = #" & strStartTime & "# and EN_T =' "&strStartTime&" ' and EN_T


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3