主题
2.7 温度采集做一个云端看板
问题场景
老板想在手机上看到车间每台设备的温度实时曲线,超温还要能收到报警。
做完之后能得到什么
一个网页地址、手机扫码即可打开的实时曲线看板,温度超阈值时触发报警——也是可向客户演示的第一个完整作品。
需要准备
- 已完成 2.5 对接 MQTT 收发 JSON(本篇复用它的上行部分)
- 温度传感器(DS18B20 或 PT100 + 温度模块)
- 云组态账号
预计耗时:30 分钟
动手做
第 1 步 · PLC 采集温度
把温度传感器接到设备的对应通道,在 PLC 程序里把采集值存到 D100(放大 10 倍存整数,避免浮点误差)。
在上位机里监视 D100,用手捂住传感器,确认数值会上升。
第 2 步 · Lua 上报到 MQTT
lua
-- 客户端对象用全局变量长期持有,否则会被 GC 回收导致断连
mqttc = mqtt.creat("broker.emqx.io", 1883, "LP3202-001", "", "")
mqtt.set_keepalive(mqttc, 60)
mqtt.start(mqttc)
-- 每 2 秒上报一次。is_linked 返回整数,必须 == 1
timer.start(2000, function()
if mqtt.is_linked(mqttc) == 1 then
local msg = {
device_id = "LP3202-001",
ts = os.time(),
temp = plc.d(100) / 10 -- D100 存放放大 10 倍的温度整数
}
mqtt.publish(mqttc, "linpan/LP3202-001/data", json.encode(msg), 1, 0)
end
end)用 MQTTX 订阅 linpan/LP3202-001/data 确认数据在持续上来。
第 3 步 · 云组态里新建工程
登录云组态管理页面 → 新建工程 → 进入设计器。
第 4 步 · 拖曲线组件并绑定数据
- 从组件库拖一个 实时曲线 / 趋势图 到画布
- 在数据绑定里选 MQTT 数据源
- 绑定字段路径为
temp - 设置刷新周期(与上报频率匹配,比如都设 2 秒)
第 5 步 · 加报警
- 拖一个 数值显示 组件,同样绑定
temp - 设置条件样式:
temp > 50时变红 - 需要推送的话,配置报警规则 → 触发 Webhook(可接企业微信/钉钉,见 2.6 对接 HTTP 上报与拉取数据)
第 6 步 · 发布并手机访问
点"发布" → 生成访问链接和二维码 → 手机扫码打开。
验证成功
- 手机上能看到温度实时曲线在滚动
- 用手捂热传感器,曲线上扬,超过 50℃ 时数值变红并触发报警
注意事项
WARNING
- 采样率不匹配:组态的刷新周期快于 MQTT 上报频率时,曲线会出现平台段;反之会丢点。两边应设为一致
- 手机浏览器缓存:改了组态但手机上没有变化时,强制刷新或清除缓存
- 报警需要去抖动:温度在阈值附近波动时会产生大量重复报警,应加入「持续超过 10 秒才报」的判断
- 温度放大倍数要一致:PLC 存的是放大 10 倍的整数,Lua 里已除以 10,组态里不要重复换算
- 传感器断线时的值:断线时可能读到 0 或 -55,会影响曲线,应加入有效范围过滤
举一反三
- 把温度换成电流、压力、液位、流量,做法完全一样
- 多台设备汇总到一个看板(用不同 device_id 区分)
- 报警接入企业微信 / 钉钉 / 短信
- 加上历史数据查询和报表导出