【问题标题】:Pyserial write() hangsPyserial write() 挂起
【发布时间】:2017-12-09 12:43:53
【问题描述】:

我需要使用串行端口与某些设备通信。我知道这个设备参数(波特率等)。我也知道这个设备会一直等到它收到一个换行符(我不知道 unix 或 windows 类型),然后以 ASCII 格式发回一些东西。

问题是当我想写任何东西时,脚本会挂起。没有错误发生,只是以后什么也没有发生。无法打印任何内容,甚至无法关闭端口。

我该如何解决这个问题?

它不适用于非常基本的脚本。当然,这不是一个完整的代码,只是一个展示不工作的例子。

遗憾的是,我没有找到任何有效的解释或答案。

我正在开发 Ubuntu 16.04

感谢您的帮助!

import serial

ser = serial.Serial(
port="/dev/NameOfDevice",
baudrate=115200,
bytesize=8,
parity='N',
stopbits=1,
timeout = 0)

ser.open()
print('Port was opened')

ser.write(b'\r\n') #this is a line where it stops working. Different inputs were tried, nothing works.
print('Does it works?')

【问题讨论】:

  • 在任何教程中找到任何示例并尝试使用它 - 如果它可以工作,那么尝试做类似的事情。我没有使用串行,但它可能只为读取而打开,而不是写入(类似于系统中的文件)
  • 我实际上尝试了一些示例代码。每次我尝试发送任何东西时都会出现问题。
  • 您使用什么设备?也许它还没有准备好接收数据,并且timeout=0程序一直在等待设备响应。
  • 问题是没有人确切知道它是什么设备,我无法“打开”它(我的意思是,物理检查)。我知道它肯定有效,因为它收集了一些科学数据,而且我之前就在使用它。现在我需要编写一个 python 脚本来发送它等待的命令,然后接收它发送的数据。收到“输入”后,它肯定会发送一些东西。
  • 顺便说一句:计算机使用三种类型的“回车”——Linux“\n”、Windows“\r\n”、旧MacOS“\r”。

标签: python ubuntu-16.04 python-3.6 pyserial


【解决方案1】:

edit:我以前是个傻瓜,但现在我确定我是对的。

我遇到了同样的问题并通过添加“write_timeout”解决了它:

ser = serial.Serial(
port="/dev/NameOfDevice",
baudrate=115200,
bytesize=8,
parity='N',
stopbits=1,
write_timeout = 1,
timeout = 0)

请注意,这将引发超时异常。在我的情况下,这是预期的行为,因为我正在检查是否可以在用户指定的端口上正确连接。

所以我怀疑您正在连接某些东西,但它没有确认您的写入,并且由于“写入”的默认行为是阻止直到确认,这就是您所看到的。

另见 write 函数的 api 描述: https://pyserial.readthedocs.io/en/latest/pyserial_api.html

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多