Skip to content

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 步 · 拖曲线组件并绑定数据 ​

  1. 从组件库拖一个 实时曲线 / 趋势图 到画布
  2. 在数据绑定里选 MQTT 数据源
  3. 绑定字段路径为 temp
  4. 设置刷新周期(与上报频率匹配,比如都设 2 秒)

第 5 步 · 加报警 ​

  1. 拖一个 数值显示 组件,同样绑定 temp
  2. 设置条件样式:temp > 50 时变红
  3. 需要推送的话,配置报警规则 → 触发 Webhook(可接企业微信/钉钉,见 2.6 对接 HTTP 上报与拉取数据)

第 6 步 · 发布并手机访问 ​

点"发布" → 生成访问链接和二维码 → 手机扫码打开。

验证成功 ​

  • 手机上能看到温度实时曲线在滚动
  • 用手捂热传感器,曲线上扬,超过 50℃ 时数值变红并触发报警

注意事项 ​

WARNING

  • 采样率不匹配:组态的刷新周期快于 MQTT 上报频率时,曲线会出现平台段;反之会丢点。两边应设为一致
  • 手机浏览器缓存:改了组态但手机上没有变化时,强制刷新或清除缓存
  • 报警需要去抖动:温度在阈值附近波动时会产生大量重复报警,应加入「持续超过 10 秒才报」的判断
  • 温度放大倍数要一致:PLC 存的是放大 10 倍的整数,Lua 里已除以 10,组态里不要重复换算
  • 传感器断线时的值:断线时可能读到 0 或 -55,会影响曲线,应加入有效范围过滤

举一反三 ​

  • 把温度换成电流、压力、液位、流量,做法完全一样
  • 多台设备汇总到一个看板(用不同 device_id 区分)
  • 报警接入企业微信 / 钉钉 / 短信
  • 加上历史数据查询和报表导出

想更深入 ​

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研