Пользовательские протоколы RS485 - PullRequest
4 голосов
/ 31 августа 2010

Я пишу простой многоканальный протокол RS485 для последовательной связи в распределенной системе. Я использую адресуемую модель, где подчиненным устройствам предоставляется окно 20 мс для ответа. Главный UC опрашивает подключенные устройства на наличие обновлений, и они отвечают соответствующим образом. Я использовал контрольные суммы и предпринял необходимые меры предосторожности, чтобы подключенные устройства не отвечали на искаженные сообщения. Этот метод оказался эффективным примерно в 99% случаев, но я теряю пакет, если во время сеанса связи вводится новое устройство. Подключение нового устройства «горячим» будет иметь негативные последствия для сигнала, который контролируется подчиненными устройствами, хотя бы в течение очень короткого времени. Я занимаюсь разработкой программного обеспечения, но как я могу смягчить эту ситуацию, не пытаясь воссоздать TCP? Мы используем модель опроса, потому что она быстра и хорошо выполняет свою работу для нашего приложения, нет необходимости в функциональности RTOS. У меня есть множество циклов на каждом процессоре, подумайте в общих чертах.

Ответы [ 2 ]

8 голосов
/ 31 августа 2010

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

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

1 голос
/ 31 августа 2010

Возможно, я что-то упустил в вашем вопросе, но разве вы не можете просто написать мастер, чтобы, если ответ не был замечен с устройства в течение разрешенного времени, он повторно опросил это устройство?

...