python - Python中的半双工串行通信

标签 python linux serial-port usbserial

我有一个带有内置 USB/串口适配器的设备(显示为 Prolific PL2303)。设备文档提供了有关如何与其通信的完整详细信息,并提供了示例 Windows 应用程序。但是,我需要在 Linux 上使用它 - 最好是使用 Python,但我对此并不太重视。

设备文档声明设备以 9600、8N1 半双工运行。 Windows 应用程序运行良好 - 设备运行良好(所以我知道这不是设备问题)。但是,我无法在 Linux 上使用 Python 与它通信。我正在使用 pySerial,我已经尝试了一个类似的(全双工,也是 PL2303)设备,它工作正常。

我尝试了几种设置 xonxoff、rtscts 等的组合。我还尝试使用 setRTS(True) 进行 RTS 切换并检查 CTS 和 DSR 等 - 全部返回 False。我可以使用 pySerial 成功打开设备(我可以看到事件灯闪烁 - 简单但有效的测试)并且如果你在读/写期间拔掉它,pySerial 会提示。

似乎无论我设置什么标志/行或发送什么数据,总是得到相同的结果。

>>> s=serial.Serial()
>>> s.port('/dev/ttyUSB1')
>>> s.open()
>>> s
Serial<id=0x7fe94b533b50, open=True>(port='/dev/ttyUSB1', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=3, xonxoff=0, rtscts=0, dsrdtr=0)
>>> s.write('\2CMD2292\r')  
>>> s.inWaiting()
0
>>> s.setRTS(True)
>>> s.getCTS()
False
(several iterations of above with different flags).

忽略写入命令中的数据——那只是一个状态检查命令。不管那里发生了什么,设备都应该响应一个答案或一个错误。

我什至在设置各种 ctsrts 标志等之间关闭并重新打开设备,然后拔下/重新插入它以强制重置。如上所述,它继续使用 Windows 测试应用程序正常工作。我不能使用 Portmon 等来嗅探 Windows 端口流量,因为它是 64 位 Win7 安装,而且我目前没有时间构建 XP 机器。

有什么想法吗?

更新:我还在演示应用程序运行的同一个 Windows 机器上使用 Python 尝试了上述所有操作。它肯定会打开端口并进行通信,但无论写入什么内容,都不会返回任何信息。

更新 2:看起来它可能与设备驱动程序相关。一些额外的背景研究表明,一些 PL2303 芯片具有支持半双工的功能,但这不受 Linux 驱动程序支持。 Windows 演示应用程序附带专用设备驱动程序,该应用程序无法在使用默认 Windows 驱动程序的干净测试机上运行。这让我觉得虽然我可以通过 Python 成功连接到它,但我无法控制双工通信(例如,即使以 STX/ETX 方式),因此这可能是一个无望的情况。 感叹

更新 3:感谢下面的评论。但是,我找不到任何解决方法。我尝试了 USB 协议(protocol)分析器,并尝试拆卸驱动程序,但它变得相当耗时,所以最后我将设备拆开,经过一些修补后,我设法用合适的 PL2303 部件替换现有的 USB 串行适配器- 在设备方面,它只是一个基本的 2 线串行接口(interface),所以它不关心与它通信的是什么。我似乎无法结束这个问题,所以我将保持原样。

最佳答案

尝试

s.flush()

就在你的 s.write 电话之后

关于python - Python中的半双工串行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13567761/

相关文章:

python - Windows 到 Raspberry Pi 零串行问题

java - 动态规划-最大切割的杆切割问题和实际解决方案

python - 使用 python 和 postfix 发送符合 VERP 标准的电子邮件

linux - x86 程序集 : Before Making a System Call on Linux Should You Save All Registers?

c# - Dns.GetHostAddress(主机名)在 Ubuntu 16.04 中没有这样的设备或地址异常

java - Java中如何读写串口通信?

java - RxTx 库的许可限制是什么

python - 为python程序生成突变体

python - Django 与 MSSQL 使用 Pyodbc : Model Forms not being saved

javascript - 请求的资源 .htaccess 上不存在 Access-Control-Allow-Origin header