Дополню. При приеме всех данных(включая црц) можно весь этот пакет прогнать по црц алгоритму. И если в результате вычисления функция црц вернет 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; }
А если рассчитывать со всеми байтами, то при правильной CRC ответом будет 0. Во всяком случае у меня на ассемблере функция так работает. Попробуйте, правда это будет чуть дольше, чем простое дальнейшее сравнение, но иногда много проще.
Здравствуйте. Очень нравятся ваши видео, я по ним много научился и собрал интересного. Ваши "пособия программирования AVR на C" были мне настолько полезны, что я тепер ставлю лайки под всеми вашими видео, даже если не очень интересно само видео. Очень приятно смотреть и доходчиво обьясняете. Но вот мне понадобилось поработать с микросхемой по шине I2C, но я не совсем понимаю как работать с регистрами другой микросхемы через данную шину. Планируется ли видео по етому поводу? А так спасибо за ваши труды. Успехов и процветания :)
Здравствуйте. Честно говоря нет желания эту тему подымать, очень много нужно самому вспоминать чтобы все доходчиво объяснить. Вам в помощь может стать книга ' микрoконтроллеры семейства mega '
А чего там собственно понимать? Дан набор байт, функция считает контрольную сумму, кладёт в отклик, принимающая сторона получает переданные байты, считает контрольную сумму по тому же алгоритму самостоятельно и сравнивает с полученной - теоретические основы, заложенные в работу чёрного ящика - функции подсчёта контрольной суммы - для того, чтобы Вы просто сравнили два числа - неважны, берёте и пользуетесь, если интересует теория (из каких соображений выбрано «магическое число» 0xA001? какова вероятность совпадения контрольной суммы при искажении более одного бита информации во входном потоке?) разумно совсем не в роликах про ModBus (ModBus - всего лишь частный случай применения теории).
Спасибо за видео!!! Все доступно понятно. Буду ждать следующего видео.
Дополню. При приеме всех данных(включая црц) можно весь этот пакет прогнать по црц алгоритму. И если в результате вычисления функция црц вернет 0, то это нам будет говорить о том, что пакет пришел целым. И его уже можно обрабатьвать на свое усмотрение.
Спасибо за труд. Отличная подача материала в меру просто в меру сложно ничего лишнего.
Ну вот... Я думал, хоть здесь расскажут простым языком как всё происходит. :) Без обид, но для новичка данное видео выглядит как "вот код, он работает, видите я посчитал его, и на сайте проверил. О! Сошлось. Значит код работает. Используйте его". А в жизни, когда я изучал modbus для меня было проблемой понять как его вычислять, так и не понял и начал искать исходники с уже готовым вариантом. А учитывая, что каждый пишет на своем языке, то этот пример не всегда подходит. :)
Вы представляете сколько нужно потратить времени, на детальное объяснение, я к этому не готов. Я и так трачу уйму времени на столь мало востребованную тематику.
А поискать "теория циклической контрольной суммы" не пробовали? :)
f33net для этого надо знать это название ) я его не знал )
@@JurasskParkChannel яндекс всё знает - спрашивайте чаще...
f33net Яндекс знает всё - это не оспоримо, но как составить запрос не зная этой темы и тем более слов "теория контроля циклической суммы"? Вам сверху озарение даёт такую информацию? Думаю вряд-ли. Для этого нужно, чтобы ее кто-то вам сообщил, например, учитель или книга. )
Очень познавательно. Оформление шикарное. Но когда же дальше?
Спасибо! Очень нужное видео. Лайк.
Если в обработку включить и КС, то на выходе должен быть ноль. Именно таким образом и проверяется обычно crc.
sasha brat davomi ham bo'lsin !!! продолжай брат спасибо за видео
Перфекто! Спасибо за видео!)
Принимающему устройству в данном случае вовсе необязательно работать с контрольной суммой отдельно - достаточно посчитать контрольную сумму всех принятых данных (включая контрольную сумму) - результат должен быть равен нулю. Ну и выкладывать десяток строк кода в архиве в 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;
}
Спасибо. За три коротких видео понятно про RTU.
Очень бы хотелось в таком же ключе разобрать работу с CAN шиной
А если рассчитывать со всеми байтами, то при правильной CRC ответом будет 0. Во всяком случае у меня на ассемблере функция так работает. Попробуйте, правда это будет чуть дольше, чем простое дальнейшее сравнение, но иногда много проще.
Здравствуйте Иван.
Не поделитесь функцией на Ассемблере? С уважением, Андрей.
@@ОПОРЭЛ пишите, куда кинуть.
Здравствуйте. Очень нравятся ваши видео, я по ним много научился и собрал интересного. Ваши "пособия программирования AVR на C" были мне настолько полезны, что я тепер ставлю лайки под всеми вашими видео, даже если не очень интересно само видео. Очень приятно смотреть и доходчиво обьясняете. Но вот мне понадобилось поработать с микросхемой по шине I2C, но я не совсем понимаю как работать с регистрами другой микросхемы через данную шину. Планируется ли видео по етому поводу?
А так спасибо за ваши труды. Успехов и процветания :)
Здравствуйте. Честно говоря нет желания эту тему подымать, очень много нужно самому вспоминать чтобы все доходчиво объяснить. Вам в помощь может стать книга
' микрoконтроллеры семейства mega '
Здравствуйте Александр,
Спасибо большое за Ваш труд,
Если есть возможность, можете
Рассказать о CAN_BUS. И MCP2515.
С уважением Alexander.
супер
А вычисление КС с таблицей, как делается? Вроде с ней быстрее работать должно.
Почему по мадбасу в начале отправляется 00 ...?
тоесть 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 - всего лишь частный случай применения теории).