小企业智能化
小微企业设备数据采集与看板上墙:用边缘网关把 Modbus PLC 接入 Grafana
2026年9月10日
用树莓派做边缘网关读取 Modbus PLC 寄存器,写入 InfluxDB 并用 Grafana 上墙看板。
小微企业设备数据采集与看板上墙:用边缘网关把 Modbus PLC 接入 Grafana
摘要
很多小作坊、加工点设备跑得好好的,但产量、温度、转速全靠人工抄表。本文用一台树莓派做边缘网关,通过 Modbus TCP 读出 PLC 寄存器,经 Node-RED 转写进 InfluxDB 时序库,再用 Grafana 拼出实时看板投到大屏,成本不到千元,老板在办公室就能看车间实时状态。
为什么小微企业也需要设备数据
我接触过一家做五金冲压的小厂,三台冲床每天产量靠班长下班点数,设备异常停机往往半天后才发现。老板想要"实时知道现在在跑几台、今天出了多少件",但上一套 MES 动辄十几万,不划算。其实只要设备是带网口的 PLC(西门子 S7-1200、台达、汇川等大多支持 Modbus TCP),数据采集门槛很低:一台几百块的边缘网关 + 开源时序栈就能搞定。
整体架构
数据流向非常清晰:
PLC(Modbus TCP) → 树莓派(Node-RED) → InfluxDB → Grafana(看板/大屏)
PLC 负责把产量、电流、温度等存在保持寄存器里;树莓派跑 Node-RED,定时轮询 Modbus 寄存器,做单位换算后写入 InfluxDB;Grafana 连 InfluxDB 画图、设告警。全程不依赖外网,数据安全且延迟低。
硬件选型与接线要点
- 边缘网关:树莓派 4B(2GB 够用)或二手 x86 小主机,装 Raspberry Pi OS Lite。
- 网络:网关和 PLC 接同一台工业交换机,务必固定网关 IP(如 192.168.1.50),PLC 侧也设固定 IP。
- 注意:Modbus TCP 走 502 端口,很多工厂交换机默认放行,但若跨 VLAN 需在路由器放通 502。先
ping通 PLC IP 再谈采集。 - 供电:车间电网脏,树莓派务必接带 UPS 的 5V 电源,否则掉电损坏 SD 卡。建议系统盘换 SSD。
用 Node-RED 读取 Modbus 寄存器
在树莓派上 sudo apt install nodered 后,装 node-red-contrib-modbus 节点。拖一个 Modbus-Read 节点,配置如下:
{
"topic": "press_1",
"showStatusActivities": false,
"connection": {
"type": "TCP",
"host": "192.168.1.10",
"port": "502",
"unitid": "1"
},
"register": { "fc": "readHoldingRegisters", "address": "0", "quantity": "10" }
}
fc 用 readHoldingRegisters(功能码 03),address 是起始寄存器,quantity 一次读 10 个。关键一步是换算:PLC 里产量常存为字(0–65535),温度可能是"实际值×10"的整数。在 function 节点里还原:
const regs = msg.payload;
msg.payload = {
count: regs[0],
temp: regs[1] / 10,
current: regs[2] / 100
};
return msg;
读出来的字段名要和 InfluxDB 的 measurement 对应好,后面查起来才顺。
数据写入 InfluxDB 时序库
装 InfluxDB v2(Docker 最省事),建一个 bucket 叫 factory。Node-RED 用 influxdb out 节点,配置 Org、Token、bucket,把上一步的 msg.payload 直接写成带时间戳的点:
msg.measurement = "press";
msg.fields = { count: msg.payload.count, temp: msg.payload.temp, current: msg.payload.current };
msg.tags = { machine: "press_1" };
return msg;
时序库的好处是天然按时间索引,存一年产量也只占几十 MB,查"今天每小时产量"一条语句搞定,比塞进 MySQL 清爽太多。
Grafana 看板与大屏
Grafana 加 InfluxDB 数据源,新建 Dashboard。常用面板:
- 折线图:温度/电流随时间,设阈线(如电流 > 某值标红)一眼看设备过载。
- 统计卡:今日累计产量
sum(count),用increase()函数算增量。 - 状态表格:每台设备在线/停机,靠 last 值判断。
告警在 Grafana 里配:温度连续 5 分钟超 80℃ 就发钉钉/企业微信机器人,班长手机立刻收到。我给那家厂配完后,第一次过热停机在 3 分钟内就被发现,比过去省了半天。
上墙与日常维护
看板配好后,车间门口挂台旧安卓电视盒,用浏览器全屏打开 Grafana kiosk 模式(?kiosk 参数隐藏边框)即可常驻。维护上三件事最要紧:一是网关 IP 和 PLC IP 全固定,防止 DHCP 重分配导致断采;二是 InfluxDB 设保留策略(如 400 天)避免磁盘写满;三是 Node-RED 流要导出 json 备份,重装一键导入。
小结
这套方案把"人工抄表"变成"实时看板",硬件成本极低、全部开源、断网也能本地跑。它不替代 MES,但用最小代价让小企业先有数据意识。等设备联网跑顺了,再叠加 OEE 计算、停机原因标注,一步步把车间真正变"智能",这条路对小厂最现实。