为什么python的serial.read、serial.read_until在4个字节后返回垃圾?

尼古拉斯·霍比

我正在使用Serial.write向工作中的设备发送命令(工作正常)。

在我成功地将数据发送到外部设备后,我收到了一个8-byte我试图在 python 上读取响应。我知道 8 字节应该是什么样子,因为我使用的是oscilloscopeinserial protocol moderealTerminal.

我的 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)

我知道我应该阅读:

00 00 00 F8 0A 14 16 0D (8 字节) 以十六进制表示

但这是输出:

b'\x00\x00\x00\xf8\n\x04\x07\r'

如果我再次运行程序。输出: b'\x00\x00\x00\xf8\n\x94\x96\r'

每次程序运行时,最后 4 个字节(应该是什么)我都会得到不同的垃圾。

前 4 个字节是正确的(x00\x00\x00\xf8)。其余的是与我的范围或终端数据不匹配的垃圾。

范围内的 8 字节十六进制数据: 作用域上的 8 个字节的十六进制数据

终端上的 8 个字节的十六进制数据: 终端上的 8 个字节的十六进制数据

我曾尝试在线搜索我的问题,但我需要一些指导。

马科斯 G。

我认为您可能需要查看设备的协议。

在你这样做之前,你应该注意你接收的帧的第二个块毕竟可能不是垃圾。

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) 会改变以代表一些有意义的东西,比如消息号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么InputStream#read()返回一个int而不是一个字节?

为什么FileInputStream中的read()返回一个整数?

在Go中使用conn.Read()读取前几个字节后,如何继续读取其余字节?

为什么read()输出一个字节而不是一个字符串?

无法通过Serial.read读取两个字节-Arduino

您可以为Asio的read_until设置字节限制吗?

提高套接字read_until的结构

如何解释read_until的签名以及Tokio中的AsyncRead + BufRead是什么?

Arduino和Python(3.x)之间的Serial.read()和Struct.pack /串行通信问题

使用Pyserial,为什么在实例化Serial类和用于写入数据的Serial对象之间需要延迟?

Python和UIO设备:为什么mmap.read()和os.read()会失败?

为什么我的serial.write发送数据两次

如何serial.read_until到特定的字节值?

Arduino代码奇怪的返回与Serial.read()

telnetlib错误,带有read_until

为什么FileInputReader.read()一次只能读取5个字节(Java)?

文件中的Python 3 read()不适用于1个字节的文件

来自xbee if语句的Arduino Serial.read()

为什么udev规则在添加ATTRS {serial}后停止工作?

为什么在arduino中使用Serial.print函数将数据转换为ASCII?

Serial.read() 跳过串行输入

将 Serial.read() 转换为可用的整数

为什么 PPP over Serial 不响应 ping 请求?

从其他函数调用 serial.read

Java Serial read \u0002 如何删除?

Serial.parseInt() 和 Serial.read() 之间的实际区别?

Xbee Serial.read 未清除缓冲区

为什么 Python Pandas 的 Read_HTML 不起作用?

为什么 Python read() 函数不起作用?