一套能落地的产线监控上位机,核心就三件事:PLC 数据采得稳、异常告警发得准、历史数据查得快。用 Qt 实现,Modbus TCP 轮询、QCustomPlot 实时曲线、SQLite 历史库,是经受过产线长期考验的组合。这篇按数据流向,把三层逐一拆开讲。

PLC 数据采集这一层,Qt 怎么搭才稳?

采集必须独立成线程,绝不能塞在界面线程里,这是 Qt 上位机开发的第一铁律。Qt 自带 QModbusTcpClient,设好超时和重试次数后按点位表轮询;西门子设备走 S7 协议就引第三方库封装。两条经验必须守:一是断线自动重连,连续失败三次后指数退避重试,期间界面显示灰色离线态,而不是整个程序卡死;二是点位表配置化,CSV 或 JSON 存地址、倍率、报警阈值,现场改点位不动代码。

PLC通讯数据采集还有个效率窍门:别一个请求等一个回复串行到底,批量读连续寄存器区域,一次拉回几十个点位,周期占用直接降一个量级。

实时曲线怎么画才不卡界面?

QCustomPlot 是工控圈的老朋友,轻量够用。三个实操要点:刷新定时器 500 毫秒一次,别被数据到达频率牵着走;每条曲线只保留最近两万个点,超出就降采样抽稀;通道多、数据密时开启 OpenGL 加速。照这三条做,八个通道的实时曲线在低配工控机上照样丝滑。

告警怎么做到"准"而不是"吵"?

告警做烂了比没有还糟——误报一多,车间直接把声音屏蔽。三个机制必须加。迟滞回差:温度超过80度报警、回落到75度才解除,避免临界点反复横跳。延时确认:持续超标5秒才算数,滤掉毛刺。分级推送:一般偏差记录留档,重要告警弹窗加声音,停机类告警直接推微信到当班班长手机。报警确认、处理备注、自动归档一条龙,月底导出报警统计就能做质量追溯。

历史数据量大了,查询会不会越来越慢?

会,除非一开始就设计好。SQLite 单表过千万行,查询明显变慢。方案是按月分表加索引,点位ID和时间戳建复合索引;原始数据保留三个月,之后自动归档成分钟级聚合数据;查询界面强制时间范围,默认只查一天,分页加载。做 Qt 上位机开发这些年,这套存储策略基本是我们的标配,千万级点位历史数据查询秒级返回没什么压力。

我之前在嘉兴PLC数据采集的一个装配产线项目里,客户原来的系统每天几百条误报,班长看到弹窗就随手关。换成迟滞加延时加分级之后,每天有效告警二十来条,条条有人处理。这才叫告警系统,否则就是个噪音发生器。

动手写代码前,最该先定下来的是什么?

行动建议:先把两张表定下来——点位表和报警规则表,跟电气工程师逐条确认。这两张表定义清楚了,程序骨架一天就能搭起来;定义含糊,联调阶段会无尽返工。