大家好,我是宏集科技鲁工,给大家分享不一样的工业物联网信息!
一、背景
在很多工业现场,客户不仅需要在 HMI 上查看实时警报,还希望把警报数据同步写入 SQL Server 数据库,方便后续做数据分析、报表生成或与 MES 系统对接。但不少人对实时警报控件和历史警报控件的数据同步机制容易混淆,实际配置时常遇到数据库表里的数据和 HMI 画面上对不上的情况。今天就来讲清楚这两者的区别,以及实时警报数据同步到数据库的正确逻辑。
二、方案描述
先说结论:实时警报控件中的数据可以实时同步至 SQL Server 数据库表格,两者保持一致。也就是说,实时警报控件里有多少条警报,数据库表格中就有多少条。数据写入数据库是通过 JMobile Studio 4.7 的 Auto Push 功能自动实现的,关于 Auto Push 的配置方法可以看我之前写的这篇帖子:
HMI 警报数据实时同步数据库,JMobile 4.7 Auto Push 怎么配?_如何把报警信息插入到数据库-CSDN博客
但关键在于,实时警报控件里的警报是动态变化的。当一条警报由触发状态变成未触发状态,并且该警报被用户确认后,这条警报就会从实时警报控件中消失。这时候需要通过 JavaScript 脚本代码控制,同步将数据库表格中对应的这条记录删除,始终保持两边数据一致。Auto Push 负责把警报数据写进数据库,脚本负责在警报消失时把对应记录从数据库移除,两者配合才能实现完整的数据同步。
这一点和历史警报控件完全不同。历史警报控件会记录每一条警报的每一个状态变化,包括触发、恢复、确认等,所有记录都会保留不会消失。所以如果你需要完整的报警追溯记录,应该用历史警报控件做数据同步。如果你只需要当前正在发生的、未被确认的活跃警报列表,实时警报控件同步到数据库就够用了。
三、优势
1. 实时同步,数据一致
实时警报控件与数据库始终保持同步,控件中显示多少条警报,数据库表格中就有多少条记录,不会出现数据错位或遗漏的情况。
2. 自动清理过期数据
当警报被恢复并确认后,通过脚本自动将数据库中对应记录删除,数据库不会堆积大量无效数据,查询效率更高。
3. 灵活选择同步方式
根据实际需求选择实时警报或历史警报做数据库同步,实时同步适合监控当前状态,历史同步适合长期追溯分析,两者可以配合使用互不冲突。
下面放一个视频展示一下实际效果,包括警报触发后数据自动写入数据库、警报确认后数据从数据库同步移除的完整过程。
实时警报同步至数据库