2012-11-26 58 views
5

我有一個內置USB /串行適配器(顯示爲Prolific PL2303)的設備。設備文檔提供了有關如何與之通信的完整詳細信息,並提供了一個示例Windows應用程序。但是,我需要在Linux上使用它 - 理想情況下使用Python,但我對此不太瞭解。Python中的半雙工串行通信

設備文檔狀態設備運行在9600,8N1半雙工。 Windows應用程序工作正常 - 設備工作正常(所以我知道這不是一個設備問題)。但是,我無法在Linux上使用Python進行通信。我正在使用pySerial,並且我嘗試了一種類似的(全雙工,也是PL2303)設備,它工作正常。

我試過了設置xonxoff,rtscts等的幾種組合。我也嘗試過使用setRTS(真)切換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機器。

有什麼想法?

更新:我也嘗試了上述所有使用Python在演示應用程序工作在相同的Windows框上。它肯定會打開端口並進行通信,但無論寫入什麼內容,都不會返回任何信息。

更新2:它看起來可能與設備驅動程序有關。一些額外的背景研究表明,一些PL2303芯片具有支持半雙工的功能,但Linux驅動程序不支持這種功能。 Windows演示應用程序帶有專用設備驅動程序,該應用程序無法在使用默認Windows驅動程序的乾淨測試機器上運行。這使我認爲雖然我可以通過Python成功連接它,但我無法控制雙工通信(例如,即使是以STX/ETX方式),因此這可能是無望的情況。 感嘆

UPDATE3:感謝下面的評論。但是,我無法找到任何方法。我嘗試了一個USB協議分析儀,我試圖拆卸驅動程序,但它只是變得相當耗時,所以最後我把設備拆開了,經過一番修補之後,我設法用適當的PL2303部件替換現有的usb串行適配器 - 在設備方面,它只是一個基本的2線串行接口,所以它並不關心與之交談的內容。我似乎無法關閉這個問題,所以我會保持原樣。

+0

您是否嘗試過使用串口通信程序,小型機,比如交談的設備上的Linux機器?這應該允許您在深入Python實現之前驗證設備在Linux上的工作。 – sizzzzlerz

+0

是的 - 我已經嘗試使用minicom與它交談,但我沒有得到任何迴應 - 但是我找不到任何方式手動切換到minicom中的RTS,這就是爲什麼我嘗試了Python。我知道pySerial正在連接到設備併發送數據(請參閱上面的參考閃光燈:))。 –

+0

你從哪裏得到司機?它是你的發行版的一部分還是你手動創建的?你是根? – tMC

回答

1

嘗試

s.flush() 

剛過您的通話s.write