Add(MainForm,4317713,77,161)
{
Left=10
Top=10
Width=424
Height=326
Position=1
}
Add(Edit,4573438,280,196)
{
Left=20
Top=40
Width=102
Text=""
link(onChange,12825400:doConvert1,[(348,202)(348,153)])
}
Add(Edit,10417654,483,196)
{
Left=130
Top=40
Width=90
Text=""
}
Add(Edit,8942470,280,154)
{
Left=20
Top=10
Width=100
Text=""
link(onChange,12825400:doConvert,[(348,160)(348,146)])
}
Add(Edit,678435,483,154)
{
Left=130
Top=10
Width=90
Text=""
}
Add(InlineCode,12825400,385,140)
{
WorkPoints=#9:doConvert|10:doConvert1|10:doConvert2|10:doConvert3|10:doConvert4|10:doConvert5|10:doConvert6|10:doConvert7|
EventPoints=#8:onResult|9:onResult1|9:onResult2|9:onResult3|9:onResult4|9:onResult5|9:onResult6|9:onResult7|
Code=#0:|15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|5: |9: public|0:|0:|49:onResult :THI_Event; //CRC-16 Standart init $0000|47:onResult1:THI_Event; //CRC-16 Modbus init $FFFF|38:onResult2:THI_Event; //CRC-16 KERMIT |30:onResult3:THI_Event; //CRC-DNP|41:onResult4:THI_Event; //CRC-CCITT (XModem)|43:onResult5:THI_Event; //CRC-CCITT init $FFFF|43:onResult6:THI_Event; //CRC-CCITT init $1D0F|29:onResult7:THI_Event; //CRC-32|0:|0:|0:|0:|3: |79:procedure doConvert (var D:TData; Index:word); //CRC-16 Standart init $0000 |77:procedure doConvert1(var D:TData; Index:word); //CRC-16 Modbus init $FFFF|64:procedure doConvert2(var D:TData; Index:word); //CRC-16 KERMIT|58:procedure doConvert3(var D:TData; Index:word); //CRC-DNP|69:procedure doConvert4(var D:TData; Index:word); //CRC-CCITT (XModem)|71:procedure doConvert5(var D:TData; Index:word); //CRC-CCITT init $FFFF|71:procedure doConvert6(var D:TData; Index:word); //CRC-CCITT init $1D0F|58:procedure doConvert7(var D:TData; Index:word); //CRC-32 |0:|1: |0:|5: end;|0:|14:implementation|0:|0:|5:const|25:P16 : word = $A001;|25:P16KERMIT : word = $8408;|25:P16DNP : word = $A6BC;|25:P16CCITT : word = $1021;|33:P32 : longword = $EDB88320;|0:|0:|0:|0:|3:var|37:crc16 : Array[0..255] of Word;|37:crc16kermit : Array[0..255] of Word;|37:crc16dnp : Array[0..255] of Word;|37:crc16ccitt : Array[0..255] of Word;|41:crc32 : Array[0..255] of LongWord;|0:|32:procedure THiAsmClass.doConvert;|3:var|14:i,j : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|5:begin|42:// создаем таблицу polynom $A001 CRC-16|18:for i:=0 to 255 do|5:begin|9:crc := 0;|5:l:=i;|16:for j:=0 to 7 do|5:begin|84:if ((crc xor l) and $0001) <> 0 then crc:= (crc Shr 1) xor P16 else crc:= crc Shr 1;|12:l:= l Shr 1;|4:end;|15:crc16[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $0000;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|64: CRCvalue := Hi(CRCvalue) XOR crc16 [ q^ XOR Lo(CRCvalue) ];|12: INC(q);|9: end;|55: _hi_CreateEvent (D,@onResult, Int2Hex(CRCvalue,4) );|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert1;|3:var|14:i,j : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|5:begin|44:// создаем таблицу polynom $A001 CRC-16 |18:for i:=0 to 255 do|5:begin|9:crc := 0;|5:l:=i;|16:for j:=0 to 7 do|5:begin|84:if ((crc xor l) and $0001) <> 0 then crc:= (crc Shr 1) xor P16 else crc:= crc Shr 1;|12:l:= l Shr 1;|4:end;|15:crc16[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $FFFF;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|64: CRCvalue := Hi(CRCvalue) XOR crc16 [ q^ XOR Lo(CRCvalue) ];|12: INC(q);|9: end;|10: |54: _hi_CreateEvent (D,@onResult1, Int2Hex(CRCvalue,4) );|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert2;|3:var|26:i,j,tmp_l,tmp_h : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|5:begin|49:// создаем таблицу polynom $8408 CRC-16 KERMIT|18:for i:=0 to 255 do|5:begin|9:crc := 0;|5:l:=i;|16:for j:=0 to 7 do|5:begin|90:if ((crc xor l) and $0001) <> 0 then crc:= (crc Shr 1) xor P16KERMIT else crc:= crc Shr 1;|12:l:= l Shr 1;|4:end;|21:crc16kermit[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $0000;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|70: CRCvalue := Hi(CRCvalue) XOR crc16kermit [ q^ XOR Lo(CRCvalue) ];|12: INC(q);|9: end;|28:// меняем Hi Lo местами |38:tmp_l := (CRCvalue and $ff00) Shr 8;|38:tmp_h := (CRCvalue and $00ff) Shl 8;|30:CRCvalue:= tmp_l Or tmp_h ; |52:_hi_CreateEvent (D,@onResult2, Int2Hex(CRCvalue,4));|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert3;|3:var|26:i,j,tmp_l,tmp_h : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|5:begin|43:// создаем таблицу polynom $A6BC CRC-DNP|18:for i:=0 to 255 do|5:begin|9:crc := 0;|5:l:=i;|16:for j:=0 to 7 do|5:begin|87:if ((crc xor l) and $0001) <> 0 then crc:= (crc Shr 1) xor P16DNP else crc:= crc Shr 1;|12:l:= l Shr 1;|4:end;|18:crc16dnp[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $0000;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|67: CRCvalue := Hi(CRCvalue) XOR crc16dnp [ q^ XOR Lo(CRCvalue) ];|12: INC(q);|9: end;|23:// меняем Hi Lo местами|28:CRCvalue:= Not CRCvalue; |38:tmp_l := (CRCvalue and $ff00) Shr 8;|38:tmp_h := (CRCvalue and $00ff) Shl 8;|28:CRCvalue:= tmp_l Or tmp_h ;|2: |52:_hi_CreateEvent (D,@onResult3, Int2Hex(CRCvalue,4));|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert4;|3:var|14:i,j : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|8:begin |55:// создаем таблицу polynom $1021 CRC-CCITT (XModem)|18:for i:=0 to 255 do|5:begin|9:crc := 0;|13:l:=(i Shl 8);|16:for j:=0 to 7 do|5:begin|89:if ((crc xor l) and $8000) <> 0 then crc:= (crc Shl 1) xor P16CCITT else crc:= crc Shl 1;|12:l:= l Shl 1;|4:end;|20:crc16ccitt[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $0000;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|75: CRCvalue := (CRCvalue Shl 8) XOR crc16ccitt [(CRCvalue Shr 8) XOR q^];|12: INC(q);|18: end; |54: _hi_CreateEvent (D,@onResult4, Int2Hex(CRCvalue,4) );|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert5;|3:var|14:i,j : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|8:begin |57:// создаем таблицу polynom $1021 CRC-CCITT init $FFFF|18:for i:=0 to 255 do|5:begin|9:crc := 0;|13:l:=(i Shl 8);|16:for j:=0 to 7 do|5:begin|89:if ((crc xor l) and $8000) <> 0 then crc:= (crc Shl 1) xor P16CCITT else crc:= crc Shl 1;|12:l:= l Shl 1;|4:end;|20:crc16ccitt[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $FFFF;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|75: CRCvalue := (CRCvalue Shl 8) XOR crc16ccitt [(CRCvalue Shr 8) XOR q^];|12: INC(q);|18: end; |54: _hi_CreateEvent (D,@onResult5, Int2Hex(CRCvalue,4) );|6: end;|4:end;|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert6;|3:var|14:i,j : integer;|13:crc,l : word;|11:s : string;|9:q: ^Byte;|15:CRCvalue: WORD;|0:|8:begin |57:// создаем таблицу polynom $1021 CRC-CCITT init $1D0F|18:for i:=0 to 255 do|5:begin|9:crc := 0;|13:l:=(i Shl 8);|16:for j:=0 to 7 do|5:begin|89:if ((crc xor l) and $8000) <> 0 then crc:= (crc Shl 1) xor P16CCITT else crc:= crc Shl 1;|12:l:= l Shl 1;|4:end;|20:crc16ccitt[i]:= crc;|4:end;|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|17:CRCvalue:= $1D0F;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|75: CRCvalue := (CRCvalue Shl 8) XOR crc16ccitt [(CRCvalue Shr 8) XOR q^];|12: INC(q);|18: end; |54: _hi_CreateEvent (D,@onResult6, Int2Hex(CRCvalue,4) );|6: end;|4:end;|0:|79://=============================================================================|0:|33:procedure THiAsmClass.doConvert7;|3:var|13:i,j: integer;|15:crc : Longword;|11:s : string;|9:q: ^Byte;|19:CRCvalue: LongWORD;|0:|8:begin |46:// создаем таблицу polynom $EDB88320 CRC-32|18:for i:=0 to 255 do|5:begin|9:crc := i;|0:|16:for j:=0 to 7 do|5:begin|80:if (crc and $00000001) <> 0 then crc:= (crc Shr 1) xor P32 else crc:= crc Shr 1;|15:crc32[i]:= crc;|4:end;|4:end;|0:|16:// считаем CRC |17:s := ToString(D);|13:q := @(s[1]);|21:CRCvalue:= $FFFFFFFF;|21:if length(s) > 0 then|8: BEGIN|31: FOR i := 1 TO length(s) DO|10: BEGIN|78: CRCvalue := (CRCvalue Shr 8)XOR crc32 [ q^ XOR (CRCvalue and $000000FF)];|12: INC(q);|9: end;|36: CRCvalue:= not CRCvalue; |54: _hi_CreateEvent (D,@onResult7, Int2Hex(CRCvalue,8) );|6: end;|4:end;|0:|0:|4:end.|0:|0:|0:|6: |
link(onResult,678435:doText,[(450,146)(450,160)])
link(onResult1,10417654:doText,[(450,153)(450,202)])
link(onResult2,16028020:doText,[(450,160)(450,244)])
link(onResult3,12316974:doText,[(450,167)(450,286)])
link(onResult4,14144167:doText,[(450,174)(450,328)])
link(onResult5,7475140:doText,[(450,181)(450,370)])
link(onResult6,9074800:doText,[(450,188)(450,412)])
link(onResult7,4913320:doText,[(450,195)(450,454)])
}
Add(Edit,8826676,280,238)
{
Left=20
Top=70
Width=102
Text=""
link(onChange,12825400:doConvert2,[(348,244)(348,160)])
}
Add(Edit,16028020,483,238)
{
Left=130
Top=70
Width=90
Text=""
}
Add(Edit,2775784,280,280)
{
Left=20
Top=100
Width=102
Text=""
link(onChange,12825400:doConvert3,[(348,286)(348,167)])
}
Add(Edit,12316974,483,280)
{
Left=130
Top=100
Width=90
Text=""
}
Add(Edit,169531,280,322)
{
Left=20
Top=125
Width=102
Text=""
link(onChange,12825400:doConvert4,[(348,328)(348,174)])
}
Add(Edit,14144167,483,322)
{
Left=130
Top=125
Width=90
Text=""
}
Add(Edit,4599238,280,364)
{
Left=20
Top=150
Width=102
Text=""
link(onChange,12825400:doConvert5,[(348,370)(348,181)])
}
Add(Edit,7475140,483,364)
{
Left=130
Top=150
Width=90
Text=""
}
Add(Edit,15715792,280,406)
{
Left=20
Top=180
Width=102
Text=""
link(onChange,12825400:doConvert6,[(348,412)(348,188)])
}
Add(Edit,9074800,483,406)
{
Left=130
Top=180
Width=90
Text=""
}
Add(Edit,7414660,280,448)
{
Left=20
Top=215
Width=102
Text=""
link(onChange,12825400:doConvert7,[(348,454)(348,195)])
}
Add(Edit,4913320,483,448)
{
Left=130
Top=215
Width=90
Text=""
}
Add(Label,4171571,175,161)
{
Left=235
Top=15
Width=133
Height=17
Caption="CRC-16 Standart init $0000"
}
Add(Label,10876942,175,196)
{
Left=235
Top=45
Width=137
Height=17
Caption="CRC-16 Modbus init $FFFF"
}
Add(Label,9610502,175,231)
{
Left=235
Top=75
Width=85
Height=17
Caption="CRC-16 KERMIT"
}
Add(Label,3166566,175,259)
{
Left=235
Top=105
Width=52
Height=17
Caption="CRC-DNP"
}
Add(Label,4995289,175,287)
{
Left=235
Top=130
Width=111
Height=17
Caption="CRC-CCITT (XModem)"
}
Add(Label,9289211,168,308)
{
Left=235
Top=160
Width=109
Height=17
Caption="CRC-CCITT init $FFFF"
}
Add(Label,7661338,168,343)
{
Left=235
Top=190
Width=111
Height=17
Caption="CRC-CCITT init $1D0F"
}
Add(Label,11424250,168,371)
{
Left=235
Top=220
Width=41
Height=17
Caption="CRC-32"
}
Этот топик читают: Гость
|
Ответов: 62
Рейтинг: 1
|
|||
|
Подсчет CRC16/32 для строк. Код не оптимизирован, зато удобно для понимания. исправил, теперь компилируется и под FPC и под Delphi
|
|||
| карма: 0 |
|
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
|
Странно у меня ошибка в коде при компилляции
|
|||
| карма: 10 |
|
|
Ответов: 62
Рейтинг: 1
|
|||
|
Assasin писал(а): Странно у меня ошибка в коде при компилляцииСборка завершена. под delphi компилятором не пробовал, не стоит он просто. |
|||
| карма: 0 |
|
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
|
А вы не думали на счет реализации проекта и под делфи(не везде же можно ФПЦ использовать)?
|
|||
| карма: 10 |
|
|
Ответов: 1161
Рейтинг: 160
|
|||
| карма: 0 |
| ||
| файлы: 1 | code_13247.txt [11.7KB] [1810] |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
|
Получается все дело в расположении procedure и onResult?
|
|||
| карма: 10 |
|
|
Ответов: 1161
Рейтинг: 160
|
|||
|
почти, еще указатели
|
|||
| карма: 0 |
|
|
Ответов: 62
Рейтинг: 1
|
|||
|
LainX писал(а): Assasin, попробуй так |
|||
| карма: 0 |
|
|
Ответов: 62
Рейтинг: 1
|
|||
|
оформил в виде компонента, есть пример. [url] http://hiasm.com/forum_serv.php?q=56&id=243 [/url]
|
|||
| карма: 0 |
| ||
| Голосовали: | kacmem |
9



Поиск
Друзья
Администрация