资讯动态

三菱PLC RJ71C24串口模块Modbus-RTU通讯配置与调试实战

发布时间:2026/10/4 5:25:56 来源:尧图企业网站定制
1. 项目背景与选型思路1.1 为什么是RJ71C24做自动化改造这些年我遇到最多的一类需求就是“把PLC和现场一堆老设备打通”。很多现场的设备并不落后变频器、温控表、智能电表、流量计功能都好好的就是通讯口只有RS-485协议只认Modbus-RTU。这时候你不可能让用户全换设备也不值得为每一台设备配一个协议转换网关——成本高、故障点多、后期维护还麻烦。最直接的办法就是给PLC加一块串口通讯模块。三菱iQ-R系列PLC的CPU本体现在大多只带以太网口部分型号连传统串口都不保留了。如果现场设备只支持RS-485你就必须靠扩展模块把串口“补”出来。RJ71C24就是iQ-R平台里的标准串行通信模块支持RS-422/RS-485可以挂在PLC基板上通过GX Works3配置成Modbus-RTU主站或从站直接和第三方仪表通讯。相比外挂网关的方案模块方式响应速度更快、调试更直观、程序里也能直接读取通讯状态从长期维护角度看明显更省心。我个人的建议是只要现场有超过两台Modbus-RTU设备要接入并且控制柜里还有空的iQ-R槽位优先考虑用RJ71C24做总线轮询而不是一台设备配一个网关。这篇文章我就以RJ71C24为例子完整捋一遍从选型到调试落地的过程。1.2 硬件版本与安装准备RJ71C24这个型号名称要记清楚它对应的是RS-422/485接口。还有一个兄弟型号RJ71C24-R2那个是RS-232接口两者外观相近但通讯口性质完全不同选型时看错会直接导致现场接不上线。安装位置方面RJ71C24是iQ-R系列的智能功能模块需要插在基板上占用一个槽位。模块本身不需要额外供电基板供过来的电源就够了。安装前要注意PLC的电源容量如果基板上已经挂了很多模块最好核算一下5V电源的余量不然模块一多容易出现上电异常。另外模块上有接地端子机柜里务必做好接地尤其是和变频器、伺服驱动器放同一个柜子里时接地质量直接影响通讯稳定性。如果你是从三菱Q系列迁过来的老工程师这里有个小提醒RJ71C24的参数不再像Q系列C24那样通过GX Works2里的“智能功能模块”对话框逐项填写而是在GX Works3的“模块配置”里双击模块进行设置。界面逻辑不同但参数项基本都能找到。我第一次用的时候也找了好一阵子不要慌按模块手册的页面索引走就行。1.3 和Q系列C24的一点点差异除了软件操作界面RJ71C24和老的Q系列C24模块在编程上有几个差异值得关注。Q系列C24的缓冲区地址很多是需要手动指定的而RJ71C24在GX Works3里配置时会自动分配地址我们只需要通过标签或者软元件去映射不需要再手动算地址号。这个改动对新手其实更友好但也意味着从Q项目迁移时旧程序里的FROM/TO指令不能直接照搬得重新封装一遍。再就是通讯协议支持能力。RJ71C24与Q系列C24都支持“通信协议支持功能”但iQ-R版本里的协议配置工具更直观协议帧的编辑、校验方式、重试次数这些参数都可以在图形界面里完成。尤其是Modbus-RTU直接在配置界面里选功能码、填站号和寄存器地址就行不用自己拼CRC16校验这比当年用无顺序协议手工组帧要轻松太多了。2. 接线与参数配置2.1 RS-485接线与终端电阻RJ71C24的RS-485接口通常使用两线制接法信号线分为A-和B对应仪表端标着A/B、D/D-或者485/485-的端子。接线时最关键的一点就是“同名端相连”模块的A接仪表的A模块的B接仪表的B千万不能交叉。我见过很多次通讯不正常的现场打开端子排一看A和B接反了这种错误最气人因为万用表量不出问题只有看波形或者仔细核对图纸才能发现。通讯距离和线缆也有讲究。RS-485在9600波特率下理论传输距离可以达到1200米但这只是理想值。实际工程中我一般要求使用屏蔽双绞线屏蔽层单端接地并且让通讯线远离动力电缆至少保持20厘米以上的间距。如果现场线槽紧张非要和动力线走一起那就必须用带屏蔽层的通讯线否则变频器一启动报文就会大量出错。终端电阻是另一个容易忽略的细节。Modbus-RTU总线标准要求物理链路两端都要接终端电阻阻值通常为120欧姆。如果总线上只有两台设备那就在模块侧和仪表侧各接一个多于两台时接在总线的两端中间设备不要接。RJ71C24本身是否内置终端电阻不同批次和规格可能有差异稳妥的做法是查阅模块手册如果需要外接就在端子排上并联一个120欧姆电阻一点都不能含糊。2.2 GX Works3初始化与模块参数在GX Works3里配置RJ71C24我习惯按下面的顺序操作。首先新建工程PLC型号选实际使用的iQ-R CPU比如R08CPU或R16CPU。然后在左侧导航栏找到“模块配置”右键点击基板上的空槽位选择“添加模块”在智能功能模块分类下找到RJ71C24并添加。添加成功后双击模块图标就能打开模块参数配置界面。关键的参数项有两个地方。第一是“通信协议设置”这里可以选择“通信协议支持功能”、“无顺序协议”、“MC协议”等。如果要做Modbus-RTU通讯我强烈建议选择“通信协议支持功能”后面会讲怎么配置比无顺序协议省太多事。第二是“串口通信设置”这里要设波特率、数据长度、校验位和停止位。Modbus-RTU协议本身要求数据长度必须是8位停止位和校验位要根据从站设备来定最常用的组合是9600,8,N,1也就是9600波特率、8数据位、无校验、1停止位。参数设置完成后需要把程序下载到PLC并运行模块参数才会真正生效。这里有一个小坑修改模块参数后有时需要给PLC重新上电模块才能按新参数工作在线修改不一定全部生效。所以每次改完通讯参数我习惯连CPU一起断电重启一次宁可多花几分钟也好过在现场对着不确定性找半天。2.3 串口参数怎么定很多初学者喜欢把所有设备的串口参数都设成一样的“默认值”但实际Modbus-RTU通讯对参数的匹配要求是非常严格的。主站和从站的波特率、数据位、校验位、停止位必须完全一致哪怕校验位差一位通讯都起不来。现场常见的仪表出厂默认值并不统一有的是9600,8,N,1有的是9600,8,E,1还有的是19200,8,N,1所以第一步永远要先看每台从站设备的说明书确认它们实际支持什么参数。另外Modbus-RTU的报文格式里没有“起始位”和“停止位”手动配置的余地它们是由串口硬件自己处理的。我们能决定的就是波特率、校验位和停止位。波特率越高通讯越快但抗干扰能力越差现场电磁环境一般用9600比19200更稳。对于温控表、流量计这类数据量不大、实时性要求不高的场合9600完全够用。如果现场有变频器、伺服我建议直接把波特率压在9600没必要为了快那几毫秒去挑战干扰问题。3. Modbus-RTU通讯核心实现3.1 先从报文开始读懂Modbus-RTU虽然用通信协议支持功能可以不用手写报文但我一直认为做通讯必须看得懂报文否则出了问题只能抓瞎。Modbus-RTU报文结构很简单总共分为四段地址码、功能码、数据区、CRC校验。地址码占1个字节也就是从站站号范围是1到247功能码占1个字节代表要执行的操作数据区根据功能码不同长度也不一样CRC校验占2个字节低位在前、高位在后。以最常用的“读保持寄存器”功能码03为例如果要从站号为1的设备读取从地址0开始的2个保持寄存器报文就是这样的01 03 00 00 00 02 C4 0B拆开看就是01是从站地址03是功能码00 00是寄存器起始地址00 02是读取数量C4 0B是CRC16校验值。从站收到后如果正常会返回类似这样的帧01 03 04 00 01 00 02 校验其中04是返回的字节数后面4个字节就是两个寄存器的数据。如果从站发生错误它不会直接不回而是返回一个异常帧功能码变为0x83也就是原功能码加0x80同时数据区带一个异常码。比如01 83 02就表示“非法数据地址”说明你读取的寄存器地址在当前设备上不存在。常用功能码不需要都背下来但我至少会记住这几个03读保持寄存器、04读输入寄存器、06写单个寄存器、16写多个寄存器。其他像01、05、15这些线圈类功能码用到时再查手册就行。理解报文结构之后再去配置协议支持功能就完全清楚每一步在做什么了。3.2 通信协议支持功能配置实操我通常在模块参数里把通信协议设置选为“通信协议支持功能”然后双击打开“通信协议支持功能设置”界面。里面的逻辑是“协议—帧—元件映射”三级结构。首先要新建一个协议比如命名为“Modbus_Master_1”。协议类型选择“Modbus-RTU”主站模式。此时左边会列出支持的Modbus功能码点击添加需要的功能码。举例说明我要读取一批温控表的当前温度功能码选“读保持寄存器03”然后配置关键参数从站地址、起始寄存器地址、读取寄存器数量、超时时间、重试次数。这里有几个地方要特别小心。第一很多仪表的寄存器地址在手册里是“4x001”这样的PLC风格的地址比如“40001”表示保持寄存器第一个地址但实际报文里的地址是0也就是要减1。第二读取数量和寄存器数据类型要匹配有些设备一个温度值是32位浮点数占用2个寄存器那你读取数量就得填2然后把两个16位寄存器凑成一个32位数据再解析。配置完发送帧之后还要做“软元件映射”也就是把从站返回的数据放到PLC的哪个地址。GX Works3支持在这个界面里直接把返回的数据映射到D区比如起始软元件设为D100那么读回来的第一个寄存器就存在D100第二个存在D101以此类推。这样做的好处是梯形图里不需要再写FROM指令直接读D100就是现场的实时数据非常方便。3.3 梯形图里的触发与状态处理协议配置好了不代表程序就自动通讯了梯形图里还是要有触发逻辑。我的做法是做一个轮询状态机而不是写一个一直导通的触点。首先准备一个轮询启停标志比如M100再准备一个轮询周期定时器定时时间根据从站设备的响应速度来设一般100ms到500ms。定时时间到了就触发一次协议执行。触发协议执行的指令在GX Works3的智能功能模块指令栏里能找到通常需要指定模块起始地址、协议号、发送数据软元件等。触发后程序要同时监控完成标志和异常标志。正常完成时将完成标志复位把数据拷贝到应用区异常时累计错误次数超过设定值就触发报警。这里有个小细节触发指令的条件不要用常开触点一直保持一定要用“边沿触发”否则会导致一帧还没返回下一帧又发了出去模块缓冲区直接乱掉。我第一次做这个项目时就吃过亏以为把触发条件写成长通更省事结果现场一运行通讯数据偶尔正常偶尔错乱后来查下来才发现是触发帧太频繁从站设备反应不过来。改成边沿触发加轮询间隔后问题立刻消失。程序里务必保留一个“通讯总复位”开关很多时候从站设备先于PLC上电或异常重启会导致总线卡死手动复位一下协议功能就能恢复。3.4 特殊场景PLC做Modbus从站除了作为主站去读现场仪表RJ71C24也可以配置成Modbus-RTU从站让触摸屏、上位机或另一台PLC来读写iQ-R的数据。这个需求在项目里也很常见尤其是上位机做SCADA需要从PLC采集数据时。配置方式和主站类似在通信协议支持功能里把协议类型选择为Modbus-RTU从站然后设置站号。从站模式下不用配置“发送帧”而是要配置“软元件映射”把Modbus寄存器地址映射到PLC的D、M等软元件区。比如你将Modbus地址40001映射到D200那么上位机读40001时RJ71C24会自动把D200的数据返回上位机写40001时数据会被写入D200。这样就实现了上位机与PLC数据的无缝对接。有一点要注意从站模式下RJ71C24不会主动发送数据它只等待主站请求。因此如果你的PLC程序里需要主动给上位机推送数据这种模式就不合适得改成主站模式让PLC去发或者走服务器/客户端方式。选主站还是从站一定要在项目初期定清楚后期改模式会牵扯到一堆协议配置和程序逻辑调整。4. 现场调试与排查实录4.1 一次通讯失败的排查过程去年做一个项目RJ71C24连接现场8台温控表一开始测试时一台都读不到。当时我按下面这个顺序排查最后只用了一个小时就找到问题这里也分享给读者参考。第一步检查硬件接线。用万用表在模块端子处测量A-B之间的电压RS-485正常空闲时A相对B应该在2V到5V之间。我量的结果是0.8V明显偏低怀疑是模块侧没有终端电阻或者接线有问题。顺藤摸瓜发现其中一台仪表的A/B线接反还因为某段接线端子松动导致接触不良整个总线都被拖垮了。把交叉线改回来、端子拧紧后再量电压就正常了。第二步核对从站参数。拿一台仪表单独接到模块上把仪表站号设为1波特率9600校验无停止位1模块参数也设为一致然后用协议执行功能去读发现能正常返回数据。这说明模块本身没问题之前读不到是因为多台并联时某台设备地址冲突或参数不一致。所以现场调试时我强烈建议先单台调通再往总线上逐步增加设备不要一上来就接满8台那样只会徒增排查难度。第三步检查从站设备的地线。很多温控表安装在现场工作电源是220V如果仪表的电源地与通讯地隔离不好会把共模干扰引入总线导致通讯时好时坏。我给每台仪表的通讯地单独拉了一根接地线到机柜的接地排情况才稳定下来。这一步看起来不起眼但对长距离RS-485几乎能起到决定性作用。4.2 用报文监控抓真凶如果接线和参数都对了通讯仍然时好时坏下一步就要上工具看报文。我的常用工具是USB转RS-485的调试器把它并联到通讯总线上配合串口调试软件把总线上的所有报文抓下来分析。抓报文的时候要注意监听设备的参数必须和总线上主从站完全一致并且监听设备是“只听不发”避免干扰原通讯。抓到报文后怎么判断问题呢我总结了一套原始经验如果总线上只能看到主站发出的请求帧没有任何响应帧说明从站没有收到请求或者收到了但没应答重点查从站地址、从站参数和线路连接。如果能看到响应帧但响应帧的CRC校验错误、帧长度不对通常是波特率不一致或者线路受到干扰导致数据在传输过程中发生了位错误。如果响应帧功能码变成了0x83、0x84开头那说明从站收到了请求但认为请求非法重点查寄存器地址和功能码是否在从站支持范围内。有一次我通过报文监控发现主站发的请求帧开头出现大量乱码仔细看才知道是模块某个参数被设置了“和校验”而不是Modbus-RTU的CRC校验导致整个帧格式都错了。这种问题如果不看报文光靠猜很难定位。4.3 干扰导致的偶发超时通讯完全不通还好查最怕的是“偶尔超时”这种软故障。现象是大多数时候通讯正常但只要现场的变频器一启动或者某台大电机一动作通讯就会偶发超时持续几秒钟后又自己恢复。这种问题十有八九是电磁干扰。排查时我先确认通讯线是不是和动力线走在同一个线槽里结果发现确实有一段为了布线美观通讯线和变频器输出线捆在了一起变频器输出线上的PWM高频谐波直接耦合到了RS-485总线里。处理方法是把通讯线单独走槽并在两端加上磁环屏蔽层单端可靠接地同时把波特率从19200降到9600。优化之后再启动变频器通讯纹丝不动。程序侧也要做应对干扰的兜底给轮询逻辑加重试机制比如连续3次超时再报故障每次请求的超时时间不能设得太短我一般设在200ms左右给从站设备足够响应时间的同时也避免干扰导致误判。对于温度、压力这类慢变参数偶发一次超时重试后补读成功完全不影响工艺不要一超时就停机报警。4.4 轮询多台从站时的时序设计当总线上挂着多台从站时轮询时序就是一个绕不开的话题。Modbus-RTU是半双工协议同一时刻总线上只能有一个设备发送所以必须一台一台地问。我常用的轮询状态机是这样设计的PLC上电后先停在“空闲”状态等到轮询定时器到时间进入“请求发送”状态发送第1台设备的请求帧发送完成并收到正常响应后延时几十毫秒再进入第2台设备的请求。如果超时没有响应则跳过当前设备继续下一台同时记录这台设备的错误次数。轮询周期的估算很简单假设单台设备请求响应时间约50ms加上轮询间隔50ms两台之间大约需要100ms。如果总线上有8台设备完整轮询一圈大约0.8到1秒。对于温度、湿度、阀门开度这些过程量1秒刷新一次完全满足要求。如果现场设备数量很多还可以把实时性要求高的设备放在轮询队列前面把不重要的设备放在后面优先保证关键参数。千万不要把多台设备的请求帧同时触发或者在一个扫描周期内连续发送这样极易导致总线冲突和从站响应乱掉。我见过有同事用非常频繁的定时中断去发请求结果总线利用率高但有效数据率极低报文监控里全是超时和重发。5. 实操中我总结的几条经验5.1 初始化的时候先把状态全部复位干净每次PLC上电后第一轮轮询之前我都会先对RJ71C24的协议执行状态做一次整体复位。不要小看这一步很多偶发性怪问题其实都是上电瞬间模块缓冲区里残留了上一次掉电前的数据导致第一次请求发出后收到的响应和请求对不上。复位后再启动轮询就干净了。程序实现上可以用首次扫描标志三菱PLC里有类似的特殊继电器去复位协议控制区。5.2 多准备几个顺手的小工具做Modbus-RTU调试我电脑里常备几个小工具一个CRC16计算器支持Modbus多项式显示低位在前结果一个串口调试助手能按十六进制报文显示还有一个简单的Modbus虚拟从站软件用来在办公室里模拟仪表。项目调试前我通常先在办公室用虚拟从站把RJ71C24的协议配置和梯形图逻辑全部测一遍确认请求帧、响应解析、异常处理都正确了再去现场。这样到现场后更多的时间只花在接线和参数核对上能省掉不少来回折腾的功夫。5.3 最后交代几个容易踩的坑第一寄存器地址的“0起点”和“1起点”。很多仪表说明书上的寄存器地址是PLC风格的40001、40002实际Modbus报文里要换算成0、1。如果你直接用40001填入协议帧多半会报“非法数据地址”。第二从站设备的帧间隔有些老仪表对总线活动之间的间隔非常敏感主站轮询间隔设定太短会导致它丢弃请求。遇到这种设备只能把轮询间隔调到几百毫秒没有更好的办法。第三RJ71C24的通信协议支持功能和无顺序协议不能同时启用选型阶段就要想清楚遵循标准Modbus协议就用通信协议支持功能对接特殊自定义协议再考虑无顺序协议。还有一点模块参数修改后务必断电重启。我吃过好几次亏改完参数以为在线生效了结果跑起来还是老样子白白浪费了一个下午。养成“改参数必重启”的习惯能少走很多弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