Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 18:49   #1
Demagog
Пользователь
 
Регистрация: 11.02.2009
Сообщений: 18
По умолчанию Расчет контрольной суммы

Работаю с прибором ПЧС-1 фирмы "Контакт" по интерфейсу RS-485. Пока на стадии планирования и подготовки. Мое будущее приложение будет отправлять запросы по следующему шаблону: Адрес, код команды, размер блока данных n+1, данные 1, данные 2...Данные n. КСмл, КСст.

Остановился на подсчете контрольной суммы CRC-16. В описании прибора есть пример запроса: 255 164 4 188 0 2 36 216. Последние два байта - контрольная сумма. Я процедурку написал, но для этого примера она мне считает контрольную сумму не верно. Всю голову сломал - добрые люди, помогите исправить неработающую процедуру)
Код:
procedure CRC16 (data: array of byte; size: byte; var  crc1, crc2: byte);
var
    crc: word;
    n,b: byte;
    ok: boolean;
begin
    CRC:=$ffff;
    n:=1;
    b:=0;
    REPEAT
      CRC:=data[n] xor (CRC and $ff);
      b:=0;
          REPEAT
          if (CRC and 1)=1 then ok:=true else ok:=false;  
          CRC:=CRC shr 1; 
          if ok then CRC:= CRC XOR $A001;  
          b:=b+1;
          UNTIL b>7;
      n:=n+1;
    UNTIL n>size;
    ShowMessage(inttostr(crc));
    crc1:=crc and $FF; 
    crc2:=(crc shr 8) and $FF; 
end;

procedure TForm1.Button2Click(Sender: TObject); 
var
    data: array [1..8] of byte;
    i: integer;
begin
    edit1.Clear;
    data [1]:=255;
    data [2]:=164;
    data [3]:=4;
    data [4]:=188;
    data [5]:=0;
    data [6]:=2;
    CRC16(data,6,data[7],data[8]);
    for i:=1 to 8 do
        edit1.Text:=edit1.Text+inttostr(data[i])+'  ';
end;
В примере получается КСмл=36, КСст=216, а у меня 0 и 51.... правило расчета КС прилагаю в джипеге
Изображения
Тип файла: jpg ПЧС1 кс.jpg (187.1 Кб, 163 просмотров)
Demagog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по коду расчёта контрольной суммы m-s-2005 Общие вопросы C/C++ 1 26.01.2012 17:19
Вычисление контрольной суммы Natali1 Помощь студентам 0 21.01.2012 20:24
C++ шифрование контрольной суммы freeeeez Помощь студентам 1 22.05.2011 15:10
Алгоритм вычисления контрольной суммы файлов young_W Общие вопросы Delphi 2 11.09.2007 22:22