news 2026/10/15 9:06:24

三菱Q系列PLC RS232通讯实战:QJ71C24N无顺序协议配置与梯形图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三菱Q系列PLC RS232通讯实战:QJ71C24N无顺序协议配置与梯形图

简介:面向工业自动化与PLC调试场景,这份资源系统讲解三菱Q系列串行通讯模块QJ71C24N与QJ71C24N-R2之间通过RS232实现数据交换的方法。内容从两款模块的通道差异入手,对比单RS-232/RS-422/485与双RS-232配置,重点说明基于无顺序协议的参数设置流程,包括在Works2中添加智能功能模块、开关设置中的波特率、奇偶校验、数据位、停止位等关键项,并给出接收与发送程序的设计思路。文档还补充了CRC校验、超时机制、参数一致性等提升通讯可靠性的注意事项。资源包共含1个docx文件,大小约197KB,文字清晰、图文结合,方便随时查阅。目前已有3899人学习下载,适合初次接触三菱Q系列串口通讯模块的工程师、PLC编程人员以及对工业现场总线配置感兴趣的读者参考使用;通过阅读可快速掌握QJ71C24N与QJ71C24N-R2的RS232直连配置方法,理解无顺序协议的应用边界,并为后续编写稳定通讯程序提供可直接借鉴的框架。

1. 三菱Q系列串行通讯模块:QJ71C24N与QJ71C24N-R2的RS232通讯能解决什么

在产线上碰到两台三菱Q系列PLC要近距离交换数据,最省事的办法不是上以太网,而是用串行通讯模块直接拉一根RS232线。三菱Q系列串行通讯模块里,QJ71C24N和QJ71C24N-R2是经常被拿来配对的两块板子:前者有一个RS-232口加一个RS-422/485口,后者两个口都是RS-232。数据交换走无顺序协议,参数在GX Works2里设好,程序端就是一个发送一个接收。

这篇文章把硬件接线、参数设置、收发程序按实际调试顺序拆开,把我踩过的坑一并列出。它适合现场做设备间通讯的电气工程师,也适合刚接手Q系列通讯项目、想照着配置的新手。读完你至少能知道无顺序协议怎么选、两块模块的通道怎么配对、开关设置每一项怎么填,以及程序里那两个专用指令为什么不能省。

2. 协议与通道差异:为什么无顺序协议适合两台PLC直连

2.1 三种通讯协议怎么选

QJ71C24N和QJ71C24N-R2在固件层面支持三种通讯模式:MC协议、无顺序协议、双向协议。很多人第一次配置时直接卡在这一步,因为GX Works2的开关设置里那一排下拉框并没有写“推荐”,而是把选择权交给了你。

MC协议是三菱自定义的应用层协议,帧格式固定,带站号、命令、子命令、数据长度、校验码。这类协议适合上位机组态软件、触摸屏或者另一台同样支持MC协议的PLC,双方按固定格式一问一答,好处是省心,坏处是帧结构固定在模块内部,你想塞一段自定义数据进去反而别扭。

双向协议则是为特定智能设备准备的,比如温控器、变频器这类支持双向协议的仪表。它同样有固定帧格式,模块会自动解析地址和数据区。但如果你面对的是两台PLC之间的裸数据搬运,双向协议的灵活性也不够。

无顺序协议恰恰是这一类场景里最实用的选项。它不关心你的数据里是什么内容,模块只负责把串口上收到的字节原样存进缓冲区,或者把PLC发来的数据原样从串口发出去,不做任何组帧和解析。数据是否完整、是否有校验、如何界定一帧,全部由用户程序来定义。

协议帧格式适用场景模块端处理本项目是否选用
MC协议固定命令帧,含站号/命令/校验上位机组态、触摸屏、PLC间固定问答自动解析并应答否
双向协议固定格式,含站号/数据/校验温控器、变频器等智能仪表自动解析数据区否
无顺序协议无固定格式,原始字节透传两台PLC直连、扫码枪、串口设备只存取,不解析是

