当前位置: 首页 > news >正文

(二十三)信捷PLC Modbus通讯功能介绍

GitHub 项目地址:https://github.com/lidecong133/YModbus

信捷 PLC 在国产设备里很常见。

尤其是 XD、XL、XG 这些系列,包装机、切割设备、输送线、非标设备、改造项目里经常能看到。

现场问得最多的是:

“信捷 PLC 支持 Modbus,那我能不能直接用 YModbus 读?”

答案还是那句话:先确认它当前开的到底是不是 Modbus。

信捷 PLC 里会遇到好几种通讯方式:Modbus RTU、Modbus ASCII、Modbus TCP、XNET、自由格式通讯、以太网 TCP/IP 通讯。

这些名字看起来都和“通讯”有关,但对 YModbus 来说不是一回事。

YModbus 只处理标准 Modbus。

如果 PLC 端配置的是 XNET,那是信捷自己的协议方向,不能按 Modbus 硬读。

如果配置的是自由格式通讯,那就要看你自己拼的报文是不是 Modbus。

如果配置的是 Modbus RTU、Modbus ASCII 或 Modbus TCP,YModbus 才能按对应模式去连。

下面按信捷 XD / XL / XG 这类现场常见 PLC,把 Modbus 通讯怎么判断、怎么读、怎么排查讲清楚。

先分清通讯方式

信捷 PLC 做 Modbus,常见有三类入口。

第一类,串口 Modbus。

在 XDPPro 的 PLC 串口设置里,通常可以选择 Modbus 通讯,并在 Modbus-RTU 和 Modbus-ASCII 之间选择。

这时要确认:

  • 使用哪个串口
  • 是 RS232 还是 RS485
  • 协议是 RTU 还是 ASCII
  • 波特率、数据位、校验位、停止位
  • PLC 站号
  • 写入参数后是否需要重新上电

第二类,以太网 Modbus TCP。

带网口的 XD / XL / XG 型号,或者通过以太网模块时,可能会走 Modbus TCP。信捷资料里也能看到以太网侧会出现 Modbus-TCP 和 XNET 两种方向。

这里不要看到网口就默认是 Modbus TCP。

网口能下载程序,XDPPro 能连接,不代表外部主站就能按 Modbus TCP 读 PLC 数据。

第三类,PLC 主动访问外部设备。

比如 PLC 作为 Modbus TCP Client 或 RTU Master,去读扫码枪、仪表、变频器、远程 I/O。

这时 PLC 是主站或客户端,YModbus 就应该反过来做从站或服务器模拟器。

RTU和ASCII不要混

信捷串口配置里会看到 Modbus-RTU 和 Modbus-ASCII。

这两个不是同一个帧格式。

RTU 是二进制帧,靠 CRC 校验。

ASCII 是文本帧,冒号开头,靠 LRC 校验。

接线都可能是 RS485,但协议不一样。

所以第一次联调时,不要只问“是不是 485”。

要问:

协议:RTU 还是 ASCII 串口:COM3 波特率:9600 / 19200 / 38400 数据位:7 或 8 校验:None / Even / Odd 停止位:1 或 2 站号:1 到 247

如果 PLC 配的是 ASCII,YModbus 就要用 ASCII Client。

如果 PLC 配的是 RTU,YModbus 就要用 RTU Client。

用错模式,表现通常就是超时。

信捷PLC做Modbus RTU从站

如果你希望 YModbus 读取信捷 PLC,最常见结构是:

信捷 PLC 做 Modbus RTU 从站,YModbus 做 Modbus RTU 主站。

PLC 侧要确认:

  • 串口已经设置成 Modbus-RTU
  • 通讯参数已经写入 PLC
  • 站号正确
  • 需要重新上电的参数已经生效
  • 地址表里明确写出了 Modbus 地址

YModbus 代码示例:

usingSystem.IO.Ports;usingYModbus.Clients;usingYModbus.Serial;usingSerialPortport=new("COM3"){BaudRate=9600,DataBits=8,Parity=Parity.Even,StopBits=StopBits.One,ReadTimeout=3000,WriteTimeout=3000};port.Open();awaitusingModbusClientclient=ModbusSerialClientFactory.CreateRtu(slaveId:1,serialPort:port,leaveOpen:true);ushort[]values=awaitclient.ReadHoldingRegistersAsync(startAddress:0,quantity:3);

