news 2026/9/5 3:52:23

三菱Q系列PLC填表式通信实现Modbus RTU数据采集与设备控制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三菱Q系列PLC填表式通信实现Modbus RTU数据采集与设备控制

在实际工业自动化项目中,PLC与第三方设备(如仪表、变频器、传感器)的通信是核心需求。三菱Q系列PLC功能强大,但其原生通信指令(如RS指令)在应对Modbus RTU这类标准协议时,往往需要开发者编写大量底层代码处理报文、校验和异常,不仅开发效率低,后期维护和排查也异常困难。填表式通信功能,正是三菱为简化这类标准协议通信而设计的利器。

填表式通信的核心思想是“配置驱动,数据自动交换”。开发者无需关心报文如何组帧、CRC如何计算、超时如何重发,只需在PLC的特定数据表中填写目标设备的地址、功能码、数据地址以及PLC本地的数据存储区。PLC的通信模块或CPU会周期性地、自动地根据表格内容执行通信,并将结果映射到指定的数据寄存器中。这极大地将通信任务从应用程序逻辑中解耦出来,实现了通信的标准化和模块化。

本文将以三菱Q系列PLC(以Q系列基本型QCPU为例,搭配QJ71C24N串行通信模块)作为Modbus RTU主站,连接一台Modbus RTU从站设备(如温控器)为场景,带你完成从硬件接线、软件配置、表格编写到数据验证的全过程。你将学会如何利用填表式通信,构建一个稳定、易维护的标准化数据采集接口,并掌握通信失败时的系统化排查方法。无论你是初次接触三菱PLC通信的工程师,还是希望优化现有通信架构的开发者,这套方法都能直接应用于你的项目。

1. 理解填表式通信与Modbus RTU协议栈的映射关系

在动手配置之前,必须厘清几个核心概念,否则表格中的参数将只是一堆令人困惑的数字。

1.1 什么是填表式通信?

填表式通信是三菱MELSEC-Q系列PLC中针对串行通信模块(如QJ71C24N)或部分内置串口CPU提供的一种高级通信方式。它不同于使用RSRS2指令进行的手动收发控制。

其工作流程可以概括为:

  1. 预定义:在PLC的软件(GX Works2/3)中,预先定义好一个或多个“通信协议”(即表格)。每个协议描述了一次完整的数据交换过程,包括从站地址、功能码、读写数据地址和长度、本地存储区等。
  2. 装载与激活:将定义好的协议下载到串行通信模块的缓冲存储器(BFM)或CPU的系统区域中,并设置模块使其进入“协议通信”模式。
  3. 自动执行:模块上电或模式切换后,会自动、周期性地按照协议表中定义的顺序和时序,向指定的从站发送请求报文,并接收响应报文。
  4. 数据映射:通信成功后,模块会自动将响应报文中的数据解析出来,写入到协议表中指定的PLC软元件(如D、M寄存器)中;反之,也会将PLC软元件中的数据自动组帧发送出去。

整个过程无需在PLC的顺控程序(梯形图)中编写任何通信发送/接收指令,实现了通信与逻辑控制的分离。

1.2 Modbus RTU协议要点回顾

Modbus RTU是一种在串行链路上(RS-485/RS-232)应用广泛的主从式协议。作为主站的三菱PLC需要遵循以下格式发起请求:

字段从站地址功能码数据地址 (Hi)数据地址 (Lo)数据长度/值 (Hi)数据长度/值 (Lo)CRC校验 (Lo)CRC校验 (Hi)
字节1 Byte1 Byte1 Byte1 ByteN BytesN Bytes1 Byte1 Byte

关键点在于数据地址和功能码:

  • 数据地址:Modbus协议中的地址通常是16位的,从0开始。例如,保持寄存器40001对应的协议地址是0(十进制),40002对应1,以此类推。但在实际通信报文中,我们传输的就是这个0、1、2...的数值。
  • 功能码:常见的有03(读保持寄存器)、06(写单个寄存器)、10(写多个寄存器)。

