与PySerial的双向串口通信

时间:2012-10-05 07:35:54

标签: python serial-port 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()

两种代码有时都能正常工作。有时执行输出garbagge。我不知道是什么问题。使用PySerial从串口发送和写入时我做错了什么?

在串口中读写是否更好实现线程程序监听和读取线程,一个用于监听,另一个用于写入?

2 个答案:

答案 0 :(得分:0)

我认为你正在设置所有冲动的竞争条件。例如,如果在调用read之前另一方开始响应,则在读取之前刷新输入将终止传入数据。你真的不需要围绕你的读写进行所有这些冲刷。

答案 1 :(得分:0)

您似乎正在设置数据包冲突,这可能是输出中“垃圾”的来源。

你需要设置某种时序协议,或者通过同步两台计算机上的计数,或者通过建立突发通信,其中每台计算机都会发出消息然后嗅探数据包。