Найти - Пользователи
Полная версия: pyserial, python 2.7, проверку подключения к ком порту
Начало » Python для новичков » pyserial, python 2.7, проверку подключения к ком порту
1
beivev
Помогите реализовать проверку подключения к ком порту.
У меня две программы обе должны писать данные в один и тот же порт, одна часто, другая редко. Если одна подключилась к ком порту и передает данные, вторая ведь не сможет подключиться к ком порту в этот момент?
Если это так, то как мне организовать эту проверку, на подключение, если несколько раз не успешно, то вывод ошибки и все, время между попытками 1 секунда.
JOHN_16
beivev
Тут вот какое дело. Поведение зависит от ОС. Я сейчас проверил для пары устройств, одно это ADC, второй GPS приемник.
В Винде (XP) нельзя одновременно двум клиентам подключиться к одному COM порту - кто первый, того и порт. При неудаче подключения возбуждается исключение serial.serialutil.SerialException. Вот его можно отлавливать в вашем коде.
В Линуксе можно подключиться, но например считать второму клиенту пока первые осуществляет циклическое чтение не удается. Почему то возбуждается то OSError, то SerialException. Однако операция записи проходит без ошибок. Не могу достоверно сказать работает ли оно как надо. Возможно в линуксе есть разделение по направлению потоков ввода вывода, точно сказать не могу.
Поэтому если вы пишите свой код для Windows платформ только, вам проще, делаете что то типа:
for attempt in xrange(number_of_attempts):
    try:
        ser = serial.Serial(port)
    except  serial.serialutil.SerialException:
        time.sleep(1)
 else:
    raise Exception('Can not open COM port after {} attempts'.format(number_of_attempts)
PooH
А не проще сделать одну программу, работающую с com-портом, и две других, подкидывающих ей данные, хоть через сокет, хоть файликами?
beivev
Спасибо. Думал есть что-то отработанное на Линуксе. Попробую сам еще по шерудить с этими ошибками. Если ничего не выйдет, придется уйти к RabbitMQ, с его очередями. Будет самым простым вариантом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB