2010-08-31 15 views
4

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

ответ

8

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

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

+0

Отличное предложение, каждое устройство способно слушать его собственные передачи. Горячие разъемы определенно давали мне немного горя. Решение достаточно простое, я чувствую себя немного глупо, не подумав об этом сам. Благодаря! – Nate

1

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

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