Modbus 在主流 PLC 中的编程实战指南:西门子、三菱、台达、汇川全系列

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 各品牌 PLC Modbus 实现方式对比总览
  2. 2. 西门子 S7-1200/1500 Modbus 编程详解
  3. 3. MB_COMM_LOAD — 通信模块初始化
  4. 4. MB_MASTER — Modbus 主站通信指令
  5. 5. MB_SLAVE — Modbus 从站通信指令
  6. 6. 完整梯形图示例:读温湿度传感器
  7. 7. 三菱 FX5U Modbus 编程详解
  8. 8. ADPRW 指令详解
  9. 9. ADPRW 关键Precautions
  10. 10. 梯形图示例:FX5U 读取变频器参数
  11. 11. 台达 DVP/AS 系列 Modbus 编程详解
  12. 12. MODRW 指令参数说明
  13. 13. 梯形图示例:台达 DVP 读取智能电表
  14. 14. 台达 AS 系列 M_MODRW 增强Function
  15. 15. 汇川 H3U Modbus 自由口编程详解
  16. 16. H3U 自由口通信基本原理
  17. 17. CRC-16 校验算法实现
  18. 18. 完整自由口 Modbus RTU 主站示例
  19. 19. 各品牌address映射关系对照表
  20. 20. address偏移Rules详解
  21. 21. 常见Error与陷阱
  22. 22. 1. address偏移Error
  23. 23. 2. endianness(Endianness)问题
  24. 24. 3. 超时设置不当
  25. 25. 4. 多主站冲突
  26. 26. 5. Communication parameters不一致
  27. 27. 与 SCADA system的集成
  28. 28. 典型集成架构
  29. 29. SCADA configuration要点
  30. 30. debug技巧与Tools推荐
  31. 31. 必备Debug Tools
  32. 32. debug方法论
  33. 33. 四大品牌 Modbus 编程全面对比
  34. 34. FAQ Frequently Asked Questions
  35. 35. Q1:西门子 S7-1200 的 Modbus 通信需要额外的硬件模块吗?
  36. 36. Q2:三菱 FX5U 的 ADPRW 指令一次可以读写多少A device?
  37. 37. Q3:台达 MODRW 指令通信失败如何排错?
  38. 38. Q4:汇川 H3U 自由口编程实现 Modbus 的可靠性如何?
  39. 39. Q5:如何解决 Modbus 通信中 32 位浮点数的endianness问题?
  40. 40. 结语

Modbus 在主流 PLC 中的编程实战指南(西门子、三菱、台达、汇川全系列)

在Automation领域,Modbus PLC 编程是每一位自动化工程师必须掌握的核心技能。无论是西门子 S7-1200/1500 的专用通信指令,还是三菱 FX5U 的 ADPRW 指令,亦或是台达 DVP 系列的 MODRW 指令和汇川 H3U 的自由口编程,不同品牌的 PLC 在 Modbus 通信的实现方式上existence显著差异。本文作为 modbus.cn 系列Tutorial的重要组成部分,将system性地对比四大主流 PLC 品牌的 Modbus 编程方法,提供完整的梯形图示例和address映射关系,帮助工程师快速掌握跨品牌 PLC 的 Modbus 通信开发。

各品牌 PLC Modbus 实现方式对比总览

Modbus 在主流 PLC 中的编程实战指南:西门子、三菱、台达、汇川全系列插图
▲ 图1:主流 PLC Modbus 通信Wiring topology及各品牌通信口配置对照。

在深入具体编程之前,我们先理解一个关键区别:不同品牌的 PLC 对 Modbus protocol的支持方式分为”专用指令”和”自由口编程”两大类。专用指令方式由 PLC 厂商封装好 Modbus protocol栈,工程师只需调用指令并配置参数即可Complete通信;而自由口编程方式则需要工程师手动构建 Modbus message帧,通过串口逐byte收发来实现协议。两种方式各有优劣,下表给出了直观对比。

