gpt4 book ai didi

python - 为什么serial read(1)在收到一个字符后继续等待直到超时?

转载 作者:行者123 更新时间:2023-12-01 07:52:43 28 4
gpt4 key购买 nike

以下代码通过串行接口(interface)与硬件通信。通信成功(硬件启动并报告正确位置),但读取命令始终大约需要 s.timeout 秒,几乎与 s.timeout 设置无关(s.timeout 必须至少约为 3 秒)。

我想知道如何更改此代码,以便读取命令在仅收到一个字符后立即返回。

import serial # installed as pyserial
import time, io

try:
# Best guesses for an undocumented serial device
s = serial.Serial()
s.port = 'COM1'
s.baudrate = 9600
s.timeout = 5
s.open()

# Device begins 18s init routine when serial communication established
sio = io.TextIOWrapper(io.BufferedRWPair(s,s))
time.sleep(18)
start = time.time()
dat = sio.read(1)
print('Initial position is %s (%0.3fs reply)' % (dat, time.time()-start))

# Move device from initial position to Position 2
sio.write('2')
sio.flush()
start = time.time()
dat = sio.read(1)
print('New position is %s (%0.3fs reply)' % (dat, time.time()-start))

finally:
del sio
s.close()

输出:

Initial position is 0 (5.008s reply)
Moved to position 2 (5.003s reply)

最佳答案

这段代码中有两件事对我来说看起来很奇怪。

  1. 串行端口被缓冲区包裹着,但如果您想逐个字符地控制硬件,这可能不是您想要的。
  2. BufferedRWPair 应用于在逻辑上将两个单工流组合成一个双工流。但是,Serial 类已经是双工的。

我会尝试完全删除 TextIOWrapperBufferedRWPair,并直接调用 Serial 类的读写方法。

关于python - 为什么serial read(1)在收到一个字符后继续等待直到超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56120802/

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