繁体   English   中英

Python中的半双工串行通信

[英]Half-duplex serial communications in Python

我有一个内置USB /串行适配器的设备(显示为Prolific PL2303)。 设备文档提供了有关如何与之通信的完整详细信息,并提供了一个示例Windows应用程序。 但是,我需要在Linux上使用它 - 理想情况下使用Python,但我对此并不太珍贵。

设备docs说明设备运行在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).

忽略write命令中的数据 - 这只是一个状态检查命令。 无论发生什么,设备应该回答一个答案或错误。

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

有什么想法吗?

更新:我也在演示应用程序所在的同一个Windows框中使用Python尝试了以上所有内容。 它肯定会打开端口并进行通信,但无论写入什么,都不会再回复任何信息。

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

更新3:感谢下面的评论。 但是,我找不到任何方法。 我尝试了一个USB协议分析仪,我尝试拆卸驱动程序,但它只是相当耗时,所以最后我把设备分开了,经过一些修补后我设法用适当的PL2303部件替换现有的usb-serial适配器 - 在设备方面,它只是一个基本的2线串行接口,因此它并不关心与之交谈的内容。 我似乎无法关闭这个问题所以我会保持原样。

尝试

s.flush()

在你的s.write电话之后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM