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对象库"引用,否则在有的工控机上会报神奇的错误码。

相关推荐
Watermelo6172 天前
随机扣款实现赛博共产主义,《明日方舟:终末地》公测支付事故复盘
数据库·后端·游戏程序·技术美术·用户体验·游戏策划·游戏美术
top_designer5 天前
手绘贴图画断手?“AI 炼金术”3分钟量产风格化材质
人工智能·游戏·3d·材质·设计师·游戏策划·游戏美术
da_vinci_x10 天前
图标量产:从“手绘地狱”到“风格克隆”?Style Reference 的工业化实战
前端·游戏·ui·prompt·aigc·设计师·游戏美术
da_vinci_x11 天前
武器设计实战:一把大剑裂变 5 种属性?Structure Ref 的“换肤”魔法
游戏·3d·设计模式·ai作画·aigc·设计师·游戏美术
da_vinci_x15 天前
地编革命:手绘无缝地图太肝?3 分钟量产关卡地块
游戏·prompt·aigc·设计师·贴图·技术美术·游戏美术
哎呦哥哥和巨炮叔叔15 天前
Maya vs 3ds Max:2026 年建筑可视化与游戏美术软件选择指南
云渲染·maya·三维建模·3ds max·游戏美术·三维动画·建筑可视化
da_vinci_x18 天前
PS 场景美术革命:3 分钟量产 4K 无缝贴图,从此告别“Offset”去缝加班
人工智能·游戏·prompt·aigc·贴图·技术美术·游戏美术
reddingtons21 天前
【游戏宣发】PS “生成式扩展”流,30秒无损适配全渠道KV
游戏·设计模式·新媒体运营·prompt·aigc·教育电商·游戏美术
da_vinci_x23 天前
【场景美术】2D 游戏要做“视差滚动”?智能补全 + 深度切片,5分钟把单图拆成 5 层景深
人工智能·游戏·prompt·aigc·贴图·技术美术·游戏美术
da_vinci_x1 个月前
【2D场景】16:9秒变21:9?PS “液态缩放” + AI 补全,零成本适配全面屏
前端·人工智能·游戏·aigc·设计师·贴图·游戏美术