什么是Modbus通信?
RS485 它不是通信协议,而是一种接口标准。它有两个同级标准: RS232 以及 RS422。

正确的接线方法 485接口 这是一种手拉手菊花链连接方式。如果通信距离较长(例如超过100米),应在网络的起始端和终止端并联一个120Ω的电阻,以减少两端的信号反射。通常情况下,如果距离超过100米,应考虑增加终端电阻;如果距离超过1000米,则应考虑增加终端电阻。 RS485 公交中继器。

多少 RS485设备 可以连接到一条 RS485 总线上的设备数量是多少?具体数量取决于 RS485 转换器的负载能力。一般来说,负载能力为 RS485 芯片分为三个级别,分别可支持 32 个、128 个和 256 个设备。通常情况下,我们使用的 RS485 转换器的负载容量为 32 个设备。
Ⅰ.ModbusRTU 是应用层的一种通信协议。
ModbusRTU ModbusRTU 是应用层的通信协议,而 RS485 是物理层的接口标准。当我们谈到 ModbusRTU 通信时,通常指的是它基于 RS485。然而, ModbusRTU 协议也可以基于 RS232/RS422,甚至以太网 TCP/UDP。同时,RS485 并非仅限于此。 ModbusRTU任何协议都可以通过 RS485 传输。一个主设备能否与多个从设备通信取决于协议层是否设计了设备地址。实现一个主设备与多个从设备通信需要两个条件:物理层和应用层的支持。两者都不可或缺。例如,如果物理层使用 RS232,即使应用层使用 RS485,也无法实现一个主设备与多个从设备通信。 ModbusRTU协议无法实现一个主设备与多个从设备通信。(RS232 采用单发送单接收模式)

通信速度主要受两个因素影响:数据量和硬件层速度。数据量指的是需要传输的数据量,而硬件层速度则与通信设备和网络基础设施密切相关。硬件层速度与波特率和通信距离均有关,因为主从轮询机制不可避免地会导致通信效率下降。
二、三种类型的通信协议
其中之一是标准协议,例如 Modbus协议另一种是品牌协议,例如西门子 S7 协议、三菱 MC 协议;第三种是自定义协议。
一般消息格式 ModbusRTU 具体如下:

1. 从机地址这条消息是发给谁的,还是发给谁的?
2. 功能代码:该做什么,读/写/线圈/寄存器。
3. 数据部分请结合函数代码提供相应的参数。
4. 验证部分确保信息的正确性和完整性。

Ⅲ.读取输出线圈
1.从机地址:0x01 表示从从设备 1 读取数据。
2.功能代码:0x01 表示正在读取的数据来自输出线圈存储区。
3. 起始地址十六进制 0x00 0x13 对应十进制 19,表示读取从线圈 19 开始。与此 19 对应的 Modbus 地址为 00020。(注:Modbus 地址遵循“偏移量 + 1”的编号规则。十六进制 0x13(十进制 19)是线圈的“实际偏移地址”。Modbus 地址需要通过将偏移量加 1 来获得,即 19+1=20,对应于线圈地址 00020(线圈地址通常以 000xx 格式表示)。
(1)地址类型区分:在 Modbus 中,线圈(离散输出)的地址范围默认从“00001”(不是 0)开始。这里,“00001”对应于实际的偏移地址 0(十六进制 0x00)。
(2)转换逻辑:实际偏移地址(十进制 N)→ Modbus 线圈地址 = N + 1。此处,N=19 (0x13),因此 19+1=20,格式化为 5 位数字 00020。)
4. 线圈数量十六进制 0x00 0x1B 对应于十进制 27,表示读取的线圈数为 27。
5. CRC校验:0x8D 0x4C 表示对所有前面的数据执行 CRC 校验的结果。

Ⅳ.回复消息
主站发送此消息以读取1号从站输出线圈存储区域的状态值, Modbus 地址范围从 00020 到 00046,共包含 27 个线圈。1 号从站收到此消息并理解主站意图后,将回复如下消息:
1. 从机地址:0x01 表示从设备 1 响应的消息。
2. 功能代码:0x01 表示响应是针对 0x01 功能码消息的。
3. 字节计数: 0x04 表示返回的数据由 4 个字节组成。
4.字节1至字节4返回的具体数据分别为 0xCD、0x6B、0xB2 和 0x05。这四个字节对应于 32 个线圈值,其中前 27 个线圈值对应于 00020 到 00046 的值。
5. CRC校验0x00 0x02 表示对所有先前数据执行 CRC 校验的结果。收到响应消息后,主站获取所需数据。具体对应关系如下:
0xCD=1100 1101 对应于 00027-00020
0x6B=0110 1011 对应于 00035-00028
0xB2=1011 0010 对应于 00043-00036
0x05=0000 0101 对应于 00051-00044
【说明:要将字节 0xCD (11001101) 转换为 Modbus 地址,核心是首先明确 Modbus 地址类型(位地址/寄存器地址),然后根据“字节到地址映射规则”进行转换——Modbus 没有通用的“字节到地址”标准,关键在于设备定义的“起始参考 + 地址类型”。】
最常见的场景:转换为 Modbus 位地址(离散输入/线圈,1 位 = 1 个地址)

五分之三三步转换
在 Modbus 中,1 字节等于 8 位二进制数,每一位对应一个“位地址”(例如离散输入 1xxx 区、线圈 0xxx 区)。转换分 3 个步骤完成:
1.确定字节的“基地址”
假设设备定义:此字节的起始位地址参考为 N(请参阅设备手册,例如常用参考 20、100 等),1 个字节占用 8 个连续位地址。
2.按位分配地址
字节 0xCD=11001101 由 8 位(第 0 位到第 7 位)组成,对应的地址为:
位0→N、位1→N+1、位2→N+2、位3→N+3、位4→N+4、位5→N+5、位6→N+6、位7→N+7
例如:如果 N=20,则 8 位地址为 20~27(即,您之前看到的“00020-00027”,按照注释约定,以相反的顺序写成 27-20)。
3.补充地址区域前缀
离散输入(只读)以 1→10020~10027 为前缀;线圈(可读写)以 0→00020~00027 为前缀(设备通常省略前缀,直接写入 00020~00027)。】(注:原文似乎是一个不完整的句子,因此翻译也不完整或仅是占位符。如果原文不完整,翻译也无法完成。)
到目前为止, Modbus 通信 交互已完成。










