Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Помогите, CRC-16   Найти похожие ветки 

 
grach   (2005-11-28 15:03) [0]

Пожалуйста, уважаемые, растолкуйте алгоритм вычисления имеющий следующее
описание  :

"The ROC protocol applies a cyclical redundancy check (CRC) to the message
string to produce a 16-bit remainder.
This remainder is referred to as the CRC-16 code. The CRC-16 code is
appended to the end of the message string.
The 16-bit polynomial used by the ROC is the CRC-16:
X16 + X15 + X2 + 1
The standard GPLIB CRC routine is used by the ROC. The ROC calculates CRC by
table lookup,
with the initial condition of 0000 (zeros).
An example:
                   01 02 03 01 B4 04 01 2E 00 33 D3 E4 "

искомое значение 2-а последних байта ^^^^^^.(В описании другой пример,
этот взят из логов монитора порта).
Может кто встречал эту "standard GPLIB CRC routine"  .

Алгоритм используемый Modbus даёт другое значение.

Благодарю  .
С уважением Жигайлов Роман.


 
PeaK ©   (2005-11-28 17:30) [1]

Итак, чего-то программируется, может даже на ком-порт... :-)
А документацию что есть целиком где-нить выложить реально?


 
tesseract ©   (2005-11-29 10:07) [2]

Не моё.

Функция CRC16 из протокола Z/X/Y-modem.

function CalcCRC16(P:PCHAR; Len:word):word;

var iByte,i:word; B:byte;
begin
{$R-}
Result:=$FFFF;
For i:=0 to Len-1 do
begin
 b:=Byte(Pointer(LongInt(P)+iByte)^);
REsult:=(result and $FF00) + (B xor Lo(result));
For i:=1 to 8 do
 begin
  if ((Result and $0001)<>0) then
  result:= (Result shr 1) xor $A001;
else
  result:=(result shr 1);
 end;
end;
{$R+}
end;


 
PeaK ©   (2005-11-29 11:43) [3]

Контрольная сумма CRC высчитывается для того, что бы подтвердить правильность сообщения и попытаться исключить возможность его изменения. Немного работал с разными девайсами, каждая сумма рассчитывается немного по разному :-)
Мануал полный нужен... :-)


 
PAVIA ©   (2005-11-29 23:16) [4]

Тех данных, что привел автор достаточно.

function CalcCRC16(P:PCHAR; Len:word):word;
var i,j: integer;
     t: byte;
     c: word;
begin
c:=0;
for i:=0 to len-1 do
 begin
 t:=Byte(p[i]);
 for j:=1 to 8 do
     begin
     if (t xor c) and 1=1 then
      begin
       c:=(c shr 1) xor $A001;
      end
      else
       c:=c shr 1;
      t:=t shr 1;
     end;
 end;
result:=c;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
14-1133804628
БарЛог
2005-12-05 20:43
2005.12.25
Вот... перевожу статью про ООП с английского...


2-1134218405
Максим
2005-12-10 15:40
2005.12.25
Есть две бочки, надо определить, какая имеет больше объем


2-1133768749
worldmen
2005-12-05 10:45
2005.12.25
Открытие файла по сети.


5-1117790468
Никита
2005-06-03 13:21
2005.12.25
Как сделать чтобы компонент мог размещать на себе другие Контролы


2-1133802468
silver_dragon
2005-12-05 20:07
2005.12.25
проблемы с компилированием(???)