Использование pySerial для подключения к порту, отличному от COM

В Hyperterminal я могу подключиться к последовательному порту с именем «X64-CL_iProSerialException: could not open port X64-CL_iPro_1_Serial_0: [Error 2] The system cannot find the file specified.Serial_0», где я могу отправлять/получать текст ASCII на камеру. Однако, когда я пытаюсь подключиться к тому же порту с помощью pySerial, возникает исключение:

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

Я не понимаю, почему Hyperterminal может обнаружить порт и связаться с ним, а Python — нет. Я скачал этот скрипт с веб-сайта pySerial, который отображает список последовательных портов, и единственными найденными портами были COM1 и COM2, ни к одному из которых я не могу подключиться.

Мой код очень прост и выглядит так:

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

Я делаю что-то не так? Есть ли способ обойти это? Спасибо заранее.

Изменить: следует также отметить, что этот порт не отображается в диспетчере устройств, как и COM1 или COM2.


person Phil    schedule 06.07.2010    source источник
comment
Что это за ОС? (Добавлено: о, наверное, Windows, так как у вас есть COM1 и COM2, верно...)   -  person detly    schedule 08.07.2010


Ответы (2)


Проблема заключается в коде перечисления, который вы связали. Это неправильно в двух отношениях:

  1. Он использует фиксированный GUID_CLASS_COMPORT для перечисления. Вместо этого он должен запрашивать GUID через SetupDiClassGuidsFromName, передавая «Порты» в качестве описания класса, для которого он запрашивает имена.
  2. Код настаивает на запросе понятного имени порта. Но если единственная цель — открыть устройство (вместо отображения пользователю), оно должно напрямую обращаться к элементу DevicePath, который является странным, но совершенно допустимым именем порта для передачи в pySerial. Дружественное имя может даже полностью отсутствовать.
person Giovanni Bajo    schedule 20.07.2010

в сторону

Мне не ясно, вопрос касается использования непоследовательного порта через pyserial или последовательного порта, который не является портом COMX в перечислении.

Это может быть немного OT или слишком сложный код для вашего использования, но здесь идет сначала, используя какой-то другой файл в объекте 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, возможно, это то, что Hyperterminal делает для вас. pyserial этого не делает, поэтому, возможно, вам нужно открыть порт примерно так:

s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0")  # also remember to escape backslash
person Dima Tisnek    schedule 25.02.2014