Modbus TCP 读 10 个地址 和 100 个地址 ,速度、流量差别极小,几乎没区别!
但是注意:每次最多只能读 125 个寄存器
1. 算一算字节大小
Modbus 一个地址 = 2 字节(1 个寄存器)
- 读 10 个地址 = 20 字节数据
- 读 100 个地址 = 200 字节数据
- 读 125 个地址 = 250 字节数据(Modbus TCP 单次最大)
200 字节 对比 20 字节,在网络里几乎没感觉。
2. 真正耗时的不是数据大小,是【网络往返次数】
- 读 1 次 100 个地址 = 1 次网络往返
- 分 10 次 每次读 10 个 = 10 次网络往返
后者会慢 5~10 倍!
所以: ✅ 能一批读 100 个,绝对比分 10 次读 10 个快得多!
3. 你可以放心大胆的用
Modbus TCP 最推荐的做法:
- 连续地址尽量一次读完
- 一次读 1~125 个都一样快
- 10 个 和 100 个 速度几乎无差别
最终结论(你可以记住)
10 个地址 和 100 个地址,速度几乎一样! 放心批量读,越大越快,越小越慢!
标准 Modbus TCP 一次最多只能读 125 个寄存器(地址) ;你直接发 300 个,协议层会报错、被拒绝,读不到数据。
1. 协议硬限制(不能改)
- 功能码 03 / 04(读寄存器):
- 单次最大:125 个寄存器
- 每个寄存器:2 字节 → 250 字节数据
- 原因:PDU 里 "字节数" 字段只有 1 字节,最大 255,扣掉包头刚好卡死在 125。
2. 你读 300 个会发生什么
- 主站发:起始地址 + 数量 = 300
- 从站(PLC / 仪表)直接回:异常响应(功能码 + 0x80,例外码 = 0x02 或 0x04)
- 结果:通讯失败、超时、报错 "非法数据长度",一个都读不回来。
3. 300 个正确做法:分包
必须拆成 3 包(都走 03/04):
- 第 1 包:起始地址 0,数量 125
- 第 2 包:起始地址 125,数量 125
- 第 3 包:起始地址 250,数量 50
这样 3 次请求,就能把连续 300 个地址完整读回来。
4. 补充(帮你记)
- 寄存器(03/04):最大 125 个 / 次
- 线圈 / 开关量(01/02):最大~2000 个 / 次
- 超过就分包,不要硬写 300,会直接通讯报错。