文章目录

信捷PLC与变频器的RS485通信

发布于 2026-03-24 09:24:28 · 浏览 12 次 · 评论 0 条

信捷PLC与变频器的RS485通信


一、通信基础准备

1.1 硬件连接

RS485通信采用差分信号传输,抗干扰能力强,适合工业现场的长距离通信。

确认 PLC型号是否支持RS485。信捷XC系列、XD系列、XDH系列等机型通常配备RS485端口,标识为 A+B-RS485+RS485-

准备 通信线缆:

  • 使用屏蔽双绞线,线径不小于0.5mm²
  • 屏蔽层单端接地,接在PLC端或变频器端,不要两端同时接地

连接 线路:

  • PLC的 A+ 接变频器的 RS485+(或 ASDA 等,不同品牌标识不同)
  • PLC的 B- 接变频器的 RS485-(或 BSDB 等)
  • 在总线末端(最远端设备)安装 120Ω终端电阻

设置 变频器参数。以下以汇川MD500系列为例:

参数代码 参数名称 设定值 说明
F0-02 命令源选择 2 通讯命令通道
F0-03 主频率源A选择 9 通讯给定
FA-00 通讯波特率 3 9600bps(需与PLC一致)
FA-01 数据格式 0 无校验,8位数据,1位停止位
FA-02 本机地址 1 变频器站号(可设1-247)

1.2 通信协议说明

Modbus RTU是工业现场最常用的协议,帧结构如下:

字段 字节数 说明
从站地址 1 目标设备站号,如 0x01
功能码 1 0x03 读保持寄存器,0x06 写单个寄存器,0x10 写多个寄存器
数据 N 地址、数量、数值等
CRC校验 2 低位在前,高位在后

常用功能码对应操作:

功能码 操作
0x03 读取 变频器参数、状态、当前频率等
0x06 写入 单个参数,如运行指令、频率设定
0x10 批量写入 多个参数

二、信捷PLC程序编写

2.1 串口初始化配置

信捷PLC使用 RS 指令进行串口通信配置。在程序首个扫描周期 执行 初始化。

打开 XCPPro或XDPPro编程软件,新建 工程。

编写 初始化程序(梯形图或指令表):

LD  SM0                      // 首次扫描接通
RS  D0  K0  K0  K9600  K0    // 串口配置

RS 指令参数详解:

参数位置 含义 常用设定
第1操作数 发送数据首地址 D0 或自定义数据寄存器
第2操作数 发送字节数 K0 表示由指令动态控制
第3操作数 接收数据首地址 D0 或自定义数据寄存器
第4操作数 波特率 K9600K19200K38400
第5操作数 数据格式 K0=8N1无校验,K1=8E1偶校验,K2=8O1奇校验

2.2 发送数据帧构造

向变频器写入运行频率为例(频率值5000表示50.00Hz,放大100倍存储)。

计算 CRC校验值。信捷PLC无内置CRC指令,需调用 自定义子程序或预先计算。

CRC-16 (Modbus) 计算步骤:

  1. 初始化 CRC寄存器为 0xFFFF
  2. 遍历 每个数据字节:
    • CRC与当前字节进行 异或运算
    • 右移 8位,检查 最低位
    • 若最低位为1, 多项式 0xA001 异或
  3. 交换 高低字节,低位在前发送

编写 CRC计算子程序(ST语言或梯形图实现):

# 伪代码示意,实际用PLC指令实现
def calc_crc(data_bytes):
    crc = 0xFFFF
    for byte in data_bytes:
        crc ^= byte
        for i in range(8):
            if crc & 0x0001:
                crc = (crc >> 1) ^ 0xA001
            else:
                crc >>= 1
    # 交换高低字节
    return ((crc & 0xFF) << 8) | (crc >> 8)

2.3 典型通信程序实例

场景一:启动变频器正转,设定频率30.00Hz

Modbus帧构造(功能码 0x06):

