Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2016 22:17:51

beivev
Зарегистрирован: 2016-01-11
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

pyserial, python 2.7, проверку подключения к ком порту

Помогите реализовать проверку подключения к ком порту.
У меня две программы обе должны писать данные в один и тот же порт, одна часто, другая редко. Если одна подключилась к ком порту и передает данные, вторая ведь не сможет подключиться к ком порту в этот момент?
Если это так, то как мне организовать эту проверку, на подключение, если несколько раз не успешно, то вывод ошибки и все, время между попытками 1 секунда.

Офлайн

#2 Янв. 26, 2016 23:59:00

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

pyserial, python 2.7, проверку подключения к ком порту

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)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 27, 2016 05:09:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

pyserial, python 2.7, проверку подключения к ком порту

А не проще сделать одну программу, работающую с com-портом, и две других, подкидывающих ей данные, хоть через сокет, хоть файликами?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Янв. 27, 2016 11:15:36

beivev
Зарегистрирован: 2016-01-11
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

pyserial, python 2.7, проверку подключения к ком порту

Спасибо. Думал есть что-то отработанное на Линуксе. Попробую сам еще по шерудить с этими ошибками. Если ничего не выйдет, придется уйти к RabbitMQ, с его очередями. Будет самым простым вариантом.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version