1

編集:問題が見つかりました:変数を参照しようとしましたが、その名前を混同したため、代わりに新しい変数を宣言しました。pySerial は一度に 1 つのシリアル ポイントに限定されないことがわかりました。

次のコードを使用して、一度に 2 つのシリアル ポートを開こうとしています。

    ser0 = serial.Serial(
                         port = port_list[0],
                         baudrate = 115200,
                         timeout = 0.1
                         )

    ser1 = serial.Serial(
                         port = port_list[1],
                         baudrate = 115200,
                         timeout = 0.1
                         )

しかし、私は2番目を開き、最初のものを閉じるようです。pySerialを使用して一度に1つのシリアルポートを開くという固有の制限はありますか?

ありがとう、TG

編集:そもそもこれを投稿するべきだった

while not (comm_port0_open and comm_port1_open):
    print 'COM ports available:'
    port_list = []
    i = 0
    for port in __EnumSerialPortsWin32():
        port_list.append(port[0])
        print '%i:' % i, port[0]
        i+=1
    print 'Connect to which port? (0, 1, 2, ...)'
    comm_port_str = sys.stdin.readline()
    try:
        if len(comm_port_str)>0:
            if comm_port0_open:
                ser1 = serial.Serial(
                                    port = port_list[int(comm_port_str)],
                                    baudrate = 115200,
                                    timeout = 0.1
                                    )
                comm1_port_open = True
                print '%s opened' % port_list[int(comm_port_str)]
            else:
                ser0 = serial.Serial(
                                    port = port_list[int(comm_port_str)],
                                    baudrate = 115200,
                                    timeout = 0.1
                                    )
                comm0_port_open = True
                print '%s opened' % port_list[int(comm_port_str)]                   
        else:
            print 'Empty input'
    except:
        print 'Failed to open comm port, try again'
4

3 に答える 3

0

COM ポートが開いていることを宣言するときに参照される変数が、while 条件でチェックされる変数と一致しません。おっとっと。

于 2011-07-07T16:29:40.810 に答える
0

コードのコンテキストを確認しないと、これは推測に過ぎません。

シリアル ポートは、ガベージ コレクションと実行時に閉じられ__del__ます。CPython では、ser0そのコード ブロックが実行された後に参照カウントがゼロになったが、何らかの形でser1そうでない場合、一方のポートが開いたときにもう一方のポートが閉じているように見えます。

しかし、もっとコードを投稿してください!

于 2011-07-07T01:25:37.603 に答える
0

コードでは と をテストしますcomm_port0_openが、 とでcomm_port1_open設定します。名前が違う!comm0_port_open = Truecomm1_port_open

もう 1 つのポイント: そのままの 'except' を使用しないでください。あらゆる種類のエラーを隠すことができます。

于 2011-07-07T16:30:40.670 に答える