1. 项目概述:三菱PLC与变频器的MODBUS通讯实现
在工业自动化控制领域,三菱PLC与变频器的通讯一直是现场实施的关键环节。MODBUS协议作为工业领域最常用的通讯协议之一,其稳定性和通用性使其成为PLC与变频器通讯的首选方案。本项目以三菱FX1S系列PLC为例,详细讲解如何通过RS指令实现与多台变频器的MODBUS通讯。
为什么选择FX1S作为教学案例?因为这款基础型PLC不支持现成的MODBUS指令,反而能让我们深入理解通讯协议的底层实现原理。掌握了基础原理后,迁移到FX3U、Q系列等高端机型只需简单调整专用指令即可。
2. 硬件准备与通讯基础
2.1 硬件配置要求
实现PLC与变频器的MODBUS通讯,需要准备以下硬件设备:
- 三菱PLC(支持FX1S、FX1N、FX2N、FX3G、FX3U、Q系列等)
- 三菱变频器(FR-A700、FR-D700、FR-E700等系列)
- 通讯模块(RS232BD、RS422BD、RS485BD板卡或串口模块)
- 通讯线缆(根据接口类型选择)
2.2 通讯参数设置
MODBUS通讯的基础是双方设备必须采用相同的通讯参数。三菱变频器默认的MODBUS通讯参数为:
- 波特率:9600bps
- 数据位:8位
- 停止位:1位
- 无校验(None)
- 站号:1(可设置为1-247)
在PLC程序中,需要通过特殊寄存器D8120设置匹配的通讯参数。例如设置9600/8/N/1的参数组合:
assembly复制MOV H0C8E D8120 // 9600bps,8位数据,1位停止,无校验
参数设置常见问题:如果通讯不稳定,首先检查双方设备的波特率、数据格式是否完全一致。实际项目中遇到过因为停止位设置不一致导致通讯失败的案例。
3. 通讯程序核心架构
3.1 程序初始化设置
通讯程序开始前,需要进行必要的初始化设置:
assembly复制MOV K1 M8161 // 设置为16位数据模式
MOV K100 D100 // 设置超时基准值为100ms
MOV K0 D0 // 初始化站号计数器
M8161是处理16位数据的关键标志位,设置为1后,PLC会自动处理数据的高低字节交换。D100用作超时判定的基准值,实际应用中需要根据设备响应速度调整。
3.2 MODBUS报文结构解析
MODBUS RTU模式的请求报文基本结构如下:
- 站号(1字节):标识从站设备地址
- 功能码(1字节):指定操作类型(如03H读保持寄存器)
- 起始地址(2字节):要访问的寄存器起始地址
- 数据长度(2字节):要读取/写入的寄存器数量
- CRC校验(2字节):错误检测码
以读取1号站变频器频率(地址100)为例:
assembly复制LD M8000
RS D200 K8 D500 K10 // 发送8字节,接收10字节
MOV K1 D200 // 站号=1
MOV H03 D201 // 功能码=03H(读保持寄存器)
MOV K100 D202 // 起始地址=100(频率参数)
MOV K1 D204 // 读取1个寄存器
CALL P0 D205 // 计算CRC校验
4. CRC校验算法实现
4.1 CRC校验原理
MODBUS使用的CRC-16校验算法基于以下参数:
- 多项式:0x8005(x¹⁶ + x¹⁵ + x² + 1)
- 初始值:0xFFFF
- 输入反转:True
- 输出反转:True
- 结果异或:0x0000
4.2 PLC中的CRC实现
在FX系列PLC中,可以通过以下子程序实现CRC计算:
assembly复制P0: // CRC16计算子程序
MOV HFFFF D0 // 初始化CRC值为0xFFFF
FOR K8 // 处理8位数据
...
XOR D1 D0 // 异或运算
ROTR D0 K1 // 右移1位
NEXT
调试技巧:在开发阶段,可以将计算出的CRC值发送到监控界面,与在线CRC计算工具比对,确保算法正确性。实际项目中遇到过因CRC计算错误导致通讯失败的情况。
5. 多台变频器轮询控制
5.1 轮询机制设计
控制多台变频器的关键在于建立高效的轮询机制。本程序采用站号计数器方式实现6台变频器的轮询:
assembly复制INC D0 // 站号计数器+1
CMP D0 K6 // 检查是否超过6站
< M30
MOV K1 D0 // 超过则归1
5.2 动态站号处理
使用变址寄存器Z实现动态站号寻址:
assembly复制MOV D0 Z0 // 将站号计数器值存入Z寄存器
MOV K1 D200Z0 // 动态设置报文中的站号
这种方式使得增加或减少变频器数量时,只需修改站号上限值即可,程序其他部分无需变动。
6. 数据接收与处理
6.1 接收数据验证
接收到数据后,需要进行有效性验证:
assembly复制LD M8122 // 接收完成标志
BMOV D500 D100 K10 // 转移接收数据
CMP D501 K3 // 验证功能码
= M10
CMP D508 K0 // 校验CRC低字节
= M11
AND M10 M11
OUT M20 // 数据有效标志
6.2 高低字节处理
在FX1S等基础机型上,需要手动处理数据的高低字节:
assembly复制MOV D100 D200 // 原数据
AND HFF00 D200 // 取高字节
RRCR D200 K8 // 右移8位
MOV D200 D201 // 高字节存入D201
MOV D100 D202
AND H00FF D202 // 取低字节存入D202
而在FX3U等高端机型上,使用SWAP指令即可简化操作:
assembly复制LD M8000
SWAP D100 // 高低字节互换
7. HMI界面设计与数据展示
7.1 数值格式处理
PLC中存储的频率值通常为整数(如50.00Hz存储为5000),在HMI上显示时需要转换为带小数点的格式:
- 三菱HMI:直接在数值显示元件属性中设置小数点位置
- 威纶通HMI:需要通过脚本进行除以100的运算
7.2 多页面监控设计
对于多台变频器的监控,可以采用以下两种方式:
- 单页面集中显示:所有变频器关键参数在一个画面中显示
- 多页面切换:每台变频器单独一个页面,通过按钮切换
实际应用建议:对于6台以内的系统,推荐单页面集中显示;超过6台建议采用分组页面方式,避免界面过于拥挤。
8. 常见问题与解决方案
8.1 通讯超时处理
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通讯超时 | 波特率不匹配 | 检查PLC和变频器的通讯参数 |
| 接线错误 | 确认RS485接线(A/B线) | |
| 站号冲突 | 检查各变频器的站号设置 |
8.2 数据异常处理
assembly复制// 在轮询程序中加入超时处理
LD M8000
OUT T0 K50 // 设置50ms定时器
LD T0
RST M8122 // 复位接收标志
MOV K0 D500 // 清空接收缓冲区
8.3 CRC校验失败
CRC校验失败的常见原因包括:
- 通讯干扰导致数据错误
- CRC算法实现有误
- 数据长度计算错误
调试时可使用串口助手抓取实际通讯报文,与理论报文进行对比分析。
9. 程序优化与扩展
9.1 性能优化建议
- 合理设置轮询间隔,避免通讯拥堵
- 对关键参数采用变化触发读取,减少不必要通讯
- 使用块读取功能,一次读取多个参数
9.2 扩展至其他三菱PLC系列
将本程序迁移到其他三菱PLC系列的方法:
- Q系列:
- 将RS指令替换为BUFFERSEND
- 配置通讯模块的站号参数
- FX3U系列:
- 使用MODBUS专用指令(如ADPRW)
- 保留数据处理逻辑部分
9.3 上位机系统集成
通过VB.NET等语言开发上位机系统,可以实现:
- PLC数据监控与记录
- 变频器参数批量设置
- 生产数据统计分析
vbnet复制' VB.NET串口通讯示例
With SerialPort1
.PortName = "COM1"
.BaudRate = 9600
.DataBits = 8
.StopBits = StopBits.One
.Parity = Parity.None
.Open()
End With
10. 项目文件与资源
完整的项目包包含以下文件:
- 带详细注释的PLC程序(GX Works2格式)
- HMI画面文件(三菱GT Designer和威纶通EB Pro格式)
- 变频器参数设置说明书
- 项目说明文档
- 通讯测试记录表
在实际应用中,建议先使用1台变频器进行基本通讯测试,确认通讯正常后再扩展至多台。同时做好各变频器的参数备份,便于故障恢复。