给PLC接上MQTT,设备数据直接写进SQL Server——一个S7-1200用物联网网关做产线生产数据追溯的完整实战

客户提了个要求,搞得我有点懵

去年给一家汽车零部件厂做产线升级,客户的生产主管提了个要求,把我当场整不会了。他说:”王工,我们现在每生产一个零件,想追溯到这个零件是哪个班次、哪台设备、哪套模具、当时什么工艺参数生产的。你能不能在PLC里搞个功能,把这些数据存下来?”

我第一反应是:这不就是上位机的活吗?一台工控机、一个数据库、再搞个上位机软件,轻松搞定。但客户预算卡得死,说上位机方案两年前报过价,被老板毙了。这次升级只有设备层的预算,没有信息化系统的预算。

意思是让我用PLC自己搞定数据存储和追溯。我当时心里想:你这不是难为人吗?

但做项目的人都知道,客户的需求有时候就是给你出难题。你给他解释”这不合理”,他说”那算了我们找别人”。所以我想了两天,最后决定用PLC+MQTT的方式,把数据通过工业物联网网关推送到云端SQL数据库,前台用个简单的网页展示。整套方案下来,硬件成本不到2000块。

为什么选MQTT

先说说PLC数据上云的几种常见路子吧,给兄弟们参考:

  • OPC UA:功能强大,但PLC端要支持UA的话要么选S7-1500,要么加通讯模块,成本一下子就上去了。而且OPC UA的客户端配置比较复杂,小项目有点杀鸡用牛刀。
  • Modbus TCP:简单,但数据量大或者需要结构化传输的时候就捉襟见肘了。实时性也不够好。
  • MQTT:轻量级,PLC端开几个DB块存数据,通过一个网关以JSON格式发布到MQTT Broker,上位机订阅就行了。延迟大概几十到几百毫秒,对于生产追溯来说完全够用。

我这次选的是S7-1200 + 一块支持MQTT的串口转WiFi模块(淘宝上几十块钱那种),外加一个阿里云上的轻量应用服务器跑Mosquitto Broker和Node-RED。Node-RED负责把MQTT接收到的JSON数据解析后写入云端的SQL Server Express。

整套链路是这样的:

S7-1200采集数据 → 串口转WiFi模块发MQTT → 阿里云Mosquitto Broker → Node-RED订阅并解析 → 写入云端SQL Server → Web前端展示

PLC端的数据组织

关键是怎么在PLC里组织需要追溯的数据。我建了一个DB块叫”追溯数据缓冲”,里面按产品序号存储最近100条生产记录。每条记录包括:

  • 产品序列号(由扫码枪读取条码获得)
  • 生产时间戳
  • 当班班次
  • 设备编号
  • 模具编号
  • 关键工艺参数:注塑压力、保压时间、模温、冷却时间
  • 最终检测结果(OK/NG)

每生产完一个产品,PLC就把这组数据写入DB块的当前指针位置,指针+1,到100了就从1重新开始。同时把这个指针指向的数据通过自由口通讯发送给串口WiFi模块。

串口WiFi模块这边也挺有意思。我在模块里配好了MQTT Broker的地址和主题,模块收到PLC发来的串口数据后,直接打包成JSON格式通过WiFi发出去。

一个让我查了两天的坑

这个项目最有意思的是踩了个不大不小的坑。刚开始调试的时候,一切看起来都很完美——PLC发数据,MQTT收数据,Node-RED解析,数据库写入,一切正常。但过了大概两三个小时,我发现数据库里有重复记录。

查了半天,发现问题是这样的:PLC每写完一个DB记录就发一次串口数据,这是对的。但WiFi模块在WiFi信号不稳定的情况下,TCP连接会断开重连。重连之后,模块会把断连期间缓冲的旧数据重新发送一遍。而PLC并不知道这个情况,以为数据已经发出去了,接着写新的记录。这就导致数据库里有1条记录被写了2-3次。

解决方案是在MQTT的数据包里加一个唯一消息ID。PLC每发一条数据,消息ID递增1。Node-RED这边维护一个已处理ID的列表,如果收到的消息ID已经处理过,就直接丢弃。搞完这个去重逻辑之后,数据就干干净净了。

实际效果怎么样

系统跑起来之后,客户生产主管在办公室里打开浏览器,输入网址,就能看到产线上最新生产的产品追溯数据。输入一个产品序列号,3秒之内就能查出这零件是哪台设备、哪个班次、什么工艺参数下生产的。有次一个批次的产品出了质量客诉,他们用了不到10分钟就定位到了是某个模具温度异常导致的,直接停机更换了热电偶。

以前这种事情他们要翻纸质记录本查半天,还不一定找得到。客户老板后来听说了这个方案,说”才花了两千块?我以为至少要两万。”第二年就批了上位机系统的预算——这是后话了。

搞这套方案最让我感慨的是:不要把”上信息化系统”想得太玄乎。PLC+MQQT+云数据库这个组合,小厂完全可以低成本入局。数据从设备层到云端,关键不是技术有多先进,而是链路跑通之后你能不能真正用起来。

你们有没有用PLC做过类似的数据上云方案?用的什么路子?欢迎评论区说说。

上一篇 AI帮我自动验证PLC程序,87个测试用例找出3个隐藏bug——现场调试时间省了一半
下一篇 花了两年两万块考了电工证、西门子认证、注册电气工程师,到底值不值——一个老工控人考证的真实账本