字节 内容 说明
1 0x01 变频器站号
2 0x06 写单个寄存器
3 0x20 寄存器地址高字节(频率设定地址 0x2000
4 0x00 寄存器地址低字节
5 0x0B 频率值高字节(30.00Hz = 3000 = 0x0BB8
6 0xB8 频率值低字节
7 0xCB CRC低字节(计算所得)
8 0x89 CRC高字节

PLC程序实现:

LD  X0                      // 启动按钮
MOV  H01  D100              // 站号
MOV  H06  D101              // 功能码
MOV  H20  D102              // 地址高字节
MOV  H00  D103              // 地址低字节
MOV  H0B  D104              // 数据高字节(30.00Hz)
MOV  H00  D105              // 预留,功能码0x06只写单个寄存器

# 调用CRC计算,结果存入D106、D107

RS  D100  K8  D200  K9600  K0   // 发送8字节,接收存D200开始

场景二:读取变频器当前输出频率

读取保持寄存器 0x1000(汇川MD500实际输出频率地址):

LD  X1                      // 读取按钮
MOV  H01  D100              // 站号
MOV  H03  D101              // 功能码03,读保持寄存器
MOV  H10  D102              // 地址高字节(0x1000)
MOV  H00  D103              // 地址低字节
MOV  H00  D104              // 读取数量高字节
MOV  H01  D105              // 读取数量低字节(读1个寄存器)

# 计算CRC,存入D106、D107

RS  D100  K8  D200  K9600  K0   // 发送请求

# 接收数据处理:D200开始为从站响应
# D200=站号, D201=功能码, D202=字节数, D203/D204=频率数据

2.4 使用Modbus指令简化开发

信捷XD/XDH系列支持专用Modbus指令,大幅降低开发难度。

配置 Modbus从站表:

LD  SM0
MODBUSCFG  K1  D500  K10    // 配置10个从站,参数表从D500开始

Modbus参数表结构(每个从站占用5个寄存器):

偏移 含义
+0 从站站号
+1 功能码
+2 寄存器地址
+3 数据数量或数值
+4 读写触发及状态

执行 Modbus读写:

LD  X2                      // 触发条件
MODBUSX  K1  D500  D600     // 执行第1号从站配置,结果存D600

三、常见故障排查

3.1 通信不通的排查流程

graph TD A["通信失败"] --> B{"检查物理连接"} B -->|"A+/B-接反或松动"| C["重新接线并压紧端子"] B -->|"线路正常"| D{"检查终端电阻"} D -->|"未安装或阻值不对"| E["在总线末端加120Ω电阻"] D -->|"正常"| F{"核对通信参数"} F -->|"波特率/数据位/校验不一致"| G["统一PLC与变频器设置"] F -->|"一致"| H{"检查站号设置"} H -->|"地址冲突或超出范围"| I["修改站号为1-247范围内"] H -->|"正确"| J{"使用串口监控抓包"} J -->|"无数据发出"| K["检查PLC程序触发条件"] J -->|"有发出无返回"| L["检查变频器通信板或更换测试"]

3.2 典型问题速查

现象 可能原因 解决方法
偶尔通信失败 电磁干扰、屏蔽层未接地 检查 屏蔽层单端接地,远离 动力线布线
所有站都无响应 总线短路、终端电阻两端都接 测量 A+与B-间电压,正常为2-6V;拆除 一端终端电阻
特定站号不通 该站地址冲突或设备故障 单独测试 该设备,更换 地址重试
数据值错误 寄存器地址错位、高低字节颠倒 核对 设备手册地址表,交换 高低字节解析顺序
CRC校验错误 校验算法实现有误、数据被干扰 验证 CRC子程序,增加 通信重试机制

四、完整项目示例

4.1 控制要求

  • 1台信捷XD5-60R PLC控制3台汇川变频器
  • 实现:启动/停止/正反转控制、频率设定、运行状态读取、故障监控

4.2 硬件配置

设备 站号 功能
PLC主站 Modbus RTU主站
1#变频器 1 主轴驱动
2#变频器 2 送料驱动
3#变频器 3 收卷驱动

4.3 关键程序结构

轮询控制逻辑

// D10=当前轮询站号, D11=当前操作类型
// 操作类型: 0=写频率, 1=写命令, 2=读状态

LD  SM0
INC  D10
CMP  D10  K3  M0            // 站号超过3则复位
LD  M0
MOV  K1  D10                // 站号循环1-2-3

// 根据操作类型切换
LD  D11  K0
CALL  P0                    // 调用写频率子程序

LD  D11  K1
CALL  P1                    // 调用写命令子程序

LD  D11  K2
CALL  P2                    // 调用读状态子程序

INC  D11
CMP  D11  K3  M3
LD  M3
MOV  K0  D11                // 操作类型循环0-1-2

写运行命令子程序(正转启动)

P1:
    // 构造帧: 01 06 2000 0001 43CA (正转运行)
    // 2000H为控制命令字地址,0001H=正转,0002H=反转,0005H=停止

    MOV  D10  D100            // 站号
    MOV  H06  D101            // 功能码
    MOV  H20  D102            // 地址高
    MOV  H00  D103            // 地址低(控制命令字)

    // 根据HMI设定决定命令值
    LD  M100                  // 正转标志
    MOV  H00  D104
    MOV  H01  D105            // 正转命令0001H

    LD  M101                  // 反转标志
    MOV  H00  D104
    MOV  H02  D105            // 反转命令0002H

    LD  M102                  // 停止标志
    MOV  H00  D104
    MOV  H05  D105            // 停止命令0005H

    CALL  CRC_CALC            // 计算CRC

    RS  D100  K8  D200  K9600  K0
RET

五、高级应用技巧

5.1 通信超时与重试

工业现场需考虑通信可靠性,加入 超时检测和自动重试:

LD  X10                     // 触发通信
SET  M50                    // 通信中标志
MOV  K0  D20                // 清零超时计数器
TMR  T0  K50                // 500ms超时定时器

// 通信完成检测
LD  SM136                   // RS指令完成标志
RST  M50                    // 清除通信中标志
RST  T0

// 超时处理
LD  T0
INC  D20                    // 超时次数+1
CMP  D20  K3  M51           // 超过3次报警
LD  M51
SET  Y0                     // 通信故障报警输出

5.2 多寄存器批量写入

使用功能码 0x10 可同时修改频率和运行命令,减少通信次数:

字节 内容 说明
1 0x01 站号
2 0x10 写多个寄存器
3-4 0x2000 起始地址(控制字)
5-6 0x0002 寄存器数量(2个)
7 0x04 字节数(2×2=4)
8-9 0x0001 数据1:正转命令
10-11 0x1388 数据2:频率50.00Hz

批量写入特别适合需要同时给定的场景,避免频率和命令分两次发送造成的时序问题。


六、参数地址速查

汇川MD500系列常用通信地址(其他品牌请参考对应手册):

地址 名称 说明
0x1000 运行频率 当前实际输出频率×100
0x1001 设定频率 当前目标频率×100
0x1002 母线电压 单位V
0x1003 输出电压 单位V
0x1004 输出电流 实际值×10,单位A
0x2000 控制命令字 1=正转,2=反转,5=停止,6=自由停车,7=故障复位
0x2001 频率设定 目标频率×100

七、调试工具推荐

使用 以下工具可大幅提升调试效率:

  • 串口调试助手:如Modbus Poll、SSCOM,验证 帧格式正确性
  • USB转RS485转换器:电脑直连总线监控 通信数据
  • 示波器观察 A/B差分信号波形,判断物理层质量
  • 信捷触摸屏:内置Modbus主站功能,可作为备用主站测试 变频器

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文