Дополню. При приеме всех данных(включая црц) можно весь этот пакет прогнать по црц алгоритму. И если в результате вычисления функция црц вернет 0, то это нам будет говорить о том, что пакет пришел целым. И его уже можно обрабатьвать на свое усмотрение.
А если рассчитывать со всеми байтами, то при правильной CRC ответом будет 0. Во всяком случае у меня на ассемблере функция так работает. Попробуйте, правда это будет чуть дольше, чем простое дальнейшее сравнение, но иногда много проще.
Ну вот... Я думал, хоть здесь расскажут простым языком как всё происходит. :) Без обид, но для новичка данное видео выглядит как "вот код, он работает, видите я посчитал его, и на сайте проверил. О! Сошлось. Значит код работает. Используйте его". А в жизни, когда я изучал modbus для меня было проблемой понять как его вычислять, так и не понял и начал искать исходники с уже готовым вариантом. А учитывая, что каждый пишет на своем языке, то этот пример не всегда подходит. :)
Вы представляете сколько нужно потратить времени, на детальное объяснение, я к этому не готов. Я и так трачу уйму времени на столь мало востребованную тематику.
f33net Яндекс знает всё - это не оспоримо, но как составить запрос не зная этой темы и тем более слов "теория контроля циклической суммы"? Вам сверху озарение даёт такую информацию? Думаю вряд-ли. Для этого нужно, чтобы ее кто-то вам сообщил, например, учитель или книга. )
Принимающему устройству в данном случае вовсе необязательно работать с контрольной суммой отдельно - достаточно посчитать контрольную сумму всех принятых данных (включая контрольную сумму) - результат должен быть равен нулю. Ну и выкладывать десяток строк кода в архиве в doc-файле - это нечто даже для 2018 года. int crc_chk ( unsigned char* data, unsigned char length ) { register unsigned int j, reg_crc = 0xFFFF; while (length--) { reg_crc ^= *data++; for (j = 0; j < 8; j++) reg_crc = reg_crc & 0x01 ? (reg_crc >> 1) ^ 0xA001 : reg_crc >> 1; } return reg_crc; }
Здравствуйте. Очень нравятся ваши видео, я по ним много научился и собрал интересного. Ваши "пособия программирования AVR на C" были мне настолько полезны, что я тепер ставлю лайки под всеми вашими видео, даже если не очень интересно само видео. Очень приятно смотреть и доходчиво обьясняете. Но вот мне понадобилось поработать с микросхемой по шине I2C, но я не совсем понимаю как работать с регистрами другой микросхемы через данную шину. Планируется ли видео по етому поводу? А так спасибо за ваши труды. Успехов и процветания :)
Здравствуйте. Честно говоря нет желания эту тему подымать, очень много нужно самому вспоминать чтобы все доходчиво объяснить. Вам в помощь может стать книга ' микрoконтроллеры семейства mega '
А чего там собственно понимать? Дан набор байт, функция считает контрольную сумму, кладёт в отклик, принимающая сторона получает переданные байты, считает контрольную сумму по тому же алгоритму самостоятельно и сравнивает с полученной - теоретические основы, заложенные в работу чёрного ящика - функции подсчёта контрольной суммы - для того, чтобы Вы просто сравнили два числа - неважны, берёте и пользуетесь, если интересует теория (из каких соображений выбрано «магическое число» 0xA001? какова вероятность совпадения контрольной суммы при искажении более одного бита информации во входном потоке?) разумно совсем не в роликах про ModBus (ModBus - всего лишь частный случай применения теории).
Спасибо за видео!!! Все доступно понятно. Буду ждать следующего видео.
sasha brat davomi ham bo'lsin !!! продолжай брат спасибо за видео
Спасибо! Очень нужное видео. Лайк.
Спасибо за труд. Отличная подача материала в меру просто в меру сложно ничего лишнего.
Если в обработку включить и КС, то на выходе должен быть ноль. Именно таким образом и проверяется обычно crc.
Перфекто! Спасибо за видео!)
Дополню. При приеме всех данных(включая црц) можно весь этот пакет прогнать по црц алгоритму. И если в результате вычисления функция црц вернет 0, то это нам будет говорить о том, что пакет пришел целым. И его уже можно обрабатьвать на свое усмотрение.
Очень познавательно. Оформление шикарное. Но когда же дальше?
А если рассчитывать со всеми байтами, то при правильной CRC ответом будет 0. Во всяком случае у меня на ассемблере функция так работает. Попробуйте, правда это будет чуть дольше, чем простое дальнейшее сравнение, но иногда много проще.
Здравствуйте Иван.
Не поделитесь функцией на Ассемблере? С уважением, Андрей.
@@ОПОРЭЛ пишите, куда кинуть.
Здравствуйте Александр,
Спасибо большое за Ваш труд,
Если есть возможность, можете
Рассказать о CAN_BUS. И MCP2515.
С уважением Alexander.
Ну вот... Я думал, хоть здесь расскажут простым языком как всё происходит. :) Без обид, но для новичка данное видео выглядит как "вот код, он работает, видите я посчитал его, и на сайте проверил. О! Сошлось. Значит код работает. Используйте его". А в жизни, когда я изучал modbus для меня было проблемой понять как его вычислять, так и не понял и начал искать исходники с уже готовым вариантом. А учитывая, что каждый пишет на своем языке, то этот пример не всегда подходит. :)
Вы представляете сколько нужно потратить времени, на детальное объяснение, я к этому не готов. Я и так трачу уйму времени на столь мало востребованную тематику.
А поискать "теория циклической контрольной суммы" не пробовали? :)
f33net для этого надо знать это название ) я его не знал )
@@JurasskParkChannel яндекс всё знает - спрашивайте чаще...
f33net Яндекс знает всё - это не оспоримо, но как составить запрос не зная этой темы и тем более слов "теория контроля циклической суммы"? Вам сверху озарение даёт такую информацию? Думаю вряд-ли. Для этого нужно, чтобы ее кто-то вам сообщил, например, учитель или книга. )
А вычисление КС с таблицей, как делается? Вроде с ней быстрее работать должно.
Очень бы хотелось в таком же ключе разобрать работу с CAN шиной
Принимающему устройству в данном случае вовсе необязательно работать с контрольной суммой отдельно - достаточно посчитать контрольную сумму всех принятых данных (включая контрольную сумму) - результат должен быть равен нулю. Ну и выкладывать десяток строк кода в архиве в doc-файле - это нечто даже для 2018 года.
int crc_chk ( unsigned char* data, unsigned char length ) {
register unsigned int j, reg_crc = 0xFFFF;
while (length--) {
reg_crc ^= *data++;
for (j = 0; j < 8; j++)
reg_crc = reg_crc & 0x01 ? (reg_crc >> 1) ^ 0xA001 : reg_crc >> 1;
}
return reg_crc;
}
Здравствуйте. Очень нравятся ваши видео, я по ним много научился и собрал интересного. Ваши "пособия программирования AVR на C" были мне настолько полезны, что я тепер ставлю лайки под всеми вашими видео, даже если не очень интересно само видео. Очень приятно смотреть и доходчиво обьясняете. Но вот мне понадобилось поработать с микросхемой по шине I2C, но я не совсем понимаю как работать с регистрами другой микросхемы через данную шину. Планируется ли видео по етому поводу?
А так спасибо за ваши труды. Успехов и процветания :)
Здравствуйте. Честно говоря нет желания эту тему подымать, очень много нужно самому вспоминать чтобы все доходчиво объяснить. Вам в помощь может стать книга
' микрoконтроллеры семейства mega '
Почему по мадбасу в начале отправляется 00 ...?
супер
Спасибо. За три коротких видео понятно про RTU.
тоесть crc это не просто сумма полученных слов? wtf?
Для примера рассчитаем контрольную сумму нескольких 16-битных слов: 0x398a, 0xf802, 0x14b2, 0xc281. Находим их сумму с поразрядным дополнением.
0x398a + 0xf802 = 0x1318c → 0x318d
0x318d + 0x14b2 = 0x0463f → 0x463f
0x463f + 0xc281 = 0x108c0 → 0x08c1
Теперь находим поразрядное дополнение до единицы полученного результата:
0x08c1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xf73e или, иначе - 0xffff − 0x08c1 = 0xf73e. Это и есть искомая контрольная сумма.
Что такое поразрядное дополнение, XOR?
Весь цикл уроков отлично объяснены и понятны, кроме данного. Не хватает примеров и поэтому каша в голове и как итог, нулевое понимание.
А чего там собственно понимать? Дан набор байт, функция считает контрольную сумму, кладёт в отклик, принимающая сторона получает переданные байты, считает контрольную сумму по тому же алгоритму самостоятельно и сравнивает с полученной - теоретические основы, заложенные в работу чёрного ящика - функции подсчёта контрольной суммы - для того, чтобы Вы просто сравнили два числа - неважны, берёте и пользуетесь, если интересует теория (из каких соображений выбрано «магическое число» 0xA001? какова вероятность совпадения контрольной суммы при искажении более одного бита информации во входном потоке?) разумно совсем не в роликах про ModBus (ModBus - всего лишь частный случай применения теории).