簡體   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