1. 项目背景与核心价值
在工业自动化控制领域,PLC与变频器的通讯集成一直是现场工程师的刚需技能。三菱FX1s作为经典的小型PLC,搭配东元Teco N310系列变频器,这种组合在纺织、包装、输送线等场景中尤为常见。但实际调试时,通讯参数设置、协议转换、故障排查这些"脏活累活"往往要耗费大量时间。
这个实战程序的价值在于:它已经验证了三菱FX1s PLC通过RS485接口与N310变频器的完整通讯链路,包含频率设定、运行状态监控、故障代码读取等核心功能。我把自己在三个不同项目现场调试总结出的参数配置、程序架构和异常处理方案都固化在了这个程序里,拿来就能直接接入现有系统。
2. 硬件连接与通讯基础
2.1 物理层接线要点
FX1s-14MR本体自带编程口是RS422,需要扩展FX1N-485-BD通讯板(约300元)才能连接N310的RS485接口。接线时特别注意:
- N310的S+/S-对应485-BD的RDA/RDB
- 终端电阻拨码开关根据总线长度设置:30米内关闭,超过30米则最后一台设备开启
- 屏蔽层单端接地(建议接PLC侧)
实测发现:若误将N310的通讯端子接到主回路电源端子(R/S/T),会立即烧毁通讯板!建议用不同颜色的线材区分强电与信号线。
2.2 协议配置关键参数
N310变频器的通讯参数存储在Pr.117~Pr.124,必须与PLC端保持一致:
plaintext复制Pr.117 站号:1 (默认值,多台时依次递增)
Pr.118 波特率:19200
Pr.119 数据位/停止位:8/1 (对应PLC的D8120=H0C96)
Pr.120 奇偶校验:2 (偶校验)
Pr.121 通讯超时:1000ms
PLC侧需设置特殊寄存器:
assembly复制MOV H0C96 D8120 // 8数据位/1停止位/偶校验/19200bps
MOV K1 D8121 // 站号1
3. 程序架构解析
3.1 通讯指令核心逻辑
采用三菱专用的RS指令(串行通讯指令)实现数据交换,程序结构分为三个层次:
- 握手层:M10触发通讯使能,M11作为完成标志
- 协议层:构建符合Modbus-RTU规范的报文
- 应用层:频率设定、运行控制等业务功能
典型频率写入程序段:
assembly复制LD M8000 // 运行常ON
RS D100 K8 D200 K10 // 发送D100~D107的8字节,接收存到D200~D209
3.2 数据映射关系
N310的功能码与PLC数据寄存器对应表:
| 变频器参数 | Modbus地址 | 功能码 | PLC寄存器 | 数据类型 |
|---|---|---|---|---|
| 运行频率 | 0x2000 | 06H | D500 | 16位整数 |
| 输出电流 | 0x2101 | 03H | D501 | 16位无符号 |
| 故障代码 | 0x3000 | 03H | D502 | 16位枚举 |
频率值需要做量纲转换:
plaintext复制实际频率(Hz) = 发送值 × 0.01
例如:设置50Hz → 发送5000 (0x1388)
4. 典型功能实现
4.1 启动/停止控制
通过写入0x2001地址实现:
assembly复制// 正转启动
MOV H2001 D110 // 地址
MOV H0001 D111 // 数据01=启动
MOV H0006 D112 // 功能码06
CALL P_COMM_SEND
// 停止命令
MOV H2001 D110
MOV H0000 D111 // 数据00=停止
MOV H0006 D112
CALL P_COMM_SEND
4.2 多段速控制
利用N310的多段速指令寄存器(0x2003):
assembly复制// 设置第3段速(预设值在Pr.4)
MOV H2003 D110
MOV H0003 D111 // 速度段位
MOV H0006 D112
CALL P_COMM_SEND
5. 故障排查实录
5.1 常见错误代码
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| ERR-05 | 通讯超时 | 检查Pr.121设置,延长超时时间 |
| 数据跳动不稳定 | 终端电阻未正确设置 | 末端设备启用120Ω终端电阻 |
| 只能读不能写 | 变频器处于运行状态 | 先发送停止命令再修改参数 |
5.2 通讯质量诊断技巧
- 用串口监听工具:在PLC与变频器之间串联USB-RS485转换器,用ModScan等工具抓包
- LED状态观察法:
- 485-BD板的SD/RD灯应规律闪烁
- N310的COMM灯常亮表示物理层正常
- 接地干扰测试:暂时断开屏蔽层,观察通讯是否改善(工业现场常见地环路干扰)
6. 程序优化建议
- 增加心跳检测:每5秒读取0x3001(运行状态),超时自动重试3次后报警
- 采用队列机制:用FIFO指令管理发送队列,避免指令覆盖
- 添加数值滤波:对电流等波动数据做移动平均处理
assembly复制// 简易移动平均滤波示例
MOV D501 D600 // 当前值
ADD D600 D601 D601 // 累加
INC D602 // 计数器
CMP K4 D602 // 满4次?
MUL D601 K250 D603 // ×0.25(右移2位)
MOV D603 D604 // 滤波后值
ZRST D601 D602 // 清空累加器
这套程序在纺织厂卷绕机项目上连续运行超过8000小时,期间处理过电机堵转、电源波动等各种异常情况。关键是要做好通讯中断后的自恢复逻辑——我的做法是在每次发送失败后延时300ms重试,连续3次失败才触发上位机报警。