2012-06-26 2 views
1

Я работаю над многопоточным серверным приложением для обработки последовательных/USB-портов.Как узнать, закрыт ли последовательный порт?

Проблема в том, что если кабель отсоединен, pyserial сообщает, что порт открыт и доступен. При чтении я получаю только Empty исключений (из-за таймаута чтения).

Как узнать, что порт был отключен, чтобы я мог обрабатывать этот случай?

Edit: ОС Ubuntu 12,04

Edit 2: Разъяснение - Я подключение к последовательным устройствам порта через последовательные к разъему USB, таким образом, устройство отсоединения представляет собой устройство USB.

+0

какой os вы используете? –

+0

на linux вы можете просто использовать 'dmesg' для таких задач –

+0

Мне нужно решение, которое работает в моем приложении Python, чтобы я мог завершить весь процесс, если порт пропал без вести. – JanezStupar

ответ

3

A Последовательный порт не имеет реальной концепции «подключенного кабеля» или не подключен.

В зависимости от используемого вами оборудования вы можете опробовать линии DSR или CTS и решить, что устройство не подключено, когда они остаются на низком уровне в течение определенного времени.

Из википедии:

DTR и DSR обычно все время, и на РС-232 стандарта и его преемники, используются для сигнализации с каждого конца, что другой оборудование действительно присутствует и питание

Так что, если у вас есть соответствующее устройство, линия DSR может быть то, что вам нужно.

Редактировать: Как вы, кажется, используете конвертер USB2Serial, вы можете попытаться проверить, существует ли узел устройства - вам не нужно пытаться его открыть.

так что os.path.exists (devNode) может быть достаточно.

+0

Интересно, что ОС знает, когда устройство подключено (/ dev/ttyUSBX), и я использую фиксированную символическую ссылку для каждого устройства (например:/dev/mycustomLink), и когда кабель отключается, ОС знает об этом и удаляет устройство из списка , Таким образом, я был бы доволен элегантным способом опроса ОС по статусу устройства (присутствует или отсутствует). – JanezStupar

+0

@JanezStupar. Что вы здесь описываете, это то, что происходит, когда USB-штекер вытаскивается. Это можно обнаружить. В этом ответе описывается, что произойдет, если штекер RS232 потянут. – glglgl

+0

Ах. Вы говорите об устройстве USB здесь; вам понадобится библиотека usb, чтобы опросить присутствие этого устройства. В противном случае вы можете просто опросить, доступен ли узел устройства (/ dev/ttyUSBx, который вы открыли в начале), это достаточно для вашего случая? – DThought