|
помехо защищенное кодирование, кто может уже делал |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 18)
|
May 14 2006, 18:15
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
ИМХО в первую очередь надо бороться с самими ошибками, точнее источником их возникновения. Перерабатывать линии связи, и т.д. (уити на CAN например)  кодирование с избыточностью и восстановление данных более важно для рилтаймовых систем, где как в законе мясорубки ("фарш невозможно прокрутить назад") повторная передача уже не имеет смысла. Или для систем где действительно очень не ненадёжен канал связи (КЛА и т.п.), к коим на мой взгляд RS-485 не относится. Ибо где есть 5-10% ошибок при незначительном измененении окружающей обстановки может случиться 100% ошибок. Всё это сугубо ИМХО. Ну а по существу я ничего не скажу!  Во первых надо понять какая избыточность данных для Вас приемлима. Во вторых какую вероятность ошибки после восстановления данных желаете, и т.д. Насколько Вам важна информация об наличии ошибке. (Тот же простейший Хэмминг восстанавливает одну ошибку, но легко пропускает 2 и более) Ну и надо учесть специфику RS-485, а именно его асинхронность. Например при ошибке распознования приёмником старт-бита (а вероятность такого события насколько я понимаю далеко не нулевая) в одном случае портиться только соответствующий байт, в другом (например если байт 0xFF) этот байт пропускается и делее весь пакет со сдвигом в байт (а если Вы ждёте конкретное число байт в пакете - не дождётесь), в третьем случае нулевой стоп-бит и соответственно какая-то (а какая?) обработка ошибки приёма.
|
|
|
|
|
May 15 2006, 07:51
|

учащийся
    
Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249

|
Я не занимался помехозашишенными кодами но предполагаю что есть несколько методов в этом деле : - обнаружение ошибок - то что делается проверяется посредством CRC или checksum. Если ошибка в пакее то передается снова. - исправление ошибки - типа код рида соломона или хемминга (если не ошибаюсь) позволяет исправлять определенное количество потерянной информации http://en.wikipedia.org/wiki/Hamming_code http://en.wikipedia.org/wiki/Convolutional_code http://en.wikipedia.org/wiki/Reed-Solomon_error_correction http://en.wikipedia.org/wiki/Binary_Golay_code http://en.wikipedia.org/wiki/Reed-Muller_code http://en.wikipedia.org/wiki/Turbo_code- введение избыточности - когда одни и теже данные передаются два ili bolee раза - перемешивание данных (по моему interleaving называется ) - меняется последовательност передачи битов из пакета так что выпадение нескольких битов подряд приводит к одиночной ошибке которая может быть восстановлена исправляюшим кодированием Если нужно могу найти книгу по кодированию на аглицком правда. Если можно исправить кодированием и никаких религиозных ошибок при установке рс485 произведено не было - то кодирование самый дешевый способ исправить положение .
--------------------
Зачем лаять на караван , когда на него можно плюнуть?
|
|
|
|
|
May 17 2006, 04:12
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(asen @ May 15 2006, 10:02)  при инвертировании нескольких бит может случится так что получится другая команда и она будет выполнена и подтверждение тоже не поможет так что в этом случаи придется повышать качество связи расстояние по времени между байтами пакета больше чем время передачи байта пакета так что при ошибке синхронизации будет потерян только первый байтно такое событие еще менее вероятно так как по итогам проведенных испытаний небело зарегистрировано ошибки более 3 бит
я передали почти 4 гигабайта информации Как то сумбурно, но имхо: Для решения вашей задачи необходимо реализовать 2 механизма, которые должны: 1. Обеспечить определенную вероятность необнаруженной ошибки. Для защиты от этого: Цитата может случится так что получится другая команда и она будет выполнена 2. Обеспечить контроль получения команды. Первое обычно решается протоколом на канальном уровне. Он должен быть хорошо продуман, пакеты должны быть защищены кодом, обнаруживающим ошибки. В вашем случае достаточно применить CRC16. Протокол можно взять "modbus serial line protocol". Там многие вещи продуманы, хотя и не нестолько, как хотелось бы. Второе решается квитированием. Если рассуждать о применение кодов с исправлением ошибок, то эти коды имеет смысл применять: 1. если канал симплексный 2. если время распространения сигнала от передатчика до приемника несоизмеримо больше времени передачи самого пакета (спутниковые каналы) 3. если необходимо произвести доставку сообщения за время "не более чем", а ширина канала не позволяет организовать перезапрос искаженных кадров. Кроме того, нужно учесть, что коды с исправлением ошибок не могут эффективно работать с асинхронными приемопередатчиками. Если код с исправлением ошибок используется, то используется и синхронный канал связи.
--------------------
Пасу котов...
|
|
|
|
|
May 20 2006, 07:25
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(asen @ May 17 2006, 20:25)  В нашем случии как раз выполняются все три приведенных ниже требования
Если рассуждать о применение кодов с исправлением ошибок, то эти коды имеет смысл применять: 1. если канал симплексный Почему RS-485 стал симплексным? Конечно, любой канал можно использовать как симплексный, но по сути RS485 - полу-дуплекс. Цитата 2. если время распространения сигнала от передатчика до приемника несоизмеримо больше времени передачи самого пакета (спутниковые каналы) Да ну, бросьте, в вашем случае это время вообще можно не учитывать. Цитата 3. если необходимо произвести доставку сообщения за время "не более чем", а ширина канала не позволяет организовать перезапрос искаженных кадров. Судя по тому, что время между между байтами у вас больше, чем время передачи байта (по вашим словам), то канал используется крайне неэффективно, соответсвенно запас по ширине есть. Цитата а насчет
Кроме того, нужно учесть, что коды с исправлением ошибок не могут эффективно работать с асинхронными приемопередатчиками. Если код с исправлением ошибок используется, то используется и синхронный канал связи.
я не согласен какая разница мехду данными принятыми по асинхронному и синхронному каналу если ошибочный запуск не выполняется. Сергей тут сделал правильное уточнение. Цитата да это верно но в моем случии передача байтовая с приличными интервалами между байтов так что при потере 1 байта получается 8 бит из пакето 64 бита это в принципе тоже востоновимо А при помехе между байтами у вас будет принят лишний байт, и возможно искажен следующий, биты будут сдвинуты. В общем, не тем путем вы идете, поверьте
--------------------
Пасу котов...
|
|
|
|
|
May 22 2006, 04:45
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(ASN @ May 20 2006, 15:15)  asen
4. Если есть запас по скорости, то передавать команду нечётное число раз и принимать решения абонентом методом мажоритирования. При использовании CRC16/32 смысла в каком-либо мажорировании не вижу. Цитата 5. Если есть требование гарантированной доставки команду, то лучше всегда периодически возвращать статус устройтсва. Это позволяет с большей достоверностью определить прошла команда или нет. Лучше не периодически подтверждать статус, а использовать квитирование на каждую команду. В общем модбас взять и реализовать.
--------------------
Пасу котов...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|