Я пишу простой многоканальный протокол RS485 для последовательной связи в распределенной системе. Я использую адресную модель, где подчиненным устройствам предоставляется окно в 20 мс для ответа. Мастер uC проверяет подключенные устройства на наличие обновлений и отвечает соответствующим образом. Я использовал контрольные суммы и принимаю необходимые меры предосторожности, чтобы гарантировать, что подключенные устройства не будут реагировать на неверные сообщения. Этот метод оказался эффективным примерно в 99% ситуаций, но я теряю пакет, если новое устройство вводится во время сеанса связи. Подключение нового устройства «горячее» будет иметь негативные последствия для сигнала, контролируемого подчиненными устройствами, хотя бы на очень короткое время. Я нахожусь на стороне программного обеспечения, но как я могу смягчить эту ситуацию, не пытаясь воссоздать TCP? Мы используем модель опроса, потому что она работает быстро и хорошо работает для нашего приложения, не требуется функциональность RTOS. Я изобилую циклами на каждом процессоре, думаю, в основном.Пользовательские протоколы RS485
ответ
Отправка пакетов по RS485 не является надежной связью. В любом случае вам придется обрабатывать потерянные пакеты. Разумеется, вам не придется изобретать TCP. Но вам придется обнаруживать потерянные пакеты с помощью тайм-аута и порядковых номеров. В простых приложениях это можно сделать на уровне приложений, что позволяет вам далеко от сложности TCP. Когда ваша модель опроса отбрасывает все пакеты с недопустимой контрольной суммой, это может быть интегрировано с меньшими усилиями.
Если вы хотите проверить наличие коллизий, которые могут быть вызваны горячими разъемами или неправильными устройствами, возможно, некоторые улучшения. Некоторые аппаратные средства позволяют считывать собственную передачу. Если вы обнаружите разницу между отправленными данными и получаемыми данными, вы можете предположить столкновение и повторить пакет. Для этого также потребуется некоторая нумерация последовательности.
Возможно, я что-то пропустил в вашем вопросе, но не могу ли вы просто написать мастеру, чтобы, если ответ не был обнаружен с устройства в течение разрешенного времени, он повторно опросает это устройство?
- 1. Пользовательские протоколы
- 2. Пользовательские протоколы, не отправляющие сообщения
- 3. Пользовательские протоколы определения местоположения для M3
- 4. Связь через RS485
- 5. dsPic33E: RS485 Проблема связи
- 6. приложение vb.net RS485 ascii связь
- 7. Получать команды RS485 через C#
- 8. Начало работы с Modbus RS485
- 9. Связь RS485 через TCP/IP
- 10. протоколы websockets?
- 11. Множественные протоколы
- 12. Протоколы SSLContext
- 13. USB-to-RS485 с использованием Nodejs
- 14. Baudrate с коммуникацией RS485 в ПК
- 15. C#: Ожидание определенного символа, отправленного с RS485
- 16. Android Studio Modbus rs485 последовательное соединение MacosX
- 17. Какова эта ошибка RS485 Modbus-RTU Device
- 18. Xamarin: Binding Objective C протоколы, которые возвращают протоколы
- 19. Компилятор Clojure проверяет, реализуют ли протоколы и типы протоколы?
- 20. Какие протоколы поддерживает FileUtils.copyUrlToFile?
- 21. Протоколы Swift 2.2 Свойства
- 22. Как реализуются сетевые протоколы?
- 23. Протоколы в iPhone SDK
- 24. Где реализовать протоколы Swift?
- 25. Swift протоколы и полиморфизм
- 26. протоколы проблемы Swift
- 27. Протоколы и расширения swift
- 28. Протоколы с контроллером навигации
- 29. Протоколы var {get}
- 30. Clojure - протоколы/переполнение многоточия
Отличное предложение, каждое устройство способно слушать его собственные передачи. Горячие разъемы определенно давали мне немного горя. Решение достаточно простое, я чувствую себя немного глупо, не подумав об этом сам. Благодаря! – Nate