Показано с 1 по 8 из 8

Тема: Расчет CRC16 по полиному 8408

  1. #1
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    883

    По умолчанию Расчет CRC16 по полиному 8408

    Доброй ночи

    Подскажите люди добрые, почему у меня не выходит каменный цветок

    Есть функция на делфи:
    const _CR_CCNET_CRC_POLY = $08408

    function GetCRC16(InData: array of byte; DataLng: word): word;
    var i,TmpCRC: word;
    j: byte;
    begin
    result:=0;
    for i:=0 to (DataLng-1) do
    begin
    TmpCRC:=result xor InData[i];
    for j:=0 to 7 do
    begin
    if (TmpCRC and $0001)<>0 then
    begin
    TmpCRC:=TmpCRC shr 1;
    TmpCRC:=TmpCRC xor _CR_CCNET_CRC_POLY;
    end
    else
    TmpCRC:=TmpCRC shr 1;
    end;
    result:=TmpCRC;
    end;
    end;

    Переводим её в ST:
    FUNCTION CRC : WORD
    VAR_INPUT
    InData:ARRAY [0..10] OF BYTE;
    DataLng:WORD;
    END_VAR
    VAR
    i, TmpCRC:WORD;
    j:BYTE;


    END_VAR
    CRC:=16#0;
    FOR i:=0 TO (DataLng-1) DO
    TmpCRC:=CRC XOR InData[i];
    FOR j:=0 TO 7 DO
    IF (TmpCRC AND 16#0001) <> 0 THEN
    TmpCRC:=SHR(TmpCRC ,1);
    TmpCRC:=TmpCRC XOR 16#08408;
    ELSE
    TmpCRC:=SHR(TmpCRC ,1);
    END_IF
    CRC:=TmpCRC;
    END_FOR
    END_FOR

    В итоге CRC рассчитывается неправильно. Почему - понять не могу

    Причем один запрос обрабатывает верно.
    Пример:
    Данные


    02 03 06 33
    CRC
    DA 81

    Еще один 02 03 06 30, CRC 41 B3.

    Хм, наткнулся на калькулятор, считает правильно - пишет что CRC называется CRC-CCITT (Kermit).
    Пойду дальше гуглить.

    Последний раз редактировалось приборист; 17.03.2015 в 00:03.

  2. #2
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    883

    По умолчанию

    А все дело в том, что к вечеру мозг отказывается работать.
    Все работает

    Тему можно закрывать.

  3. #3

    По умолчанию

    Эта функция рукописная?

  4. #4
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    883

    По умолчанию

    В каком смысле рукописная?
    Функция описана в руководстве на прибор. Я переводил её в ST чтобы наладить обмен c прибором.

  5. #5
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    в примерах овен где-то было такое.

  6. #6
    Пользователь
    Регистрация
    17.06.2016
    Адрес
    Тольятти
    Сообщений
    58

    По умолчанию

    На всякий случай выкладываю полностью рабочую функцию подсчёта CRC для CCNET.

    FUNCTION GetCRC16 : WORD
    VAR_INPUT
    InData: POINTER TO ARRAY[0..255] OF BYTE;
    LenData: WORD;
    END_VAR

    VAR CONSTANT
    CCNET_CRC_POLY: WORD:= 16#8408;
    END_VAR

    VAR
    i, j: INT;
    CRC: WORD;
    END_VAR

    CRC:= 0;
    FOR i:= 0 TO (LenData-1) DO
    CRC:= CRC XOR BYTE_TO_WORD( InData^[ i ]);
    FOR j:=0 TO 7 DO
    IF (CRC AND 16#0001) <> 0 THEN
    CRC:= SHR(CRC, 1);
    CRC:= CRC XOR 16#8408;
    ELSE
    CRC:= SHR(CRC, 1);
    END_IF;
    END_FOR;
    END_FOR;
    GetCRC16:= CRC;

  7. #7

    По умолчанию

    А что такое CCNET ?

  8. #8
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    883

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    А что такое CCNET ?
    https://google.gik-team.com/?q=ccnet+%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%B E%D0%BB

Похожие темы

  1. Modbus RTU CRC16 полином A001h
    от vojt в разделе ПЛК1хх
    Ответов: 46
    Последнее сообщение: 22.05.2021, 16:43
  2. OSCAT.CRC_GEN Веселая CRC16
    от Frayl в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 15.12.2014, 11:00
  3. Расчёт CRC16-CCITT
    от Андрей007 в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 07.11.2014, 11:16
  4. CRC16 Modbus RTU
    от Анзаур в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 14.01.2010, 10:50
  5. Расчет crc16 на PIC16F877
    от Дмитрий777 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 18.12.2008, 18:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •