Unit_ModBus_CRC.pas
上传用户:yongjie826
上传日期:2022-07-22
资源大小:164k
文件大小:1k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit Unit_ModBus_CRC;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, strUtils;
  6. type
  7.   TForm_ModBus_CRC = class(TForm)
  8.     Button1: TButton;
  9.     Edit1: TEdit;
  10.     Edit2: TEdit;
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     Label3: TLabel;
  14.     procedure Edit2Change(Sender: TObject);
  15.     procedure FormCreate(Sender: TObject);
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21. var
  22.   Form_ModBus_CRC: TForm_ModBus_CRC;
  23.   dataArray : Array[0..6] of byte = ($01,$03,$04,$00,$00,$00,$00);//(01,03,00,00,00,02);//
  24. implementation
  25. {$R *.dfm}
  26. function crc(str:String):dword;
  27. var
  28.   i,j,
  29.   crcInt : dword;
  30.   tmp : byte;
  31. begin
  32.   crcInt := $FFFF;
  33.   str := strUtils.AnsiReplaceStr(str,' ','');
  34.   for i:=0 to length(str) div 2 - 1 do
  35.   begin
  36.     tmp := strtoint('$'+copy(str,i*2+1,2));
  37.     crcInt := (crcInt and $FF00) + ((crcInt and $FF) xor tmp) and $FF;
  38.     for j:=1 to 8 do
  39.     begin
  40.       if (crcInt and 1) = 0 then
  41.         crcInt := (crcInt shr 1)
  42.       else
  43.         crcInt := (crcInt shr 1) xor $A001;
  44.     end;
  45.   end;
  46.   result := crcInt;
  47. end;
  48. procedure TForm_ModBus_CRC.Edit2Change(Sender: TObject);
  49. var
  50.   crcR : dword;
  51. begin
  52.   crcR := crc(Edit2.text);
  53.   Edit1.Text := rightstr('0'+inttohex(crcR and $00FF,0),2)+' '+ rightstr('0'+inttohex(crcR shr 8,0),2);
  54. end;
  55. procedure TForm_ModBus_CRC.FormCreate(Sender: TObject);
  56. begin
  57.   Edit2Change(nil);
  58. end;
  59. end.