【问题标题】:Reading serial output from Pyserial doesnt work reliably从 Pyserial 读取串行输出不能可靠地工作
【发布时间】: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设备发送了一些东西吗?
  • 是的,它能够写入、读取等。它与串行输出和输入的工作方式完全一样。我也知道,当我让我的程序运行该工具时,该工具将无法工作。

标签: macos python-3.x serial-port pyserial pexpect


【解决方案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 次,到目前为止我还没有失望过。我现在正在多线程中对其进行测试,希望它也可以工作。

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2021-10-28
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多