0% found this document useful (0 votes)
31 views4 pages

Modbus CRC Program

Uploaded by

BlackKite
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views4 pages

Modbus CRC Program

Uploaded by

BlackKite
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

(Programming Tool): (Delphi) Version 3.0 ~ 7.

OTIS-LG Servo Drive ( FDA6000 series ) MODBUS RTU Protocol


. (Source Code) .

: (Component) ‘APDCOMPORT’ Async Professional ( : Turbopower)

. Async Professional Turbopower Source Code

SourceForge.net (http://sourceforge.net/) .

Turbopower (http://www.turbopower.com/) .

Form
Label_TX: TLabel;
Apdcomport
Label_RX: TLabel;

Edit_RX: TEdit;

procedure FormShow(Sender: TObject);

function Make_CRCvalue(Data: array of byte;

nByte:word):Word;

Source Code procedure Btn_SendClick(Sender: TObject);

procedure Btn_CRCClick(Sender: TObject);

unit Modbus_User; procedure ApdComPort1TriggerAvail(CP: TObject;

Count: Word);

interface private

uses { Private declarations }

Windows, Messages, SysUtils, Variants, Classes, Graphics, public

Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, OoMisc, AdPort; { Public declarations }

end;

type

TForm_User = class(TForm) var

ApdComPort1: TApdComPort; Form_User: TForm_User;

Timer1: TTimer;

Edit_TX: TEdit; Const

Btn_CRC: TButton; //CRC Table.

Btn_Send: TButton; CRC_Table: ARRAY[0..255] OF WORD =


($0000,$C0C1,$C181,$0140,$C301,$03C0,$0280,$C24 // APDComport

1,$C601,$06C0,$0780,$C741,$0500,$C5C1,$C481,$0440,$ .

CC01,$0CC0,$0D80,$CD41,$0F00,$CFC1,$CE81,$0E40,$0 procedure TForm_User.FormShow(Sender: TObject);

A00,$CAC1,$CB81,$0B40,$C901,$09C0,$0880,$C841,$D8 begin

01,$18C0,$1980,$D941,$1B00,$DBC1,$DA81,$1A40,$1E0 Form_User.Caption:='OTIS-LG Modbus

0,$DEC1,$DF81,$1F40,$DD01,$1DC0,$1C80,$DC41,$1400, ';

$D4C1,$D581,$1540,$D701,$17C0,$1680,$D641,$D201,$1 Label_TX.Font.Color:=clyellow;

2C0,$1380,$D341,$1100,$D1C1,$D081,$1040,$F001,$30C0, Label_TX.Caption:=' ';

$3180,$F141,$3300,$F3C1,$F281,$3240,$3600,$F6C1,$F78 Edit_TX.Color:=clyellow;

1,$3740,$F501,$35C0,$3480,$F441,$3C00,$FCC1,$FD81,$ Edit_TX.Font.Color:=clblack;

3D40,$FF01,$3FC0,$3E80,$FE41,$FA01,$3AC0,$3B80,$F Edit_TX.Text:=' (16 )';

B41,$3900,$F9C1,$F881,$3840,$2800,$E8C1,$E981,$2940, Label_RX.Font.Color:=clblue;

$EB01,$2BC0,$2A80,$EA41,$EE01,$2EC0,$2F80,$EF41,$ Label_RX.Caption:=' ';

2D00,$EDC1,$EC81,$2C40,$E401,$24C0,$2580,$E541,$27 Edit_RX.Color:=clblue;

00,$E7C1,$E681,$2640,$2200,$E2C1,$E381,$2340,$E101,$ Edit_RX.Font.Color:=clwhite;

21C0,$2080,$E041,$A001,$60C0,$6180,$A141,$6300,$A3 Edit_RX.text:=' (16 )';

C1,$A281,$6240,$6600,$A6C1,$A781,$6740,$A501,$65C0, Btn_CRC.Caption:='CRC ';

$6480,$A441,$6C00,$ACC1,$AD81,$6D40,$AF01,$6FC0,$ Btn_Send.Caption:=' ';

6E80,$AE41,$AA01,$6AC0,$6B80,$AB41,$6900,$A9C1,$

A881,$6840,$7800,$B8C1,$B981,$7940,$BB01,$7BC0,$7A Apdcomport1.ComNumber:=1;//

80,$BA41,$BE01,$7EC0,$7F80,$BF41,$7D00,$BDC1,$BC

81,$7C40,$B401,$74C0,$7580,$B541,$7700,$B7C1,$B681, Apdcomport1.Baud:=9600;//

$7640,$7200,$B2C1,$B381,$7340,$B101,$71C0,$7080,$B0 end;

41,$5000,$90C1,$9181,$5140,$9301,$53C0,$5280,$9241,$9

601,$56C0,$5780,$9741,$5500,$95C1,$9481,$5440,$9C01,$ //Table CRC

5CC0,$5D80,$9D41,$5F00,$9FC1,$9E81,$5E40,$5A00,$9A function TForm_User.Make_CRCvalue(Data: array of byte;

C1,$9B81,$5B40,$9901,$59C0,$5880,$9841,$8801,$48C0,$ nByte: word): Word;

4980,$8941,$4B00,$8BC1,$8A81,$4A40,$4E00,$8EC1,$8F var

81,$4F40,$8D01,$4DC0,$4C80,$8C41,$4400,$84C1,$8581, CRCValue:Word;

$4540,$8701,$47C0,$4680,$8641,$8201,$42C0,$4380,$834 i:integer;

1,$4100,$81C1,$8081,$4040); begin

CRCvalue:=$FFFF;

implementation For i := 1 to nByte do

CRCvalue := Hi(CRCvalue) XOR CRC_Table[ Data[i-1]

{$R *.dfm} XOR Lo(CRCvalue) ];

Result:=CRCvalue;
end; begin

Edit_RX.Text:='';

// DATA CRC . TX_Data_Size:=round(length(Edit_TX.Text)/2);

procedure TForm_User.Btn_CRCClick(Sender: TObject); For i:=1 to TX_Data_Size do

var begin

i,j:integer; j:=i*2-1;

CRC_Data_Len:integer;//CRC TX_Data_Array[i]:=byte(strtoint('$'+Edit_TX.Text[j]+E

dit_TX.Text[j+1]));

