| Форум РадиоКот https://radiokot.ru/forum/ |
|
| проблема вычисления crc8 под delphi https://radiokot.ru/forum/viewtopic.php?f=24&t=38160 |
Страница 1 из 1 |
| Автор: | mikbur [ Вт ноя 23, 2010 04:21:51 ] |
| Заголовок сообщения: | проблема вычисления crc8 под delphi |
Здравствуйте, уважаемые. возникла необходимость управления железом (С2000 фирмы БОЛИД). Ситуация следущая: с СОМ порта идут посылки вида : 7F 06 01 0D 00 00 BF 7F 06 01 53 00 00 30 02 06 01 01 00 00 D6 03 06 01 01 00 00 E1 04 06 01 01 00 00 64 05 06 01 01 00 00 53 .... где BF для первого случая и 30 для второго... являются CRC-8 перерыл весь инет не один из предложенных вариантов под delpi для вычисления crc не подходят. Подскажите, люди добрые как посчитать crc отталкивался от такого варианта :http://www.programmersforum.ru/showthread.php?t=110937 Код: function GetCRC(S:String):String; var i, j:integer; c:byte; begin c := 0; for i := 1 to length(S) do begin c := c xor ord(S[i]); for j := 0 to 7 do begin if c and $80 = $80 then c := (c shl 1) xor 1 else c := (c shl 1); end; end; result := IntToHex(c, 4); end; edit1.text:=(GetCRC(chr($7F)+chr($06)+chr($01)+chr($0D)+chr($00)+chr($00)); в итоге получаю 7C вместо BF |
|
| Автор: | Liv [ Вт ноя 23, 2010 12:56:40 ] | ||
| Заголовок сообщения: | Re: проблема вычисления crc8 под delphi | ||
Вот этот код считает CRC правильно: Код: CRC: byte; procedure DowCRC(b:Byte); var i:Integer; begin for i:=1 to 8 do begin if Odd(b xor CRC) then CRC:=((CRC xor $18) shr 1) or $80 else CRC:=CRC shr 1; b:=b shr 1; end; end; Еще высылаю утилиту расчета CRC, только вводить строку нужно справа налево: 00000D01067F -> BF
|
|||
| Автор: | mikbur [ Вт ноя 23, 2010 18:38:48 ] |
| Заголовок сообщения: | Re: проблема вычисления crc8 под delphi |
опять тупик не могу разобрвться куда вставлять в код свои значения для вычисления |
|
| Автор: | Liv [ Вт ноя 23, 2010 21:37:32 ] |
| Заголовок сообщения: | Re: проблема вычисления crc8 под delphi |
Как куда? Обнуляете переменную CRC, затем для каждого байта данных вызываете DowCRC(): СRC := 0; DowCRC($7F); DowCRC($06); DowCRC($01); DowCRC($0D); DowCRC($00); DowCRC($00); Получаете CRC = $BF |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