品牌/系列实现方式核心指令/机制开发难度灵活性
西门子 S7-1200/1500专用指令MB_COMM_LOAD / MB_MASTER / MB_SLAVE
三菱 FX5U专用指令ADPRW
三菱 FX3U专用指令ADPRW(需适配器)
台达 DVP 系列专用指令MODRW
台达 AS 系列专用指令MODRW / M_MODRW
汇川 H3U自由口编程RS 指令 + CRC verification
汇川 AM600专用指令Modbus Function块

从上表可以看出,西门子 Modbus RTU三菱 Modbus 通信 均采用专用指令方案,开发门槛较低;而 汇川 Modbus 编程 中的 H3U 系列则需要自由口编程,对工程师的协议理解能力要求更高。台达 PLC Modbus 的 MODRW 指令则以其简洁易用著称。

西门子 S7-1200/1500 Modbus 编程详解

西门子博途(TIA Portal)平台为 S7-1200 和 S7-1500 系列 PLC 提供了完整的 Modbus 通信库,包含三个核心指令:MB_COMM_LOAD(通信初始化)、MB_MASTER(主站通信)和 MB_SLAVE(从站通信)。这些指令位于”通信”指令组的”其它”→”Modbus”路径下。

MB_COMM_LOAD — 通信模块初始化

Modbus 在主流 PLC 中的编程实战指南:西门子、三菱、台达、汇川全系列插图1
▲ 图2:西门子/三菱/台达/汇川四品牌 PLC 与 Modbus 标准address的完整映射关系。

在使用任何 Modbus 通信之前,必须先调用 MB_COMM_LOAD 指令对通信模块进行配置。该指令的Function类似于设定串口的Baud rate、check digit、data bit和stop bit等基本参数,同时指定 Modbus 的工作模式(RTU 或 ASCII)。

