news 2026/6/7 12:51:26

上位机与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/2 13:21:47

AI应用架构师必看:构建企业AI创新生态圈的7大核心策略与落地路径

AI应用架构师必看&#xff1a;构建企业AI创新生态圈的7大核心策略与落地路径 一、引言 (Introduction) 钩子 (The Hook) “我们花了1000万做的AI客服系统&#xff0c;上线3个月后用户满意度反而下降了20%——因为它根本听不懂客户的方言。” 这是我去年在某传统企业调研时听到的…

作者头像 李华
网站建设 2026/5/30 16:07:37

PyTorch-CUDA-v2.7镜像是否支持TensorBoard可视化

PyTorch-CUDA-v2.7镜像是否支持TensorBoard可视化 在深度学习项目中&#xff0c;一个稳定、高效且功能完整的开发环境往往决定了实验的启动速度和迭代效率。尤其是在使用 GPU 加速训练时&#xff0c;研究人员最关心的问题不仅是“模型能不能跑”&#xff0c;更是“能不能快速看…

作者头像 李华
网站建设 2026/6/4 11:22:42

Oracle 如何查找function信息

在Oracle数据库中查找函数&#xff08;Function&#xff09;信息&#xff0c;可以通过以下几种方式&#xff1a; 1. 查询用户自定义函数 查看当前用户的所有函数 -- 查看函数基本信息 SELECT object_name, created, status, last_ddl_time FROM user_objects WHERE object_t…

作者头像 李华
网站建设 2026/5/29 22:11:06

Markdown文档写作技巧:展示PyTorch实验结果的专业方式

Markdown文档写作技巧&#xff1a;展示PyTorch实验结果的专业方式 在深度学习项目中&#xff0c;一个训练脚本跑通只是第一步。真正决定研究质量的&#xff0c;是能否清晰、完整、可复现地呈现整个实验过程——从环境配置到模型设计&#xff0c;从训练曲线到最终结论。然而现实…

作者头像 李华
网站建设 2026/6/5 10:32:29

RescaleReverseLUT 演示和比较颜色查找表的重标定和反转

一&#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段&#xff0c;因博客字数限制&#xff0c;故进行拆分。主教程链接&#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkDiscretizableColorTransferFunction既…

作者头像 李华
网站建设 2026/5/30 21:51:20

如何在Linux服务器上通过SSH连接使用PyTorch镜像

如何在Linux服务器上通过SSH连接使用PyTorch镜像 在深度学习项目从本地实验走向大规模训练的过程中&#xff0c;一个常见而棘手的问题是&#xff1a;为什么代码在自己的笔记本上能跑&#xff0c;在服务器上却报错&#xff1f;更糟的是&#xff0c;明明安装了CUDA和PyTorch&…

作者头像 李华