希望在网页上查看 PLC 数据的需求大多归结为“通过 Modbus 读取、写入数据库并绘制图表”。问题在于轮询周期和存储结构的设计。
1 秒轮询在大多数情况下都过于频繁。建议先观察数值的变化周期。
| 数据 | 建议周期 | 原因 |
|---|---|---|
| 温度·压力 | 5~10秒 | 物理上不会急剧变化 |
| 电机电流 | 1秒 | 过载早期检测 |
| 计数器·生产数量 | 10~30秒 | 是累计值,所以没有损失 |
如果把所有样本都放进关系型数据库,数据量很快就会膨胀。在实际操作中,按标签将最近值(当前值表)与历史记录(时序)分开存储更为合理。
-- 每个标签仅保留一行当前值
CREATE TABLE tag_current (
tag_id TEXT PRIMARY KEY,
value REAL, quality INTEGER, ts TEXT
);
-- 历史表需要时间索引
CREATE INDEX idx_tag_ts ON tag_history(tag_id, ts);
仪表盘不需要每秒刷新。将画面刷新周期与采集周期分离,可以大幅降低负载。