我一般会这样判断:如果链路两端都是自己写程序,且数据内容不固定,就选无顺序协议。这样模块退化成一条透明管道,通讯逻辑完全掌控在梯形图里,调试时问题也好定位。

2.2 两块模块的通道配置差异

QJ71C24N和QJ71C24N-R2从正面看长得几乎一样,但通道配置有本质区别。QJ71C24N的通道1是RS-232,通道2是RS-422/485;QJ71C24N-R2则两个通道都是RS-232。

模块型号通道1通道2
QJ71C24NRS-232RS-422/485
QJ71C24N-R2RS-232RS-232

这意味着两块模块配对时,接线逻辑并不对称。要让QJ71C24N和QJ71C24N-R2通过RS232通讯,只能从QJ71C24N的通道1出线,因为它的通道2是RS-422/485电平,和RS-232的电压范围完全不兼容。RS-232是单端±12V信号,RS-422/485是差分信号,直接对接不仅收不到数据,长时间硬接还有可能损伤驱动芯片。

QJ71C24N-R2的第二个RS-232通道是它的优势所在。主链路用通道1接QJ71C24N,通道2还能再接一台带RS-232口的上位机或者触摸屏,互不干扰。如果你手头已经有QJ71C24N,接收侧再配一块QJ71C24N-R2是最划算的组合,两个模块的通道1一对接就是一条干净的RS232点对点链路。

RS232本身是点对点通讯,距离一般控制在15米以内,速率不宜太高,9600到19200波特率在现场最稳。如果现场要求远距离或多点通讯,那就不是这个方案能解决的问题了,得换RS-422/485或者走以太网模块。

2.3 直连线缆接线与引脚核对

两块模块都是9针D型公头,直连时不能用那种一头公一头母的延长线,得做一条交叉线。项目中c图所示的做法,实际就是标准的2-3交叉、5-5直连。

功能QJ71C24N通道1引脚接至QJ71C24N-R2通道1引脚功能
SD(发送数据)23RD(接收数据)
RD(接收数据)32SD(发送数据)
SG(信号地)55SG(信号地)

三根线就能跑通基本的全双工通讯。发送侧的第2脚接到接收侧的第3脚,发送侧的第3脚接到接收侧的第2脚,两边的第5脚信号地直连。剩下的引脚不用接,前提是开关设置里把硬件流控关掉。如果某些现场设备默认开了DTR/DSR或RTS/CTS握手,那么对应引脚要么短接,要么在参数里明确设为无效,否则模块会一直等待握手信号而不发数据。

线缆我一般选带屏蔽层的双绞线,屏蔽层只在发送侧单端接地,避免形成环形地线。RS232本来就是低电压信号,和动力电缆同槽走线很容易被干扰,现场布线尽可能分开。线缆长度控制在15米以内,超过这个距离宁可改RS-422,也别硬扛。

接线完成的判断标准很简单:万用表量两端2-3、3-2之间通断正常,5脚之间电阻为零。量完再接设备,通讯异常时第一反应不用怀疑线序,省很多事。

3. GX Works2开关设置:通道1参数逐项配置

3.1 添加模块:槽号与智能功能模块的分配

打开GX Works2,进入工程后先在左侧导航树里找到“智能功能模块”。右键点击智能功能模块,选择“添加新模块”,弹出对话框里“模块类型”选择“串行通信”,“模块型号”选择QJ71C24N,然后点确定。这里有一个容易被忽略的地方:模块型号选错会导致后面的开关设置界面完全不同,QJ71C24N-R2必须单独选,不能拿QJ71C24N代替。

添加成功后,展开“智能功能模块”节点,下面会出现QJ71C24N。双击“开关设置”,进入通道配置界面。在动手改参数之前,先确认模块所在的槽号与实际硬件安装位置一致。槽号错了,GX Works2虽然能保存参数,但下装到PLC时模块地址和参数对不上,通讯自然起不来。I/O分配也要避开CPU自带的输入输出和已占用的智能模块地址,重复分配时软件会提示冲突。

