Checksum, CRC8 и CRC16
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Checksum, CRC8 и CRC16
Приборы, которые высчитывают контрольную сумму, CRC8 и CRC16
Контрольная сумма используется например для проверки правильности NMEA-пакета данных, но и конечно во многих других протокалах.
Контрольная сумма используется например для проверки правильности NMEA-пакета данных, но и конечно во многих других протокалах.
- Вложения
-
- Checksum.vi
- LV 7.1
- (14.63 КБ) 2643 скачивания
-
- CRC8.vi
- LV 7.1
- (18.61 КБ) 3220 скачиваний
-
- CRC16.vi
- LV 7.1
- (20.24 КБ) 2806 скачиваний
- ChevyCamaroSS67
- beginner
- Сообщения: 10
- Зарегистрирован: 28 май 2008, 16:45
- Версия LabVIEW: 7.1
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Интересно, а эти алгоритмы расчета они стандартны или есть их модификации? Например CRC8 который используется в моих проектах расчитывается по другому и имеет тот недостаток что не сложно методом простого перебора при фиксированной длине строки получить одино и тоже значение контрольной суммы. Сам алгоритм мне предложи на работе, он там принят за основу.
- Вложения
-
- CRC_8.vi
- сделан в LV 7.1
- (35.07 КБ) 1971 скачивание
In LabVIEW We Trust
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Да, мы на работе тоже используем другой алгоритм для CRC8, у нас есть заранее высчитаная таблица состоящая примерно из 200 значений. Из неё берутся подходящие, в зависимости от входа. Наверное и правда есть много модификаций этих алгоритмов, но алгоритм Checksum вроде бы всегда одинаковый.
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Хочу покритиковать ВСЕХ!!!
это конечно класно, что все считают CRC и у всех всё получается и т.д. и т.п. и.....
НО! можно десять страниц исписать фразами """а я вот так считаю""" и привести сотни алгоритмов...
только СМЫСЛ смысл ветки не в том чтобы похвастаться, а чтобы показать пример, котрый возможно кто-либо может взять как готовый виай, ПОЭТОМУ....
... предлагаю к виаю добавлять ОПИСАНИЕ РАСЧЁТА CRC, словами, по-русски!!!!
например, Значение CRC вычисляется как дополнение до нуля суммы всех байтов сообщения (естесвенно без самой CRC), старший байт CRC не участвет и всенда равен НУЛЮ, младший байт CRC - это младший байт рассчитанного дополнения, т.е. для 0578 1C00 4700, CRC=20, а в порт отправляется 0578 1C00 4700 0020.
это конечно класно, что все считают CRC и у всех всё получается и т.д. и т.п. и.....
НО! можно десять страниц исписать фразами """а я вот так считаю""" и привести сотни алгоритмов...
только СМЫСЛ смысл ветки не в том чтобы похвастаться, а чтобы показать пример, котрый возможно кто-либо может взять как готовый виай, ПОЭТОМУ....
... предлагаю к виаю добавлять ОПИСАНИЕ РАСЧЁТА CRC, словами, по-русски!!!!
например, Значение CRC вычисляется как дополнение до нуля суммы всех байтов сообщения (естесвенно без самой CRC), старший байт CRC не участвет и всенда равен НУЛЮ, младший байт CRC - это младший байт рассчитанного дополнения, т.е. для 0578 1C00 4700, CRC=20, а в порт отправляется 0578 1C00 4700 0020.
I work in LabVIEW 2009 !
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Здравствуйте, не могу понять как сделать вычисление CRC по следущей схеме:
"Эта схема состоит из сдвигового регистра и элементов "исключающее ИЛИ", при инициализации все биты сдвигового регистра равны 0. Начиная с младшего бита кода ROM или 0-го байта SRAM, их содержимое сдвигается в сдвиговый регистр. После сдвига 56-го бита кода ROM или старшего бита 7-го байта SRAM полиномиальный генератор будет содержать пересчитанное значение CRC
Эквивалентная полиномиальная функция CRC (ROM или SRAM):
CRC = X^8 + X^5 + X^4 + 1"
пример: 10 91 2d 60 01 08 00 24
CRC = 0x24
"Эта схема состоит из сдвигового регистра и элементов "исключающее ИЛИ", при инициализации все биты сдвигового регистра равны 0. Начиная с младшего бита кода ROM или 0-го байта SRAM, их содержимое сдвигается в сдвиговый регистр. После сдвига 56-го бита кода ROM или старшего бита 7-го байта SRAM полиномиальный генератор будет содержать пересчитанное значение CRC
Эквивалентная полиномиальная функция CRC (ROM или SRAM):
CRC = X^8 + X^5 + X^4 + 1"
пример: 10 91 2d 60 01 08 00 24
CRC = 0x24
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Что то попробовал тебе накидать, но не получается. Может чем нибудь поможет.
- Вложения
-
- CRC.png (8.24 КБ) 15452 просмотра
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Re: Checksum, CRC8 и CRC16
как-то разбирался как owen`овский CRC работает, но потом дали готовый и забросил это дело (нужно было проект двигать дальше)
вот две книжки по CRC мож помогут вот который считает CRC по полиному x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0 на вид не сложно, только нужно посидеть , поглядеть и понять а вообще суть такая - некоторая последовательность делится на полином, остаток от деления - это CRC
вот две книжки по CRC мож помогут вот который считает CRC по полиному x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0 на вид не сложно, только нужно посидеть , поглядеть и понять а вообще суть такая - некоторая последовательность делится на полином, остаток от деления - это CRC
I work in LabVIEW 2009 !
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Спасибо, теория конечно хорошо, но там разбираться :)Коротенко Алексей писал(а):как-то разбирался как owen`овский CRC работает, но потом дали готовый и забросил это дело (нужно было проект двигать дальше)
вот две книжки по CRC мож помогут вот который считает CRC по полиному x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0 на вид не сложно, только нужно посидеть , поглядеть и понять а вообще суть такая - некоторая последовательность делится на полином, остаток от деления - это CRC
А у меня пример не открывается в LabView 8 :(
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Спасибо, жаль что не получилось.eg писал(а):Что то попробовал тебе накидать, но не получается. Может чем нибудь поможет.
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Re: Checksum, CRC8 и CRC16
попробуй собрать по рисунку, это не долго, маленький, вот вид при false
заметь - константа 8f57 - тот самый полином, но без х16 и в шестнадцатеричном виде
учти что входная и выходная величины - БУЛЕАНОВСКИЕ МАССИВЫ!заметь - константа 8f57 - тот самый полином, но без х16 и в шестнадцатеричном виде
I work in LabVIEW 2009 !
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Спасибо, буду разбираться.Коротенко Алексей писал(а):учти что входная и выходная величины - БУЛЕАНОВСКИЕ МАССИВЫ!
Потом отпишусь :)
- Nemo
- user
- Сообщения: 97
- Зарегистрирован: 26 июн 2008, 11:48
- Версия LabVIEW: 8
- Откуда: Россия
- Контактная информация:
Re: Checksum, CRC8 и CRC16
Что-то я не понимаю зачем нежен 1DBody и где входные 8 (16) байтов, зачем на выходе получать crc в виде булеановского массива ?
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Re: Checksum, CRC8 и CRC16
как видишь у меня это просто под , у меня посылка обрабатывается в виде булеановского массиваNemo писал(а):зачем нежен 1DBody? зачем на выходе получать crc в виде булеановского массива ?
можешь поставить нумерик контрол, в его свойствах укажи HEX формат, потом соедини контрол через @number to boolean array@ к входу вместо 1dbody, на выходе в нумерик индикаторе укажи показывать в виде HEXNemo писал(а):где входные 8 (16) байтов?
булеан индикатор на выходе и 1dbody можешь убрать
есть вопросы - спрашивай
I work in LabVIEW 2009 !