Modbus地址40001就是0x0000?我干了8年,发现80%工程师都搞错

从业8年工业协议相关工作以后, 我觉得地址这般基础的知识, 每个人都明白。直至去年带领一名新人, 要他配置一台电表的点位。

他讲, 写在手册上的温度寄存器地址是40001, 他于软件当中填的是40001, 然而却读取不到数据, 他如此说道。

我说:"你填试试。"

他愣了:"40001和有什么关系?"

那一刻我意识到:80%的工程师,都没真正搞懂地址。

的"两套地址系统"

协议里,寄存器地址有两种表示方式,而且两种都在用:

第一套:协议地址(PLC地址)

套, 这个地址, 是用于人机界面的, 那些 PLC 编程软件, HMI 以及设备手册, 平常写的就是这套。

第二套:协议地址(通信地址)

用来作为协议报文所使用的, 是这一套地址, TCP/RTU 的报文中, 这套在所使用地址的字段方面。

为什么40001等于?

因为:

换算规则:

但要留意, 这个换算仅仅适用于"标准实现", 某些厂商所生产的设备, 其手册当中写明的是40001, 而在实际进行通信的时候所采用的(即手册地址减去40000, 并非减去40001)。

我踩过的坑

坑一:手册和实现不一致

针对某一品牌的电表, 其手册表明存在"电压寄存器地址 40001"这种情况。当将其在采集软件里进行填写时, 却无法读取到。然而填写之后, 又能够读取到了。

后来与厂商技术支撑取得联系, 对方有所说明道, 在我们手册之上所提及的"40001", 其对应着协议地址, "40001"属于第1个保持寄存器, 然而在我们的实现情况当中, 第1个却是。

我:???

坑二:软件自动换算的陷阱

存在一些采集软件, 好比组态王这类, 其配置界面设定需填写"40001", 于此软件内部会自行作换算。然而又有一些软件, 像是自行编写的脚本那般, 你所填写的内容便会原样发送出去。

假设你运用软件A进行配置(填入40001, 软件会自行展开换算), 之后将其迁移至软件B(需自行编写脚本,并填入40001进而直接发送报文), 到头来数据却发生了错位情况。

坑三:功能码和地址的对应关系

的地址空间是按功能码区分的:

同一个协议地址,用不同的功能码读,读的是完全不同的数据。

遇到过最离谱的的bug, 有个工程师, 用功能码0x03去读地址的情况, 他觉得读的一直是保持 (也就是温度咯), 可事实呢, 实际状况是设备在这个地址存进去的实际是个设备ID.温度数值所在的地址其实是(40002)。他就这么持续了一周都在读设备ID, 浑然不知觉得都没觉得温度有啥变化, 一直以为温度恒定根本没产生任何改变。

坑四:32位数据的地址对齐

具有16位性质的是寄存器, 32位的数据, 也就是float以及int32是具有的, 需要占用2个寄存器, 这就是其情况。

某设备手册写:"功率寄存器地址40001,32位浮点。"

这有两种理解:

我平常的做法是, 先运用 Poll 去扫描一回整个地址空间, 瞧瞧实际的数据究竟落在何处, 不要盲目迷信手册。

我的"地址速查表"

现在做项目,我随身携带这张表,发给每个新人:

表格

复制

但记住:手册可能骗人,报文不会。

写在最后

这种被称作"基础知识"的地址, 看上去简单, 然而细节之处却全是魔鬼。比如40001和的关系, 再说功能码与地址的对应, 另外32位数据的对齐方式, 每一个要点都能够致使项目延期一周, 对, 就是一周。

如果此刻你正处于配置设备的状态, 又或者新人老是出现配置错误地址的情况, 那么建议你收藏这张表。在我们的开源驱动框架当中, 还内置了地址自动换算功能以及全地址空间扫描功能:

工业协议驱动框架, 它内置着地址自动换算功能, 还有功能码校验功能, 也有32位数据对齐检测功能。

:

Gitee:

然而, 40001仅只是如此, 可是, 明白这件事情, 与切实做到毫无差错, 其间却横亘着100个项目。

相关推荐
仰科网关7 天前
采集opc da 服务器数据 转 EthernetIP项目案例
网关·modbus·协议转换·规约转换器
@嵌入式扫地僧7 天前
RK2108 实现 Modbus 异常流量 100μs 级检测全流程
tcp·modbus·嵌入式ai·边缘ai·tcn-tiny
pnoker10 天前
36 个驱动模块:应对协议碎片化
java·物联网·modbus·工业互联网·opc ua
虎王物联11 天前
STM32 HAL库串口DMA空闲中断:高效接收不定长Modbus数据帧
stm32·单片机·嵌入式硬件·dma·modbus
csdn_aspnet11 天前
Modbus RTU 与 Modbus TCP:它们有什么区别?
网络·tcp/ip·tcp·modbus·rtu
物联网IoT小易11 天前
Modbus RTU设备如何接入物联网平台?从串口采集到MQTT上云
物联网·modbus·物联网平台·modbus协议·modbus rtu·modbus rtu设备接入
AlanBruce13 天前
逻辑控制功能详解
自动化·上位机·plc·modbus·mthings·摩尔信使
AlanBruce14 天前
一键设备扫描功能详解
服务器·网络·网络协议·modbus·摩尔信使·设备扫描
会周易的程序员16 天前
软件接入大模型实现 Agent —— 从原理到 C++ 落地完全指南
c++·人工智能·物联网·架构·agent·工业协议·mcp