QJ71C24N‑R2:RS232+RS485(2 线 / 4 线),支持 Modbus‑RTU;
QJ71C24N(不带‑R2)只有 RS232,不能做 485 RTU!
本示例:QJ71C24N‑R2 作为 Modbus‑RTU 主站,去读写第三方仪表(温控、数显表从站); 编程软件:GX‑Works2 / GX‑Works3;QCPU;使用专用无顺序协议(非 Modbus 库指令,QJ71C24 发送原始 RTU 报文)QJ71C24N‑R2 本身没有内置 Modbus‑RTU 驱动!RTU 需要自己拼接 RTU 报文 + CRC16 校验发送。 (如果想用内置 Modbus,只有 QJ71MB91 这个专门 Modbus 模块;C24N‑R2 只能原始报文方式)
一、硬件接线(RS‑485 两线)
QJ71C24N‑R2 端子排:
SDA (D+) ;SDB (D‑);SG 信号地
SDA ↔仪表 A+;SDB ↔仪表 B‑;SG 接仪表通讯 GND;总线两端 120Ω 终端电阻;拨码设置模块侧为 2‑wire RS485。
二、模块参数设置(GX Works3 模块智能参数)
I/O 分配:QJ71C24N‑R2 起始 I/O 地址假设:
0000~001F(32 点)串口 CH1 通道设置:
通信协议:无顺序协议 (Non‑procedure)
波特率:9600;数据位 8;无校验;停止位 1;
传输控制:RS‑485 2 线式;
收发切换由模块硬件自动控制(RTS 自动),不需要用户程序处理收发方向。
模块缓冲存储器 (BFM) 基础: CH1 发送缓冲起始:
\G0\U0\H0000;CH1 接收缓冲起始\G0\U0\H0100; CH1 发送请求 BFM:\G0\U0\H0200;CH1 完成标志\G0\U0\H0201。
模块 BFM 地址格式说明:
\G0\U0\Hxxxx代表第一个 C24N‑R2 模块;如果你是第 2 块模块 U 改成 U1。
三、Modbus‑RTU 报文格式回顾
示例任务:读取从站 ID=1 温控仪表 PV;输入寄存器 30001(1 基址,对应 0 偏移地址 0,功能码 04,读 1 个寄存器)
RTU 发送报文(不含 CRC):01 04 00 00 00 01再追加 2 字节 CRC16 校验;完整发送帧:01 04 00 00 00 01 [CRC_L][CRC_H]
返回报文(示例):01 04 02 00 FA CRC_L CRC_H;00FA 就是 PV 值 (250 →25.0℃)
关键点:QJ71C24N 无顺序发送时,报文最后必须自己算 CRC16,PLC 程序内部做 CRC 运算,不能依靠模块自动生成!
四、PLC 程序思路整体逻辑
编写 CRC‑16 Modbus 校验子程序;
将需要发送 RTU 报文写入 C24N‑R2 CH1 发送缓冲 BFM;
置位发送请求位,发送串口报文;
等待发送完成标志;切换等待接收应答;
判断接收完成标志;读取接收缓冲区;先校验收到帧 CRC 是否正确;CRC 校验 OK 再解析寄存器数据;
增加超时定时器,通讯故障复位。
QJ71C24N‑R2 无顺序协议不会自动做 CRC!这是现场最容易踩坑。
备选方案
如果项目比较多 Modbus 仪表,不要用 QJ71C24N‑R2 拼报文!直接选 QJ71MB91 专用 Modbus‑RTU 模块。QJ71MB91 内置 Modbus RTU/ASCII 协议;直接设置参数,用 FROM/TO 或者专用指令读写寄存器,不用手写 CRC,开发量大幅降低。
QJ71MB91 简要说明(对比 C24N‑R2)
QJ71MB91:专门 Modbus 主从站模块;RS‑485;GX Works 智能参数直接设置从站、站号;用
MB_READ/MB_WRITE功能块读写仪表寄存器,不用拼接报文、不用 CRC 子程序,工程首选。
ST 示例逻辑(QJ71C24N‑R2,仅逻辑示意,需要补充 CRC16 函数)
注意:实际项目需要自己实现 Modbus CRC16 子程序。
//1.填充RTU报文到CH1发送缓冲区BFM H0000开始
\G0\U0\H0000:=1; //从站ID 01
\G0\U0\H0001:=4; //功能码04读输入寄存器
\G0\U0\H0002:=16#00; //起始地址高字节
\G0\U0\H0003:=16#00; //起始地址低字节
\G0\U0\H0004:=16#00; //读取个数高字节
\G0\U0\H0005:=16#01; //读取个数低字节
//调用CRC16子程序,计算6字节报文的CRC;把CRC低、高字节写入H0006 H0007;
//发送请求:报文总长度8字节
IF M0 THEN
\G0\U0\H0200:=8; //CH1发送请求,发送字节数=8
END_IF;
//等待发送完成标志 \G0\U0\H0201 ;之后等待接收;
//接收完成后读取H0100开始接收缓冲区;校验CRC;解析数据到D寄存器
总结
误以为 QJ71C24N‑R2 自带 Modbus‑RTU 协议;模块只能原始无顺序报文,CRC 必须 PLC 软件运算;
硬件型号搞错 QJ71C24N(不带‑R2)只有 RS232,不能接 485;
485 SDA SDB 接反,完全无应答;SG 信号地不接通讯随机掉线;
收发切换问题:2 线 485 模式参数没有在智能参数里选对;
CRC16 高低字节顺序:Modbus RTU CRC 先发送低字节,后发送高字节(非常多人写反)。
总结
表格
| 模块 | Modbus RTU 实现方式 | 适用场景 |
|---|---|---|
| QJ71MB91 | 内置 Modbus 驱动,MB_READ 功能块,无需 CRC | 项目有多台 Modbus‑RTU 仪表【优先选】 |
| QJ71C24N‑R2 | 无顺序协议,手写报文 + PLC CRC 子程序 | 旧设备改造手上已有 C24‑R2,仪表数量少 |


