我在解码 DLE EOT 1 时遇到问题,我认为它的位顺序和缺少前导零
import serial
x = 1
while x:
time.sleep(3)
ser.write("\x10\x04\x01".encode())
bytesToRead = ser.inWaiting()
data = ser.read(bytesToRead)
while data:
print(data)
print(bin(int.from_bytes(data, byteorder="big")))
print(bin(data[0])[2:])
data = ""
所以这是在就绪和在线状态时返回的内容:
b'\x16'
0b10110
10110
这是门打开“假定离线状态”时返回的内容:
b'\x1e'
0b11110
11110
怎么翻译?我不需要8位回来吗?
爱普生电调手册节选:
每个状态由 1 个字节组成,值为 0xx1xx10b。实时状态可以通过比特 0、1、4 和 7 与其他传输数据区分开来,除了块数据中的数据(Header – NUL)。
位二进制状态|十六进制|十进制
====+=============================================== =+===+======
0 | 0 | 固定 |00 |0 |
----+---+-------------------------- -+----+-----+
1 | 1 | 固定 |02 |2 |
----+---+-------------------------- -+----+-----+
2 | 0 | 抽屉踢出连接器插针 3 为低电平 |00 |0 |
| 1 | 抽屉踢出连接器插针 3 为高电平 |04 |4 |
----+---+-------------------------- -+----+-----|
3 | 0 | 在线 |00 |0 |
| 1 | 离线 |08 |8 |
----+---+-------------------------- -+----+-----|
4 | 1 | 固定 |10 |16 |
----+---+-------------------------- -+----+-----|
5 | 0 | 不等待联机恢复 |00 |0 |
| 1 | 等待在线恢复 |20 |32 |
----+---+-------------------------- -+----+-----|
6 | 0 | 未按下进纸按钮 |00 |0 |
| 1 | 正在按下进纸按钮 |04 |64 |
----+---+-------------------------- -+----+-----|
7 | 0 | 固定 |00 |0 |
-------------------------------------------------- ------------