Python: Как определить имя устройства / идентификатор на последовательном COM - PullRequest
5 голосов
/ 13 октября 2011

Я хотел бы получить некоторые указания о том, как сделать это в Python:

  • Определите порт, названный определенным именем в последовательном порту (\ Device \ VCP0 и \ Device \ VCP1, которые они получают, просматривая в окне regedit)

  • И получите идентификатор подключенного устройства

Я уже могу определить доступный COM с помощью этого кода pySerial, который сканирует активный последовательный порт COM

import serial

def scan():
    """scan for available ports. return a list of tuples (num, name)"""
    available = []
    for i in range(256):
        try:
            s = serial.Serial(i)
            available.append( (i, s.portstr))
            s.close()   # explicit close 'cause of delayed GC in java
        except serial.SerialException:
            pass
    return available

if __name__=='__main__':
    print "Found ports:"
    for n,s in scan():
        print "(%d) %s" % (n,s)

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Я не уверен, какую операционную систему вы используете, но это в Win7-x64

import win32com.client
wmi = win32com.client.GetObject("winmgmts:")
for serial in wmi.InstancesOf("Win32_SerialPort"):
       print (serial.Name, serial.Description)

Используя эту информацию, вы можете проанализировать ее и получить номера COM. Вы можете получить другие атрибуты экземпляров Serial здесь: http://msdn.microsoft.com/en-us/library/aa394413(v=vs.85).aspx

1 голос
/ 13 апреля 2018

Если вы используете последовательный адаптер USB-TTY, уникальная символическая ссылка на файл драйвера устройства появится в / dev / serial / by-id. Папка появится только в том случае, если подключено последовательное устройство. Отображаемое имя файла создается из информации о продукте в микросхеме интерфейса USB на устройстве и будет уникальным для этого устройства. Например, программируемый источник питания Korad KD3005P будет отображаться как usb-Nuvoton_USB_Virtual_COM_A92014090305-if00. Символическая ссылка преобразуется в '/../../ttyACM0'. Тогда требуемый файл диска устройства - '/dev/ttyACM0' .

1 голос
/ 11 февраля 2016

Два ответа

1) Поскольку это зависит от доступного оборудования, вполне возможно, что тестовый код работал в среде, на которой он был написан, но не работает в вашей среде - может быть довольноскорее всего, если вы работаете в Windows, и это было написано в Linux.Код использует порт 0 - не знаю, как это сопоставляется с COM1 и т. Д.

2) В Windows COM-порты имели имена DOS, такие как COM1, COM2 - т.е. строка, а не int (они не являютсяне нравится номера портов TCP / IP).Совсем недавно в Windows появился формат \. \ COMnotanumber, который позволяет использовать более общее имя, я видел, как они используются конвертером USB в последовательный порт.После быстрого просмотра исходного кода pyserial SerialBase в serialutil.py, это немного странный IMO, потому что AFAICT self.name устанавливается только тогда, когда вы используете явную настройку порта, вызывая self.port (portname).Возможно, вы захотите попробовать инициализировать экземпляр последовательного порта с помощью serport = Serial (0), а затем явно вызвать serport.port ('COM1') (или любое другое имя вашего порта вместо COM1).

Просто исправил код,работает нормально ...:)

import serial

def scan():
    available = []
    for i in range(256):
        try:
            s = serial.Serial('COM'+str(i))
            available.append( (s.portstr))
            s.close()   # explicit close 'cause of delayed GC in java
        except serial.SerialException:
            pass

    for s in available:
        print "%s" % (s)


if __name__=='__main__':
    print "Found ports:"
    scan()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...