рус / еng
Ставропольский край

Выберите регион

8-800-200-75-27

Расчёт CRC16 для прокотола CE

yura.dulin@gmail.com 13.10

Здравствуйте. Возникла проблема при попытке подключения к счётчикам CE102 S7J. В описании протокола CE на вашем сайте для пакетов с расширенной адресацией (флаг 0x54) указана контрольная сумма как CRC-16 CCITT по полиному 0x1021 с начальным значением 0xFFFF. Пока что мне не удалось получить тот же CRC, что вычисляется в пакетах при использовании AdminTools. Такая же проблема была с CRC-8, но решить её оказалось проще (банальным подбором начального значения), в случае с CRC-16 ни одна реализация CRC-16 из широко известных не может выдать необходимый результат. Если можно, хотелось бы увидеть код вычисления контрольных сумм, желательно с примером на конкретном пакете.


Комментарии

Концерн «Энергомера» 02.12

Смотрите: http://www.energomera.ru/documentations/ce102_op.pdf CRC-8 -Приложение А (стр 31) http://www.energomera.ru/documentations ... 306_ok.pdf CRC16 – контрольная сумма пакета, рассчитывается для байтов от 2 до N2. Вычисление производится с использованием полинома CCITT(0x1021), стартовое значение 0xFFFF, вначале передается старший байт. [code:2bafahcx]unsigned short Crc16( unsigned char *pcBlock, unsigned short len ) { crc = 0xFFFF; unsigned char i; while( len-- ) { crc ^= *pcBlock++ << 8; for( i = 0; i < 8; i++ ) crc = crc & 0x8000 ? ( crc << 1 ) ^ 0x1021 : crc << 1; } return crc; }[/code:2bafahcx]