簡體   English   中英

與PySerial的雙向串口通訊

[英]Bidirectional serial port communication with 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從串行端口發送和寫入時,我在做什么錯?

在串行端口中進行讀取和寫入是否更好地實現了一個線程程序的監聽和線程讀取,一個線程用於監聽,另一個線程用於寫入?

我認為您正在通過所有沖洗設置比賽條件。 例如,如果在調用read之前另一端開始響應,則在read之前刷新輸入將殺死傳入的數據。 您確實不需要在讀取和寫入過程中進行所有這些刷新操作。

好像您要設置數據包沖突,這可能是輸出中“垃圾”的來源。

您需要通過在兩台計算機上同步計數或建立突發通信來建立某種定時協議,在這種通信中,每台計算機都會踢出其消息,然后嗅探數據包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM