3. PLC与脉冲模块的通信:基于Modbus RTU与EtherCAT的实战配置

通信配置,说白了就是让PLC和脉冲模块能“说上话”。很多新手一上来就调参数,结果死活连不上——我当年也干过这事。其实只要理清协议类型、接线方式和参数匹配这三件事,基本就稳了。

这一章咱们重点讲两种最常用的通信方式:Modbus RTU 和 EtherCAT。前者是串行通信的老将,后者是高速总线的当红炸子鸡。你想想看,一个项目里到底用哪个?得看现场环境、距离、实时性要求。

核心观点:通信配置的本质是“两端参数一致”。PLC发什么格式,脉冲模块就得收什么格式。差一个比特都不行。

PLC与脉冲模块通信配置知识体系 通信配置 Modbus RTU RS-485 两线制/四线制 波特率:9600 / 19200 / 38400 数据位8 + 停止位1 + 无校验 EtherCAT RJ45 标准以太网线缆 从站编号 + 过程数据映射 DC同步模式 / 分布式时钟

3.1 基于Modbus RTU的通信配置

Modbus RTU在工业现场太常见了。它走的是RS-485物理层,抗干扰能力强,传输距离能到1200米。我个人习惯在距离超过50米、或者现场变频器多的时候优先选它。

配置Modbus RTU,核心就三步:接线、设参数、测通断。

3.1.1 接线方式

RS-485通常是两线制:A(+)和B(-)。有些模块还有GND,我建议你把GND也接上——曾经有个项目,不接地线时通信偶尔丢包,接地后稳如老狗。

信号 PLC侧端子 脉冲模块侧端子 备注
A(+)/D+ 485A 485+ 差分正极
B(-)/D- 485B 485- 差分负极
GND COM GND 建议接,防共模干扰

小技巧:如果通信距离超过300米,在总线两端各加一个120Ω终端电阻。我见过有人不加电阻,通信波形反射得一塌糊涂,数据全是乱码。

3.1.2 通信参数设置

参数设置是重头戏。PLC和脉冲模块必须完全一致,否则连不上。我一般按这个顺序来配:

  1. 从站地址:每个脉冲模块一个唯一ID,范围1~247。别重复,重复了数据就打架。
  2. 波特率:9600、19200、38400是主流。距离远用9600,距离近用38400。
  3. 数据位:固定8位。Modbus RTU不支持7位数据位,别在这上面浪费时间。
  4. 停止位:1位或2位。我习惯用1位,除非现场干扰特别大才用2位。
  5. 校验位:无校验(None)、偶校验(Even)、奇校验(Odd)。大多数场合用无校验。

举个例子,我常用的配置组合:

PLC侧(以三菱FX5U为例):
- 协议:Modbus RTU
- 从站地址:1
- 波特率:19200
- 数据位:8
- 停止位:1
- 校验位:无

脉冲模块侧(以台达ASDA-A2为例):
- P1-01:设为1(从站地址)
- P1-02:设为19200(波特率)
- P1-03:设为8(数据位)
- P1-04:设为1(停止位)
- P1-05:设为0(无校验)

注意:修改脉冲模块的通信参数后,必须断电重启才能生效。我曾经调了半天参数,结果忘了重启,一直报错——这种低级错误犯一次就够了。

3.1.3 通信测试

参数配好后,用PLC发一条读指令试试。比如读脉冲模块的状态寄存器:

// 以三菱FX5U为例,读取从站1的寄存器地址0x2000
// 发送报文:01 03 20 00 00 01 CRC_H CRC_L
// 01:从站地址
// 03:功能码(读保持寄存器)
// 20 00:寄存器起始地址
// 00 01:读取1个寄存器
// CRC_H CRC_L:循环冗余校验

// 如果返回:01 03 02 00 00 CRC_H CRC_L
// 说明通信正常,寄存器值为0x0000

如果没返回数据,或者返回错误码,先检查接线,再核对参数。我遇到过最坑的一次——模块地址设成了0,Modbus规定地址0是广播地址,模块根本不响应。

3.2 基于EtherCAT的通信配置

EtherCAT这几年越来越普及。它速度快、实时性好,适合多轴同步控制。说白了,如果你做的是高速贴片机、包装机、机器人,EtherCAT是首选。