参数data type说明典型值
REQBool上升沿触发配置M0.0
PORTUInt通信模块硬件标识符269(CM1241 RS485)
BAUDUIntBaud rate9600 / 19200 / 38400 / 115200
PARITYUIntcheck digit:0=无 1=奇 2=偶2(even parity)
FLOW_CTRLUInt流控制:0=无 1=RTS/CTS0
RTS_ON_DLYUIntRTS Open延时(ms)0
RTS_OFF_DLYUIntRTS Close延时(ms)0
RESP_TOUIntResponse超时(ms)1000
MB_DBVariantMB_MASTER/SLAVE 的背景data块对应指令的 DB 号
DONEBool配置Complete标志
ERRORBoolError标志
STATUSWord状态码(16#0000=无Error)

MB_MASTER — Modbus 主站通信指令

MB_MASTER 指令使 S7-1200/1500 作为 Modbus RTU 主站,向从站设备send读写Request。该指令支持function code 01(读线圈)、02(读离散输入)、03(读保持register)、04(读输入register)、05(写单线圈)、06(写单register)、15(写多线圈)和 16(写多register)。

// MB_MASTER 梯形图参数说明(SCL 表示)
"MB_MASTER_DB"(
    REQ    := #Start_Read,        // 上升沿触发
    MB_ADDR:= 1,                  // From station address (1-247)
    MODE   := 0,                  // 0=读 1=写
    DATA_ADDR := 40001,           // 从站datastarting address
    DATA_LEN  := 10,              // dataLength(字数)
    DATA_PTR  := P#DB1.DBX0.0 WORD 10  // 本地data存储区指针
);

// 常见模式:
// MODE=0, DATA_ADDR=40001 → function code 03 读保持register
// MODE=1, DATA_ADDR=40001 → function code 06/16 写保持register

MB_SLAVE — Modbus 从站通信指令

MB_SLAVE 指令使 S7-1200/1500 作为 Modbus RTU 从站,Response主站的读写Request。该指令允许主站访问 PLC 内部的特定data area域(线圈、离散输入、输入register、保持register)。

// MB_SLAVE 梯形图参数说明(SCL 表示)
"MB_SLAVE_DB"(
    MB_ADDR    := 1,              // 本slave address
    MB_HOLD_REG := P#DB2.DBX0.0 WORD 100  // 保持Register Mapping区
);

完整梯形图示例:读温湿度传感器

以下是一个完整的西门子 S7-1200 读取 Modbus 温湿度传感器的程序示例。传感器slave address为 1,温湿度分别存储在保持register 40001 和 40002 中,Baud rate 9600,even parity。

网络 1:初始化通信模块(首次扫描调用)
┌──────────────────────────────┐
│  M0.0    MB_COMM_LOAD        │
│──┤P├────┤EN              DONE├──M0.1
│         │PORT:  269   ERROR├──M0.2
│         │BAUD:  9600  STATUS├──MW2
│         │PARITY:2           │
│         │FLOW_CTRL:0        │
│         │RESP_TO:1000       │
│         │MB_DB:MB_MASTER_DB │
└──────────────────────────────┘

网络 2:周期性读取传感器data(每 500ms)
┌──────────────────────────────┐
│  M0.5    MB_MASTER           │
│──┤P├────┤EN              DONE├──M1.1
│         │MB_ADDR:1    ERROR├──M1.2
│         │MODE:0       STATUS├──MW4
│         │DATA_ADDR:40001     │
│         │DATA_LEN:2          │
│         │DATA_PTR:P#DB3.DBX0.0 WORD 2
└──────────────────────────────┘
// 读取结果:
// DB3.DBW0 = temperature值(需要除以 10 得到实际temperature)
// DB3.DBW2 = 湿度值(需要除以 10 得到实际湿度)

关于西门子博途平台更详细的 Modbus 配置,请参考 modbus.cn 上关于西门子通信模块硬件选型的Related文章。也可以View我们的西门子 Modbus RTU 完整配置Tutorial

三菱 FX5U Modbus 编程详解

三菱 Modbus 通信在 FX5U 系列上通过 ADPRW 专用指令实现,相比 FX3U 时代需要额外适配器的方案有了质的飞跃。FX5U 内置的 RS-485 端口直接支持 Modbus RTU 协议,无需额外硬件投入。ADPRW 指令的强大之处在于一条指令即可Complete Modbus function code的指定和data的收发。

ADPRW 指令详解

Operation数说明设定范围示例
S1slave addressH1-HF7(1-247)H1
S2function codeH1-H6, HF, H10H3(读保持register)
S3Modbus addressH0-HFFFFH0(对应 40001)
S4data点数H1-H7D0(字)K2
D1send/receivedatastart软元件位/字软元件D100

ADPRW 指令在执行时,PLC 自动构建 Modbus message帧、计算 CRC verification码、sendmessage并等待从站回复。对于写Operation(function code H6/H10),D1 指定的软元件区域存储待send的data;对于读Operation(function code H1-H4),D1 指定的软元件区域存储receive到的data。

ADPRW 关键Precautions

  • address偏移Rules:Modbus protocoladdress从 0 开始编号,但Document中的address(如 40001)从 1 开始。在 ADPRW 的 S3 Operation数中,保持register从 H0 开始对应 40001,线圈从 H0 开始对应 00001。
  • function code H3(读保持register)一次最多读取 125 个字(H7D)。
  • function code H10(写多register)一次最多写入 123 个字(H7B)。
  • ADPRW 指令为执行Complete型指令,需要连续多个扫描周期才能Complete一次通信。
  • 必须通过特殊继电器 SM 和特殊register SD 进行通信状态判断。

梯形图示例:FX5U 读取变频器参数

// 网络 1:Communication parameters设置(通过 PLC 参数配置,无需梯形图)
// 通道 1(CH1):内置 RS-485
// 协议:Modbus RTU
// Baud rate:19200 bps
// data bit:8
// stop bit:1
// Verification:even parity

// 网络 2:读取变频器运行频率和输出电流
┌──────────────────────────────┐
│ M0               [ADPRW    ]│
│──┤├──────────────┤S1: H1    │  // slave address 1
│                  │S2: H3    │  // function code:读保持register
│                  │S3: H100  │  // starting address:40101(频率)
│                  │S4: K2    │  // 读取 2 个字
│                  │D1: D100  │  // data存储到 D100-D101
└──────────────────────────────┘

// 网络 3:data处理
// D100 = 运行频率(单位 0.01Hz,需要除以 100)
// D101 = 输出电流(单位 0.1A,需要除以 10)

// 网络 4:写入运行频率设定
┌──────────────────────────────┐
│ M1               [ADPRW    ]│
│──┤├──────────────┤S1: H1    │  // slave address 1
│                  │S2: H6    │  // function code:写单register
│                  │S3: H200  │  // 目标address:40201
│                  │S4: K0    │  // 写Operation时忽略
│                  │D1: D200  │  // 写入的data
└──────────────────────────────┘

三菱 FX5U 的 Modbus 通信速度可达 115200 bps,在多站轮询Scene下表现出色。关于三菱 Modbus 通信的更深入内容,请参考 modbus.cn 上的三菱 Modbus 通信完整Tutorial

台达 DVP/AS 系列 Modbus 编程详解

台达 PLC Modbus 通信在 DVP 和 AS 系列上有非常优雅的实现。MODRW 指令是台达 PLC 进行 Modbus 通信的核心指令,其设计理念是”一条指令解决所有问题”——无论是读取还是写入、线圈还是register,都通过这条指令Complete。AS 系列更是提供了增强版的 M_MODRW 指令,支持Morefunction code。

MODRW 指令参数说明

参数含义DVP 系列AS 系列
S联机装置addressK1-K254K1-K254
S1function codeK1/K2/K3/K4/K5/K6/K15/K16同上+扩展
S2目标装置address0-99990-65535
S3dataLength1-1271-200
D本机datastartregisterD registerD register

梯形图示例:台达 DVP 读取智能电表

// 台达 DVP-ES2 通过 COM2(RS-485)读取智能电表data
// 电表slave address:1,Baud rate 9600,无校验

// 网络:触发读取电表data
┌───────────────────────────────┐
│ M1002             [ SET  M0 ]│  // 上电初始化
└───────────────────────────────┘

┌───────────────────────────────┐
│ M1013             [ MODRW   ]│  // 1 秒时钟脉冲触发
│──┤├───────────────┤S:  K1    │  // slave address 1
│                   │S1: K3    │  // function code:读保持register
│                   │S2: K0    │  // starting address:040001
│                   │S3: K6    │  // 读取 6 个字
│                   │D:  D0    │  // 存储到 D0-D5
└───────────────────────────────┘

// 读取结果映射(某品牌智能电表):
// D0 = 电压(单位 0.1V → D0/10 = 实际电压)
// D1 = 电流(单位 0.01A → D1/100 = 实际电流)
// D2 = 有功功率(单位 1W)
// D3 = 无功功率(单位 1Var)
// D4 = 功率因数(单位 0.001 → D4/1000)
// D5 = 频率(单位 0.01Hz → D5/100)

台达 AS 系列 M_MODRW 增强Function

台达 AS 系列 PLC(如 AS228T-A)在 MODRW 基础上提供了 M_MODRW 指令,主要增强包括:支持 32 位data读写、支持字符串传输、支持位写入、通信超时可配置,以及最多可同时激活 8 条通信指令。这些增强使得 AS 系列在复杂 Modbus 通信Scene下具有明显优势。

// 台达 AS 系列 M_MODRW 示例:读取 32 位电能累计值
┌───────────────────────────────────┐
│ M0                  [ M_MODRW   ]│
│──┤├────────────────┤S:  K1       │  // slave address
│                    │S1: K3       │  // function code:读register
│                    │S2: K100     │  // starting address
│                    │S3: K2       │  // 读取 2 个字(含 32 位data)
│                    │D:  D100     │  // 存储到 D100(低字)、D101(高字)
│                    │Mode: D200   │  // 模式设定
└───────────────────────────────────┘

台达 PLC 的 Modbus 编程体验在国产品牌中堪称一流,MODRW 指令的简洁性大幅降低了开发门槛。More台达 PLC Modbus 通信的技术细节,请访问 modbus.cn 查阅台达 PLC Modbus 通信完整指南

汇川 H3U Modbus 自由口编程详解

汇川 Modbus 编程在 H3U 系列上有独特之处。不同于其他品牌提供专用 Modbus 指令的做法,H3U 采用自由口通信方式,工程师需要手动构建 Modbus message帧并通过 RS 指令send。这种方式虽然增加了开发难度,但给予了工程师对通信过程的完全控制权,在非标准协议或特殊需求Scene下非常有用。

H3U 自由口通信基本原理

汇川 H3U 的串口通信基于 RS 指令(datasend指令)和 RC 指令(datareceive指令)。要实现 Modbus RTU 通信,需要按照 Modbus protocol specification手动构建message帧,包括slave address、function code、data域和 CRC verification码。

CRC-16 校验算法实现

Modbus RTU 的 CRC verification码是自由口编程中最关键的部分。以下是在 H3U 上实现 CRC-16 校验的梯形图逻辑说明(校验多项式:0xA001)。

// CRC-16 计算流程(Modbus RTU 标准算法)
// 输入:待校验data存储在 D100-D105(6 byte,不含 CRC),byte count存于 D0
// 输出:CRC16 结果高byte存于 D200,低byte存于 D201
//
// 算法伪代码:
// 1. 预置 16 位 CRC register为 0xFFFF
// 2. 将第一个 8 位data与 CRC register低byte异或,结果存入 CRC register
// 3. CRC register右移一位,最高位补 0
// 4. 移出位如果为 1,则 CRC register与 0xA001 异或
// 5. 重复步骤 3-4 共 8 次
// 6. 处理下一个byte,重复步骤 2-5
// 7. 所有byte处理Complete后,CRC register的值即为 CRC16 校验码

// H3U 梯形图中的实现(使用循环指令)
// 注意:H3U 内置了 CRC verification指令(CRC),可将校验码追加到senddata末尾
// CRC D100 D106 K6
// Function:对 D100 开始的 6 byte count据计算 CRC,结果存入 D106-D107

完整自由口 Modbus RTU 主站示例

// 汇川 H3U 自由口通信实现 Modbus RTU 主站
// 目标:读取slave address 1 的保持register 40001(2 个字)

// 网络 1:构建 Modbus 读保持registermessage
// messageformat:[slave address][function code][starting address高][starting address低][字数高][字数低][CRC低][CRC高]
//
// sendmessagedata准备:
// D100 = H0103    // slave address 01 + function code 03
// D101 = H0000    // starting address 0000(对应 40001)
// D102 = H0002    // 读取 2 个字
// CRC verification放入 D103

// 网络 2:配置Serial port parameters(通过特殊register)
// D8120 = H0C81   // 8位data+even parity+1stop bit+9600bps
// M8161 = ON      // 8位data处理模式

// 网络 3:senddata
┌──────────────────────────────┐
│ M0               [ RS     ]│
│──┤├──────────────┤D100      │  // sendstartregister
│                  │K8        │  // send 8 个byte(含 CRC)
│                  │D200      │  // receivestartregister
│                  │K9        │  // receive 9 个byte(含 CRC)
└──────────────────────────────┘

// 网络 4:receivedata处理
// D200 = slave address(应为 H01)
// D201 = function code(应为 H03)
// D202 = byte count(应为 04)
// D203 = 第一字高byte
// D204 = 第一字低byte
// D205 = 第二字高byte
// D206 = 第二字低byte
// D207 = CRC lowbyte
// D208 = CRC highbyte

汇川 AM600 系列(Codesys 平台)则提供了更现代化的 Modbus 通信方式,通过专用Function块实现,与西门子方案更为接近。关于汇川全系列 PLC 的 Modbus 编程对比,请参考 modbus.cn 上的汇川 Modbus 编程全系列指导

各品牌address映射关系对照表

Modbus 通信中最容易出错的环节之一就是address映射。不同品牌的 PLC 对 Modbus address的表示方式各不相同,而且在编程时address偏移Rules也有差异。下表整理了四大品牌 PLC 的 Modbus address映射关系,覆盖超过 2000 条address映射Rules的核心逻辑。

Modbus address区协议address西门子三菱 FX5U台达 DVP汇川 H3U
线圈 00001-099990-9998Q0.0-Qx.yM0-MxM0-MxM0-Mx
离散输入 10001-199990-9998I0.0-Ix.yX0-XxX0-XxX0-Xx
输入register 30001-399990-9998IW0-IWxSD 特殊register
保持register 40001-499990-9998DBx.DBW0+D0-D7999D0-D9999D0-D7999
保持register 400001-4655350-65534需扩展寻址D0-D7999 / R0+D0-D9999 / 扩展D0-D7999 / 扩展

address偏移Rules详解

理解address偏移是避免 Modbus 通信Error的基石。Modbus protocol定义的address从 0 开始编号,但应用层编号(如 40001)从 1 开始。不同品牌的 PLC 在指令中使用的address通常是协议address(0-based),这导致了一个常见的”差 1″Error。

SceneDocumentaddress协议address(指令中用)偏移量
读保持register 40001400010x0000(H0/K0)-1
读保持register 40100401000x0063(H63/K99)-1
读线圈 00001000010x0000(H0/K0)-1
写单register 40010400100x0009(H9/K9)-1
读输入register 30050300500x0031(H31/K49)-1

常见Error与陷阱

在实际工程中,Modbus 通信的debug往往占据了大量开发time。以下是Author整理了数百个实际项目中最常见的Error和陷阱,帮助读者少走弯路。

1. address偏移Error

这是最常见的Error没有之一。设备手册上写的register address是”40001″,工程师在 PLC 指令中将starting address填写为”1″或”40001″都是Error的。正确做法是填入”0″(协议address = 应用address – 1)。西门子 MB_MASTER 的 DATA_ADDR 参数填入 40001 是正确的(西门子做了封装),但三菱 ADPRW 的 S3 参数应填入 H0,台达 MODRW 的 S2 参数应填入 K0。

2. endianness(Endianness)问题

当 Modbus 传输 32 位data(如浮点数、双字整数)时,endianness问题会导致dataParseError。常见的endianness组合有四种:Big-Endian endianness + Big-Endian 字序(标准 Modbus)、Big-Endian endianness + Little-Endian 字序、Little-Endian endianness + Big-Endian 字序,以及 Little-Endian endianness + Little-Endian 字序。西门子 PLC 采用 Big-Endian,三菱和台达采用 Little-Endian,跨品牌通信时必须注意endianness转换。

3. 超时设置不当

Modbus RTU 的帧间间隔标准为 3.5 个字符time(在 9600 bps 下约 3.6ms)。如果主站的超时设置过短,会因为正常帧间间隔而误判超时;如果过长,则在设备掉线时会浪费大量扫描time。建议将Response超时设置为「(最大Response字符数 × 字符time)+ 设备处理time + 余量」,例如 9600 bps 下读取 10 个register,合理的超时设置为 200-500ms。

4. 多主站冲突

Modbus RTU 是单主站协议,同一总线上不允许existence多个主站。当 HMI 触摸屏和 PLC 同时作为主站访问同一设备时,会产生总线冲突。解决方案是让 HMI 通过 PLC 的透明传输Function间接访问设备,或者使用 Modbus TCP 网关进行协议转换。

5. Communication parameters不一致

Baud rate、data bit、stop bit、check digit必须与从站完全一致。注意:某些设备声称支持”9600,8,N,1″,但实际data bit为 9 位(8 data bit + 1 check digit),通信时会因为byteLength不匹配而失败。建议使用 Modbus Debug ToolsConfirm设备的实际Communication parameters。

与 SCADA system的集成

PLC 通过 Modbus protocol与 SCADA(监控与Data Acquisition)system集成是Automation中最常见的架构之一。以下介绍几种典型的集成方式和最佳实践。

典型集成架构

  • 直连模式:SCADA 通过 Modbus RTU/TCP 驱动直接connect PLC。适用于小型system(1-5 台 PLC),优点是架构简单、延迟低;缺点是扩展性差、SCADA 负担重。
  • OPC 服务器中转模式:PLC → OPC Server(如 Kepware、Matrikon)→ SCADA。适用于中大型system,优点是协议解耦、多客户端支持;缺点是增加了中间层和维护成本。
  • data网关模式:PLC → Modbus data网关 → SCADA/MES/ERP。适用于Enterprise级system,优点是统一data出口、支持data缓存和转发。

SCADA configuration要点

在 SCADA 中配置 Modbus 驱动时,最关键的是正确设置register address映射。常见的 SCADA 平台(如 WinCC、configuration王、力控、Intouch)对 Modbus address的表示方式各不相同。例如,WinCC 使用 “4×0001” 表示保持register,而configuration王使用 “4-1” 的format。必须查阅各平台的 Modbus 驱动Document,Confirmaddressformat后再进行配置。

debug技巧与Tools推荐

高效的debug是 Modbus 通信开发成功的关键。以下是Author推荐的Tools和方法论。

必备Debug Tools

Tools名称Type适用Scene推荐理由
Modbus Poll桌面软件主站模拟界面直观,支持所有function code,可定时轮询
Modbus Slave桌面软件从站模拟可与 Poll 配对使用,仿真从站行为
QModMaster开源软件主站debugfree开源,支持 RTU/TCP,跨平台
ModScan桌面软件主站扫描批量扫描从站register,快速建立address映射表
串口监控Tools硬件/软件总线监听USB 转 485 的监听模式,记录Original message
Wireshark网络抓包Modbus TCP 分析支持 Modbus TCP 协议Parse,Function强大

debug方法论

  • 分层验证法:先用电表Confirm物理层(线缆、终端电阻、偏置电阻),再用 Modbus Poll Confirm链路层(Baud rate、校验),最后用 PLC 程序Confirm应用层(address、data format)。
  • 最小化测试:先用最简单的function code(03 读单register)进行通信测试,Confirm基本链路正常后再测试复杂Function。
  • message记录法:使用串口监控Tools记录Complete message,通过人工分析message帧定位问题。Modbus message结构简单,通常一眼就能识别问题所在。
  • 超时递进法:从较长的超时(如 3000ms)开始debug,Confirm通信正常后逐步缩短超时,找到最佳值。

四大品牌 Modbus 编程全面对比

对比维度西门子 S7-1200/1500三菱 FX5U台达 AS 系列汇川 H3U
实现方式专用指令(库)专用指令专用指令自由口编程
核心指令MB_COMM_LOAD/MB_MASTER/MB_SLAVEADPRWMODRW/M_MODRWRS+CRC
编程难度★★☆☆☆★★☆☆☆★★☆☆☆★★★★☆
function code支持01/02/03/04/05/06/15/1601/02/03/04/05/06/15/1601/02/03/04/05/06/15/16All(手动)
最多从站数247247254247(受扫描周期限制)
单次最多data量125 字(读)/123 字(写)125 字(读)/123 字(写)127 字(读)/123 字(写)无限制(手动)
address容错自动处理偏移需手动偏移(-1)需手动偏移(-1)需手动偏移(-1)
多指令并行不支持(需排队)不支持(需排队)支持(最多8条)手动管理
Error诊断STATUS 详细状态码SM/SD registerError标志位手动判断
TCP 支持MB_CLIENT/MB_SERVER内置以太网口内置以太网口需扩展模块
浮点数支持需endianness转换需endianness转换需endianness转换需endianness转换
开发环境TIA PortalGX Works3ISPSoft/DIAStudioAutoShop
学习资源丰富较丰富中等较少
典型通信速率19200-1152009600-1152009600-1152009600-19200
适合Scene大型system/标准化项目中小型设备/快速开发国产替代/性价比优先定制化需求/深度控制

FAQ Frequently Asked Questions

Q1:西门子 S7-1200 的 Modbus 通信需要额外的硬件模块吗?

是的。S7-1200 CPU 本体通常只有以太网口和普通的 RS-232/RS-485(部分型号),需要进行 Modbus RTU 通信时,Recommended for use CM1241 RS485 通信模块(硬件标识号 269)或 CB1241 信号板。对于 Modbus TCP 通信,CPU 自带的以太网口即可支持,无需额外硬件。S7-1500 类似,使用 CM PtP 通信模块。

Q2:三菱 FX5U 的 ADPRW 指令一次可以读写多少A device?

ADPRW 指令每次只能与一个从站设备进行通信。如果需要轮询多个从站,需要在程序中使用多组 ADPRW 指令,并确保同一time只有一条指令在激活状态。可以通过上一个指令的Complete标志来触发下一个指令,实现串行轮询。典型的多站轮询周期 = 站点数 × (Requesttime + Responsetime + 帧间间隔)。

Q3:台达 MODRW 指令通信失败如何排错?

首先检查Communication parameters是否一致(Baud rate、check digit、data bit、stop bit)。然后Confirm RS-485 的 A/B 线是否接反——这是最常见的硬件问题。使用台达 PLC 内置的特殊register可以View通信Error码。最后,确保 MODRW 指令的目标address与从站实际address匹配。台达 PLC 的 COM2 端口默认是 Modbus 从站模式,如需作为主站使用,需要在程序中将 M1143 设置为 ON。

Q4:汇川 H3U 自由口编程实现 Modbus 的可靠性如何?

汇川 H3U 的自由口 Modbus 通信在Baud rate不超过 19200 bps 时非常可靠。为了保证通信稳定性,建议在程序中加入以下机制:超时重试(建议 3 次)、CRC verification结果验证、receivedataLength校验、Responseaddress校验(Confirm回复的slave address与Request一致),以及通信失败后的Error count和报警。如果是大规模批量项目,建议使用汇川 AM600 系列(Codesys 平台),其 Modbus Function块更为成熟稳定。

Q5:如何解决 Modbus 通信中 32 位浮点数的endianness问题?

32 位浮点数在 Modbus 中使用两个连续的 16 位register传输,endianness由设备决定。西门子和施耐德通常使用 Big-Endian 字序(register N 存高 16 位,N+1 存低 16 位),而三菱、台达、汇川通常使用 Little-Endian 字序(register N 存低 16 位,N+1 存高 16 位)。解决方法是在receive端进行byte交换:西门子可使用 SWAP 指令,三菱可使用 SWAP 指令或直接进行Word exchange,台达可使用 XCH 指令,汇川可使用循环移位。

结语

Modbus PLC 编程是Automation工程师的核心竞争力之一。从西门子 Modbus RTU 的 MB_MASTER 指令到三菱 Modbus 通信的 ADPRW 指令,从台达 PLC Modbus 的 MODRW 指令到汇川 Modbus 编程的自由口实现,不同品牌各有其设计哲学和最佳实践。掌握跨品牌 PLC 的 Modbus 通信能力,不仅能够应对各种项目需求,更能够深入理解工业通信协议的本质。

本文作为 modbus.cn Modbus 技术系列的重要篇章,与平台上的其他文章形成了完整的技术体系。建议读者结合以下几篇文章深入学习:

工控之路,道阻且长。愿本文能成为你 Modbus 编程路上的可靠伴侣。

技术术语(共 13 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
RS485工业常用的差分串行通信标准,支持多点通信
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
PLC可编程逻辑控制器,Automation控制的核心设备
SCADAData Acquisition与监视控制system,用于远程监控工业过程
Baud rate串行通信每秒传输符号数,Modbus RTU常用9600/19200
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
串口计算机与外部设备进行串行通信的物理接口
传感器将物理量转换为电信号的检测装置
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category 未Category 字数 11675 字 · 阅读约 30 分钟 更新 2026-06-28 永久链接 https://www.modbus.cn/44512.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注