Использование pySerial для подключения к не-COM-порту - PullRequest
3 голосов
/ 06 июля 2010

В Hyperterminal я могу подключиться к последовательному порту под названием «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, который отображает список последовательных портов, и единственными портами, которые он использовал, были COM1 и COM2, к которым я не могу подключиться.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 20 июля 2010

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

  1. Для перечисления используется фиксированный GUID_CLASS_COMPORT.Вместо этого он должен запросить GUID через SetupDiClassGuidsFromName, передав «Ports» в качестве описания класса, для которого он запрашивает имена.
  2. Код настаивает на запросе понятного имени порта.Но если единственная цель - открыть устройство (а не отображать его пользователю), оно должно получить прямой доступ к элементу DevicePath, который представляет собой странное, но в то же время совершенно правильное имя порта для передачи в pySerial.Дружеское имя может даже полностью отсутствовать.
0 голосов
/ 26 февраля 2014

в сторону

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

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

s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0")  # also remember to escape backslash
...