2012-10-05 80 views
1

我正試圖開發一個應用程序通過串行端口與pyserial通信兩臺計算機。與PySerial的雙向串行端口通信

其基本思想是在兩個方向上發送幾個命令。

Computer A ---- INI ----> Computer B 
Computer A <--- OKINI --- Computer B 
Computer A ---- OK -----> Computer B 

的計算機A上的代碼是:

s = serial.Serial(port='/dev/ttyUSB0', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0) 
s.flushOutput() 
s.write("*INI,COMPUTER_A*") 
s.flushInput() 
data = s.read(18) 
if data: 
    print data 
    s.flushOutput() 
    s.write("*OK,COMPUTER_A*") 
s.close() 

爲計算機B的代碼是:

s = serial.Serial(port='/dev/ttyUSB0', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0) 
s.flushInput() 
data = s.read(16) 
if data: 
    print data 
    s.flushOutput() 
    s.write("*OKINI,COMPUTER_B*") 
    s.flushInput() 
    data2 = s.read(15) 
    if data2: 
     print data2 
s.close() 

兩個代碼正常工作的時候。有時候執行輸出會變成垃圾。我不知道是什麼問題。我用PySerial從串行端口發送和寫入錯了什麼?

在串口讀寫是否更好實現線程監聽和線程讀取,一個是listen還是另一個是寫?

回答

0

我想你正在設置所有沖洗的競賽條件。例如,如果在調用read之前另一方開始響應,則在讀取之前刷新輸入將會中止傳入的數據。你實際上並不需要你讀取和寫入的所有這些沖刷。

+0

但是,爲什麼當我從行中讀取時,輸出中有很多garbagge? – dseira

0

它似乎是你設置包衝突,這可能是你的輸出中的'垃圾'的來源。

您需要設置某種時序協議,或者通過同步兩臺計算機上的計數,或者建立突發通信,其中每臺計算機將其消息嗅出,然後嗅探數據包。

+0

完成了。問題是要閱讀的字符數量。感謝這兩個。 – dseira

+3

@snake,如果你接受了最有用的答案,或者坐了5分鐘來描述「閱讀的字符數」是什麼問題以及你是怎樣的修復。 – Vorac