Python: случайное отключение PySerial от устройства

У меня есть процесс, который запускает сбор данных с помощью PySerial. Это работает хорошо сейчас, но есть странная вещь, которую я должен был сделать, чтобы заставить его работать непрерывно, и я не уверен, что это нормально, поэтому я задаю этот вопрос.

Что происходит: похоже, что соединение падает время от времени! Примерно раз в 30-60 минут, с большими барами ошибок (может идти в течение нескольких часов и быть в порядке, но иногда случается часто).

Мой вопрос: это стандарт?

Мое временное решение : я написал простую функцию «reopen», которая выглядит так:

def ReopenDevice(devObject):
    try:
        devObject.close()
        devObject.open()
    except Exception as e:
        print("Error while trying to connect to device " + devObject.port + ". The error says: " + str(e))
        time.sleep(2)

И то, что я делаю, — это то, что если вытягивание данных не удается в течение 2 минут, я снова открываю устройство с этой функцией, и оно продолжает работать хорошо без проблем.

Моя модель программы: это программа GUI, где пользователь нажимает что-то вроде «Start», и эта кнопка делает некоторые приготовления и запускает функцию, multiprocessing.Process()которая начинается с:

devObj = serial.Serial()
#... other params
devObj.open()

и эта функция затем выполняет цикл while, который сохраняет данные опроса с чем-то вроде:

bytesToRead = devObj.inWaiting()
if bytesToRead != 0:
    buffer = decodeString(devObj.read(bytesToRead))
    #process buffer and push it to a list...

То, как я знаю, что проблема произошла, это то, что devObj.inWaiting()продолжает возвращать ноль… независимо от того, сколько данных есть на устройстве!

Является ли это поведение ожидаемым и всегда должно рассматриваться независимо от того, происходит это или нет?

1 ответ

  1. Проблема сократилась много после того, как не звонит inWaiting()очень часто. В любом случае, я сохранил часть reconnect, чтобы гарантировать, что моя программа никогда не терпит неудачу. Спасибо за «Kobi K» за предположение о возможной причине проблемы.