Checksum, CRC8 и CRC16

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Checksum, CRC8 и CRC16

Сообщение Eugen Graf »

Приборы, которые высчитывают контрольную сумму, CRC8 и CRC16

Контрольная сумма используется например для проверки правильности 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
beginner
Сообщения: 10
Зарегистрирован: 28 май 2008, 16:45
Версия LabVIEW: 7.1
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение ChevyCamaroSS67 »

Интересно, а эти алгоритмы расчета они стандартны или есть их модификации? Например CRC8 который используется в моих проектах расчитывается по другому и имеет тот недостаток что не сложно методом простого перебора при фиксированной длине строки получить одино и тоже значение контрольной суммы. Сам алгоритм мне предложи на работе, он там принят за основу.
Вложения
CRC_8.vi
сделан в LV 7.1
(35.07 КБ) 1971 скачивание
In LabVIEW We Trust
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Eugen Graf »

Да, мы на работе тоже используем другой алгоритм для CRC8, у нас есть заранее высчитаная таблица состоящая примерно из 200 значений. Из неё берутся подходящие, в зависимости от входа. Наверное и правда есть много модификаций этих алгоритмов, но алгоритм Checksum вроде бы всегда одинаковый.
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

а я вот так считаю
Вложения
CRC_array.vi
(29.46 КБ) 1896 скачиваний
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Korotenko »

Хочу покритиковать ВСЕХ!!!
это конечно класно, что все считают CRC и у всех всё получается и т.д. и т.п. и.....
НО! можно десять страниц исписать фразами """а я вот так считаю""" и привести сотни алгоритмов...
только СМЫСЛ смысл ветки не в том чтобы похвастаться, а чтобы показать пример, котрый возможно кто-либо может взять как готовый виай, ПОЭТОМУ....
... предлагаю к виаю добавлять ОПИСАНИЕ РАСЧЁТА CRC, словами, по-русски!!!!

например,
CRC_Lo.vi
(23.32 КБ) 1681 скачивание
Значение CRC вычисляется как дополнение до нуля суммы всех байтов сообщения (естесвенно без самой CRC), старший байт CRC не участвет и всенда равен НУЛЮ, младший байт CRC - это младший байт рассчитанного дополнения, т.е. для 0578 1C00 4700, CRC=20, а в порт отправляется 0578 1C00 4700 0020. :super:
I work in LabVIEW 2009 !
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

Здравствуйте, не могу понять как сделать вычисление 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
Вложения
crc.JPG
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

неужели ни кто не знает? :(
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Eugen Graf »

Что то попробовал тебе накидать, но не получается. Может чем нибудь поможет.
Вложения
CRC.png
CRC.png (8.24 КБ) 15452 просмотра
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Korotenko »

как-то разбирался как owen`овский CRC работает, но потом дали готовый :vi: и забросил это дело :cry: (нужно было проект двигать :cool: дальше)
вот две книжки по CRC мож помогут
crc.pdf
(199.59 КБ) 638 скачиваний
crcrevrs.pdf
(119.22 КБ) 557 скачиваний
вот :vi: который считает CRC по полиному x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0
_OwenCRC.vi
(9.58 КБ) 639 скачиваний
на вид не сложно, только нужно посидеть :think: , поглядеть :shok: и понять :clap:
1.PNG
1.PNG (9.45 КБ) 15463 просмотра
а вообще суть такая - некоторая последовательность делится на полином, остаток от деления - это CRC :brows:
I work in LabVIEW 2009 !
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

Коротенко Алексей писал(а):как-то разбирался как owen`овский CRC работает, но потом дали готовый :vi: и забросил это дело :cry: (нужно было проект двигать :cool: дальше)
вот две книжки по CRC мож помогут
crc.pdf
crcrevrs.pdf
вот :vi: который считает CRC по полиному x16+x15+x11+x10+x9+x8+x6+x4+x2+x1+x0
_OwenCRC.vi
на вид не сложно, только нужно посидеть :think: , поглядеть :shok: и понять :clap:
1.PNG
а вообще суть такая - некоторая последовательность делится на полином, остаток от деления - это CRC :brows:
Спасибо, теория конечно хорошо, но там разбираться :)

А у меня пример не открывается в LabView 8 :(
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

eg писал(а):Что то попробовал тебе накидать, но не получается. Может чем нибудь поможет.
Спасибо, жаль что не получилось.
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Korotenko »

попробуй собрать по рисунку, это не долго, :vi: маленький, вот вид при false
1.PNG
1.PNG (9.4 КБ) 15451 просмотр
учти что входная и выходная величины - БУЛЕАНОВСКИЕ МАССИВЫ!
заметь :rtfm: - константа 8f57 - тот самый полином, но без х16 и в шестнадцатеричном виде
I work in LabVIEW 2009 !
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

Коротенко Алексей писал(а):учти что входная и выходная величины - БУЛЕАНОВСКИЕ МАССИВЫ!
Спасибо, буду разбираться.
Потом отпишусь :)
Аватара пользователя
Nemo
user
user
Сообщения: 97
Зарегистрирован: 26 июн 2008, 11:48
Версия LabVIEW: 8
Откуда: Россия
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Nemo »

Что-то я не понимаю зачем нежен 1DBody и где входные 8 (16) байтов, зачем на выходе получать crc в виде булеановского массива :dntknw: ?
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Re: Checksum, CRC8 и CRC16

Сообщение Korotenko »

Nemo писал(а):зачем нежен 1DBody? зачем на выходе получать crc в виде булеановского массива ?
как видишь у меня это просто под :vi: , у меня посылка обрабатывается в виде булеановского массива
Nemo писал(а):где входные 8 (16) байтов?
можешь поставить нумерик контрол, в его свойствах укажи HEX формат, потом соедини контрол через @number to boolean array@ к входу вместо 1dbody, на выходе в нумерик индикаторе укажи показывать в виде HEX

булеан индикатор на выходе и 1dbody можешь убрать
есть вопросы - спрашивай :bye:
I work in LabVIEW 2009 !
Ответить

Вернуться в «Коммуникация с приборами»