CLI 先测更快:

ymodbusread-holding-registers--transport rtu--serial-port COM3--baud-rate 9600--data-bits 8--parity even--stop-bitsone--slave-id 1--address 0--quantity 3

这里的address: 0只是示例。

实际项目一定要按信捷 PLC 侧的 Modbus 地址表来。不要看到 PLC 里是D0,就默认 YModbus 地址一定是0

信捷PLC做Modbus ASCII从站

有些旧设备或特殊项目会用 Modbus ASCII。

这时 YModbus 要这样创建 ASCII Client:

usingSystem.IO.Ports;usingYModbus.Clients;usingYModbus.Serial;usingSerialPortport=new("COM3"){BaudRate=9600,DataBits=7,Parity=Parity.Even,StopBits=StopBits.One,ReadTimeout=3000,WriteTimeout=3000};port.Open();awaitusingModbusClientclient=ModbusSerialClientFactory.CreateAscii(slaveId:1,serialPort:port,leaveOpen:true);ushort[]values=awaitclient.ReadHoldingRegistersAsync(0,3);

ASCII 项目最容易错的是数据位和校验位。

不要拿 RTU 的8,N,1去套 ASCII。

现场必须以 PLC 串口配置为准。

信捷PLC做Modbus TCP Server

如果信捷 PLC 带以太网,或者项目里配置了 Modbus TCP Server,YModbus 就可以作为 TCP Client 读取。

典型参数:

PLC IP:192.168.1.70 端口:502 UnitId:1

YModbus 示例:

usingYModbus.Clients;awaitusingModbusClientclient=awaitModbusClientFactory.CreateTcpAsync(host:"192.168.1.70",port:502,unitId:1,readTimeoutMilliseconds:3000,writeTimeoutMilliseconds:3000);ushort[]values=awaitclient.ReadHoldingRegistersAsync(startAddress:0,quantity:3);

CLI 示例:

ymodbusread-holding-registers--host 192.168.1.70--port 502--unit-id 1--address 0--quantity 3

如果 TCP 读不到,先查:

  • 电脑和 PLC 是否同网段
  • PLC 网口是否真的启用了 Modbus TCP
  • 项目是不是用 XNET,而不是 Modbus TCP
  • 端口是否是502
  • UnitId 是否需要设置
  • 地址是否真的映射了数据
  • 是否有防火墙或交换机策略拦截

信捷这里很容易出现“编程软件能连,但 Modbus TCP 读不到”的情况。

这不是矛盾。

编程软件可能走 XNET 或其它连接方式,YModbus 只走 Modbus。

信捷PLC做主站或Client

有些信捷项目里,PLC 是主动访问设备的一方。

比如:

  • PLC 通过 RTU 读取变频器状态
  • PLC 通过 RTU 读取温控表
  • PLC 通过 Modbus TCP 访问扫码枪或远程 I/O
  • PLC 通过以太网 M_TCP 类指令发送 Modbus TCP 请求

这时 YModbus 的角色要反过来。

如果信捷 PLC 是 RTU 主站,YModbus 可以做 RTU 从站。

如果信捷 PLC 是 TCP Client,YModbus 可以做 TCP Server。

这种方法特别适合 PLC 程序调试。

真实设备还没到现场时,先用 YModbus 从站工具放几个固定值:

Holding Register 0 = 250 Holding Register 1 = 1000 Holding Register 2 = 0

让信捷 PLC 去读。

PLC 能读到这些值,说明 PLC 端的站号、功能码、地址、数量、串口参数或 TCP 连接基本正确。

后面再换真实设备。

地址映射不要靠猜

信捷 PLC 里会看到很多软元件:

  • X
  • Y
  • M
  • S
  • SM
  • D
  • HD
  • TD
  • CD
  • FD
  • SFD

这些名字对 PLC 工程师很直观,但对 YModbus 不够。

YModbus 需要的是功能码和数字地址。

更好的地址表应该这样写:

Modbus地址功能码PLC软元件类型说明
003通信测试值UInt16固定1234
103设备状态UInt160 停止,1 运行
203报警代码UInt160 无报警
1003温度原始值Int16实际值 = 原始值 / 10
001运行中BoolCoil

不要只写:

D100:温度 M10:运行中 Y0:输出

这种表对上位机不够。