填表式通信协议表的核心任务,就是让我们以“填写参数”的方式,告诉通信模块如何构建这样一个完整的Modbus RTU请求帧,以及如何处理响应帧。

1.3 通信模块的角色:协议执行引擎

QJ71C24N这类串行通信模块在这里扮演了“协议执行引擎”的角色。它内部有独立的处理器和缓冲区(BFM)。当我们把协议表下载到它的BFM后,模块的固件会解读这些表格,并独立于QCPU执行通信任务。QCPU只需读写最终映射到的数据寄存器即可,极大地减轻了主CPU的扫描周期负担。

理解这一点对后续的配置和排错至关重要:通信的成功与否,首先取决于模块的硬件设置、协议表配置是否正确,其次才是PLC程序逻辑。

2. 环境准备与硬件配置

一个可工作的环境是调试的基础。这里列出从零开始搭建所需的全部项目。

2.1 硬件清单与连接

项目型号/规格说明
PLC CPU三菱Q系列QCPU (如Q03UDECPU)需支持所选的通信模块。
串行通信模块QJ71C24N (-R2/R4)本文以C24N为例,它支持RS-232和RS-485。
从站设备支持Modbus RTU的温控器、电表等假设从站地址为1,波特率9600,8N1。
通信线缆RS-485总线(推荐)使用双绞线,连接C24N的SDA/SDB/SG端子到从站设备的A/B/GND。
编程电缆USB-QC30R2 或 以太网线用于连接电脑与PLC,进行编程和监控。
终端电阻120Ω在RS-485总线两端(最远两个设备上)并联,抑制信号反射。

接线示意图(RS-485):

QJ71C24N 模块端子排 SDA (或 RDA) -------------------- A (或 Data+) [从站1] SDB (或 RDB) -------------------- B (或 Data-) [从站1] SG ------------------------------ GND [从站1] (可选) --------------------------- A/B [从站2...]

注意:务必确认从站设备的A/B极性,接反会导致通信失败。C24N模块的端子名称可能因型号后缀(-R2/R4)略有不同,请以手册为准。

2.2 软件环境与参数设置

  1. 安装GX Works2:版本建议2.1以上,它内置了对Q系列协议通信的配置支持。GX Works3同样支持,界面类似。
  2. 新建工程:选择正确的PLC系列(QCPU)和型号。
  3. 智能功能模块配置
    • 在工程导航栏中,右键“智能功能模块”,选择“添加新模块”。
    • 选择型号“QJ71C24N”,设置安装位置(如插槽1)。
    • 双击添加的模块,进入参数设置界面。

2.3 串行通信模块基础参数设置

这是通信的底层基础,必须与从站设备严格匹配。在C24N的参数设置界面中,找到“基本设置”或“开关设置”:

  • 协议:选择“协议(有顺序/无顺序)”。这是启用填表式通信的关键。
  • 数据位:8位。
  • 停止位:1位。
  • 奇偶校验:无。
  • 波特率:9600 bps。
  • 控制模式:RS-485(根据实际接线选择)。
  • 站号设置:通常主站(PLC)不需要设置站号,或设置为0。此设置不影响Modbus主站功能。

设置完成后,需要将参数写入PLC并重启模块(或PLC)使其生效。可以通过“在线”->“当前值更改”来临时测试参数是否正确,但最终需写入PLC。

3. 创建并配置Modbus RTU通信协议表

协议表是填表式通信的灵魂。我们以最常见的“读取从站保持寄存器”和“写入从站保持寄存器”为例。

3.1 协议格式概览

三菱的协议表由一系列“指令”组成,每条指令对应一次Modbus事务。每条指令又包含多个“项目”,每个项目是BFM中的一个字(16位)或双字(32位)数据。我们需要在GX Works2的“协议支持”功能中编辑这些项目。

关键的项目及其含义如下表所示(以读取指令为例):