配置EtherCAT比Modbus RTU稍微复杂一点,但套路是固定的。

3.2.1 硬件连接

EtherCAT用标准RJ45网线,支持线型拓扑。PLC的EtherCAT主站口出来,第一个口接脉冲模块的IN口,第二个模块的IN口再接上一个模块的OUT口,以此类推。

  • 网线:超五类或六类屏蔽网线。别用普通网线,现场干扰会让你怀疑人生。
  • 最大从站数:取决于主站能力,一般支持64~256个。
  • 线缆长度:两个从站之间不超过100米。

经验之谈:EtherCAT的IN和OUT口不要接反。接反了模块不工作,但不会烧设备。我刚开始用EtherCAT时,把IN和OUT搞混了,查了半天才发现。

3.2.2 从站配置与过程数据映射

EtherCAT的核心是过程数据对象(PDO)映射。你得告诉主站:脉冲模块的哪些数据要交换,放在哪个位置。

以倍福TwinCAT为例,配置步骤:

  1. 扫描EtherCAT总线,识别出脉冲模块。
  2. 给模块分配从站编号(通常自动分配,也可以手动改)。
  3. 配置PDO映射:选择要交换的数据对象,比如目标位置、实际位置、控制字、状态字。
  4. 设置DC同步模式:选择DC模式,让所有从站时钟同步。
// 典型的PDO映射示例(以某品牌脉冲模块为例)
// 发送PDO(PLC -> 模块):
// 0x6040:00 控制字(2字节)
// 0x607A:00 目标位置(4字节)
// 0x60FF:00 目标速度(4字节)

// 接收PDO(模块 -> PLC):
// 0x6041:00 状态字(2字节)
// 0x6064:00 实际位置(4字节)
// 0x606C:00 实际速度(4字节)

3.2.3 分布式时钟(DC)设置

EtherCAT的DC功能让所有从站共享同一个时钟。多轴同步时,这个功能至关重要。

参数 说明 推荐值
DC模式 启用分布式时钟同步 DC模式
同步周期 与主站通信周期一致 1ms / 2ms
同步偏移 调整采样时刻偏移量 0 或 自动计算

注意:DC同步偏移量设不好,会导致所有轴同时抖动。我遇到过一台设备,四个轴同步运行,结果位置偏差越来越大——最后发现是DC偏移没校准。重新校准后,偏差从200μm降到了5μm。

3.3 通信参数设置详解

不管用Modbus RTU还是EtherCAT,有些参数是通用的。我把它们单独拎出来讲,因为这里最容易出问题。

3.3.1 波特率

波特率就是通信速度。Modbus RTU的波特率范围一般是1200~115200。我建议:

  • 距离 < 100米:用38400或115200
  • 距离 100~500米:用19200
  • 距离 > 500米:用9600

EtherCAT的波特率是固定的100Mbps,不用你设。但要注意,网线质量差会导致链路不稳定。

3.3.2 数据位、停止位、校验位

这三个参数只对Modbus RTU有意义。EtherCAT是自动协商的,不用管。

参数 可选值 我的推荐 说明
数据位 8 8 Modbus RTU固定8位
停止位 1 / 2 1 2位用于强干扰环境
校验位 无 / 偶 / 奇 无 偶校验用于高可靠性场景

避坑指南:我曾经在一条生产线上同时用了Modbus RTU和Modbus TCP,结果RTU那边老是丢数据。查了半天,发现是PLC的串口缓冲区太小,数据量一大就溢出。后来把波特率从38400降到19200,问题解决了。所以,别一味追求高速,稳定才是王道。

3.4 通信故障排查思路

通信出问题了怎么办?别慌,按这个顺序查:

  1. 看灯:模块上的通信指示灯亮不亮?不亮就是没电或没接线。
  2. 查线:A/B线有没有接反?GND接没接?
  3. 对参数:PLC和模块的波特率、数据位、停止位、校验位是否一致?
  4. 测报文:用串口调试工具抓一下报文,看看PLC发没发数据,模块回没回数据。
  5. 换模块:如果以上都正常,换个模块试试。我遇到过模块出厂地址默认是0,怎么配都配不上。

嗯,通信配置这块就这些。记住一个原则:两端参数一致,接线正确,协议匹配。做到这三点,通信基本不会出大问题。