上位机还要知道它对应的是03还是04,是保持寄存器还是输入寄存器,是线圈还是离散输入,地址是十进制还是十六进制。

X和Y的编号要特别小心

信捷项目里,XY点经常会碰到八进制编号习惯。

比如Y10,很多新手会下意识当成十进制的 10。

但在 PLC 编号里,它可能表示八进制意义上的下一组点。

信捷资料里有一个很典型的提醒:Y0对应的 Modbus 地址是H6000Y10对应的是H6008,不是H6010

这句话很值得记住。

所以如果项目要读XY这种点位,不要靠肉眼换算。

让 PLC 侧直接给最终 Modbus 地址,最好写成十进制。

比如:

Y0 -> Coil 24576 Y10 -> Coil 24584

这样上位机就不容易把八进制、十六进制、十进制混在一起。

40001和地址0

Modbus 资料里经常写40001

YModbus 里传的是协议地址。

所以:

显示地址 40001 -> YModbus 地址 0 显示地址 40002 -> YModbus 地址 1 显示地址 40011 -> YModbus 地址 10

如果信捷地址表里写的是4X类型地址,要问清楚它给的是显示地址,还是协议地址。

如果给的是H6000这种十六进制地址,要先转成十进制再填到 YModbus 里。

H6000对应十进制24576

这个转换不要在现场临时心算。

写到地址表里。

浮点数和高低字节

信捷资料里也会提到高低字节交换、字节顺序这类问题。

这说明实际项目里确实会遇到数据顺序不一致。

比如一个温度、压力、重量或位置值,如果用 32 位浮点数表示,它通常占两个寄存器。

YModbus 读出来先是两个ushort

ushort[]raw=awaitclient.ReadHoldingRegistersAsync(10,2);Console.WriteLine(raw[0]);Console.WriteLine(raw[1]);

不要一上来就只看最终float

先把原始寄存器记下来,再和 PLC 工程师确认:

  • 高字在前还是低字在前
  • 每个字内部高低字节是否交换
  • 是否其实是整数倍率,而不是浮点数
  • 正负数是否按有符号整数处理

现场最有用的说法不是“读出来不对”。

而是:

我从地址10读了两个寄存器,原始值是1714259769。按高字在前解析是12.34,按低字在前不对。

这样 PLC 侧马上知道该查字序还是查映射。

写入要走命令区

信捷 PLC 支持 Modbus 写入时,不建议上位机直接写输出点。

尤其是Y点、伺服使能、气缸动作、切刀动作、加热输出这些,不要直接给上位机开放。

更稳的方式是做通信命令区:

Holding Register 100:命令号 Holding Register 101:参数 1 Holding Register 102:参数 2 Coil 100:命令触发 Coil 101:PLC 已接收 Coil 102:PLC 执行完成 Holding Register 110:执行结果码

上位机只写命令区。

PLC 程序自己判断设备模式、互锁、急停、报警、伺服状态,再决定是否执行。

YModbus 写寄存器示例:

awaitclient.WriteSingleRegisterAsync(address:100,value:1);

写线圈示例:

awaitclient.WriteSingleCoilAsync(address:100,value:true);

第一次写入前,先在 YModbus 从站工具里模拟一遍。

确认主站写入流程没问题,再接真实 PLC。

一个推荐的联调顺序

第一次接信捷 PLC,我建议这样走:

  1. 确认协议是 Modbus RTU、Modbus ASCII、Modbus TCP,还是 XNET / 自由格式。
  2. 确认 PLC 是从站/Server,还是主站/Client。
  3. 如果是串口,确认端口、波特率、数据位、校验位、停止位、站号。
  4. 如果是 TCP,确认 IP、端口、UnitId,以及是否真的启用了 Modbus TCP。
  5. 让 PLC 侧给 Modbus 地址表,不要只给D100M10
  6. 先放固定值1234
  7. 用 YModbus CLI 或主站工具读一个寄存器。
  8. 再读多个寄存器。
  9. 再读线圈。
  10. 最后处理浮点数、双字和写入命令区。

如果 PLC 是主站,就反过来:

先用 YModbus 从站工具模拟设备,让 PLC 来读。

常见坑

