
那根485总线上的幽灵
RS-485是Modbus RTU最常见的物理层。两根差分线,挂一堆设备,终端加个120欧电阻。理论上能带32个节点,实际上?现场走线一团乱麻,没做屏蔽,还跟动力线扎一块儿——别说32个,8个就开始掉包。波特率19200,数据位8,停止位1,无校验。标准得不能再标准。但就是这种简陋,让它活过了四十多年。它不要求什么芯片大厂的授权,单片机串口直接就能怼。 !
寄存器的隐秘世界
玩Modbus的人,必须把寄存器类型刻在脑门儿上。线圈(0x)、离散输入(1x)、保持寄存器(4x)、输入寄存器(3x)。功能码01读线圈,02读离散输入,03读保持,04读输入。写操作有05写单线圈、06写单保持、15写多线圈、16写多保持。听起来很规整对吧?到了实际设备,厂家才不按套路出牌!有把保持寄存器劈成两半用的,高字节报警,低字节状态;有把线圈映射到保持寄存器的某一位的;更有的仪表,读输入寄存器必须用功能码03,用04返回全零——问技术支持,人家反手甩你一句:“我们参考的标准不一样。” 我……! 💡 一个小技巧:如果你不确定设备支持的寄存器范围,先用03功能码读一个高地址,比如4×49999。如果返回异常码02(非法数据地址),说明设备没这么多寄存器。然后你可以二分法探测出最大地址。别信说明书,说明书可能是抄的别家模板。 !
Modbus与当代工业的格格不入
