news 2026/6/15 20:02:57

上位机与PLC 通讯源码 DEMO 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上位机与PLC 通讯源码 DEMO 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制

上位机与PLC 通讯源码 DEMO 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯,, 西门子采用S7.NET通讯,支持S7200,300,400,S71200,1500系列(网口), 带详细注释源码,写的非常通俗易懂,PLC和上位机通讯,(编程语言采用VB.NET) 需要用到上位机采集,PLC通讯数据项目的或者实际项目要用到的童靴可以学习参考… 包含: S7.NET 使用中文说明书,提供各个函数接口,方便直接在工程实际项目中使用 ( 网上一般都是英文的) 程序源码实例(带详细注释) MX Componnet 说明书 个人详细说明 及具体使用方法和注意事项

最近在工控项目里折腾上位机和PLC联调,发现不少同行对多品牌PLC混搭通讯挺头疼的。刚好手头有个用VB.NET写的双协议通讯DEMO,实测过三菱全系和西门子S7系列,今天把关键代码拆开揉碎了说说。

三菱PLC通讯的暴力美学

用官方MX Component是真香,但安装包里的日文文档确实劝退。这里推荐直接啃MX Componnet安装目录下的MelsecMxCtl.chm帮助文件,用翻译软件转成中文能省一半时间。

初始化通讯建议用网口方案(毕竟现在谁还用串口啊):

Dim mx As New ActEasyIF With mx .ActLogicalStationNumber = 0 ' 逻辑站号对应MX Configurator设置 .Open() If .State <> ActEasyIF.StateEnum.OPEN Then Throw New Exception("三菱PLC连接异常,检查IP白名单!") End If End With

注意Q系列要单独设置CPU类型,遇到过新手在L02CPU上死活连不上的情况:

mx.ActCpuType = ActEasyIF.CpuTypeEnum.Q_L02CPU

读D寄存器的正确姿势:

Dim devValue As Integer mx.ReadDeviceRandom("D100", 1, devValue) ' 这里有个坑:地址不要带软元件类型,直接写D100'

西门子S7的骚操作

S7.NET的GitHub项目是开源的,但中文资料确实稀缺。实测S71200的DB块读写得这么玩:

Dim plc As New Plc(CpuType.S71200, "192.168.0.1", 0, 1) plc.Open() If plc.IsConnected Then Dim dataBuffer(20) As Byte plc.ReadBytes(DataType.DataBlock, 1, 0, 2, dataBuffer) ' DB1.DBW0读取2个字节' End If

遇到过最奇葩的bug是S7-200 Smart必须设置机架号和槽号为0,不然直接Timeout给你看。

双协议同场飙车怎么玩

同时连两种PLC时记得分线程处理:

Task.Factory.StartNew(Sub() While True ' 三菱数据采集 ' SyncLock mxLock mx.ReadDeviceRandom("D100", 1, devValue) End SyncLock Thread.Sleep(50) End While End Sub) Task.Factory.StartNew(Sub() While True ' 西门子数据采集 ' SyncLock s7Lock plc.ReadBytes(...) End SyncLock Thread.Sleep(50) End While End Sub)

同步锁一定要加!血泪教训:之前没加锁导致MX Component底层崩溃蓝屏。

项目实战避坑指南

  1. 三菱MX组件要手动激活许可证,在控制面板找到MELSEC Environment下的License Management
  2. 西门子TPLC的TSAP默认是03.01,但有些国产触摸屏改过TSAP会导致连不上
  3. 批量读取时三菱建议用ReadDeviceBlock代替多次ReadDeviceRandom
  4. 遇到S7.NET报错18#大概率是DB块没勾选允许远程访问

源码里特意加了这些异常处理:

Try mx.WriteDeviceRandom("Y10", 1, 1) ' 强制输出Y10' Catch ex As Exception When TypeOf ex Is TIME_OUT ' 三菱超时重连逻辑 ' Catch ex As Exception When ex.Message.Contains("无法访问") ' 西门子权限异常处理 ' End Try

最后说个冷知识:MX Component的TCP端口默认5561,如果防火墙没开这个端口,调试时能ping通但死活连不上。曾经有次在现场排查了三个小时才发现是Windows Defender在搞事情...

(源码和中文手册已打包,需要的直接评论区喊话。特别说明:西门子S7-200需要PPI转换器,别拿个USB线就硬怼!)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:17:10

PyTorch模型训练日志管理:结合Git Commit做版本追踪

PyTorch模型训练日志管理&#xff1a;结合Git Commit做版本追踪 在深度学习项目中&#xff0c;你是否曾遇到过这样的场景&#xff1f;——同事跑出一个高分模型&#xff0c;兴冲冲地告诉你“用的是最新的代码”&#xff0c;结果你拉下最新提交却发现无法复现&#xff1b;或者几…

作者头像 李华
网站建设 2026/6/14 23:59:12

Jupyter Notebook中运行PyTorch:快速上手机器学习开发环境

Jupyter Notebook中运行PyTorch&#xff1a;快速上手机器学习开发环境 在深度学习项目中&#xff0c;你是否曾因为“torch.cuda.is_available() 返回 False”而耗费半天排查驱动、CUDA版本和pip包的兼容性&#xff1f;又或者在团队协作时&#xff0c;遇到“我这边能跑&#xf…

作者头像 李华
网站建设 2026/6/15 16:49:49

从零训练一个CNN:使用PyTorch实现手写数字识别

从零训练一个CNN&#xff1a;使用PyTorch实现手写数字识别 在深度学习的世界里&#xff0c;图像识别是最早也是最经典的落地场景之一。哪怕是最简单的任务——比如识别一张手写数字图片中的“7”还是“1”&#xff0c;背后也蕴藏着现代AI工程的完整链条&#xff1a;从数据预处理…

作者头像 李华
网站建设 2026/6/10 15:23:28

多卡并行训练入门:利用PyTorch-CUDA镜像实现分布式计算

多卡并行训练入门&#xff1a;利用PyTorch-CUDA镜像实现分布式计算 在深度学习模型日益庞大的今天&#xff0c;单张GPU已经很难支撑一次完整的训练流程。从BERT到LLaMA&#xff0c;参数量动辄数十亿的模型让“算力焦虑”成为每个AI工程师必须面对的问题。而与此同时&#xff0c…

作者头像 李华
网站建设 2026/6/15 13:36:33

typescript-基本类型

数字类型numberlet num:number 9这里的num是一个变量&#xff0c;number说明这个num是数字类型&#xff0c;值为9字符类型stringlet str:string”aa”同样的str是一个变量,string说明这个str是一个字符类型&#xff0c;值为aa布尔类型booleanlet b:boolean false同样的b是一个…

作者头像 李华
网站建设 2026/6/15 19:30:40

深度学习新手必看:如何高效安装PyTorch和CUDA工具包

深度学习新手必看&#xff1a;如何高效安装PyTorch和CUDA工具包 在深度学习的世界里&#xff0c;最让人望而却步的往往不是复杂的模型结构或晦涩的数学公式&#xff0c;而是那个看似简单却频频“翻车”的第一步——环境配置。你有没有经历过这样的场景&#xff1a;满怀期待地打…

作者头像 李华