我正在尝试开发一个应用程序,通过串口与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从串口发送和写入时我做错了什么?
在串口中读写是否更好实现线程程序监听和读取线程,一个用于监听,另一个用于写入?
答案 0 :(得分:0)
我认为你正在设置所有冲动的竞争条件。例如,如果在调用read
之前另一方开始响应,则在读取之前刷新输入将终止传入数据。你真的不需要围绕你的读写进行所有这些冲刷。
答案 1 :(得分:0)
您似乎正在设置数据包冲突,这可能是输出中“垃圾”的来源。
你需要设置某种时序协议,或者通过同步两台计算机上的计数,或者通过建立突发通信,其中每台计算机都会发出消息然后嗅探数据包。