简介:本资源是一份面向工业自动化工程师与PLC初学者的三菱Q系列PLC MODBUS通信实战指南,聚焦QJ71C24N串口模块在MODBUS RTU协议下的完整配置与应用。内容覆盖GX WORK2工程创建、智能模块安装设置、CH2通道协议配置(含功能码03读保持寄存器)、软元件批量设定、模块写入操作,以及G.CPRTCL指令参数详解与变频器(如安川A1000)数据读取实操案例,解决PLC与外部设备间稳定通信落地难的问题。资源为单文件DOC文档(854KB),结构清晰,含详细界面截图指引、地址映射说明、MOV指令示例及硬件接线要点,便于边学边练。已有6744人学习下载,读者可直接复用配置流程、指令模板与寄存器地址规划逻辑,快速掌握QJ71C24N在实际产线中与变频器等设备的数据交互方法。
1. QJ71C24N跑通MODBUS RTU:不是配对就能通,而是地址、时序、软元件三者咬死才出数据
去年在某高校实验室调试一条包装线,现场Q00UJ CPU配QJ71C24N模块,接安川A1000变频器,连续三天通信灯狂闪但D7010始终不存值——最后发现是GX WORK2里“软元件批量设置”漏勾了D7052的“写入使能”,而手册里这行字藏在第38页脚注。这件事让我彻底认清:QJ71C24N+MODBUS RTU不是“选协议→填地址→点写入”就能跑通的黑匣子,它是一套必须严丝合缝咬合的机械结构:硬件IO地址决定模块识别边界,软元件映射定义数据搬运路径,G.CPRTCL指令时序控制执行节奏。本文讲透这个结构怎么搭、哪颗螺丝松了会翻车、怎么用最笨但最稳的办法验证每一段是否真实生效。适合正在现场拧螺丝的PLC工程师、刚接手老产线改造的自动化新人,以及被“通信失败”提示框反复暴击却查不到日志的调试者。你不需要懂MODBUS底层CRC校验,但必须清楚D7000里写的01和D7052里写的K1到底在指挥哪根线发哪个字节。
2. 硬件IO地址与软元件映射:起始XY地址不是编号,而是模块寻址的物理坐标系
QJ71C24N不是插上就认的即插即用设备,它的存在必须被CPU“物理定位”。这个定位动作发生在GX WORK2工程创建后的第一步——智能功能模块安装。很多人跳过这步直接进通信设置,结果后面所有配置都像在空中建楼。
2.1 起始XY地址:四维坐标中的“楼层号”与“房间号”
QJ71C24N模块占用4个字节的X输入和4个字节的Y输出(共8点),其起始地址格式为X/Y0090(示例中为0090)。注意:这不是随便编的编号,而是由模块在基板上的物理槽位决定的。例如:
- 模块插在CPU右侧第1个扩展槽(Q系列基板槽位从0开始计数),则起始XY地址通常为
X/Y0090 - 插在第2个扩展槽,则为
X/Y00A0 - 插在第3个扩展槽,则为
X/Y00B0
提示:实际地址需在GX WORK2中右键“智能功能模块安装位置”→“模块设置”窗口左下角查看“自动分配”结果,绝不可凭经验硬填。曾见某公司工程师因基板带背板总线扩展,实际地址偏移2个槽位,硬填0090导致模块根本未被CPU扫描到。
起始地址X/Y0090拆解为四位:0090
- 前两位
00:代表该模块在智能功能模块区的组号(Group No.),Q系列默认为00 - 后两位
90:代表该模块在组内的编号(Unit No.),即物理槽位编码
G.CPRTCL指令中的Un参数,取的就是这后两位90(十六进制),即U90。若填错,指令根本不会触发通信——CPU连模块在哪都不知道。
2.2 软元件批量设置:把“寄存器地址”翻译成“PLC内存地址”的词典
MODBUS协议里的0024H寄存器,在PLC里不存在;它必须被映射到D寄存器才能被程序读写。这个映射不是自动的,必须人工建立“词典”。
在GX WORK2中执行:编辑 → 软元件批量设置
弹出窗口中填写:
- 起始软元件号:
D7000 - 批量数量:
100(覆盖D7000–D7099,足够应对多数场景) - 类型:
字(16位) - 初始值:
K0(清零,避免残留值干扰)
点击确定后,D7000–D7099区域被初始化为可读写软元件。关键映射关系如下(必须手敲,不能靠记忆):
| MODBUS语义 | 对应软元件 | 说明 |
|---|---|---|
| 外部设备站号(Slave ID) | D7000 | 十进制写入,如变频器地址为1 →MOV K1 D7000 |
| 起始寄存器地址(Hex) | D7001 | 必须用H前缀写16进制值,如0024H →MOV H24 D7001(不是K36!) |
| 读取寄存器数量 | D7002 | 十进制,如读2个字 →MOV K2 D7002 |
| 协议执行标志位 | D7052 | 首次执行协议编号,如协议名设为“READ_FREQ_VOLT”,编号为1 →MOV K1 D7052 |
注意:D7001必须用
H24而非K36。因为MODBUS协议帧中地址字段是16位二进制,H24=0x0024,K36=0x0024在数值上虽等价,但GX WORK2内部处理时,H前缀明确告诉系统“按16位寄存器地址解析”,而K前缀可能被误判为常数参与运算,导致发送帧地址错位。
2.3 通信协议支持功能:在GX WORK2里“注册”你的MODBUS协议
这是最容易被跳过的一步,也是通信失败率最高的环节。它不是配置,而是“注册”——让GX WORK2知道:“我要用MODBUS RTU,且要用功能码03读保持寄存器”。
操作路径:工具 → 通信协议支持功能 → 串行通信模块
→ 点击“新建” → 在弹出窗口中:
- 协议名:自定义,如
READ_FREQ_VOLT(建议含功能+设备,便于后期维护) - 通信协议:选择
MODBUS RTU - 功能码:
03(读保持寄存器) - 数据长度:
2(本例读2个字,即频率+电压) - 起始地址:留空(由D7001动态指定)
- 目标站号:留空(由D7000动态指定)
点击“确定”后,该协议出现在列表中。重点来了:此时必须点击“添加”按钮,将协议真正加载到模块配置中。否则,即使G.CPRTCL指令执行,模块也因“未注册协议”而静默丢弃请求。
验证是否注册成功:工具 → 设置软元件一览显示
在弹出窗口中搜索D7052,若能看到其类型为“协议执行标志”,且右侧有对应协议名(如READ_FREQ_VOLT),说明注册成功。
3. G.CPRTCL指令详解:用时序和参数把“读寄存器”变成可执行的机器语言
G.CPRTCL不是普通功能指令,它是Q系列PLC调用串口模块的“系统调用接口”。它的每个参数都在指挥硬件做一件具体的事,缺一不可,错一位就停摆。
3.1 指令语法与参数含义:每个字母都是物理信号的开关
指令格式:G.CPRTCL U90 K2 K1 D7000 M100
逐参数拆解(以示例为基础):
| 参数 | 值 | 物理含义 | 常见错误 |
|---|---|---|---|
U90 | U90 | 模块起始IO地址后两位(十六进制),指向X/Y0090模块 | 填U0090(多写前导零)或U900(位数错)→ 模块未识别 |
K2 | K2 | 通信端口号:K1=CH1,K2=CH2。QJ71C24N双通道,CH2常用(因CH1常被调试占用) | CH2硬件跳线未设为RS485模式,却填K2 → 电平不匹配,无响应 |
K1 | K1 | 连续执行协议个数:此处为1,表示只执行D7052指定的1个协议 | 若需轮询多个设备,此处填K3,同时D7052~D7054需分别写入K1/K2/K3 |
D7000 | D7000 | 控制数据保存起始地址:D7000~D7002存放站号/地址/数量,D7052存放协议编号 | 地址偏移:若D7000写错,站号发错,变频器直接不回包 |
M100 | M100 | 通信结束标志位:通信完成且无错误时ON;若超时或CRC错,保持OFF | 未监控M100状态就往下走逻辑 → 程序以为数据已到,实则D7010还是旧值 |
提示:
M100必须配合边沿检测使用。正确写法是LDP M100(上升沿脉冲),而非LD M100(电平保持)。因为M100在通信成功后会持续ON,若用LD,后续所有依赖该标志的MOV指令会每周期执行,导致D7010被反复覆盖。
3.2 完整梯形图段:从触发到取数的最小闭环
以下为可直接复制到GX WORK2的梯形图逻辑(假设使用CH2,读安川A1000的0024H/0025H):
--| |--[MOV K1 D7000] // 变频器站号=1 --| |--[MOV H24 D7001] // 寄存器起始地址=0024H --| |--[MOV K2 D7002] // 读2个字(频率+电压) --| |--[MOV K1 D7052] // 执行协议编号1(READ_FREQ_VOLT) --| |--[G.CPRTCL U90 K2 K1 D7000 M100] | |----[LDP M100]----[MOV D7010 D100] // 通信成功瞬间,搬移数据到D100 |----[LDP M100]----[MOV D7011 D101] // D7010/D7011为返回的2个字关键细节说明:
D7010和D7011是QJ71C24N模块自动写入的接收缓冲区,无需手动MOV写入。它们的位置由GX WORK2在“软元件批量设置”时固定分配。D100和D101是用户自定义存储区,用于后续逻辑(如频率比较、报警判断)。LDP M100确保只在通信成功的第一个扫描周期搬移数据,避免重复覆盖。
3.3 多协议轮询:当一条产线要接5台变频器时怎么不卡死
单协议只能读一个设备,但产线常需轮询多台。G.CPRTCL支持最多8个协议并发注册,通过D7052~D7059控制执行顺序。
实现轮询的关键不是“同时发”,而是“分时发”:用定时器控制协议切换。
示例:轮询3台变频器(站号1/2/3),每2秒切一台:
// 定时器T0,2秒循环 --| |--[OUT T0 K200] // K200=20秒?错!GX WORK2中T0单位为100ms,K200=20秒 → 改为K20(2秒) // 用T0的触点切换协议编号 --| |--[LDP T0]----[INC D7100] // D7100为计数器,0→1→2→3... --| |--[LDP T0]----[CMP K3 D7100 M200] // 当D7100=3时,复位 --| |--[LD M200]---[OUT D7100 K0] // 根据D7100值写入对应站号和协议编号 --| |--[LDP M200]----[MOV K1 D7000]----[MOV K1 D7052] // 站号1,协议1 --| |--[LDP M201]----[MOV K2 D7000]----[MOV K2 D7052] // 站号2,协议2 --| |--[LDP M202]----[MOV K3 D7000]----[MOV K3 D7052] // 站号3,协议3注意:
D7052只控制“首次执行协议”,若需执行协议2,必须写MOV K2 D7052,而不是MOV K2 D7053。D7053是为“第二次执行协议”预留的,仅当n2参数设为K2时才启用。
4. 接线与变频器参数设定:RS485的AB线不是随便拧,终端电阻不是装饰品
硬件是通信的地基,再完美的软件配置,压在一根虚接的RS485线上,就是0。QJ71C24N的CH2端子排(TB1)接线,必须抠到毫米级。
4.1 QJ71C24N CH2端子定义与安川A1000接线对照表
QJ71C24N CH2为RS485接口,端子定义(从左至右):
| 端子号 | 标签 | 信号含义 | 安川A1000对应端子 | 接线要点 |
|---|---|---|---|---|
| 1 | SD+ | 发送正端 | SD+ | 必须双绞屏蔽线,屏蔽层单端接地 |
| 2 | SD- | 发送负端 | SD- | 与SD+同缆,不可分开走线 |
| 3 | RD+ | 接收正端 | RD+ | 若只用半双工,RD+与SD+短接,RD-与SD-短接 |
| 4 | RD- | 接收负端 | RD- | 同上 |
| 5 | SG | 信号地 | SG | 必须接,且与变频器SG共地 |
| 6 | TERM | 终端电阻使能 | — | 长线(>10m)或总线末端必须短接TERM与SG |
提示:安川A1000的SD+/SD-与RD+/RD-是分离的,但QJ71C24N在MODBUS RTU模式下强制半双工,因此必须用跳线将CH2的1-3、2-4分别短接。否则PLC发得出收不回。
4.2 安川A1000关键参数设置(H模式参数)
变频器不是插上就通MODBUS,必须关闭其他协议并开放寄存器。进入A1000参数菜单(H模式),设置以下三项:
| 参数号 | 名称 | 设定值 | 说明 |
|---|---|---|---|
| H001 | 通讯方式选择 | 2 | 2=MODBUS RTU(非ASCII,非CANopen) |
| H002 | 站号(Slave ID) | 1 | 必须与PLC中MOV K1 D7000一致,否则无视请求 |
| H003 | 通讯速度 | 3 | 3=19200bps(QJ71C24N默认CH2为19200,若改速需同步改GX WORK2通信设置) |
注意:H003设为
3后,QJ71C24N的CH2波特率必须在GX WORK2中同步修改:双击CH2开关设置 → 通信速度 → 19200bps。
曾见某项目因变频器设19200而PLC仍用9600,通信灯狂闪但无数据——示波器抓到PLC发的是9600波形,变频器只认19200,直接丢弃。
4.3 终端电阻与线缆:120Ω不是玄学,是阻抗匹配的物理定律
RS485总线在长距离传输时,信号反射会导致波形畸变,CRC校验必错。解决方案是在线缆两端各加一个120Ω终端电阻。
- 何时必须加:总线长度 > 10米,或分支超过2个节点
- 加在哪:仅在物理总线的最远两端加,中间节点严禁加
- 怎么加:QJ71C24N端:短接端子6(TERM)与5(SG);变频器端:在A1000的SD+/SD-间并联120Ω电阻(需外购)
验证方法:用万用表测SD+与SD-间电阻,若为60Ω(两个120Ω并联),说明两端都加了——这是典型错误!正确值应为120Ω(仅一端加)或∞(都没加)。
5. 避坑指南:那些让你凌晨三点还在看示波器的血泪问题
通信调试最耗心力的不是写代码,而是排除“看起来都对,但就是不通”的幽灵问题。以下是我在12个现场踩出的5个高频坑,每个都附带现象、根因和秒级验证法。
5.1 现象:M100永远不ON,D7010无变化,但通信灯(TX/RX)闪烁正常
原因:D7001寄存器地址用了K前缀而非H前缀,导致发送帧地址字段为0x0000而非0x0024
验证:用USB转RS485适配器+Modbus Poll软件,手动发01 03 00 24 00 02 C4 0B(站号1,读0024H,2个字),若变频器回数据,证明硬件OK,问题在PLC地址格式
解决:将MOV K36 D7001改为MOV H24 D7001
5.2 现象:M100偶发ON,但D7010数据乱码(如0xFFFF、0x8000)
原因:RS485共模电压超标,常见于PLC与变频器未共地,或电源地线环路引入噪声
验证:用万用表直流档测QJ71C24N的SG端与A1000的SG端电压,若>1V,说明地电位差过大
解决:断开变频器PE(保护地),仅保留SG(信号地)单点连接;或加DC/DC隔离模块(如ADUM1201)隔断地环路
5.3 现象:第一次通信成功,之后M100再不ON,重启PLC才恢复
原因:G.CPRTCL指令未加“执行条件锁存”,导致指令在M100=ON后持续触发,模块忙于响应而无法处理新请求
验证:监控D7052值,若在M100=ON后仍为K1,说明指令未复位
解决:在LDP M100后加OUT M101(锁存位),再用LDI M101作为G.CPRTCL的执行条件,形成“执行→成功→锁存→等待复位”闭环
5.4 现象:读取数据正确,但写入(功能码06/16)失败,M100不ON
原因:安川A1000默认禁止写入关键寄存器,需开放H模式参数H004(写入使能)
验证:用Modbus Poll发写指令,若返回异常码02(非法地址)或06(设备忙),说明变频器拒绝
解决:进入A1000 H模式,设H004 = 1(允许写入),并确认目标寄存器(如H005=运行命令)确为可写地址
5.5 现象:GX WORK2在线监视D7000~D7002值正确,但G.CPRTCL执行后D7010仍为0
原因:模块写入未完成,或“模块写入”时未选中QJ71C24N模块
验证:在线 → 模块信息,查看QJ71C24N状态是否为“运行中”,若为“未识别”,说明写入失败
解决:重新执行在线 → 模块写入,在弹窗中手动展开模块树,精确勾选QJ71C24N(勿勾CPU),点击“写入”。完成后,模块状态灯应由红变绿。
6. 实战验证四步法:不靠运气,用可测量信号确认通信每一环是否真实生效
写完程序不等于通了通信,必须用四级验证法,把抽象的数据流拆解成可触摸的物理信号。这是我从某跨平台系统调试中总结出的铁律:任何未被仪器捕获的“成功”,都是假成功。
6.1 第一级:看模块灯——确认硬件握手成立
QJ71C24N正面有4个LED:
RDY:常亮=模块供电正常,CPU已识别ERR:灭=无致命错误(如地址冲突、固件异常)TX:发送时闪烁=PLC向模块发出了指令(G.CPRTCL已触发)RX:接收时闪烁=模块收到了外部设备回复
关键动作:在GX WORK2中强制
M100=OFF,然后LDP X0(给一个启动信号),观察TX是否闪一次。若TX不闪,说明G.CPRTCL根本没执行——检查U90地址、模块写入状态、执行条件。
6.2 第二级:抓串口波形——用示波器看协议帧是否合规
这是最硬核的验证。将示波器探头接在QJ71C24N的SD+与SG之间(差分信号,SG为参考地),设置:
- 时基:200μs/div
- 触发:上升沿,阈值2V
- 解码:添加UART协议解码,波特率设为19200,数据位8,停止位1,无校验
正常MODBUS RTU帧应为:01 03 00 24 00 02 CRC(7字节)。若解码出00 00 00...或长度不对,说明PLC侧地址/数量设置错误;若解码正确但无回复,问题在变频器侧。
6.3 第三级:查软元件映射——确认数据真的进了PLC内存
GX WORK2在线监视中,必须同时打开三个窗口:
D7000~D7002:确认站号、地址、数量实时正确D7052:确认协议编号已写入D7010~D7011:不要只看值,要点开“刷新监视”并勾选“更新时高亮”
当M100上升沿出现时,D7010/D7011必须在1个扫描周期内(约10ms)从旧值突变为新值,并高亮显示。若高亮延迟或不出现,说明G.CPRTCL未真正写入缓冲区——检查D7052是否被其他逻辑覆盖。
6.4 第四级:比对变频器手册——用原始数据验证业务逻辑
安川A1000的0024H是输出频率(单位0.01Hz),0025H是输出电压(单位0.1V)。假设D7010=0x0F42(3906),则频率=39.06Hz;D7011=0x01F4(500),则电压=50.0V。用万用表实测变频器输出,若偏差>±0.5Hz或±1V,说明:
- 数据未归一化(需对D7010值除100)
- 或变频器参数H005(频率增益)被误设
从那以后我每次调试MODBUS,都强制走一遍这四步:先盯灯,再抓波,接着刷软元件,最后算物理量。少走一步,就可能把2小时的问题拖成2天。PLC通信没有玄学,只有信号、时序、映射三者的严丝合缝。希望帮到你。
本文还有配套的精品资源,点击获取