『7x24小时有问必答』

我做了 3 年工控上位机开发,接过最大的一个项目,是给浙江一个汽配工厂做整线生产数据采集系统,现场一共 86 台 PLC、120 个传感器,需要同时轮询采集数据,实时刷新到上位机界面,延迟不能超过  100ms。

一开始我用网上找的基础   Modbus TCP demo,单设备调试完全没问题,结果一到现场,同时连接  20   台设备就开始卡顿,界面直接卡死,设备掉线了不会自动重连,数据频繁丢包,客户现场的工程师围着我看笑话,说 “你这 demo   级的程序,根本用不了工业现场”。

那一次我在现场熬了 3 个通宵,推翻了原来的所有代码,重新设计了一套支持高并发、多设备轮询、自动掉线重连、线程安全、异常容错的工业级 Modbus TCP 通信框架,最终实现了 86 台设备同时轮询,数据刷新延迟稳定在 50ms 以内,到现在已经在现场稳定运行了 18 个月,零崩溃、零数据丢失。

这篇文章,我把这套经过工厂现场验证的框架完整分享给大家,带全注释可运行源码,不用任何第三方库,新手也能直接复制到项目里用。

注意:本文内容面向有 C# 和 Modbus 基础的开发者,零基础想入门的朋友,可以看我的主号(知乎) @工控上位机老何,里面有从零开始的保姆级入门教程。

1

一、先搞懂:为什么基础 Modbus demo,用在工业现场一定会出问题?

很多新手觉得,Modbus TCP 不就是 Socket 连接,发指令收数据吗?单设备调试没问题,就觉得自己掌握了。但工业现场和实验室完全是两个世界,基础 demo 有 4 个致命缺陷,注定用不了多设备高并发场景:

1.同步阻塞通信,多设备轮询直接卡死界面
绝大多数基础 demo,都是用同步 Socket 读写,发一条指令,等设备返回结果,再发下一条。单设备没问题,但同时轮询 10 台以上设备,整个通信过程会完全阻塞 UI 线程,界面直接卡死,操作工连停止按钮都点不了,在生产现场是致命的安全隐患。

2. 无掉线重连机制,设备断连后直接瘫痪
工业现场的环境极其复杂,网线被碰松、设备重启、网络波动都是常态。基础 demo 没有心跳检测和自动重连机制,设备一旦断连,程序就会一直报错,数据采集直接中断,必须人工重启程序,完全不符合工业现场 7*24 小时运行的要求。

3. 无线程安全设计,多线程读写直接崩溃
为了解决界面卡死,很多新手会开多个线程,每个线程对应一个设备,但是没有做线程安全控制,多个线程同时操作 Socket、读写全局数据、更新界面,会导致内存泄漏、数据错乱、程序莫名崩溃,现场根本找不到问题根源。

4. 无异常容错机制,一个设备报错,全程序瘫痪
基础 demo 几乎没有异常处理,一个设备通信超时、返回异常数据,就会导致整个循环中断,所有设备的数据采集都停了。工业现场要求:哪怕其中 10 台设备出问题,剩下的设备也要正常采集,不能因为单点故障导致整个系统瘫痪。我这套框架,就是针对这 4 个致命缺陷,完全按照工业现场的运行要求设计的,经过了上百台设备的现场验证,稳定、可靠、可扩展。

2
二、工业级 Modbus TCP 框架核心设计思路
整个框架采用「单例管理 + 设备对象池 + 异步多线程 + 队列轮询 + 事件驱动」的设计模式,核心模块拆解如下:

核心模块拆解

整个框架的核心优势:可无限扩展设备数量,支持 100 + 设备同时轮询,不卡顿、不崩溃,数据延迟稳定,完全满足工业现场 7*24 小时运行的要求。
3
三、完整框架源码实现(带全注释,直接复制可用)

  第一步:
Modbus 功能码枚举与数据结构定义

  第二步:
ModbusDevice 设备类
(核心,每个设备独立对象)

  第三步:ModbusTcpManager  
统一管理类(单例模式,上层调用入口)
4
四、框架调用示例(WinForm 界面直接用,零门槛上手)
很多新手写的框架,上层调用极其复杂,这里我做了单例管理类,上层调用只需要 3 步,新手也能直接用:

第一步:
窗体加载时,初始化设备,绑定事件

  第二步:写入寄存器,界面按钮点击事件

第三步:窗体关闭时,释放资源
5
五、现场落地效果验证
这套框架,我在汽配工厂的整线数据采集项目中落地使用,核心效果如下:

支持 86 台 PLC 设备同时轮询,轮询周期 500ms,数据刷新延迟稳定在 50ms 以内;

界面完全不卡顿,哪怕其中 10 台设备断连,剩下的设备也能正常采集数据;

设备断连后 3 秒内自动触发重连,重连成功后自动恢复轮询,无需人工干预;

连续运行 18 个月,零崩溃、零内存泄漏、零数据丢失,完全满足工业现场 7*24 小时运行要求。

作者:老何的工控实战库

链接:https://www.zhihu.com/question/27707815/answer/2015790824823222538

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

扫描下方二维码↓↓↓
免费获取【自动化行业资料】

自动化学习交流群
有老师在群内答疑哦~

别忘了点赞+在看哦!

“阅读原文”免费学PLC/电工课程

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码