仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效
Posted
技术标签:
【中文标题】仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效【英文标题】:Reading from serial port with pyserial only works if terminal app is open in background 【发布时间】:2015-11-26 21:23:33 【问题描述】:我正在使用 pyserial 通过基于 FTDI 的 usb-to-rs232 适配器(使用 Mac OS X 内置驱动程序)与我的万用表 (Keithley2000) 进行通信。
在开始使用 Pyserial 之前,我通过使用终端应用程序 (Serial.app) 与万用表通信来验证硬件和驱动程序是否正常工作。 这很好用。
但是如果我用下面的简单程序尝试同样的事情,它就行不通了。 写作工作正常(例如我可以重置仪器),但我无法读回任何内容。
import serial
import io
port = serial.Serial("/dev/cu.usbserial-FT8VXG35", 9600, timeout=1)
port.write("*idn?\r")
print(port.readline())
现在奇怪的部分来了。如果我让 Serial.app 在书房后台打开,该程序实际上可以工作。
有人知道这种行为的原因吗?
这是我在 Serial.app 中的设置
【问题讨论】:
RS232 具有所谓的流控制线(RTS/CTS、DSR/DTR,还有其他一些,取决于您的 USBRS232 设备实现的内容)以及 rx/tx 数据线。一些外围设备会注意这些,并在传输之前需要它们在特定级别。也许在后台打开 serial.app 会将这些行设置为万用表可接受的值?没看过,python串口模块让你控制流控线吗? 您是否尝试过python串行终端应用程序,如果可行,您可以在端口上进行相同的设置吗? 两个很好的建议。我尝试了 minterm.py (它是 pyserial 的一部分),起初它也不起作用,所以我玩弄了 RTS 和 DTR。强制 RTS 降低似乎可以解决问题。在上面的代码中添加port.setRTS(False)
,它就可以工作了。
:-) 希望你能接受我的回答。
【参考方案1】:
某些外围设备需要将流控制线(RTC/CTS、DSR/DTR)设置为特定级别 - 也许让 serial.app 运行后台以您的万用表需要的方式设置这些线?
【讨论】:
以上是关于仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效的主要内容,如果未能解决你的问题,请参考以下文章