2

pyserialを使用してシリアルポートを介して2台のコンピューターと通信するアプリケーションを開発しようとしています。

基本的な考え方は、複数のコマンドを双方向に送信することです。

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 を使用したシリアル ポートからの送信と書き込みで何が間違っていますか?

シリアルポートでの読み取りと書き込みには、スレッド化されたプログラムを実装して、スレッドをリッスンして読み取り、1 つはリッスン用、もう 1 つは書き込み用に実装する方が良いですか?

4

2 に答える 2

0

すべてのフラッシングで競合状態を設定していると思います。たとえば、呼び出しの前に反対側が応答を開始した場合、読み取りの直前に入力をフラッシュすると、着信データが強制終了されますread。読み取りと書き込みの周りにこれらすべてのフラッシュが本当に必要なわけではありません。

于 2012-10-05T17:23:32.633 に答える
0

おそらく出力の「ガベージ」の原因であるパケット衝突を設定しているようです。

両方のコンピューターでカウントを同期するか、バースト通信を確立して、ある種のタイミング プロトコルを設定する必要があります。バースト通信では、各コンピューターがメッセージを追い出し、パケットを盗聴します。

于 2012-10-18T21:57:30.397 に答える