使用pySerial连接到非竞争对手

2024-09-25 10:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在超级终端中,我可以连接到一个名为“X64-CL_iPro_1_serial_0”的串行端口,在那里我可以向相机发送/接收ASCII文本。但是,当我尝试用pySerial连接到同一个端口时,它会抛出一个异常:

SerialException: could not open port X64-CL_iPro_1_Serial_0: [Error 2] The system cannot find the file specified.

我不明白为什么超级终端可以检测到端口并与之通信,但是Python却不能。我从pySerial网站下载了this script,它显示了一个串行端口列表,它只提供了COM1和COM2两个端口,这两个端口我都不能连接。在

我的代码非常简单,如下所示:

import serial
port = "X64-CL_iPro_1_Serial_0"
ser = serial.Serial(port)

我做错什么了吗?有办法解决这个问题吗?提前谢谢。在

编辑: 还应该注意的是,这个端口不会出现在设备管理器中,COM1或COM2也不会出现。在


Tags: 端口文本clportasciiserialnotcould
2条回答

一边

我不清楚这个问题是关于通过pyserial使用非串行端口,或者不是枚举中的COMX端口的串行端口。在

对于您的使用来说,这可能是一个有点过硬的代码,但是下面是首先,使用pyserial对象中的其他文件:

foo = serial.Serial()
peer = serial.Serial()
foo.fd, peer.fd = posix.openpty()
try: foo._isOpen = peer._isOpen = True  # depending on pyserial version
except: pass
foo._reconfigurePort()
peer.setTimeout(timeout=0.1)
peer._reconfigurePort()

关于,请记住COM9之外的端口使用奇怪的windows符号\\.\COM10,也许这就是超级终端为您做的。pyserial无法执行此操作,因此您可能需要像这样打开端口:

^{pr2}$

问题出在链接的枚举代码中。这在两个方面是错误的:

  1. 固定使用一个类来枚举它。相反,它应该通过SetupDiClassGuidsFromName请求GUID,传递“Ports”作为它请求名称的类的描述。在
  2. 代码坚持要求输入港口的友好名称。但是如果唯一的目标是打开设备(而不是向用户显示),那么它应该直接访问DevicePath元素,这是一个看起来很奇怪但完全有效的端口名,可以传递给pySerial。友好的名字甚至可能完全不见了。在

相关问题 更多 >