这一步骤的本质是让软件认识硬件,把模块的通道、中断、缓冲存储器映射到CPU的地址空间里。后面的收发指令里用的通道号、X/Y信号编号,都依赖这一步正确分配,所以不要跳过。

3.2 开关设置逐项解读:协议、波特率、校验

双击“开关设置”后,界面左侧选择“通道1”,右侧就是一串配置项。无顺序协议场景下,我通常按下面这张表逐项填写:

配置项推荐值说明
通讯协议无顺序协议透明传输,不做帧解析
波特率9600 或 19200两站必须一致
数据位8常见ASCII/二进制数据都用8位
奇偶校验无也可选偶校验,两站必须一致
停止位1标准配置
和校验无无顺序协议下模块不做校验
DTR/DSR控制无效关闭硬件流控,三线通讯
DC代码接收无效避免XON/XOFF被模块拦截

通道1是QJ71C24N的RS-232口,所以在“通道”下拉里确认选中的是通道1而不是通道2。通道2在无顺序协议里虽然也能配置,但RS-422/485电平与RS-232不兼容,本例根本不会用。设置完后点击“结束”或“设置结束”保存,再继续配置下一个模块。

波特率的选择不是越高越好。9600和19200在现场表现最稳定,38400以上对线缆质量和接地要求明显提高。两站之间距离超过10米时,我一般直接定9600,宁可传输慢一点,也要保证不丢字节。

无顺序协议下,模块是纯管道,不会自动加校验码,也不关心数据里是不是有错误的字节。通讯的完整性完全靠用户程序自己检查。这一点必须提前想明白,否则接收侧收到错数据时会误以为是自己程序写错了。

3.3 QJ71C24N-R2的设置与两站一致性核对

QJ71C24N-R2的参数设置路径和QJ71C24N完全一样,唯一的区别是添加模块时“模块型号”选择QJ71C24N-R2,而不是QJ71C24N。展开智能功能模块,双击开关设置,同样选择通道1,逐项填写与发送侧相同的参数。

两个模块的参数一致性是通讯成功的前提,每一个字节位都必须对得上。波特率、数据位、奇偶校验、停止位四项中任何一项不一致,接收侧要么收不到数据,要么收到的字节全部是乱码。

参数项发送侧QJ71C24N通道1接收侧QJ71C24N-R2通道1一致性
通讯协议无顺序协议无顺序协议一致
波特率96009600一致
数据位88一致
奇偶校验无无一致
停止位11一致
DTR/DSR控制无效无效一致

参数设置完成后,参数并不会立刻生效。需要执行“在线→PLC写入→智能功能模块参数”,把配置下装到PLC和模块中,然后对PLC做一次复位或者断电重启,模块才会按新参数运行。这是最容易漏的一步,很多人在软件里设完参数,直接上电调试,发现通讯不通,其实不是参数错,而是参数根本没进模块。

4. 无顺序协议收发程序:OUTPUT发送与INPUT接收

4.1 发送侧程序:发送启动、数据区、发送完成处理

发送侧以QJ71C24N的通道1为出口。程序思路是:收到启动信号后,把D区里组织好的数据通过OUTPUT指令一次性交给模块,模块按无顺序协议逐字节从RS-232口发出。发送完成标志复位之前,不允许发起下一次发送。

// 发送侧梯形图指令表(QJ71C24N 通道1) LD X0 // 发送启动信号,按钮或上位机置位 OR M101 // 自保持,确保发送过程中信号不丢失 ANI X0F // 通道1发送完成标志,发送过程中断开 OUT M101 // 发送请求保持 LD M101 OUTPUT CH1 D10 D200 K10 // 通道1发送:控制数据首址D10,数据首址D200,发送10个字 LD M101 AND X0F // 通道1发送完成 OUT M102 // 发送完成通知,复位启动信号或通知上位机