项目编号项目名称设置值(示例-读)说明
1报文等待时间0单位:10ms。0表示使用模块默认值。
2报文长度自动计算发送帧的总字节数,由软件自动计算。
3发送数据1H0001从站地址(1字节)。H0001表示十六进制的01。
4发送数据2H0003功能码(1字节)。H0003表示读保持寄存器。
5发送数据3H0000起始地址高8位。要读的Modbus寄存器地址高位。
6发送数据4H0000起始地址低8位。地址低位。H0000对应寄存器40001。
7发送数据5H0000寄存器数量高8位。要读的寄存器个数高位。
8发送数据6H0001寄存器数量低8位H0001表示读1个寄存器。
9接收数据存储地址D100PLC中存储接收数据的起始软元件。成功读回的数据将放在这里。
10接收数据点数1期望接收的数据寄存器数量(以字为单位)。
............

注意:上表是简化示意。实际在GX Works2中配置时,软件提供了更友好的界面,我们只需填写“发送消息”和“接收消息”的文本格式,软件会自动将其编译成BFM中的项目。

3.2 在GX Works2中配置协议(实操步骤)

  1. 打开协议支持功能:在工程导航栏,找到已配置的QJ71C24N模块,右键选择“协议支持”->“打开”。
  2. 新建协议:在协议支持窗口中,点击“新建”创建一个新协议。给协议起个名字,如“READ_HOLD_REG_01”。
  3. 编辑协议内容
    • 在“发送消息”栏,我们需要手动输入Modbus RTU请求帧的十六进制字符串。对于读取从站1的40001寄存器(1个字),报文计算如下:
      • 从站地址:01
      • 功能码:03
      • 起始地址高位:00, 低位:00(地址0)
      • 寄存器数量高位:00, 低位:01(1个寄存器)
      • CRC校验码:这是关键!我们需要计算前面10个字节(01 03 00 00 00 01)的CRC-16校验值。计算结果是C4 0B(低位在前,高位在后)。
    • 因此,完整的发送消息字符串应输入:01 03 00 00 00 01 C4 0B
    • 在“接收消息”栏,我们需要定义如何解析响应。对于成功的读响应,帧格式为:[地址][功能码][字节数][数据1 Hi][数据1 Lo][CRC Lo][CRC Hi]。我们可以设置“存储地址”和“数据长度”。
      • 设置“存储地址”为D100
      • 设置“数据长度”为1(字)。
      • (高级)也可以使用通配符*来匹配地址和功能码,用$n来提取第n个字节的数据。但对于初学者,让模块自动解析并存入D100更简单。
  4. 设置协议执行条件
    • 执行类型:选择“周期”或“条件成立”。周期表示模块按固定间隔自动执行;条件成立需要由PLC程序置位某个触发位。
    • 协议No.存储地址:指定一个PLC的软元件(如D0),用来存储当前协议的编号。当你想通过程序切换协议时,可以修改这个地址的值。
    • 执行指令:指定一个位软元件(如M0)作为该协议的执行触发信号。当M0为ON时,模块执行此协议一次(如果执行类型为“条件成立”)。

3.3 编写写单个寄存器协议

写入操作类似。例如,向从站1的40001寄存器写入值1234(十六进制04D2)。

  • Modbus功能码:06(写单个寄存器)
  • 发送消息计算:01 06 00 00 04 D2+ CRC校验。
    • 计算01 06 00 00 04 D2的CRC,假设为98 3A
  • 完整发送消息:01 06 00 00 04 D2 98 3A
  • 接收消息:写操作的正常响应是回声(原样返回发送帧),模块可以自动校验,我们只需关注完成标志位。

在GX Works2中,为写操作创建另一个协议,如“WRITE_HOLD_REG_01”。

3.4 协议登记与下载

配置好所有协议后,需要在“协议登记”设置中,将定义好的协议(如协议1,协议2)登记到模块的协议内存中,并分配一个“协议号”。然后,将整个协议配置下载到PLC的串行通信模块中。

4. PLC程序设计与通信控制

虽然通信由模块自动执行,但PLC程序仍需进行一些控制和状态监视。

4.1 通信启动与模式设置

在PLC的首次扫描或初始化程序中,需要设置通信模块进入协议通信模式,并启动通信。这通常通过向模块的BFM写入控制字实现。

