Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Два протокола по одному каналу?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
oleg_lwd
Допустим, передается по каналу MODBAS-RTU со своей проверкой CRC16 и длиной пакета, допустим 128 байт максимум. Возможно, ли передавать по каналу совместно с MODBAS свой протокол, взять для него другой полином CRC16 (или начальное значение отличное от MODBAS). Какой это протокол определять по CRC, т.е., не возникнет ли ситуации когда проверки на CRC одного и того же пакета данных для обоих протоколов одновременно будут верными.
plan
Цитата(oleg_lwd @ Jan 11 2007, 14:13) *
Допустим, передается по каналу MODBAS-RTU со своей проверкой CRC16 и длиной пакета, допустим 128 байт максимум. Возможно, ли передавать по каналу совместно с MODBAS свой протокол, взять для него другой полином CRC16 (или начальное значение отличное от MODBAS). Какой это протокол определять по CRC, т.е., не возникнет ли ситуации когда проверки на CRC одного и того же пакета данных для обоих протоколов одновременно будут верными.

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

Когда-нибудь, да наступит такое совпадение, увы(:-(. Поставьте в свой протокол отличительный признак, пару байт, типа "MY_PROTOCOL", если можете, то и в MODBAS признак протокола поставьте, типа "MODBAS". И всё будет в ажуре.
oleg_lwd
Устройства с протоколом MODBAS не мои и я не могу поменять их протокол, да и меня не интересует его содержимое, адреса приборов с протоколом MODBAS могут быть любыми, видимо, не смогу протокол для своих устройств сделать MODBAS без возникновения конфликта адресов (вероятность 1/255).

Подскажите, я не ошибаюсь в том, что вероятность совпадений CRC16 с разными полиномами будет 1/2^32?
Думаю, если считать свою CRC16 с полиномом MODBAS и начальным значением отличным от MODBAS вообще совпадений быть не должно?
Кто силен в математике CRC скажите прав или не прав?
Alex03
Я так понимаю мастер в обоих случаях один (ПиСюк), и использование одного исключает другого (не запускать обе проги сразу)?

Цитата
Подскажите, я не ошибаюсь в том, что вероятность совпадений CRC16 с разными полиномами будет 1/2^32?

1/2^16 при прочих равновероятных условиях.

Может использовать первый байт (адрес) из диапазона зарезирвированных 248-254?
oleg_lwd
Цитата(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 то она очень мала.
boez
Нет, вероятность совпадения двух разных произвольных CRC 1/2^16. Это при их независимости. Если использовать Наша_CRC = Родная_CRC xor 0xABCD, то вероятность совпадения нашей и их CRC на целых пакетах просто нулевая. Ну а на битых может быть все что угодно. Для надежности в своем протоколе можно использовать нестандартные номера функций (большие) и большие адреса.

А вообще для мультиплексирования в модбасе предназначены адреса!!! Нужно их просто правильно раздать всем устройствам...
oleg_lwd
Цитата(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 на целых пакетах просто нулевая. Ну а на битых может быть все что угодно.

Полностью согласен и сейчас ищу правильное начальное значение тупым перебором ошибок.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.