modbus报文解读

modbus报文解读

  • 一、概念:
  • 二、换算公式:
  • 三、字节数
  • python读取16进制的有效数据
    • 计算`上行报文`数据的长度
    • 读取`16进制`的有效数据
  • modbus报文解读

一、概念:

参考: 位、字节、char、int(32位系统) 之间的关系_wenfei11471的博客-CSDN博客

  1. 位(bit):计算机中最小的数据单位。每一位的状态只能是0或1。
  2. 字节(byte):存储空间的基本计量单位,8 个二进制位构成1个字节。1 个字节可以储存 1 个英文字母或者半个汉字。
  3. KB:表示1024。1KB表示 1024 个字节。
  4. char:字符型数据,表示 2 个字节,也就是 16 位。
  5. int:整型数据,表示4个字节。
  6. 字(word):由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长,它是计算机进行数据处理和运算的单位,也就是 CPU 一次能处理的二进制代码的长度,即CPU一次所能处理的二进制代码的位数,也就是CPU的地址线的个数,即CPU的位宽。我们平时说的32位处理器,64位处理器中的 32、64 就是对应处理器的字长。
  7. 半字(halfword):字的一半长度

二、换算公式:

  • 1 Byte = 8 bit
  • 1 KB = 1024 Byte = 8192 Bit
  • 1 MB = 1024 KB
  • char = 2 Byte = 16 Bit
  • int = 4 Byte = 32 Bit
  • word = 32 bits
  • halfword = 16 bits

三、字节数

长度限制最大为128位,
字母数字都是一个字母或一个数字占一个字节,汉字就是1个汉字2个字节
一般开发设置的都是字节数,如果输入汉字的话就只能输入64个汉字,对应的varchar类型,128字节;
所以对应到英文就是128个英文字母。


python读取16进制的有效数据


计算上行报文数据的长度

# 响应数据 是 数据段拼接
response_data = 数据段1+数据段2
# 统计的数据不能直接/2,提示是folat类型
response_data_length = len(response_data)
# 转int后再/2
response_data_length = hex(int(response_data_length / 2))[2:]

读取16进制的有效数据

# 16进制数据前两位是0x,跳过前两位读取即可
响应报文数据长度= hex(len(response_message_data)/2)[2:]

modbus报文解读

下行报文: 01 03 00 00 00 01 04 0E

下行报文就是设备接收到的报文,也就是用户发送给设备的报文

地址位 功能码 寄存器地址 寄存器长度 CRC
F5 03 00 00 00 01 91 7E
1字节 1字节 2字节 2字节 2字节

上行报文: F5 03 02 00 45 (CRC)

# 02 代表要读取的数据字节长度= 下行报文寄存器长度*2
# 00 45 是寄存器地址00 00的数据,也就是温度值

上行报文就是设备发送出去的报文,也就是用户收到的来自设备的报文

上行报文: 01 03 00 1E 如果后面有多个,就写多个值

F5 03 02 00 45
地址位 功能码 返回字节长度
(下行报文_寄存器长度*2)
DATA1 DATA2 读几个寄存器长度,就返回几个DATA CRC
1字节 1字节 1字节 规定的是几个字节就是几个字节 规定的是几个字节就是几个字节 2字节

你可能感兴趣的:(modbus,modbus)