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