|
|
  |
Два протокола по одному каналу? |
|
|
|
Jan 11 2007, 15:40
|

Участник

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599

|
Цитата(oleg_lwd @ Jan 11 2007, 14:13)  Допустим, передается по каналу MODBAS-RTU со своей проверкой CRC16 и длиной пакета, допустим 128 байт максимум. Возможно, ли передавать по каналу совместно с MODBAS свой протокол, взять для него другой полином CRC16 (или начальное значение отличное от MODBAS). Какой это протокол определять по CRC, т.е., не возникнет ли ситуации когда проверки на CRC одного и того же пакета данных для обоих протоколов одновременно будут верными. Ситуация с одинаковыми crc в принципе возможна , но маловероятна. На одну crc полагаться не стоит. Надо согласно протоколу обрабатывать все данные(адрес,функцию,данные) и тогда проколов не должно быть и естесно выдерживать битовый интервал.
|
|
|
|
|
Jan 11 2007, 15:46
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(oleg_lwd @ Jan 11 2007, 10:13)  Допустим, передается по каналу MODBAS-RTU со своей проверкой CRC16 и длиной пакета, допустим 128 байт максимум. Возможно, ли передавать по каналу совместно с MODBAS свой протокол, взять для него другой полином CRC16 (или начальное значение отличное от MODBAS). Какой это протокол определять по CRC, т.е., не возникнет ли ситуации когда проверки на CRC одного и того же пакета данных для обоих протоколов одновременно будут верными. Когда-нибудь, да наступит такое совпадение, увы(:-(. Поставьте в свой протокол отличительный признак, пару байт, типа "MY_PROTOCOL", если можете, то и в MODBAS признак протокола поставьте, типа "MODBAS". И всё будет в ажуре.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jan 15 2007, 13:49
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Я так понимаю мастер в обоих случаях один (ПиСюк), и использование одного исключает другого (не запускать обе проги сразу)? Цитата Подскажите, я не ошибаюсь в том, что вероятность совпадений CRC16 с разными полиномами будет 1/2^32? 1/2^16 при прочих равновероятных условиях. Может использовать первый байт (адрес) из диапазона зарезирвированных 248-254?
|
|
|
|
|
Jan 15 2007, 14:48
|

Участник

Группа: Участник
Сообщений: 27
Регистрация: 26-10-05
Пользователь №: 10 131

|
Цитата(Alex03 @ Jan 15 2007, 16:49)  Я так понимаю мастер в обоих случаях один (ПиСюк), и использование одного исключает другого (не запускать обе проги сразу)?
1/2^16 при прочих равновероятных условиях.
Может использовать первый байт (адрес) из диапазона зарезирвированных 248-254? Мастер один программа одна но сам канал сложный (древовидная сеть: радио, RS485, длинные линии) Я размышлял так CRC1 = Paket mod P1; CRC2 = Paket mod P2 CRC1= СRС2 если Paket = P1*P2 степень P1*P2 будет 32, значит вероятность совпадения будет 1/2^32. Мысль была использовать для своих устройств один адрес из 248-254, но зачем гонять лишний байт? И вообще корректно использовать эти адреса? Если я не ошибся с вероятностью совпадения СRC то она очень мала.
|
|
|
|
|
Jan 18 2007, 15:42
|

Участник

Группа: Участник
Сообщений: 27
Регистрация: 26-10-05
Пользователь №: 10 131

|
Цитата(boez @ Jan 17 2007, 17:19)  Нет, вероятность совпадения двух разных произвольных CRC 1/2^16. Это при их независимости. Полиномы для CRC (CCITT, ANSI) которые все используют вида: СRC = (X+1) * Prim15_CRC; Prim15_CRC - примитивный полином, если по уму брать начальное значение CRC16, то первая ошибка будет, когда пакет равен Prim15_CRC1 * Prim15_CRC2, вероятность ошибки будет 1/2^30? Цитата(boez @ Jan 17 2007, 17:19)  Если использовать Наша_CRC = Родная_CRC xor 0xABCD, то вероятность совпадения нашей и их CRC на целых пакетах просто нулевая. Ну а на битых может быть все что угодно. Полностью согласен и сейчас ищу правильное начальное значение тупым перебором ошибок.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|