OUTPUT是串行通讯模块的专用发送指令,指令里四个关键参数依次是通道号、控制数据起始软元件、发送数据起始软元件、发送点数。通道号必须与开关设置里配置的通道一致,这里固定是CH1。控制数据D10用来存放发送相关的扩展参数,比如结束方式、错误状态,具体偏移地址按模块手册对照表确认。发送数据D200起连续10个字的内容就是实际发送的帧内容。

X0F是通道1的发送完成信号,只有当模块把最后一位数据真正写进RS-232发送寄存器后才会置位。程序里把X0F串在发送请求自保持回路中,意味着上一帧没发完,M101就被断开,新的OUTPUT不会执行。这个互锁习惯很重要,能防止连续发送时后一帧覆盖前一帧的缓冲。

发送点数K10不是随意定的,要和接收侧约定的帧长度严格一致。无顺序协议下接收侧通常按固定长度接收,发送10个字,接收侧就必须按10个字的长度去读,否则数据会错位。

4.2 接收侧程序:接收完成标志、缓冲转存

接收侧用QJ71C24N-R2的通道1。模块收到完整数据后,会把数据存进自身接收缓冲区,同时把接收完成信号X0E置位。用户程序的职责是及时用INPUT指令把这批数据读进PLC的D区,读完之后清掉接收完成信号,准备接收下一帧。

// 接收侧梯形图指令表(QJ71C24N-R2 通道1) LD X0E // 通道1接收完成标志,模块置位 OUT M200 // 读取触发信号 LD M200 INPUT CH1 D10 D100 K10 // 通道1接收:控制数据首址D10,数据存入D100起10个字 LD M200 ANI X0E // 等待模块复位接收完成信号 OUT M201 // 整帧读取完成,通知主程序处理 LD M201 RST M200 // 清除读取触发信号,准备下一帧

INPUT是串行通讯模块的专用接收指令,参数含义与OUTPUT对称:通道号、控制数据起始软元件、接收数据存放起始软元件、读取点数。D100到D109就是模块缓冲区内数据的落地点,读取完成后这10个字可以交给后续的逻辑去解析、搬运或存入数据块。

X0E置位后,程序必须尽快执行INPUT。模块接收缓冲区的大小有限,如果这一帧还没读走,下一帧数据到了就会把旧数据覆盖掉,造成丢帧。梯形图里用M200把X0E的置位状态锁存住,再通过M200触发INPUT,读取完成后用ANI X0E判断模块已经复位信号,最后用M201通知主程序。整个流程保证了一帧一读、读后即清的基本逻辑。

如果接收侧程序里没有及时读取,而且缓冲区被覆盖,那么表现就是通讯中断,但模块本身没有任何报警。这是无顺序协议最容易翻车的地方,后面避坑章节会重点讲。

4.3 数据帧设计:固定帧头、长度与软元件分配

无顺序协议不提供任何帧边界识别,两台PLC之间必须自己约定帧格式。最简单的做法是固定长度帧:发送侧每次发固定数量的字,接收侧按同样的字数读取。固定长度帧的好处是程序简单、逻辑清晰,坏处是数据内容变化时也要按最大长度发送,浪费一点带宽。

为了能识别一帧数据的起始和有效性,我习惯在有效数据前后加帧头和校验字:

字序号内容说明
第1字0xAA55帧头,固定值,用于起始识别
第2字0x0008数据长度,表示有效数据为8个字
第3~10字有效数据实际要交换的内容
第11字累加和第1字到第10字的累加取低16位

发送侧在组帧时,先把帧头、长度、有效数据和校验字写入D200到D210,再执行OUTPUT发送11个字。接收侧读取这11个字后,先判断第一个字是不是0xAA55,再计算第1到第10字的累加和与第11字比对。校验通过才认为这一帧数据有效,不通过则丢弃并计数。

D寄存器分配固定下来后,发给梯形图里做符号注释,避免地址漂移。发送侧的D200到D210、接收侧的D100到D110,两者内容格式完全一致,只是存放位置不同。这样设计的好处是,后期要增加数据类型,只需要改长度字段和有效数据区间的个数,帧头校验逻辑不用动。

