WINCC水电气能源报表案例:每日用量计算与自动存储至WINCC数据库并生成EXECL报表

WINCC水电气能源报表案例将每天的水电气用量计算出来存到WINCC自带的数据库。 并自动生产EXECL报表。 报表的方式就是每天的水电气用量。

最近在做一个工业自动化项目,客户要求把厂区水电气用量统计做成日报表。用WINCC自带的数据库存数据,每天自动生成带折线图的Excel文件。折腾了几天终于跑通整个流程,这里分享几个关键代码片段。

先上数据库操作的核心部分。WINCC的数据库其实是个SQL Anywhere,用ODBC连接。我在全局脚本里写了段定时存储的VBScript:

vbscript 复制代码
Dim conn, cmd, strSQL
Set conn = CreateObject("ADODB.Connection")
conn.Open "DSN=CC_UserDB_01;UID=sa;PWD=12345678"

strSQL = "INSERT INTO EnergyData (Timestamp, Water, Electricity, Gas) VALUES ('" & Now & "', " & HMIRuntime.Tags("WaterFlow").Read & ", " & HMIRuntime.Tags("PowerMeter").Read & ", " & HMIRuntime.Tags("GasFlow").Read & ")"
Set cmd = conn.Execute(strSQL)

If conn.State = 1 Then conn.Close

这段代码每小时执行一次,把实时量值存进数据库。注意时间戳用了NOW函数,实际项目中最好用WINCC内部时间同步,避免服务器和现场设备时间不一致。

日报表生成的关键在于SQL查询。每天凌晨1点触发的脚本里这样处理:

vbscript 复制代码
' 计算昨日总量
Dim yesterday
yesterday = DateAdd("d", -1, Date)

strSQL = "SELECT SUM(Water) as TotalWater, SUM(Electricity) as TotalElec, SUM(Gas) as TotalGas " & _
         "FROM EnergyData WHERE Timestamp BETWEEN '" & FormatDateTime(yesterday, 2) & " 00:00:00' AND '" & FormatDateTime(yesterday, 2) & " 23:59:59'"

Set rs = conn.Execute(strSQL)
If Not rs.EOF Then
    dayTotalWater = rs("TotalWater").Value
    dayTotalElec = rs("TotalElec").Value
    dayTotalGas = rs("TotalGas").Value
End If

这里有个坑:WINCC的时间字段带毫秒,直接用BETWEEN可能漏数据。后来改成时间戳>=开始时间 AND 时间戳<次日零点才稳定。

生成Excel用了个骚操作------直接调用WINCC自带的报表模板。在画面里藏了个静态的Report控件:

vbscript 复制代码
Dim objReport
Set objReport = ScreenItems("DailyReport")
objReport.ReportName = "EnergyDaily.rpl"
objReport.TimeRangeType = 4 ' 自定义时间范围
objReport.StartTime = yesterday
objReport.EndTime = DateAdd("d", 1, yesterday)
objReport.ExportFormat = 1 ' Excel格式
objReport.ExportFileName = "D:\EnergyReports\" & FormatDateTime(yesterday, 2) & ".xlsx"
objReport.Export

模板里预置了数据绑定和柱状图,导出的Excel自动带样式。不过要注意文件路径权限问题,遇到过几次因目录不存在导致脚本卡死的状况,后来加了个自动创建文件夹的校验:

vbscript 复制代码
Function CreateFolderIfNotExists(path)
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(path) Then
        fso.CreateFolder path
    End If
End Function

实测这套方案每天生成300KB左右的Excel文件,半年数据用WPS打开也不卡。客户后来追加需求要邮件自动发送,用CDO.Message配合WinRAR命令行压缩附件又折腾了一晚上...不过那就是另一个故事了。

最后提醒:WINCC的VBScript不支持后期绑定,操作Excel时如果用CreateObject("Excel.Application")记得在全局脚本设置"Microsoft Excel对象库"引用,否则在有的工控机上会报神奇的错误码。

相关推荐
依星6 天前
[工具] SpineUnpacker一款专为 Spine 骨骼动画开发者和游戏美术师设计的 Atlas 大图解包工具 Spine Atlas 解包工具
spine·游戏美术
localbob17 天前
Anima二次元动漫必备大模型教程|20亿参数Anima模型+ComfyUI工作流下载 Anima模型下载、Anima动漫模型、AI绘画模型推荐、动漫AI绘画、ComfyUI工作流、AI游戏美术
人工智能·ai作画·游戏美术
Kurisu57518 天前
博德之门3 2026最新免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
游戏·游戏程序·动画·游戏美术·友善·爱国
2601_956002811 个月前
冬日狂想曲(赠去马赛克补丁)2026.5.13最新版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)pc手机版通用
智能手机·游戏引擎·电脑·游戏程序·动画·游戏美术
2601_956002811 个月前
侠盗猎车手罪恶都市GTA3 2026.5.13最新中文汉化版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)pc手机通用
游戏·游戏程序·动画·游戏策划·游戏美术·gta
2601_956002811 个月前
我的世界2026最新绿色破解版免费下载 手机版通用
github·电脑·游戏程序·游戏美术·关卡设计
2601_956002811 个月前
gta侠盗猎车手5 2026最新绿色破解版免费下载 pc版 手机版通用
游戏·智能手机·游戏程序·团队开发·游戏美术·数字雕刻·关卡设计
sunneo2 个月前
从“生成视频”到“生成表演”:米哈游LPM 1.0如何重新定义数字角色的“灵魂”
人工智能·ai作画·aigc·ai编程·游戏美术
张老师带你学2 个月前
Unity 科幻武器系列
科技·游戏·unity·模型·游戏美术
张老师带你学2 个月前
unity 老版本资源迁移,第一人称,完整城市,有出身点房内视图,有gun shop视图,urp
科技·游戏·unity·模型·游戏美术