小区供热监控仿真系统组态王6.55仿真带曲线报表报警等6个界面

刚接手小区供热监控系统改造项目的时候,甲方甩过来厚厚一沓需求文档:"要能实时监控各楼栋温度、压力参数,历史曲线要带对比分析,报警信息得弹窗提示还得自动生成日报表..."。我盯着组态王6.55的启动界面,心想这老牌工控软件还真得拿出来溜溜了。

先说主监控界面这关。咱们得在画面上动态显示各楼栋的供热参数,这里用到的"模拟量输入"控件其实暗藏玄机。比如显示温度数值时,在动画连接里埋了个数据转换脚本:

If \本站点\温度原始值 > 32768 Then
    实际温度 = (\本站点\温度原始值 - 65535) / 10.0
Else
    实际温度 = \本站点\温度原始值 / 10.0
EndIf

这段鬼畜代码是为了处理PLC传过来的16位有符号数——当原始值超过32768时其实是负数,得用补码转换。调试时发现某楼栋温度显示-40℃的灵异现象,最后就是靠这脚本救的场。

曲线界面最让人头秃,业主要求同时显示六个换热站的温度变化趋势。组态王的实时趋势曲线控件默认只支持四条笔,怎么办?灵机一动用两个趋势控件叠罗汉,设置不同的采样周期:

// 趋势控件1配置
SetTrendParam(1, "笔1-笔4", 500ms);
// 趋势控件2配置 
SetTrendParam(2, "笔5-笔6", 1s);

结果发现笔迹刷新不同步,画面跟心电图似的抽抽。后来把两个控件的采样周期统一到800ms,又给控件加了透明背景,总算看着像那么回事了。

报警处理这块,组态王自带的事件管理器是个好东西,但默认弹窗丑得没法看。自己撸了个带声音提示的增强版报警窗,核心是这段报警队列处理脚本:

While 报警队列.Count > 0
    当前报警 = 报警队列.Dequeue()
    If Not 已确认报警.Contains(当前报警.ID) Then
        Call 弹出报警窗(当前报警)
        Beep(1000,500) ' 1kHz频率响0.5秒
    End If
End While

有次模拟测试时故意触发二十多个报警,结果电脑喇叭直接嚎成防空警报——原来忘记加报警间隔限制,后来补了个200ms延时才消停。

说到报表功能,最坑的是每日0点自动生成Excel报表。开始用组态王的定时任务设置每天00:00:00执行,结果有三天死活生成不了。查日志发现,原来在跨天瞬间PLC正在上传数据,导致资源冲突。最后改成00:00:03执行,问题迎刃而解:

Sub 定时生成报表()
    If Time() >= "00:00:03" And Time() < "00:00:10" Then
        ReportExport "日报表模板", "D:\Logs\" & FormatDateTime(Now(),1) & ".xls"
    End If
End Sub

调试到后期,六个界面来回切换时电脑明显卡顿。用Windows性能监视器一查,组态王运行时的GDI对象数量直逼15000——原来是没及时释放不再使用的历史曲线窗口。加上这句销毁脚本,内存占用直接腰斩:

Call CloseWindow("历史趋势_临时")

现在这套系统已经稳定运行三个供暖季,最让我得意的不是那些酷炫的曲线报表,而是某个藏在"系统维护"界面里的彩蛋——连续点击五次压力表盘,会弹出当年调试时被报警声吓到的表情包。甲方领导视察时不小心触发,整个监控室笑成一片,这或许就是工控人的浪漫吧。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