news 2026/4/12 20:47:24

上位机与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/4/10 23:16:55

Git下载大型模型仓库技巧:利用git-lfs管理大文件资源

Git下载大型模型仓库技巧&#xff1a;利用Git LFS管理大文件资源 在深度学习项目开发中&#xff0c;你是否曾遇到过这样的场景&#xff1f;执行 git clone 命令后&#xff0c;终端卡在“Receiving objects: 3% (1234/40000)”长达数小时&#xff0c;最终以“out of memory”或…

作者头像 李华
网站建设 2026/4/8 18:41:55

软件工程实战入门:Java 实习生必修的项目级开发方法论与工程实践指南

软件工程实战入门&#xff1a;Java 实习生必修的项目级开发方法论与工程实践指南摘要&#xff1a;对于即将或正在参与企业级 Java 项目的计算机科学与技术专业实习生而言&#xff0c;《软件工程》不再是一门抽象的理论课程&#xff0c;而是决定你能否快速融入团队、高效交付代码…

作者头像 李华
网站建设 2026/4/10 15:27:02

让数据自己说话:TDengine TDgpt 如何识破时序数据中的异常

引言&#xff1a;时序数据中的"隐形刺客" 想象一下&#xff0c;你正在监控一个数据中心的服务器温度。大多数时候&#xff0c;温度在 20-25℃之间波动&#xff0c;一切正常。但突然&#xff0c;在某个午夜时分&#xff0c;温度飙升到 35℃&#xff0c;几分钟后又恢复…

作者头像 李华
网站建设 2026/4/8 0:21:10

从油门到车轮:拆解IMMD混动控制器的仿真世界

HCU混动控制器&#xff0c;HEV串并联(IMMD) 混动车辆 simulink/stateflow模型包含工况路普输入,驾驶员模型,车辆控制模型&#xff08;电池CD CS 状态切换 以及EV HEV Engine 模式转换), 电池、电机系统模型, 车辆本体模型等。 可进行整车仿真测试验证及参数优化&#xff0c;体现…

作者头像 李华
网站建设 2026/4/8 5:53:24

list<string> 和String[],转化为jsonstr是不是一样的

虽然两者最终都能生成包含字符串数组的 JSON&#xff0c;但在 JSON 序列化时会有一些细微差别&#xff1a;1. 相同点两者序列化为 JSON 后通常看起来一样&#xff1a;["item1", "item2", "item3"]2. 实际差异Java 示例// String[] String[] arra…

作者头像 李华
网站建设 2026/4/11 16:30:20

PyTorch 2.8新特性解读:性能优化与GPU调度改进分析

PyTorch 2.8新特性解读&#xff1a;性能优化与GPU调度改进分析 在深度学习模型日益复杂、训练成本持续攀升的今天&#xff0c;一个看似微小的性能提升&#xff0c;可能意味着每天节省数小时的计算时间&#xff0c;或是将推理延迟从毫秒级压缩到亚毫秒。正是在这样的背景下&…

作者头像 李华