信捷 PLC 联调 Modbus 时,常见坑有这些:

  • XNET 当成 Modbus TCP
  • 自由格式通讯里自己拼的报文和 Modbus 不一致
  • PLC 配的是 ASCII,上位机按 RTU 读
  • 写入通讯参数后没有重新上电
  • 串口参数只错了一个校验位
  • RS485 A/B 接反
  • D100当成 Modbus 地址100
  • Y10当成十进制点位
  • 把十六进制H6000当成十进制6000
  • 40001原样填进startAddress
  • PLC 是主站,却被上位机当成从站读

这些问题都不复杂,但很浪费时间。

所以还是那句话:先读固定值,再扩大范围。

小结

信捷 PLC 做 Modbus,关键是先把通讯方式和角色分清楚。

如果 PLC 配成 Modbus RTU / ASCII 从站,YModbus 就用串口主站去读。

如果 PLC 配成 Modbus TCP Server,YModbus 就用 TCP Client 去读。

如果 PLC 自己是 RTU Master 或 TCP Client,YModbus 就做从站或 Server 模拟器。

如果现场用的是 XNET 或自由格式通讯,那就不要拿 Modbus 硬套。

地址方面,DMXY都要落实到最终 Modbus 地址,尤其注意X/Y的八进制编号和H6000这种十六进制地址。

把这些边界说清楚,信捷 PLC 的 Modbus 通讯就不难调。

参考资料

  • 信捷 XD3 系列标准型控制器资料页
  • 信捷 XD/XL/XG 系列可编程控制器用户手册 软件篇
  • Xinje TCP/IP communication based on Ethernet
  • 信捷 XD 系列 PLC 基本指令使用第七讲:Modbus 通讯
http://www.rkmt.cn/news/1529103.html

相关文章:

  • D2DX终极指南:三步让暗黑破坏神2在现代电脑上焕发新生
  • 3个常见性能陷阱与突破方案:打造流畅的微信小程序数据可视化
  • Linux——MySQL
  • 数据预处理实战:从缺失值到漂移监控的七道生死关
  • URL 编码解码工具怎么选?2026 年前端开发与接口调试方案对比
  • 从Putty报错‘Software caused connection abort’深挖:你的云服务器SSH配置可能埋了这些坑
  • 3个关键策略彻底解决ControlNet预处理节点加载失败
  • AI写作时代:理性借力工具,深耕学术表达
  • OpenClaw 权限报错排查指南 Windows 设备操作受限修复(包含安装包)
  • Docker 核心进阶指南:卷、网络、端口与日志,一篇讲透
  • HoRain云--React 组件
  • 省级与全国级大型赛事线上评选,主办方为何首选“投票管家”?安全、合规与硬核稳定的深度解构 - 亲测好用工具
  • VirtualRouter:将Windows电脑变成专业级无线热点的终极免费解决方案
  • PvZ Tools终极指南:解锁植物大战僵尸无限可能的完整教程
  • 从一次线上故障复盘说起:我是如何用Istio连接池与熔断配置,彻底告别‘no healthy upstream’的
  • 入门卖金科普,带你认清长沙主流黄金回收商家 - 讯息早知道
  • 什么是DDC?新华三DDC是什么?DDC有哪些关键技术?
  • 广州黄金回收门店怎么选?本篇整理2026年6月本地行业调研实用参考内容 - 薛定谔的梨花猫
  • 猫抓浏览器扩展:网页视频资源一键获取终极指南
  • 大模型原生能力崛起:智能编排层为何正在归零
  • 3个关键步骤解决《三国全面战争》startpos构建失败问题
  • 2026年无锡、常州企业数字化管理咨询服务商全景测评:如何避坑选对合作伙伴 - 优质企业观察收录
  • HoRain云--React 事件处理
  • 2026年无锡中小企业数字化管理全攻略:从钉钉智连到业财人事一体化实战指南 - 优质企业观察收录
  • NoFences终极指南:5分钟免费打造整洁高效的Windows桌面
  • Vue项目里iView Table动态列卡死?一个深拷贝操作拯救你的页面性能
  • 2026年硕士毕业论文AI测评:全流程覆盖,5款工具推荐
  • 2026年搜索众智商学院联系方式时怎样避开非官方信息?课程咨询渠道识别指南 - 众智商学院职业教育
  • 网络分类:局域网、城域网、广域网、互联网
  • Windows系统优化新方案:智能清理“此电脑“顽固快捷方式的终极工具