5. 通讯避坑记录:乱码、卡死、旧数据与电平错配

5.1 现象:数据乱码

现象:链路能通,但接收侧收到的数据偶尔全是乱码,十六进制监视里看到的是错位的字节,和发送内容对不上。

原因:最常见的是两侧波特率、数据位、校验不一致。比如发送侧设了偶校验,接收侧没设校验,每个字节的高位就多了一位,所有数据整体向右错一位。其次才是线缆过长或屏蔽层接地不良导致的电平抖动。

解决:先把开关设置里四项参数逐项截图对比,波特率、数据位、奇偶校验、停止位必须完全一致。然后降波特率到9600做验证,排除高速传输下的信号质量问题。如果9600下稳了,说明是线缆或干扰,不要急着提速率,先处理接地和布线。

5.2 现象:接收程序停住,等不到完成标志

现象:接收侧X0E一直不置位,程序停在等待状态,严重时CPU扫描周期被拉长,甚至触发看门狗超时。

原因:发送侧根本没有把数据发出来,发送条件没满足。另一个常见原因是开关设置里把DTR/DSR控制设成了有效,但接线没接握手脚,模块一直在等DTR信号,数据根本出不去。

解决:先用万用表量发送侧2脚对地有没有电平变化,确认模块确实在发。再看开关设置里DTR/DSR控制是不是“无效”,如果不是,要么改设置,要么把收发两侧的4、6脚短接。我一般直接把硬件流控全部关掉,裸三线跑通最省心。

5.3 现象:偶发通讯失败,同一条产线时好时坏

现象:传输批量数据时偶尔缺几个字,重连后又恢复,故障没有固定规律,时好时坏,排查起来很玄学。

原因:两台设备的信号地没有真正共地。RS232的信号参考点是GND,如果两台设备的5脚没有接通,或者机壳地之间存在电位差,接收侧判电平就会出问题。另一种情况是RS232线缆和动力电缆同槽走线,干扰偶发。

解决:确认两台设备5脚GND已可靠连接,屏蔽层只在发送侧单端接地。RS232线缆单独走线,和变频器、电机电缆保持至少20厘米距离。如果现场布线改不了,就换屏蔽双绞线,或者降波特率提高抗干扰余量。

5.4 现象:读到的还是上一次的旧数据

现象:第二次发送后,接收侧D区里的数据还是第一帧的旧内容,程序好像没收到新帧。

原因:接收侧读取不及时,或者读取完成后没有复位接收完成信号。模块缓冲区被新帧覆盖前,INPUT读到的是旧缓冲区内容,X0E一直保持,程序误以为数据没变。

解决:X0E置位后立即执行INPUT读取,读取完成后清掉触发标志,做到一帧一读。接收程序里加一个帧序号或者帧头判断,每次读到数据先验证帧头,再判断是否是新帧。这样即使缓冲区状态异常,旧数据也不会被当成有效数据用。

5.5 现象:改用R2的CH2后完全不通

现象:QJ71C24N通道1接QJ71C24N-R2通道1跑通了,把线缆换到R2的通道2后,立刻完全没有数据。

原因:R2的两个通道虽然都是RS232,但它们的I/O首地址、X/Y信号编号、开关设置项完全独立。程序里的OUTPUT/INPUT指令仍然写的是CH1,模块的通道2自然没有反应。两个通道物理上一样,逻辑上是两块独立设备。

解决:换通道时,开关设置里选“通道2”重新配置参数,程序里OUTPUT/INPUT的通道号改成2,接收完成信号X/Y地址也要按通道2的分配重新填写。不要以为“两个口都是RS232”就只换线不换程序,这个坑我踩过,换完通道还要做一次完整的参数核对和下装。

6. 回环测试与在线监视:十分钟验证RS232链路可靠性

6.1 回环测试:先确认板卡再连设备