| [SM400]----[MOV H0000 U0\G0] | // 示例:向插槽0的模块BFM#0写入0,具体地址需查手册 | | // BFM#0通常是模式设置寄存器,写入0代表协议模式 | | [SM400]----[MOV H0001 U0\G100] | // 示例:向BFM#100写入1,启动协议通信 | | // 具体的BFM地址请参考QJ71C24N用户手册

注意:U0\G0表示安装在插槽0的智能模块的BFM#0。SM400是常ON触点,确保上电即执行。

4.2 协议执行触发

如果我们设置了协议为“条件成立”执行,就需要在梯形图中控制触发位。

| [X0]------[SET M0] | // 当外部输入X0为ON时,置位M0,触发协议1执行 | | // M0是在协议配置中指定的“执行指令”位 | | [协议完成标志]---[RST M0] | // 当从模块读回的协议完成标志为ON时,复位M0,准备下一次触发

4.3 数据读取与状态监控

通信成功后,数据会自动存入我们指定的软元件(如D100)。我们需要读取它,并监控通信状态。

| [常ON]----[MOV D100 D200] | // 将读取到的温度值(假设在D100)传送到D200用于显示或计算 | | // 监控通信错误 | [常ON]----[FROM U0\G? K4M100 K1] | // 从模块的某个状态BFM读取数据到M100-M115 | | // 这里`?`需要替换为实际的状态BFM号,如BFM#10 | [M101]----(Y10) | // 如果M101(假设代表通信错误)为ON,则点亮报警灯Y10

关键状态位通常包括:

  • 协议执行中标志:表示模块正在处理该协议。
  • 协议正常完成标志:表示一次协议通信成功完成。
  • 协议异常完成标志:表示通信超时、CRC错误、从站无响应等。
  • 模块错误标志:表示模块自身硬件或参数错误。

这些标志位的具体BFM地址必须查阅QJ71C24N用户手册

5. 调试、验证与结果分析

配置完成后,必须进行系统化验证,而不是仅看PLC是否有输出。

