1

実際にデータを送信する外部デバイスを接続する前に、シリアル接続をテストしようとしています。pySerial の「loop://」デバイスを使用しようとしていますが、データが正しく受信されません。私は非常におもちゃのプログラムから始めました。それがどのように/うまくいくかを理解していることを確認してください。明らかに私はしません。:)

ここに私のデータ「ソース」があります

def serialDataPump():
    ser = serial.serial_for_url('loop://', timeout=1)
    testCtr = 0;
    while not bbq.closing and testCtr<10:
        ser.write(bytes("Test\n", encoding='ascii'))
        time.sleep(1)
        testCtr += 1

ここに私のデータ「シンク」があります:

def serialDataTestRcv():
    ser = serial.serial_for_url('loop://', timeout=1)
    while not bbq.closing:
        line = ser.readline()
        sys.stdout.write('received' + str(line))

そして、ここに私のテスト関数があります - 私は2つのスレッドを使用しています:

def testSerMain():
    thread1 = Thread(target = serialDataPump)
    thread2 = Thread(target = serialDataTestRcv)
    thread1.start()
    thread2.start()
    thread1.join()
    bbq.closing = True
    time.sleep(2)
    exit()

そして最後に、これが出力です - はブロックを解除し、終了する前に正確に 11 回ループするため、最小限の EOL を受信して​​いreadline()ます。これは、ポンプと受信の両方がループして適切に終了していることを示しています。ただし、ご覧のとおり、空のデータと EOL のみを受け取ります。

>>> 
receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''receivedb''
>>> 

勝つ 7、x64m py3.3

ちなみに、私は com0com について知っています - 私が使っているマシンでは実行できません。

4

1 に答える 1

1

ser = serial.serial_for_url('loop://', timeout=1)私は問題を発見しました - receive と Xmt の両方に作成したのと同じインスタンスを使用する必要があります。

于 2014-06-26T21:57:05.307 に答える