我是编程新手,这是我在这里的第一篇文章,如果我使用的某些术语不正确,请原谅我。
我正在使用Serial.write将命令发送到工作中的设备(工作正常)。
成功将数据发送到外部设备后,我收到一个8字节的响应,我正在[[尝试在python上读取。我知道8字节应该是什么样子,因为我使用的是串行协议模式的示波器,也使用realTerminal。
我的python程序读取的前四个字节是正确的,但是随后我得到了垃圾。我使用什么ser.read命令都没关系。这是代码和输出:import serial
import time
ser = serial.Serial(port='COM10',baudrate=38400,timeout=1)
wakeupSAA232 = b'\x0D'
ser.write(wakeupSAA232)
time.sleep(0.5)
sendData = bytearray([170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0])
ser.write(sendData)
#s = ser.read_until('\r')
s = ser.read(8)
print(s)
b'\ x00 \ x00 \ x00 \ xf8 \ n \ x04 \ x07 \ r'
我知道我应该读取:00 00 00 F8 0A 14 16 0D(8字节),以十六进制表示但是这里是
OUTPUT:
如果再次运行该程序。.
输出:
b'\ x00 \ x00 \ x00 \ xf8 \ n \ x94 \ x96 \ r'每次运行程序时,最后4个字节(应该是什么)我都会得到不同的垃圾。8 bytes of Hex data on terminal
我试图在线搜索我的问题,但是我需要一些指导。预先感谢您的帮助。
在执行此操作之前,您应该注意,接收到的帧的第二块可能根本不是垃圾。
Python使用Unicode,但是除非指示以十六进制显示它们,否则它将用ASCII等价的字符替换它们。因此,如果您想将它们作为十六进制显示,请执行以下操作:
b'\x00\x00\x00\xf8\n\x94\x96\r'.hex()
它将给您:
'000000f80a04070d'
和:
b'\x00\x00\x00\xf8\n\x94\x96\r'.hex()
给予:
'000000f80a94960d'
与您的示波器和RealTerm相比,仍然存在一些差异,但是如果您查看该协议,现在可能更有意义。也许帧上的某些字节(0x14、0x16)更改以表示有意义的内容,例如消息号。