从 Pyserial 读取串行输出不能可靠地工作

Posted

技术标签:

【中文标题】从 Pyserial 读取串行输出不能可靠地工作【英文标题】:Reading serial output from Pyserial doesnt work reliably 【发布时间】:2016-09-27 01:30:55 【问题描述】:

我在 MacOS 上使用代码攻击连接到设备,并且在 100 次中,此代码只会连接一到两次,并且在其余时间没有响应(因为没有超时)。

ser = serial.Serial(port="/dev/xyz",timeout = None, baudrate=115200, parity = serial.PARITY_NONE, bytesize = serial.EIGHTBITS, stopbits = serial.STOPBITS_ONE)

def exitSer(ser):
    print("Closing")
    ser.close()

atexit.register(exitSer, ser)

if ser.is_open:
    time.sleep(2)
    while(1):
        print(ser.readline().decode("utf-8"))

能否请您告诉我如何使用 fcntl 等程序来查找该端口是否完全免费可用,以及如何在强制释放端口后将 tty 端口的标志设置为释放。

一旦这个工作正常,我必须运行这个多线程,其中每个线程运行不同的设备,期望成行输出。任何建议以防万一。

【问题讨论】:

您引用的另一个应用程序具有不同的波特率并使用 1 个停止位。你能贴出你用来从串口读取数据的代码吗? 刚刚更新了问题。感谢您的回复。 我尽量避免在串行设备上使用 readline(),因为它会在您收到换行符时首先写入一些内容。因此,如果收到其他任何内容,您将看不到它。相反,您可以使用类似: sys.stdout.write(ser.read(1)) sys.stdout.flush() 你知道你尝试过的其他工具是否向ios设备发送了一些东西吗? 是的,它能够写入、读取等。它与串行输出和输入的工作方式完全一样。我也知道,当我让我的程序运行该工具时,该工具将无法工作。 【参考方案1】:
def startSerial(tty_id):
    ser = serial.Serial(port = tty_id, timeout = None)
    ser.close()
    ser.open()
    if ser.isOpen():
        print(ser.portstr, ":connection successful.")
        return ser
    else:
        return False

在 .open() 修复它之前调用 ser.close()。我测试了大约 200 次,到目前为止我还没有失望过。我现在正在多线程中对其进行测试,希望它也可以工作。

谢谢大家。

【讨论】:

以上是关于从 Pyserial 读取串行输出不能可靠地工作的主要内容,如果未能解决你的问题,请参考以下文章

仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效

Pyserial 不能很好地使用虚拟端口

使用 pyserial 将数据发送到串行 - 在 Razor 9DOF IMU 上工作

使用pyserial测试usb到串口到usb没有输出

如何为pyserial读取运行线程

使用 pyserial 将串行消息导出到文本文件