编辑:发现问题:我尝试引用一个变量,但混淆了它的名字,所以我宣布了一个新的变量。结果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'
答案 0 :(得分:0)
没有看到代码的上下文,这只是猜测。
串行端口在垃圾回收并运行__del__
时将关闭。 Uner CPython,如果你的ser0
引用计数在运行代码块之后降到零,但是ser1
没有这样做,它会在另一个端口打开时给出一个端口关闭的外观。 / p>
但发布更多代码!
答案 1 :(得分:0)
声明打开com端口时引用的变量与while条件中检查的变量不匹配。糟糕。
答案 2 :(得分:0)
在您的代码中,您测试comm_port0_open
和comm_port1_open
,但请使用comm0_port_open = True
和comm1_port_open
进行设置。不同的名字!
另一点:不要使用裸'除',它可以隐藏各种错误。