pySerial:一次打开多个端口

时间:2011-07-06 21:49:16

标签: python serial-port pyserial

编辑:发现问题:我尝试引用一个变量,但混淆了它的名字,所以我宣布了一个新的变量。结果pySerial不限于一次打开一个连续点。

我正在尝试使用以下代码一次打开两个串行端口

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

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

但似乎我打开第二个,第一个关闭。使用pySerial一次打开一个串口是否存在固有限制?

谢谢, T.G。

编辑:我应该发布这个以

开头
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'

3 个答案:

答案 0 :(得分:0)

没有看到代码的上下文,这只是猜测。

串行端口在垃圾回收并运行__del__时将关闭。 Uner CPython,如果你的ser0引用计数在运行代码块之后降到零,但是ser1没有这样做,它会在另一个端口打开时给出一个端口关闭的外观。 / p>

但发布更多代码!

答案 1 :(得分:0)

声明打开com端口时引用的变量与while条件中检查的变量不匹配。糟糕。

答案 2 :(得分:0)

在您的代码中,您测试comm_port0_opencomm_port1_open,但请使用comm0_port_open = Truecomm1_port_open进行设置。不同的名字!

另一点:不要使用裸'除',它可以隐藏各种错误。

相关问题