组态王6.55数据报表定时保存例程:一小时一次可任意修改

张开发
2026/4/5 7:41:01 15 分钟阅读

分享文章

组态王6.55数据报表定时保存例程:一小时一次可任意修改
组态王6.55数据报表定时保存例程程序是一小时一次可以任意修改车间主任喊破喉咙要昨天整点截到的机台小时产量、能耗差报表而你要么前天手动存漏了最后一班要么存下来的文件叫「202X0909报表.xls」「202X0909报表(1).xls」堆在桌面成山——这种场景组态王6.55老用户谁没碰过组态王6.55数据报表定时保存例程程序是一小时一次可以任意修改别慌不用啃厚厚的技术手册找冷门定时函数用运行系统自带的计划调度加一丢丢简单的数据报表控件脚本就能搞一个稳定到离谱、路径命名还全自动有逻辑的保存例程默认设成1小时截存改改数字就行。第一步先搭个「凑合用但能用」的数据报表假设我们已经拖好了报表控件Report1里面A列是机台编号1-3号B列是当前整点班产量变量设成HourOutput1、HourOutput2、HourOutput3C列是班内总能耗HourEnergy1这种表头时间戳先空着后面脚本填。第二步核心——写保存报表的「命令语言」找「数据词典」旁边的「命令语言」文件夹新建一个自定义函数不对新建应用程序命令语言也行但为了复用改调度时间方便我们建计划调度专用的事件动作命令或者先建个普通的「自定义函数」SaveHourReport()把保存逻辑全塞进去后面改路径、改文件名、改存哪个报表只改这个函数就行——对工业项目最怕牵一发动全身模块化才是王道自定义函数SaveHourReport()的代码这里是VB风格的组态王脚本别写错标点哦都是半角的 Dim strFileName As String Dim strPath As String Dim strDate As String Dim strHour As String 第一步生成「按年/月/日分文件夹」的路径再也不堆桌面 先搞到年月日时分秒其实分秒不用我们只要整点所以取YYYY/MM/DD strDate StrFromReal(Year(今()), 0, 0000) \ StrFromReal(Month(今()), 0, 00) \ StrFromReal(Day(今()), 0, 00) 存D盘根目录下的「车间小时报表」文件夹这个路径你随便换换成U盘、局域网共享盘都可以只要组态王有写入权限 strPath D:\车间小时报表\ strDate \ 第二步检查路径有没有没有就自动建不然会保存失败踩过坑 组态王6.55没有直接的MakeDir但可以用API或者用简单的dos命令 ShellExecute(0, open, cmd.exe, /c mkdir strPath , , 0) 这里的三重引号一定要加如果路径里有空格比如「D:\机加一车间 小时报表」不加引号dos命令会识别错目录 ShellExecute最后一个参数是窗口显示方式0是隐藏黑框不然每小时弹个cmd太烦了 第三步生成带时间戳的文件名比如「202X0909-14点机台3台产量能耗.xls」 取整小时注意12点之后会不会变成13点组态王的Hour(今())返回的是0-23直接用没问题 strHour StrFromReal(Hour(今()), 0, 00) strFileName StrFromReal(Year(今()), 0, 0000) StrFromReal(Month(今()), 0, 00) StrFromReal(Day(今()), 0, 00) - strHour 点机台3台产量能耗.xls 第四步先把「当前日期时间戳」填到报表的表头A1单元格 ReportSetCellString(Report1, 1, 1, 202X年09月09日 14:00-15:00小时报表) 哦不对别写死用刚才的变量拼而且要补全时间范围比如14点存的是13:00-14:00的数据这个逻辑别搞反又踩过坑主任要的14点班是14点前干完的 Dim strTimeRange As String If Hour(今()) 0 Then 如果是凌晨0点前一天的23点-0点年份月份日期要减一 这里减一要注意跨月跨年别自己手动写用DateAdd函数 Dim yesterday As Date yesterday DateAdd(d, -1, 今()) strTimeRange StrFromReal(Year(yesterday), 0, 0000) 年 StrFromReal(Month(yesterday), 0, 00) 月 StrFromReal(Day(yesterday), 0, 00) 日 23:00- 00:00小时报表 Else 正常情况当前小时减一 strTimeRange StrFromReal(Year(今()), 0, 0000) 年 StrFromReal(Month(今()), 0, 00) 月 StrFromReal(Day(今()), 0, 00) 日 StrFromReal(Hour(今())-1, 0, 00) :00- StrFromReal(Hour(今()), 0, 00) :00小时报表 End If ReportSetCellString(Report1, 1, 1, strTimeRange) 第五步真的保存报表 ReportSaveAs的参数控件名是否覆盖已有文件1是覆盖建议改成0不然万一脚本重复触发会覆盖或者1也可以毕竟整点只会触发一次完整路径文件名 ReportSaveAs(Report1, 1, strPath strFileName) 最后要不要清一下数据比如下一班开始前把B、C列的旧数据清掉避免重复统计 如果你的Hour_Output1变量是「累计班产」脚本里已经做了清0的话这里就不用清报表了如果是直接读PLC的实时值到报表清一下也行 清第2-4行A1是表头机台1-3是2-4行的B、C列 For i 2 To 4 ReportSetCellValue(Report1, i, 2, 0) ReportSetCellValue(Report1, i, 3, 0) Next i简单分析一下踩过的坑点路径三重引号这个真的是新手杀手我第一次写的时候没加车间名字里有个空格报表死活存不上找了一下午日志才发现dos命令把路径拆成了两段。时间范围搞反凌晨0点的跨月跨年逻辑我也差点漏后来试了下半夜重启组态王发现0点存的报表是当天0点的不是前一天23点的赶紧补了DateAdd。ShellExecute隐藏黑框每小时弹个cmd窗口操作电脑的人肯定烦甚至会手滑关掉0这个参数一定要加。第三步设置「1小时触发一次」的定时调度不用写SetTimer循环脚本定时调度是组态王6.55自带的重启运行系统、重启电脑只要组态王设置了「自动启动」都会自动生效超级稳。打开「工程浏览器」找到左边的「系统配置」→「运行系统设置」点进去。切换到「计划」选项卡点「添加」按钮。「事件名称」随便填比如「保存每小时机台报表」。「事件类型」选「定时执行」。「执行时间」重点来了默认是「每天」「00:00:00」我们要改成每小时点右边的「高级」按钮。在「高级计划」里「重复间隔」选「小时」后面填「1」「持续时间」选「24小时」或者选车间的上班时间比如8小时制就填「8」从8:00到16:00「起始时间」随便填比如「00:00:00」如果填「14:05:00」那第一次触发就是14:05然后15:05以此类推。「执行动作」选「命令语言」然后点「编辑」直接调用我们刚才写的自定义函数就行vbSaveHourReport()点「确定」保存所有设置然后启动运行系统试试等1分钟如果刚才改了高级计划的起始时间比如当前时间1分钟或者1小时去D盘根目录看看有没有自动生成的文件夹和报表文件第四步怎么修改成任意时间太简单了如果想改成2小时、30分钟、1天直接回到「运行系统设置」→「计划」→「编辑刚才的事件」→「高级」改「重复间隔」的数字和单位就行单位有秒、分、小时、天。如果想改成每天固定时间比如每天早上8点存昨天的日报「事件类型」还是「定时执行」不要点「高级」直接选「每天」「执行时间」填「08:00:00」然后把刚才的自定义函数稍微改一下把时间范围改成「昨天全天」文件名改成「202X0909机台3台日报.xls」就行。最后补个小建议如果你的报表数据特别多存Excel有时候会卡可以改成存组态王自己的RPT格式虽然只有组态王能打开但读取速度快或者存CSV格式通用Excel、WPS、Python都能读只要把ReportSaveAs里的文件名后缀改了就行比如strFileName StrFromReal(Year(今()), 0, 0000) StrFromReal(Month(今()), 0, 00) StrFromReal(Day(今()), 0, 00) - strHour 点机台3台产量能耗.csv就这么简单再也不用被车间主任追着要报表啦

更多文章