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
在声明打开串口时用到的变量和在while条件中检查的变量不一致。哎呀。
0
在没有看到代码的具体情况之前,这只是个猜测。
串口在被垃圾回收时会关闭,也就是当__del__
这个方法被执行的时候。在CPython中,如果你的ser0
的引用计数在那段代码执行后降到零,但ser1
的引用计数没有降到零,那么就会看起来像是一个串口关闭了,而另一个串口打开了。
不过,记得多发一些代码过来!
0
在你的代码里,你测试了 comm_port0_open
和 comm_port1_open
,但是你设置的是 comm0_port_open = True
和 comm1_port_open
。名字不一样哦!
还有一点:不要使用光秃秃的 'except',这样会把各种错误都隐藏起来。