2008-10-12 2 views
5

У меня есть инструкции по отправке и получению Arduino с помощью скрипта Python через последовательный порт.Проверьте, прослушивается ли последовательный порт

Arduino принимает состояние кнопки, и при его нажатии он отправляет сообщение через последовательный порт в сценарий Python и ждет ответа. (через Serial.available()). Он работает достаточно хорошо.

Однако, если сценарий Python разбился по какой-либо причине (в идеале он будет работать в фоновом режиме, поэтому его нельзя будет легко проверить), Arduino будет ждать навсегда и будет недоступен даже при перезапуске скрипта.

Есть ли способ для моего Arduino проверить, есть ли что-то прослушивание на последовательном порту? (и предупреждайте меня мигающими огнями и т. д., если нет), или это не так, как работает сериал? В худшем случае я предполагаю, что могу использовать тайм-аут, хотя это и не идеально.

ответ

6

У вас есть ограниченная возможность определить, есть ли что-то прослушивание с другой стороны, используя контакты DSR/DTR.

Когда вы открываете последовательный порт на компьютере, на котором работают ваши скрипты, он должен поднять свой вывод DTR (или вы должны убедить его в этом: документация библиотеки, которую вы используете для управления COM-портом, должна расскажите, как).

Затем, на вашем Arduino, вы можете проверить его вывод DSR (при условии, что проводка с нулевым модемом с подтверждением связи, где контакт DTR ПК подключен к DSR + CD на Arduino) через равные промежутки времени, и обрабатывать «никто не подключен» «сценарий любым способом, который вы считаете нужным.

Одна из проблем с этим подходом заключается в том, что ваш компьютерный скрипт не может закрыть последовательный порт, когда он выходит из строя/перестает отвечать, оставив контакт DTR включенным, как будто все по-прежнему в порядке. Кроме того, ваш скрипт может просто пропустить сообщение от Arduino из-за ошибок на последовательной линии.

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

Повторное отправку сообщения хотя бы один раз (при условии, что DSR поднят), если произойдет таймаут, ваш протокол станет более надежным.

+0

приветствие помощник. Как интересный момент, Google выбрал ваш ответ через 3 минуты после того, как вы разместили его. – Hyposaurus 2008-10-12 11:07:02

0

Я согласен с mdb, что необходимы тайм-ауты, но также добавим, что вы можете реализовать простую систему проверки/ответа, которая периодически проверяет, слушает ли кто-нибудь. (Мне нравится аналогия Ping-Pong ircd).

1

Arduino не использует линию DSR или любую другую линию связи, поэтому вы не можете делать то, что вы предлагаете.

Смежные вопросы