3. PLC与脉冲模块的通信:基于Modbus RTU与EtherCAT的实战配置
通信配置,说白了就是让PLC和脉冲模块能“说上话”。很多新手一上来就调参数,结果死活连不上——我当年也干过这事。其实只要理清协议类型、接线方式和参数匹配这三件事,基本就稳了。
这一章咱们重点讲两种最常用的通信方式:Modbus RTU 和 EtherCAT。前者是串行通信的老将,后者是高速总线的当红炸子鸡。你想想看,一个项目里到底用哪个?得看现场环境、距离、实时性要求。
核心观点:通信配置的本质是“两端参数一致”。PLC发什么格式,脉冲模块就得收什么格式。差一个比特都不行。
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和脉冲模块必须完全一致,否则连不上。我一般按这个顺序来配:
- 从站地址:每个脉冲模块一个唯一ID,范围1~247。别重复,重复了数据就打架。
- 波特率:9600、19200、38400是主流。距离远用9600,距离近用38400。
- 数据位:固定8位。Modbus RTU不支持7位数据位,别在这上面浪费时间。
- 停止位:1位或2位。我习惯用1位,除非现场干扰特别大才用2位。
- 校验位:无校验(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为例,配置步骤:
- 扫描EtherCAT总线,识别出脉冲模块。
- 给模块分配从站编号(通常自动分配,也可以手动改)。
- 配置PDO映射:选择要交换的数据对象,比如目标位置、实际位置、控制字、状态字。
- 设置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 通信故障排查思路
通信出问题了怎么办?别慌,按这个顺序查:
- 看灯:模块上的通信指示灯亮不亮?不亮就是没电或没接线。
- 查线:A/B线有没有接反?GND接没接?
- 对参数:PLC和模块的波特率、数据位、停止位、校验位是否一致?
- 测报文:用串口调试工具抓一下报文,看看PLC发没发数据,模块回没回数据。
- 换模块:如果以上都正常,换个模块试试。我遇到过模块出厂地址默认是0,怎么配都配不上。
嗯,通信配置这块就这些。记住一个原则:两端参数一致,接线正确,协议匹配。做到这三点,通信基本不会出大问题。