gpt4 book ai didi

Python:serial.readline() - 如何定义从\n到\n\n的EOL

转载 作者:行者123 更新时间:2023-12-01 04:55:02 28 4
gpt4 key购买 nike

我真的很抱歉一天内又问了一个问题。

新问题详细信息:我将 HOKUYO 的激光测距仪连接到我的 RaspBerryPi 上。

连接等工作找到,感谢serial.py

我唯一的问题是,当我发送命令时,我收到回显和时间戳 +\n 返回。

缓冲区中的数据如下所示:

MD000007200001\n
2Dh1\n
\n\n

此后,传感器传输测量结果,锁定如下

MD000007200001\n
2Dh1\n
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C\n
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C\n
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C\n
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C\n
.....
...
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C\n
\n\n

为了读取这些数据,目前我使用readall()。还尝试了 readlines()。在这两种情况下我都遇到了问题,必须等到超时,超时设置为 1。对于实时应用程序来说,这需要花费太多时间,而且该传感器每 120 毫秒就可以测量一次。如果我将超时设置为 0,我经常会丢失一些数据并且所有内容都会崩溃,因为我需要整个数据集进行计算。

我还读到,有一个选项可以设置 readline 的 EOL,例如 readline(eof='\n\n'),但对于 Python 3.x,这不起作用。

似乎有第二个选项,编写我自己的 readline 函数。

但我绝对是Python的初学者。所以我不知道应该从哪里开始。

可能还有一些额外的选项。

最诚挚的问候,A。

最佳答案

调整答案 pySerial 2.6: specify end-of-line in readline() (它也提供了替代方案),可以编写一个函数,例如:

def readline(a_serial, eol=b'\n\n'):
leneol = len(eol)
line = bytearray()
while True:
c = a_serial.read(1)
if c:
line += c
if line[-leneol:] == eol:
break
else:
break
return bytes(line)
当然,

a_serial 必须是使用正确参数构建的 serial.Serial 实例 - 例如,的默认timeout如果没有提供所需的 eol 标记,>None 可能会导致无限期阻塞。如果我正确地阅读了问题,这对于OP来说似乎不是问题,但是,在一般情况下,这是需要注意的事情。

关于Python:serial.readline() - 如何定义从\n到\n\n的EOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27625988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com