Pyserial write()挂起

时间:2017-12-09 12:43:53

标签: python ubuntu-16.04 python-3.6 pyserial

我需要使用串口与某些设备通信。我知道这个设备参数(boudrate等)。我也知道这个设备等到它接收到一个新的行字符(我不知道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?')

1 个答案:

答案 0 :(得分:1)

编辑:我以前是个傻瓜,但是现在我确定我是正确的。

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

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

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

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

另请参阅有关写函数的api描述: https://pyserial.readthedocs.io/en/latest/pyserial_api.html