通信调试中,字节序是个常见概念,比如本地字节序、网络字节序。
字节存储机制又分两种:大端(Big-Endian)和小端(Little-Endian)。
MODBUS协议中同时存在字序概念,存储机制同字节序。
不同的是,MODBUS数据帧中对关键字段(寄存器地址)都定义为大端字节序,但是数据部分在不同厂家的定义方式可能不同,甚至同一厂家某一型号设备中,对不同数据的字节序定义也不统一。
基于MODBUS报文的字节排序,大端字节序即数据高字节在前,低字节在后,小端字节序相反。例如:
01 03 04 12 34 56 78 81 07 (读保持寄存器响应报文)
其中,回复数据长度4Bytes, 如原始数据即为0X12345678,从报文看,其字节序即为大端。
但是,由于未知历史原因,MODBUS寄存器数据在传输4字节浮点型数据时,有些设备厂家给出字序要求,并且明确声明字序为小端,即当原始数据是0X12345678时,传输它的报文字节流应该这样:
01 03 04 56 78 12 34 66 D5
MThings为了支撑更好的适配不同厂家数据协议的定义方式,对字节序和字序做出如下处理:
每个数据都可以独立配置其字节序和字序。寄存器数量为1、2、4时,支持字节序可配置。覆盖2、4、8字节数据。寄存器数据量为2、4时,支持字序可配置。覆盖4字节、8字节数据。其他寄存器数据量的数据,字序、字节序默认为大端。