PLC数据直接写进数据库,告别U盘拷数据的日子

上个月去一个化工罐区做售后,看到操作工还拿着U盘往PLC上插,拷完数据再跑回办公室导进Excel。我说这都2026年了,你们还这么干?老师傅摊摊手:”以前就这样,也没见谁改过。”

其实PLC数据进数据库这事,真不难。一个物联网网关就搞定。

为什么要把PLC数据存数据库

我做过一个汽车零部件厂的项目,12条产线,每条产线一个S7-1200。客户要追溯每批产品的生产数据——温度、压力、扭矩、节拍,一个不能少。

用U盘拷?一天拷一次,一次半小时,12条线就是6小时。而且哪天忘了拷,那批产品的数据就丢了,出了质量问题根本查不到原因。

后来我给每条线配了一个工业物联网网关(就是那种带网口和串口的小盒子,两三千块钱一个),PLC通过Modbus TCP把数据发给网关,网关通过4G或者网线上传到服务器数据库。从那以后,老板在办公室打开电脑就能看到每条线的实时产量和不良率。

具体怎么搞

最常用的方案就这么三步:

第一步:PLC端——在PLC程序里加一个数据发送块,把要上传的数据(产量、温度、报警代码这些)打包成数组,用Modbus TCP或者S7通信发出去。西门子S7-1200做这个很简单,TIA Portal里拖一个TSEND_C或MB_CLIENT块就行。

第二步:网关——市场上有现成的物联网网关,支持主流PLC协议。我常用的是有人物联网的USR-G781和钡铼的BL102。配置一下:PLC的IP地址、寄存器地址、数据类型、上传间隔。一般设5秒上传一次,生产数据足够了。

第三步:服务器——最简单的做法:网关通过MQTT把数据发到服务器(服务器上装一个EMQX或者Mosquitto),服务器上写一个Python脚本订阅MQTT消息,解析后写入SQL Server或MySQL。

之前帮一个食品厂做,服务器用了腾讯云最便宜的轻量服务器,一个月68块钱。数据库用的MySQL,写了个Python脚本每分钟接收一次数据。跑了半年,从没出过问题。

踩过的坑

坑1:数据量太大——第一次搞的时候,我把PLC每个扫描周期的数据都传上去了,S7-1200的扫描周期也就几毫秒,结果网关直接被打爆。后来改成每5秒聚合一次,取平均值,数据量降了99%。

坑2:断网怎么办——工厂网络不太稳定,网关离线的时候数据就丢了。解决方案:在PLC里开一个数据缓存区(用DB块),存最近1000条记录。网关恢复连接后,先把缓存的补传完,再传实时的。

坑3:时间戳对不上——PLC没有实时时钟(或者电池没电了),上传的数据时间戳全是1900年1月1日。解决:网关自动给每条数据加盖NTP时间戳,PLC只管发数据,时间由网关统一打。

硬件成本清单

项目 型号/方案 价格
物联网网关 USR-G781 ¥680
服务器(年费) 腾讯云轻量2核2G ¥816/年
数据库 MySQL(自建) ¥0
网线/串口线 ¥50
合计 ¥1546起

比你买一个正版的SCADA系统便宜十倍。

你们厂现在怎么收集PLC数据的?还在用U盘拷?欢迎评论区聊聊。

上一篇 我给豆腐坊做了套自动豆腐生产线,泡豆磨浆点卤压榨全交给PLC
下一篇 搞PLC的兄弟做自媒体,三个月我赚了八千块