工业自动化领域中,PLC与变频器的通讯一直是现场实施的关键环节。这次要分享的是三菱FX1s系列PLC与东元Teco N310变频器之间的Modbus RTU通讯实战经验。这个组合在纺织、包装等行业的设备改造中非常常见,但实际调试时总会遇到各种"坑"。
我去年在一个瓦楞纸板生产线改造项目中,就遇到了FX1s-30MR通过RS485控制12台N310变频器的需求。当时翻遍了国内外论坛,发现完整可用的案例寥寥无几。经过两周的反复测试,终于总结出一套稳定可靠的解决方案,现在把核心程序和配置要点整理出来,希望能帮到有同样需求的同行。
FX1s的通讯扩展模块选用FX1N-485-BD(这是性价比最高的方案),与N310的接线方式需要注意:
特别注意:N310变频器的通讯端子螺丝是3.5mm的,比常规端子大,要用专用压线钳处理,否则容易接触不良导致通讯时断时续。
N310需要设置的参数(以控制第一台变频器为例):
code复制P00.01 = 3 (Modbus RTU模式)
P00.02 = 1 (站号1)
P00.03 = 3 (38400bps)
P00.04 = 3 (8位数据位,无校验)
P00.05 = 0 (无超时检测)
这些参数必须在断电重启后才会生效。有个容易忽略的细节:N310的波特率实际生效值会比设定值有约5%的偏差,建议用示波器校准。
FX1s使用RS指令进行Modbus通讯,典型程序段如下:
ladder复制|-[M8002]---[MOV K4 D8120] // 设置通讯格式:38400bps,8,N,1
| [MOV K1 D8121] // 站号设置区
|
|-[X0]------[RS D100 K8 D200 K10] // 发送8字节,接收10字节
| [SET M8122] // 触发发送
关键点在于D8120的配置值:
控制变频器启停的Modbus帧示例:
code复制D100: 01 06 20 00 00 01 CRC_L CRC_H
对应含义:
频率设定值发送(50.00Hz):
code复制D110: 01 06 20 01 13 88 CRC_L CRC_H
其中1388H是5000(50.00Hz×100)的十六进制表示。
现象1:PLC发送后无响应
现象2:返回错误码83
现象3:偶尔出现数据错乱
三菱PLC的RS指令不会自动计算CRC,需要手动添加。这里分享一个经过优化的CRC16计算子程序:
ladder复制|-[M0]---[MOV K0 D0] // CRC初始值
| [MOV K0 Z0] // 字节计数器
|
|-[FOR K8]------------------ // 对8个字节计算
| [ADD K1 Z0] // 指针+1
| [MOV D100Z0 D10] // 取发送字节
| [XOR D10 D0] // CRC低字节异或
|
| [FOR K8]------------ // 每字节处理8位
| [SR D0 K1] // 右移1位
| [M8022]----- // 检测进位
| [XORH A001 D0] // 若进位则异或A001H
| [NEXT]
|[NEXT]
这个方案比常见的查表法节省了约30%的扫描周期时间。
以下是经过实际项目验证的完整控制程序框架:
ladder复制// 初始化段
|[M8002]---[MOV K4 D8120] // 通讯格式设置
| [MOV K1 D8121] // 默认站号
| [MOV K0 D150] // 故障计数器清零
|
// 频率设定指令
|[X1]------[MOV K5000 D210] // 设定50.00Hz
| [CALL P0] // 构造频率设定帧
| [SET M8122] // 触发发送
| [T0 K50] // 等待50ms
|
// 运行控制指令
|[X2]------[MOV H2000 D100] // 运行命令寄存器
| [MOV H1 D101] // 正转命令
| [CALL P1] // 构造控制帧
| [SET M8122]
| [T1 K50]
|
// 子程序P0:频率设定帧构造
|P0--------[MOV D8121 D100] // 站号
| [MOV H6 D101] // 功能码06
| [MOV H2001 D102] // 频率寄存器
| [MOV D210 D103] // 频率值
| [CALL P2] // 计算CRC
| [RET]
|
// 子程序P2:CRC计算(略,见上文)
重要技巧:在每次RS指令后插入T计时器延时,实测表明这比用M8123等待接收完成更稳定,特别是在多台变频器级联时。
当需要控制多台N310时,建议采用分时轮询方式:
实测在12台变频器组网时,采用这种方案可以将通讯故障率降低到0.1%以下。
读取变频器运行状态的请求帧:
code复制01 03 20 02 00 02 CRC_L CRC_H
返回数据解析:
建议在程序中添加以下处理逻辑:
ladder复制|[M8123]---[MOV D200 M100] // 状态字映射到M寄存器
| [DIV D201 K100 D211] // 实际频率值
| [CMP D211 K50 M50] // 频率超限报警
这套程序框架已经在三个不同行业的项目中使用过,累计控制过60多台N310变频器。最长的已经连续运行超过400天没有出现通讯故障。关键是要做好以下几点:
最后分享一个调试小技巧:用串口监听工具同时监控PLC发送和变频器返回的数据时,建议在工具端也加上120Ω终端电阻,否则可能会因为阻抗不匹配导致监听到的数据出现乱码。