资讯动态

Q系列QJ71C24N/R2双模块RS232无顺序协议通讯配置与收发

发布时间:2026/10/29 19:03:13 来源:尧图企业网站定制
简介《三菱PLC串行通讯模块QJ71C24N与QJ71C24N-R2的RS232通讯方法》面向工业自动化现场调试、PLC串行通讯学习与设备联调人员围绕Q系列串行通讯模块之间的RS232互联讲解模块通道差异、无顺序协议选择、Works2参数配置以及收发程序设计等核心内容。压缩包内为1个docx文档约197KB集中呈现模块接口与通讯线缆示意、通道开关设置、接收缓冲区处理和发送数据帧示例便于按设备型号对照查阅。已有3907人学习下载适合需要快速理解QJ71C24N与QJ71C24N-R2通讯流程的工程师参考。文档还涵盖波特率、奇偶校验、数据位、停止位等参数设置并提示CRC校验、超时机制、双方参数一致性和数据包标识识别等排错思路可帮助读者建立从硬件配置、协议选择到程序联调的完整认识。1. 两块串行通讯模块对接先把 RS232 这条链路讲透手上有一套 Q 系列的老设备要改造主站侧机架上插的是 QJ71C24N远程一个操作箱里插的是 QJ71C24N-R2两边都只剩通道 1 空着需要靠一根 RS232 串起来做数据交换。这类需求在产线改造里非常常见不是上以太网就是两根线走串口成本低、改动小但参数一旦对不上通讯就会断续、丢包甚至一直收不到数据。这篇内容对应的就是这套串行通讯模块的 RS232 对接方法核心是无顺序协议下的参数配置与收发程序。适合已经摸过 GX Works2、但被智能功能模块的开关设置和各种缓冲区地址绕晕的人也适合刚接手 Q 系列项目、需要快速把串口打通的新手。读完至少能自己把模块加进工程、把通道参数配对、把收发程序写出来跑通并知道哪几个地方最容易出错。2. 硬件与协议选型QJ71C24N 和 QJ71C24N-R2 差在哪在动手写任何一行程序之前得先把两个模块的通道结构和协议模式确认清楚否则后面参数设得再细也可能因为物理通道搞错而一直不通。这一步在实操里经常被跳过结果就是在软件里来回改波特率改半天发现接的是另一个通道。2.1 通道结构决定接线方式QJ71C24N 是两个通道但通道类型不同通道 1 是 RS-232通道 2 是 RS-422/485。QJ71C24N-R2 的两个通道都是 RS-232。也就是说如果两边都用通道 1那就都是 RS-232用一根标准的 RS232 交叉线2 号针脚对 3 号针脚、3 对 2、5 对 5 的 GND就能接起来如果想把 QJ71C24N 的通道 2 也利用上就得额外考虑 RS-422/485 的差分接线和终端电阻那是另一套做法。实际接线前建议先明确三件事哪一侧做发送主体、哪一侧做接收主体、通讯距离是否在 RS232 的可靠范围内。RS232 在 15 米内比较稳超过这个距离还要走 RS232就要考虑降低波特率或加隔离中继否则线缆上的干扰会直接体现为校验错帧。这套接线方式在模块手册里对应的是标准交叉连接只需要三根线TXD 对 RXD、RXD 对 TXD、GND 对 GND其余的握手信号在无顺序协议的应用里一般不用。模块型号通道 1通道 2本次用法QJ71C24NRS-232RS-422/485通道 1 走 RS232QJ71C24N-R2RS-232RS-232通道 1 走 RS232有一点需要注意RS232 是点对点通讯不能挂多个从站。如果现场想把多个设备串在同一条总线上那就要走 RS-422/485 的多点连接不能用 RS232 通道接多个节点。2.2 为什么选无顺序协议这两个模块支持 MC 协议、无顺序协议和双向协议。MC 协议适合与上位机、触摸屏这类按固定报文格式访问软元件的场景无顺序协议则是不带协议框架的收发发什么由程序决定什么时候发由程序触发接收端只负责把数据收进缓冲区再交给梯形图处理。所以在两块 PLC 之间做自定义数据交换时无顺序协议是首选因为数据格式完全由约定决定简单直接。另外两个协议方案也要有清醒认识。MC 协议虽然规整但报文头和对端软元件地址的格式是固定的用来做两块 PLC 之间的自己定义数据交换反而别扭双向协议则是模块内部固化的收发过程灵活性最低。无顺序协议最“裸”但也正因为最裸参数一旦配对成功收发都是确定的排查起来有迹可循。协议选定以后还要注意通道的工作模式无顺序协议分为发送和接收两个方向每个通道可以单独设定接收方式和发送方式。常见做法是把接收方式设为“无顺序协议”把接收数据长度和接收结束条件按对端发送的数据量预先定好避免收不全或者把下一帧吞进上一帧里。3. GX Works2 里的参数落地两个模块的通道设置参数设置是这套方案里最容易翻车的地方。两个模块参数必须完全一致但它们在工程里是两个独立的模块节点设置界面分两处谁漏了哪一项结果都是通讯不上。3.1 QJ71C24N 的模块添加与开关设置在 GX Works2 里右键点击工程树里的“智能功能模块”选“添加新模块”模块类型选“串行通信”模块型号选 QJ71C24N确定后在工程树里展开这个模块双击“开关设置”通道选通道 1。这一步的关键是模块型号不能选错型号选错时后面的开关设置项会跟着变光标位置和可选项都不一样写出来的参数表面正常但实际不生效。开关设置界面里实际要关注的字段包括工作模式选无顺序协议、传送速度也就是波特率、传送数据的位构成数据位 7/8、奇偶校验有无与奇偶、停止位 1/2、以及校验方式和超时时间。这些字段两边必须严格一致尤其数据位和奇偶校验只要差一位收到的就是一堆乱码或者干脆收不到。模块型号QJ71C24N 通道1 工作模式无顺序协议 传送速度9600 bps 数据位8 奇偶校验无 停止位1上面是一组常见配置实际项目中常用 9600 和 19200短距离、数据量小时用 9600 更省心。奇偶校验选“无”很普遍因为在无顺序协议下数据完整性靠应用层自己判断靠串口奇偶位兜底意义有限但如果现场干扰大加上偶校验能提前发现一部分坏帧代价是多一位、带宽略降。3.2 QJ71C24N-R2 的参数对齐另一侧的操作形状相同同样在智能功能模块里添加新模块模块类型串行通信型号改成 QJ71C24N-R2展开后双击开关设置通道选通道 1字段逐项填成和对面一模一样。这里有个容易被忽略的细节两个模块虽然型号不同但通道 1 的 RS232 参数项是对应的不存在“R2 少设一项”的说法。经常见到的误操作是在一侧设了 19200另一侧默认还是 9600或者一侧停止位 1、另一侧 2然后现场反复插拔线缆找硬件问题。模块型号QJ71C24N-R2 通道1 工作模式无顺序协议 传送速度9600 bps 数据位8 奇偶校验无 停止位1参数填完后建议在“开关设置”里再确认一遍接收相关的设定接收数据长度、有无帧尾、以及接收超时。这些项两边的角色不同接收侧要设好长度或结束条件发送侧则只需保证发出去的数据和对方约定的长度、帧格式一致。提示参数设置改完后必须重新下载到 CPU 模块并复位模块参数才会生效。只保存工程不下装界面上看着是改过的实际模块里还是旧参数这类“改了没作用”的现象大多出在这里。3.3 软元件地址与缓冲存储器无顺序协议的数据不是凭空进出的它走的是模块内部的缓冲存储器通过 FROM/TO 指令或者直接指定软元件访问。发送时把数据写到发送缓冲区触发发送请求接收时从接收缓冲区把数据读回 CPU。因此除了串口参数还要把缓冲存储器地址和中断/握手用的软元件规划好。常见做法是给接收单独划一段数据寄存器作为落地缓冲比如 D100 起连续若干字给发送也划一段 D200 起的区域再用两个位软元件分别表示“收到新数据”和“允许发送”避免发送和接收互相覆盖。地址规划一旦定下来就不要中途改动因为梯形图里的 FROM/TO 参数和后续维护的注释都依赖它改动一处就要连带改几处是后期维护的主要麻烦来源。这里也要提醒一句模块占用的 I/O 地址由插槽位置决定不是固定的。模块添加进工程后它的 I/O 编号会随所在的插槽变化梯形图里的 FROM/TO 指令第一个参数必须用实际编号照抄别人程序里的地址是行不通的这是很多移植程序“在原机器上好好的换台机器就不通讯”的根源。4. 收发程序怎么写接收侧与发送侧的梯形图逻辑程序这一块接收和发送的思路完全不同接收是被动的重点是判断数据到没到、到齐没到齐发送是主动的重点是时机和长度。两侧写反了不会报错只会表现为“发得出去、收不回来”。4.1 QJ71C24N-R2 的接收程序接收程序的基本框架是用 FROM 指令把接收缓冲区的数据读到 CPU 的数据寄存器用模块提供的接收完成标志或接收数据个数来判断是否读到有效数据读到后再把数据交给后续逻辑处理最后清标志、准备下一次接收。; 1. 读取接收数据字节数 FROM K0 H0 D10 K1 ; 2. 判断是否收到数据 CMP D10 K0 M100 ; 3. 收到数据则读取接收缓冲区内容 FROM K0 H400 D100 K10 ; 4. 置位“新数据到达”标志 LD M101 SET M200 ; 5. 处理完成后复位标志准备下一次接收 LD M210 RST M200逻辑上可以拆成两段说明。第一段是用 FROM 读状态把模块的状态字读到 D10用来知道当前接收了多少字节或者接收是否完成第二段是在判定有数据之后把缓冲区内容整段搬进 D100 起的区域再置位一个标志位通知主程序去处理。参数方面FROM 指令的四个操作数分别是模块起始 I/O 编号、缓冲存储器地址、目标软元件、读取字数。起始 I/O 编号由插槽决定缓冲存储器地址由模块手册给出接收区和状态区是不同的地址读取字数要按协议里约定的最大帧长来定宁可比实际帧长一点不要少读少读会把长帧截断后面解析全是错位。4.2 QJ71C24N 的发送程序发送侧的逻辑是先把要发的内容按约定格式填进发送缓冲区再触发发送请求然后等发送完成。如果协议里带帧头帧尾或者长度字节就要在填数据时一并算好。; 1. 组织发送数据 MOV K1 D200 MOV K1234 D201 MOV K5678 D202 ; 2. 写入发送缓冲区 TO K0 H200 D200 K4 ; 3. 触发发送请求 SET M300 ; 4. 等待发送完成标志 LD M301 RST M300这段梯形图的思路是先做数据打包再整段写到发送缓冲区最后置位发送请求位。TO 指令和 FROM 是一对起始 I/O 编号、缓冲存储器地址、源软元件、写入字数。发送请求位和发送完成标志的具体软元件由模块的开关设置和手册约定写之前要确认清楚否则会出现“置位了但没发出去”或者“一直在发”的情况。接收和发送两侧的数据格式必须严格约定包括字节序、长度字段占几个字节、有没有帧头。很多现场问题出在这一层程序逻辑没错参数也没错但一边按低字节在前组帧、另一边按高字节在前解析数据看着收到了数值却永远是错的。注意发送频率不能超过对端的接收处理能力。连续快速置位发送请求会导致模块内部发送队列溢出或对端接收缓冲被覆盖表现为偶发丢帧很难复现也最难查。5. 避坑与排查五条现场踩过的坑这套配置和程序本身不复杂但现场真正卡人的从来不是“会不会配”而是“配完了不通不知道看哪儿”。下面几条是这类串口对接里反复出现的问题按现象、原因、解决三步走。现象一两块模块参数都设好了接收侧一直收不到数据。原因多半是接线方向搞反或者用了直连线。RS232 的点对点连接必须交叉TXD 一定要接到对端的 RXD 上很多人拿现成的直通线插上两端都在发谁也收不到。解决是先用万用表确认所接线缆是交叉线再对着模块端子标记逐针核对接线别依赖线缆颜色。现象二能收到数据但内容是乱码字节对不上。原因是串口参数不一致最常见的是数据位和奇偶校验不匹配其次是波特率有偏差。解决是把两侧的开关设置截图放到一起逐项对照数据位、校验、停止位、波特率四项全部一致后再下装复位。如果参数确认一致仍然乱码就要怀疑对端本身发的是不是这个帧格式。现象三偶尔丢一帧重启后又正常。原因是接收缓冲被新数据覆盖或者接收完成标志没有及时复位。接收侧的处理逻辑如果比数据到达慢下一帧就会冲掉上一帧。解决是把接收处理做短收到后先整段搬走再处理同时把超时和接收长度条件设好让模块明确知道一帧到哪里结束。现象四改完参数没反应界面和实际不一致。原因是参数只保存未下装或下装后没有复位模块。解决是把“改参数→下载→复位→验证”做成固定动作每次改完都走一遍并且不要在没验证的情况下连续改多项否则出了问题说不清是哪一项引起的。现象五程序从别的项目拷过来地址全对但就是不通讯。原因是模块插槽不同I/O 起始编号变了FROM/TO 指令里的第一个参数还是旧值。解决是到工程里确认当前模块的实际 I/O 编号把所有 FROM/TO 的首参数统一改掉改完再做一次全程序搜索避免漏改藏在子程序里的那几处。6. 联调收尾用最短路径验证链路真的通了参数下装、程序写完先别急着上整机联调用最短路径把链路单独验一遍最省时间。我一般的做法是让发送侧只发固定长度的测试数据比如连续发 4 个字、内容每次自增接收侧把收到的原始数据直接搬到一片不参与业务逻辑的寄存器里用软件监控看数值是否随发送侧同步变化。这样做的价值在于把“通讯是否通”和“数据处理是否正确”两件事分开先证明链路再证明逻辑出问题时不用两头猜。验证顺序建议按这四步走第一步两侧模块单独在线确认模块状态正常、无硬件报错第二步只发不收用接收侧的状态字确认收到字节数在变化第三步收发都开比对接收缓冲区里的原始数值和发送侧写入的数值是否一致第四步把数据格式字节序、长度字段按约定对上再看业务数据解析是否正确。每步只引入一个变量哪一步断了问题就锁定在那一步。联调里还有一个实用技巧在发送侧把发送计数器累加进测试帧里接收侧把收到的计数器原样回显或记录到另一片寄存器。这样一旦出现丢帧能立刻从计数器的跳变看出丢在第几帧、丢了几帧比盯着数据变化猜要快得多。这个习惯是从一次连续跑了两天都没定位到偶发丢帧的经历里留下来的——当时参数、接线、程序全查过最后靠计数器才确认是发送频率超过了对端处理速度。另外参数和地址这类东西最好在工程里留一份文字记录写清模块型号、插槽、通道、各字段取值和缓冲存储器分配。Q 系列项目维护周期长隔一年再回来看光凭梯形图里几行 FROM/TO 是还原不出当时约定的。字符长度、字节序这种细节写在记录里比写在脑子里靠谱。从那以后我每次做串口对接都强制走一遍“参数对照表 → 交叉线核验 → 单发单收 → 计数器验证”这套流程不管项目多小都不跳步因为跳过的每一步最后都会以返工的形式还回来。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