1

编辑:发现问题:我尝试引用一个变量,但混淆了它的名称,所以我声明了一个新变量。事实证明 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 一次打开一个串行端口是否存在固有限制?

谢谢, 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

在您的代码中测试comm_port0_openand comm_port1_open,但使用comm0_port_open = Trueand设置它们comm1_port_open。不同的名字!

还有一点:不要用裸露的'except',它可以隐藏各种错误。

于 2011-07-07T16:30:40.670 回答
0

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

于 2011-07-07T16:29:40.810 回答
0

在没有看到代码上下文的情况下,这只是一个猜测。

当它们被垃圾收集并__del__运行时,串行端口将被关闭。Uner CPython,如果在ser0运行该代码块后您的引用计数降至零,但不知何故ser1没有,它会在另一个端口打开时出现一个端口关闭的外观。

但是发布更多代码!

于 2011-07-07T01:25:37.603 回答