5.1 验证步骤清单

  1. 硬件检查
    • RS-485接线A/B是否接反、是否松动。
    • 终端电阻是否已正确接入总线两端。
    • 电源和GND是否稳定。
  2. 模块状态LED检查
    • QJ71C24N模块的RUNLED是否常亮或闪烁(表示模块正常运行)。
    • ERR.LED是否熄灭。
    • SD(发送)和RD(接收)LED在通信时是否闪烁。
  3. 软件在线监控
    • 在GX Works2中连接PLC,进入“在线”->“监视”模式。
    • 打开“智能功能模块监视”,选择QJ71C24N模块,查看其BFM状态。重点查看:
      • 模式设置寄存器(如BFM#0)是否为协议模式值。
      • 通信错误代码寄存器(如BFM#10)。值为0表示正常。
      • 各协议的执行状态/完成状态寄存器。
  4. 数据跟踪
    • 监视协议中指定的数据存储区(如D100)。当触发通信后,观察其值是否变为从站设备的实际数据。
    • 可以使用“设备测试”功能强制修改D100的值,然后触发写协议,观察从站设备的数据是否被改变。
  5. 使用串口调试助手交叉验证(如有条件):
    • 将串口调试助手连接到总线上,模拟从站或监听报文。
    • 触发PLC通信,查看实际发出的Modbus报文格式是否正确(地址、功能码、CRC)。
    • 这能最直接地定位是配置错误还是硬件问题。

5.2 预期结果

当一切配置正确时:

  • 触发读协议后,D100中的值应与从站设备(如温控器)的当前温度值一致(可能需要根据数据格式进行转换,如除以10)。
  • 触发写协议后,从站设备(如温控器的设定值)应相应改变。
  • 模块的SD/RDLED会规律性地闪烁。
  • 协议的正常完成标志位会周期性地ON/OFF。

6. 常见问题排查与解决方案

填表式通信的故障排查需要遵循从外到内、从硬件到软件的路径。

6.1 通信完全无反应(LED不闪)

现象可能原因检查点解决方案
SD/RDLED从不闪烁1. 模块未进入协议模式。
2. 协议未正确下载/激活。
3. 硬件接线错误或断路。
4. 从站设备断电或故障。
1. 检查BFM#0的值。
2. 在GX Works2中确认协议已“登录”到模块。
3. 用万用表测量RS-485总线A-B间电压,通信时应有变化。
4. 检查从站电源和状态。
1. 重新执行模式设置程序或写入参数。
2. 重新下载协议配置并重启模块。
3. 纠正接线,确保A/B正确,总线连通。
4. 恢复从站供电。

6.2 通信有发送但无响应或响应错误

现象可能原因检查点解决方案
SDLED闪,RDLED不闪或闪一下但报错1.波特率、数据位、停止位、校验位不匹配
2.从站地址错误
3.Modbus功能码不被从站支持
4.数据地址超出从站范围
5.CRC校验计算方式错误
1. 核对C24N参数与从站设备说明书。
2. 核对协议中发送消息的第一个字节(地址)。
3. 核对协议中的功能码(如03、06)。
4. 核对协议中的寄存器地址。
5.使用串口监听工具,抓取PLC发出的原始报文,与标准的Modbus RTU报文或从站期望的报文对比。这是最有效的诊断方法。
1. 修改C24N参数,确保与从站一致。
2. 修改协议中的从站地址。
3. 查阅从站手册,使用正确的功能码。
4. 修改为有效的寄存器地址。
5. 确认CRC计算是低位在前。GX Works2的协议支持功能在输入发送消息时,不会自动计算CRC,必须手动计算并填入。这是最常见的配置错误。

6.3 数据能读到但值不对

现象可能原因检查点解决方案
D100中读到数据,但不是预期的温度值(如读到0或极大值)1.数据格式解析错误(如字节顺序)。
2.Modbus寄存器地址映射错误
3. 从站数据本身需要缩放(如实际值=寄存器值/10)。
1. 监听报文,看响应数据字节顺序。Modbus通常是大端序(高字节在前)。
2. 确认使用的是Modbus寄存器地址(0-based),而不是设备标注的“4xxxx”地址。
3. 查阅从站设备手册的数据格式章节。
1. 如果响应数据是AB CD,而D100读到的是CDAB,则需要在PLC程序中使用SWAP等指令进行字节交换。
2. 将协议中的地址减1。例如,设备手册说温度在40009,则协议地址应填0008
3. 在PLC程序中对读回的数据进行算术运算(如除法)。

6.4 排错核心:利用模块缓冲存储器(BFM)

QJ71C24N模块的BFM存储了丰富的状态和错误信息。当通信异常时,第一时间通过FROM指令读取以下关键BFM(地址请查手册):

  • 最新错误代码:直接指出错误类型,如超时、CRC错误、帧错误等。
  • 协议执行状态:显示每个协议是待机、执行中、正常结束还是异常结束。
  • 发送/接收字节计数:帮助判断是否有数据收发。

在GX Works2的“智能功能模块监视”中,可以直观地查看这些BFM的值,是定位问题的第一现场。

7. 标准化实践与生产环境建议

将填表式通信标准化,能极大提升多设备、多站点项目的开发和维护效率。

7.1 建立协议库模板

为不同类型的从站设备(温控器、电表、变频器)创建标准的协议模板文件(.qpa格式)。

  • 每个模板包含该型号设备所有需要读写的标准点位(如温度PV、设定值SV、运行状态等)。
  • 在模板注释中详细记录:设备型号、波特率、数据格式、寄存器地址映射表。
  • 新项目只需导入模板,根据实际从站地址稍作修改即可。

7.2 程序结构标准化

  • 初始化段:集中放置所有通信模块的模式设置、协议启动指令。
  • 触发逻辑段:使用统一的标志位(如M区的一段连续地址)作为各协议的执行触发。可以使用时钟脉冲(如1秒脉冲)触发周期性读取,用按钮或条件触发写入。
  • 数据处理段:集中对读回的数据进行格式转换、缩放、限幅和报警判断。例如,将D100中的原始值除以10后存入D500作为实际温度。
  • 错误处理段:集中监控所有协议的错误完成标志和模块错误代码。一旦发生错误,不仅要点亮报警灯,最好还将错误代码记录到特定的D寄存器中,便于远程查看或历史追溯。

7.3 生产环境注意事项

  1. 通信超时与重试:在协议表中合理设置“报文等待时间”。在生产环境中,如果从站偶发无响应,单纯超时可能不够。可以在PLC程序中实现简单的重试逻辑:当协议异常完成时,延迟几秒后自动重新触发一次,连续失败N次后再上报严重错误。
  2. 避免通信拥堵:如果定义了多个周期执行的协议,注意错开它们的执行时机,不要同时触发,以免造成通信通道拥堵和超时。可以利用多个不同周期的时钟脉冲或计数器来分散触发。
  3. 数据有效性校验:对于关键数据(如温度、压力),读回后应进行合理性校验(如范围检查)。如果数据突然跳变到极大或极小值,可能是通信干扰,应使用上次的有效值或触发重新读取。
  4. 文档与注释:在协议配置和PLC程序中,为每个协议、每个数据点添加清晰的注释。说明这个协议是读什么,数据存在哪里,单位是什么。这对于半年后的自己或其他维护人员至关重要。
  5. 版本管理:将GX Works2工程文件(包括协议配置)纳入版本控制系统(如Git)。任何协议或参数的修改都应有记录。

通过填表式通信,三菱Q系列PLC与Modbus RTU设备的集成从一项繁琐的底层编码工作,转变为清晰、可配置、易维护的标准化流程。掌握其原理和配置细节后,你可以快速地将数十台甚至上百台第三方设备接入同一个PLC系统,并保持通信代码的整洁与可靠。下次当你面对一堆需要通信的仪表时,不妨先花时间规划好协议表格,这将在项目的整个生命周期内持续带来回报。

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

FPGA实战:MIPI CSI-2接收子系统配置与调试全解析

简介:这是基于Xilinx FPGA的MIPI CSI-2接收子系统完整工程,面向在Zynq UltraScale(zyqnmp)平台上实现摄像头数据接入与HDMI显示输出的硬件开发者,解决MIPI接口信号捕获、通道同步与视频格式转换等关键难题。压缩包共20…

作者头像 李华
网站建设 2026/9/5 7:11:43

冒泡排序可视化:用24个数字讲透算法过程与Python实现

冒泡排序可视化不是用来“欣赏”的,它是把算法过程变成可观察状态的最好方法。这篇文章用24个数字作为排序样本,把冒泡排序从相邻比较、逐趟扫描到每个元素沉底的过程完整拆开,最后给出可以运行的最小可视化程序和排查思路。如果你正在学算法…

作者头像 李华
网站建设 2026/9/2 7:23:53

每日leetcode(这题真的很有意思,第一次搞半天搞错瓶颈在哪)

2948. 交换得到字典序最小的数组 - 力扣(LeetCode) 代码参考: 并查集【C数据结构进阶】玩转并查集:从原理到实战,C 实现与高频面试题全解析_并查集c-CSDN博客 题目 给你一个下标从 0 开始的 正整数 数组 nums 和一…

作者头像 李华
网站建设 2026/9/5 6:34:05

收藏 | 医疗AI大模型:从辅助到独立写报告,小白也能看懂的技术变革

本文介绍了医疗AI从辅助功能向完整工作流转变的过程,重点讲述了一场医学影像AI大会上的挑战赛。比赛中,AI智能体首次尝试独立承担任务,编写胸部CT影像报告。比赛设置了四种工作模式:医生单独写报告、医生搭配传统AI模型、医生协同…

作者头像 李华
网站建设 2026/9/2 7:22:58

电商AI客服软件选型与落地:从消息限流到知识库维护的实操指南

做客服系统实测这些年,我观察到一个很常见的现象:很多商家一听到“AI客服软件”,第一反应就是问价格,第二反应是问能不能自动回复。一旦继续追问“每天到底能处理多少条消息”“拼多多、淘宝、抖音的客服接口都能接吗”“机器人回…

作者头像 李华