如果通讯不上,第一步不是查程序,而是做回环测试。找一只9针公头,把2脚和3脚短接,5脚自连,插到QJ71C24N的通道1上。然后用发送侧程序触发一次OUTPUT,如果程序能收到自己发出来的数据,说明模块的发送链路、接收链路、缓冲区都是好的。回环通则问题在外部线缆,回环不通则问题在模块或配置。

6.2 在线监视与串口助手交叉验证

GX Works2切换到在线监视模式,把X0E、X0F、M200、M201、D100这些关键软元件全部丢进监视窗口。触发一次发送后,看X0E是否置位、D100区域是否出现新数据。如果X0E不置位,怀疑重点放在硬件;如果X0E置位但数据不对,怀疑重点放在参数一致性和帧校验。

更直接的办法是用一只USB转RS232线,一头插电脑,另一头接到QJ71C24N-R2的通道1,先用串口调试助手手动发送一帧固定内容,观察PLC有没有收到。这一招能绕过PLC发送侧的程序逻辑,单独验证接收侧程序是否正确。等接收侧确认没问题,再切回两台PLC直连,问题定位就缩小到发送侧了。

从那以后我每次搭这样的串口链路,都强制自己先做一遍回环测试再上真机,宁可多花十分钟,也不愿意到现场以后发现两块模块之间的问题,还是先怀疑模块后怀疑线这么绕一大圈。这个习惯帮我省掉了不少来回试错的功夫,希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 9:06:07

SpringBoot与Activiti 7集成实战指南

1. 项目概述工作流引擎是现代企业应用开发中不可或缺的基础设施。Activiti作为一款轻量级的开源工作流引擎,在Java生态中占据重要地位。而SpringBoot凭借其"约定优于配置"的理念,极大简化了Java应用的开发流程。将两者结合,能够快速…

作者头像 李华
网站建设 2026/10/15 9:06:06

STM32+TB6612驱动舵机转向电路设计与抗干扰实践

简介:本资源是一份面向嵌入式初学者与智能小车开发者的STM32硬件电路设计详解文档,聚焦舵机转向小车的核心控制电路实现,解决方向精准控制、模块复用性差、程序烧录繁琐及供电稳定性不足等典型工程问题。文档以ForestS1最小系统板&#xff08…

作者头像 李华
网站建设 2026/10/15 9:06:03

用T3 Stack构建全栈应用:从类型安全到部署实战

最近一直在折腾一个代号叫 t3code 的项目。说直白点,这就是一个用 T3 Stack 从零搭起来的全栈 Web 应用,核心是把 TypeScript 的类型安全从数据库一路贯穿到前端界面。过去做全栈开发时,我经常遇到前后端类型不同步导致的低级 Bug&#xff0c…

作者头像 李华
网站建设 2026/10/15 9:05:40

从App开发到Unity游戏开发:场景思维、帧循环与AI辅助编程实战

做 App 开发做了四五年,某天打开 Unity Hub 新建一个 3D 项目,看到满屏的坐标轴、Camera、GameObject,说实话第一反应是“这玩意儿和我写的 RecyclerView 到底有什么关系”。但只要你在这行待过一段时间,一定会有同一个感觉&#…

作者头像 李华
网站建设 2026/10/15 9:05:28

深度学习训练全栈解析:迁移学习、数据划分与四大优化器实战

1. 项目概述:从零理解这个看似杂乱实则精炼的深度学习训练全栈标题看到这个标题“11_Training Deep NN_2_transfer learning_split_datase_RBMs_Momentum_Nesterov AccelerG_AdaGrad_RMSProp”,第一反应不是困惑,而是兴奋——它像一张被压缩过…

作者头像 李华
网站建设 2026/10/15 9:05:20

Diagram-Design:从静态图表到可执行系统契约

1. “diagram-design”不是一张图,而是一套系统性思维语言“diagram-design”这个词组乍看像某个UI工具里的按钮标签,或是设计系统文档里被折叠的二级菜单。但在我带过的十几个跨职能协作项目中,它从来不是指“画个流程图”这么简单——它是一…

作者头像 李华