三菱 Q 系列 PLC 使用 485 串口模块(如 QJ71C24N-R2)通过 MODBUS 协议通讯时,需结合专用指令(如 MC 协议或 MODBUS 库指令)实现数据收发。以下是基于 Q 系列 PLC 作为 MODBUS 主站,与从设备(如仪表、变频器)通讯的程序编写方法:
一、硬件与参数配置
二、编程思路
Q 系列 PLC 通过专用协议指令或自由口通讯实现 MODBUS RTU:
三、程序示例(使用库指令)
假设:
步骤 1:导入 MODBUS 库
在 GX Works3 中,依次点击「工具」→「库管理」→ 导入「MODBUS_MASTER」库。
步骤 2:程序编写
ladderlogic
// 初始化:设置通讯参数 LD M8002 // PLC启动脉冲 MOV K1 D0 // 从站号=1 MOV K3 D1 // 功能码=3(读取保持寄存器) MOV K1 D2 // 起始地址=40001(对应D2=1) MOV K2 D3 // 读取寄存器数量=2 MOV D100 D4 // 接收数据存储首地址=D100 MOV K100 D5 // 超时时间=100ms // 触发MODBUS通讯(上升沿触发) LD X0 // 启动按钮 AND M8000 // 运行中 PULSE M1 1 // 上升沿脉冲 // 调用MODBUS主站指令 LD M1 MC_MASTER D0 D1 D2 D3 D4 D5 M0 M1 M2 M3 M4 M5 // 状态监控 LD M0 // 通讯完成标志 OUT Y0 // 完成指示灯 LD M2 // 通讯错误 OUT Y1 // 错误指示灯 LD M3 // 超时错误 OUT Y2 // 超时指示灯
四、程序示例(自由口通讯)
若不使用库指令,可手动组帧实现(以读取从站 1 的 40001~40002 为例):
1. 发送 MODBUS 报文
ladderlogic
// MODBUS帧格式:[站号][功能码][起始地址高][起始地址低][数量高][数量低][CRC高][CRC低] // 读取40001~40002:01 03 00 00 00 02 C4 0B LD X0 // 发送触发 MOV K1 D10 // 站号=1 MOV K3 D11 // 功能码=3 MOV K0 D12 // 起始地址=0(40001对应0) MOV K2 D13 // 数量=2 // 计算CRC校验(需编写CRC计算子程序) CALL P100 D10 D20 // 计算结果存D20(CRC高)、D21(CRC低) // 组帧发送(QJ71C24N-R2模块使用通道1) LD X0 PULSE M10 1 LD M10 SEND K1 D10 K8 D30 M20 // 通道1,发送数据D10开始,8字节
2. 接收并解析报文
ladderlogic
// 接收从站返回的报文(正常响应:01 03 04 [数据1高] [数据1低] [数据2高] [数据2低] [CRC]) LD M8000 RECV K1 D40 K10 D50 M30 // 通道1,接收数据存D40开始,最大10字节 // 解析数据(确认站号和功能码正确) LD M30 // 接收完成 CMP D40 K1 M40 // 站号=1? CMP D41 K3 M50 // 功能码=3? LD M40 AND M50 MOV D43 D100 // 数据1→D100(高8位D43,低8位D44→合并为16位) MOV D45 D101 // 数据2→D101
五、关键说明
六、调试要点
通过以上方法,Q 系列 PLC 可稳定实现 MODBUS RTU 通讯,适用于连接各类支持 MODBUS 协议的设备。