CRC_Data_Array:array[1..30]of byte;//CRC end;

Apdcomport1.PutBlock(TX_Data_Array,TX_Data_Size);

Result_CRC:Word;// CRC end;

begin

CRC_Data_Len:=round(length(Edit_TX.Text)/2); //

For i:=1 to CRC_Data_Len do procedure TForm_User.ApdComPort1TriggerAvail(CP:

begin TObject; Count: Word);

j:=i*2-1; var

CRC_Data_Array[i]:=byte(strtoint('$'+Edit_TX.Text[j]+ i:integer;

Edit_TX.Text[j+1])); RX_Char:char;//

end; RX_Array:array[1..200]of string;//

Result_CRC:=Make_CRCValue(CRC_Data_Array,CRC_Da begin

ta_Len); for i:=1 to count do

Edit_TX.Text:=Edit_TX.Text+inttohex(Lo(Result_CRC),2) begin

+inttohex(Hi(Result_CRC),2); RX_Char:=Apdcomport1.GetChar;

end; RX_Array[i]:=inttohex(byte(RX_Char),2);

Edit_RX.Text:=Edit_RX.Text+RX_Array[i];

// end;

procedure TForm_User.Btn_SendClick(Sender: TObject); end;

var

i,j:integer; end.

TX_Data_Size:integer;//

TX_Data_Array:array[1..32]of byte;//
.
OTIS-LG Servo Drive ( FDA6000 series, ID = 1 ) ‘ ’(Controller Type, P2-01, addr:

0x00C8) (Function Code = 0x03) .

1. DATA Frame .
Address Function Start Address No. of Resister CRC
01 03 00 C8 00 01

2. .

3. .

4. ‘CRC ’ CRC .

5. ‘ ’ .

You might also like