☰
三菱PLC RJ71C24串口模块Modbus-RTU通讯配置与调试实战
2026/10/4 5:25:46 网站建设 项目流程

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协议就用通信协议支持功能,对接特殊自定义协议再考虑无顺序协议。

还有一点,模块参数修改后务必断电重启。我吃过好几次亏,改完参数以为在线生效了,结果跑起来还是老样子,白白浪费了一个下午。养成“改参数必重启”的习惯,能少走很多弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询