Python: файл не найден (pySerial) - PullRequest
1 голос
/ 22 июня 2019

Возникла небольшая проблема с открытием последовательного / консольного порта через pySerial. Моя программа предназначена для получения активного com-порта, открытия консольного соединения и отправки данных. Когда программа работает и я подключаю мой RS232 USB, я получаю сообщение об ошибке SerialException. (В частности, «Не удалось открыть порт: FileNotFoundError»)

В случае, если программа запущена, она продолжит печатать «Нет подключенного RS232», но при подключении RS232 USB программа обрывается и запускается с ошибкой SerialException.

Если я подключу RS232 USB перед запуском программы, а затем запустю ее, она считывает и выполняет обычную работу без проблем.

    ports = serial.tools.list_ports.comports(include_links=False)

    if not ports:
        print("No RS232 Connected")
    if ports:
        for port in ports:
            print('Found port ' + port.device)
            ser = serial.Serial(port.device)

            if ser.isOpen():
                ser.close()
        break
console = serial.Serial(port.device, baudrate=9600, parity="N", stopbits=1, bytesize=8, timeout=0.4)

Я довольно новичок в Python и программировании в целом, но я чувствую, что проблема может быть в том, что список 'портов' уже заполнен дважды из-за цикла while True. Затем, когда мы создадим консоль, открыв порт, мы ожидаем одну запись в списке, но их две. Поскольку у нас не может быть двух открытых консольных подключений к одному и тому же COM-порту, мы получаем сообщение об ошибке.

Если я распечатываю список портов, я получаю это.

"[<serial.tools.list_ports_common.ListPortInfo object at 0x000002B5D77F0D68>] [<serial.tools.list_ports_common.ListPortInfo object at 0x000002B5D77F0D68>]"

Любая помощь будет принята с благодарностью! Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо,

1 Ответ

2 голосов
/ 22 июня 2019

После дальнейших исследований я понял, что, когда USB-порт RS232 подключен к ПК, нам нужно дать ему немного времени, чтобы открыть поток.Похоже, он открывается, когда для него создается временный файл.Хотя он идентифицировал, что COM-порт был доступен почти сразу, он не был готов к тому времени, когда я пытался создать экземпляр Serial, поэтому я получал ошибку FileNotFound.

Простая функция снаполсекунды решил проблему!

...