1. 项目背景与需求解析
去年接手的一个自动化产线改造项目里,需要实现信捷XD5系列PLC同时控制三台三菱E700变频器的多机协同作业。这种异构设备混合组网在中小型自动化项目中很常见,但实际调试时发现各家设备的通讯协议兼容性就像方言交流——理论上都说是普通话,实际对话时总有几个词对不上号。
核心需求其实很明确:
- 通过PLC统一设定三台变频器的运行频率(0-50Hz可调)
- 实时读取各变频器的输出电流、电压等运行参数
- 实现启动/停止的群控和单机独立控制
- 故障状态连锁停机功能
2. 硬件组网方案设计
2.1 设备选型清单
- 主控单元:信捷XD5-60T-E PLC(自带RS485接口)
- 被控设备:三菱FR-E720-0.4K(3台同型号)
- 通讯电缆:Belden 9842双绞屏蔽线(带终端电阻)
- 转换模块:无需额外协议转换器(省下2000+预算)
2.2 物理连接拓扑
采用标准的RS485总线型拓扑:
code复制PLC(Port2) ----+---- 变频器1
|
+---- 变频器2
|
+---- 变频器3
关键细节:
- 总线末端(最后一台变频器)的SDA/SDB间需跨接120Ω终端电阻
- 屏蔽层单端接地(接PLC侧接地端子)
- 线序对应关系:
- PLC的SDA+ → 所有变频器的PU+
- PLC的SDA- → 所有变频器的PU-
- 注意信捷的接口标注是反的(这是个坑)
3. 通讯协议深度适配
3.1 协议栈选择
三菱E700支持两种通讯模式:
- 专用协议(三菱自家格式)
- Modbus RTU(国际标准)
实测发现专用协议在信捷PLC上需要额外购买协议库(约800元/种),果断选择Modbus RTU方案。但这里有个隐藏问题:三菱的Modbus地址映射与常规设备不同。
3.2 寄存器地址破解
通过翻阅E700手册第17章,找到关键地址映射表:
| 功能 | Modbus地址 | 数据类型 | 备注 |
|---|---|---|---|
| 运行频率 | 0x0001 | 16bit | 单位0.01Hz(写入值需×100) |
| 输出电流 | 0x0005 | 16bit | 单位0.01A |
| 运行命令 | 0x2000 | 16bit | 位控制(bit0=启动) |
特别注意:三菱的保持寄存器区从0x0000开始,而信捷默认的Modbus库是从0x0001开始编址,需要在程序里做地址偏移补偿。
4. PLC程序架构设计
4.1 通讯参数初始化
在PLC的第一个扫描周期执行以下配置:
st复制// 通讯端口初始化
MOV K2, D8120 // 设置通讯格式:9600bps,8,N,1
MOV H81, D8121 // 启用Modbus RTU主站模式
// 变频器站号设置(通过面板参数)
// 变频器1:Pr.117=1
// 变频器2:Pr.117=2
// 变频器3:Pr.117=3
4.2 轮询机制实现
采用分时复用策略避免总线冲突:
code复制第1个周期:读取1#变频器电流
第2个周期:读取2#变频器电流
第3个周期:读取3#变频器电流
第4个周期:写入公共频率值
用计数器实现简单调度:
st复制LD M8002 // 上电初始化
MOV K0, D100 // 周期计数器清零
LD M8000 // 常ON触点
INC D100 // 计数器自增
CMP K4, D100
RST D100 // 每4周期复位
5. 核心功能代码实现
5.1 频率同步写入
st复制// 当D100=3时执行写入
LD D100=3
MOV K5000, D200 // 50.00Hz→5000(0.01Hz单位)
MODWR K1, H1, D200 // 写入1#变频器
MODWR K2, H1, D200 // 写入2#变频器
MODWR K3, H1, D200 // 写入3#变频器
5.2 运行状态读取
st复制// 电流读取示例(1#变频器)
LD D100=0
MODRD K1, H5, D300 // 读取0x0005→D300
// 实际电流值=D300/100 (A)
5.3 启停控制逻辑
st复制// 启动群控(M10为启动按钮)
LD M10
MOV H1, D210 // 运行命令字
MODWR K1, H2000, D210
MODWR K2, H2000, D210
MODWR K3, H2000, D210
// 急停连锁(X0为急停信号)
LD X0
MOV H0, D210
MODWR K1, H2000, D210
MODWR K2, H2000, D210
MODWR K3, H2000, D210
6. 调试踩坑实录
6.1 通讯超时问题
现象:随机出现"Error 3"通讯失败
排查过程:
- 用示波器抓波形发现信号振铃严重
- 调整终端电阻阻值(实测82Ω比120Ω更稳定)
- 降低波特率到4800后问题消失
最终方案:
- 缩短总线长度(从50米减到35米)
- 改用Belden 3106A低容抗电缆
- 保持9600bps波特率
6.2 数据错位问题
现象:偶尔读到乱码数据
根本原因:
三菱变频器的Modbus响应有3.5字符的静默时间,而信捷PLC默认超时是3字符。
解决方法:
修改PLC系统参数:
st复制MOV K35, D8122 // 设置超时为3.5字符时间
6.3 地址偏移问题
最坑的一点:三菱的保持寄存器区在Modbus中对应的是4x区,但信捷的MODWR指令默认使用3x区。
解决方案:
在指令中手动添加偏移量:
st复制// 原指令
MODWR K1, H1, D200
// 修正后
MODWR K1, H40001, D200 // 4x区地址需要+40000
7. 性能优化技巧
-
报文间隔控制:
在每条Modbus指令后添加20ms延时(用T定时器实现),避免总线堵塞。 -
数据缓存策略:
建立环形缓冲区存储最近3次采样值,异常数据自动过滤。 -
故障自恢复:
连续3次通讯失败后自动复位端口:st复制LD M8000 CMP K3, D500 // D500记录错误计数 RST M8123 // 复位通讯标志 RST D500 -
状态压缩上报:
将8个布尔量状态压缩到1个16位寄存器:st复制// 报警状态打包示例 LD X10 // 过流 SFTL D600, K1 // 左移1位 OR X10, D600 // 最低位置位
8. 现场维护要点
-
接地规范:
- 变频器动力线接地与通讯线接地必须分开
- 接地点选择变频器安装底板而非控制柜PE排
-
干扰排查:
遇到通讯异常时:- 先断开所有变频器电源,单独测试通讯
- 用万用表测量SDA-SDB间电压(正常2-6V)
- 检查附近是否有变频器动力线平行走线(需保持30cm间距)
-
参数备份:
三菱变频器的通讯参数需特别备份:code复制Pr.117=1 // 站号 Pr.118=96 // 波特率 Pr.119=0 // 停止位 Pr.120=2 // 校验方式 Pr.549=0 // 协议选择
这个项目最终稳定运行了2000+小时无故障。总结下来,异构设备通讯的关键在于三点:吃透协议手册、做好物理层隔离、预留足够的调试余量。后来我们又用同样思路实现了信捷PLC与安川变频器的通讯,发现不同品牌的Modbus实现细节差异能写本小册子,有机会再跟大家分享那次的踩坑经历。
