0% found this document useful (0 votes)
11 views

Modbus CRC Program

Uploaded by

BlackKite
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Modbus CRC Program

Uploaded by

BlackKite
Copyright
© © All Rights Reserved
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