核心内容摘要
【2020年IEEE TCYB SCI1区TOP】灵活交叉变异灰狼算法GWO_CM+集群任务调度附Matlab代码性能实测
组态王组态王报表数据的触发插入与按日期时间间隔查询历史数据最近在调试组态王的报表功能时发现个挺有意思的需求——既要实现特定条件下的数据自动入库又要能灵活调取历史记录。
今天咱们就手把手来盘这两个核心功能保证看完就能直接上项目用。
先说说触发插入这事儿。
组态王的报表服务自带事件触发机制我常用的是条件脚本报表函数组合拳。
比如产线温度超过阈值时自动记录可以这么写If 温度变量 85 Then ReportSetHistData2(温度报表, 1, 温度变量, ℃, 超温记录) EndIf这里ReportSetHistData2的参数设计得挺讲究第一个参数指定目标报表第二个是记录位置1表示新增行接着是数值和单位最后的备注字段特别适合用来打标记。
注意别在高速变化的场景里滥用这个函数每秒几十次的触发能把数据库撑爆。
时间触发更常见于日报表生成。
在组态王的定时脚本里塞这么一段// 每天23:55自动归档 if(\\本站点\$小时23 \\本站点\$分钟
{ ReportSaveAs(生产日报, D:/报表存档/StrFromTime(%Y%m%d).csv); }这个时间判断的小技巧用了系统时间变量注意时区设置要和实际需求匹配。
StrFromTime格式化日期字符串时%Y%m%d这种写法比手动拼接可靠得多亲测跨年时不会出幺蛾子。
组态王组态王报表数据的触发插入与按日期时间间隔查询历史数据查历史数据这块组态王的查询函数稍微有点门道。
按日期范围查询推荐用标准SQL语法SELECT * FROM 过程数据表 WHERE 时间戳 BETWEEN
08:00:00 AND
08:00:00 ORDER BY 记录时间 DESC但实际项目中更常用的是内置函数查询特别是需要动态时间窗口时// 查最近2小时数据 ReportGetHistData(报警记录, ,
14:00,
16:00,
; // 每15分钟抽样查询 ReportGetHistDataByInterval(能耗统计, 15, minute,
;第二个函数的interval参数支持秒、分、时三种单位但别指望它能自动处理闰秒这种极端情况。
遇到需要复杂条件过滤的情况还是得靠SQL语句自己拼WHERE子句。
实测中发现个小技巧频繁查询时启用异步模式能显著降低界面卡顿。
在脚本里加个异步标志位LONG asyncHandle; ReportGetHistDataEx(生产报表, , , , 1, asyncHandle);这个handle可以用来轮询查询状态配合进度条食用更佳。
不过注意异步查询的结果得用回调函数处理新手容易在这里栽跟头。
最后提个醒历史数据存储策略直接影响查询效率。
建议把高频采集数据和低频事件数据分表存储见过最狠的项目里有人把每秒采集的数据和每小时的统计报表混在一个表里查个三日数据等了半分钟——这酸爽谁用谁知道。