📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, ModbusM, StdCtrls, RzLstBox, ExtCtrls, ComCtrls,IniFiles,
Buttons;
type
TDataByte = array of byte;
TForm1 = class(TForm)
MBM: TModbusM;
Timer1: TTimer;
Panel1: TPanel;
StatusBar1: TStatusBar;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Memo2: TMemo;
procedure MBMResponseReady(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MBMError(Sender: TObject; const ErrorMsg: String);
procedure Timer1Timer(Sender: TObject);
procedure ReadSlave(Code:Byte;Offset:byte;Quantity:Byte);
procedure InitParameter;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
aa:Integer=0;
recv:TDataByte;
curr_length:Integer;
slave_count:Integer;
parameter:array [1..32] of array[1..4] of Integer;
implementation
{$R *.dfm}
procedure TForm1.InitParameter;
var
temp:Tinifile;
count,i:integer;
begin
temp:=Tinifile.create('config.ini');
count:=temp.ReadInteger('SLAVE','COUNT',0);
slave_count:=count;
//ListBox1.Items.Add(IntToStr(count));
for i:=1 to count do
begin
parameter[i][1]:=temp.ReadInteger('STATION'+IntToStr(i),'ADDRESS',0);
parameter[i][2]:=temp.ReadInteger('STATION'+IntToStr(i),'CODE',0);
parameter[i][3]:=temp.ReadInteger('STATION'+IntToStr(i),'OFFSET',0);
parameter[i][4]:=temp.ReadInteger('STATION'+IntToStr(i),'QUANTITY',0);
end;
temp.Free;
end;
procedure TForm1.ReadSlave(Code:Byte;Offset:byte;Quantity:Byte);
begin
MBM.FunctionCode:=Code;
MBM.Offset:=Offset;
MBM.Quantity:=Quantity;
MBM.Query;
end;
procedure TForm1.MBMResponseReady(Sender: TObject);
var
i:Integer;
hi,lo:Word;
value:array [0..128] of Word;
temp:STRING;
begin
for i:=0 to MBM.Quantity-1 do
begin
hi:=MBM.ReadValues[i*2]*256;
lo:=MBM.ReadValues[i*2+1];
temp:=temp+IntToHex(hi+lo,4)+' ';
end;
Memo1.Text:=temp;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MBM.Connect;
InitParameter;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
mbm.Disconnect;
end;
procedure TForm1.MBMError(Sender: TObject; const ErrorMsg: String);
begin
Memo2.Lines.Add(ErrorMsg);
//StatusBar1.Panels.Items[0].Text:='超时时间';
aa:=0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if MBM.Busy then Panel1.Color:=clRed
else panel1.Color:=clLime;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i:integer;
begin
if not MBM.Busy then
begin
for i:=0 to 1000 do
begin
end;
Memo1.Clear;
MBM.SlaveId:=StrToInt(Edit4.text);
MBM.FunctionCode:=StrToInt(Edit1.text);
MBM.Offset:=StrToInt(Edit2.text);
MBM.Quantity:=StrToInt(Edit3.text);
MBM.Query;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
t1,t2:int64;
r1:int64;
begin
t1:=GetTickCount;//获取开始计数 WINDOWS API
sleep(1000);{do...}//执行要计时的代码
t2:=GetTickCount;//获取结束计数值
r1:=t2-t1;//取得计时时间,单位毫秒(ms)
showmessage(inttostr(r1));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -