procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); procedure Button1Click(Sender: TObject);//接受 private { Private declarations } public { Public declarations } end;var Form1: TForm1; Viewstring:string; Viewstring2:string; i:integer; abuf:array[1..4] of byte; //水位查询命令数组 01 频率 bbuf:array[1..4] of byte; //水位查询命令数组 02 温度 cbuf:array[1..4] of byte; //水位查询命令数组 03 频率 dbuf:array[1..4] of byte; //水位查询命令数组 04 温度
Current1_1, Current1_2, Current1_3, // 渗压频率 .. Current4_1, Current4_2, Current4_3: real; Surface1_1, Surface1_2, Surface1_3, //断面渗压 .. Surface4_1, Surface4_2, Surface4_3: real; x:string; z:string; s:string; a:string; b:string;implementation{$R *.dfm} //打开串口 procedure TForm1.FormShow(Sender: TObject); begin comm1.StartComm; end; //关闭串口procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin comm1.StopComm; end; //发送数据 //自定义的发送过程 procedure Tform1.send1; var i:integer; commflg:boolean; begin viewstring:=''; commflg:=true; for i:=1 to 4 do begin if not Form1.comm1.writecommdata(@abuf[i],1) then begin commflg:=false; break; end;sleep(2); {发送时字节间的延时} viewstring:=viewstring+inttohex(abuf[i],2)+' '; end; viewstring:='发送'+viewstring; memo1.lines.add(viewstring); if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);end; //自定义的发送过程 procedure Tform1.send2; var i:integer; commflg:boolean; begin viewstring:=''; commflg:=true; for i:=1 to 4 do begin if not Form1.comm1.writecommdata(@bbuf[i],1) then begin commflg:=false; break; end; sleep(2); {发送时字节间的延时} viewstring:=viewstring+inttohex(bbuf[i],2)+' '; end; viewstring:='发送'+viewstring; memo3.lines.add(viewstring); if not commflg then messagedlg('发送失败!',mterror,[mbyes],0); end;procedure Tform1.senddata3; var begin end; procedure Tform1.senddata4; varbegin end;//接收过程 procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); var i:integer; y:integer; systime:Tdatetime; beginviewstring:=''; move(buffer^,pchar(@rbuf)^,bufferlength); for i:=1 to bufferlength doviewstring:=viewstring+inttohex(rbuf[i],2)+' '; s:=inttohex(rbuf[3],2); a:='01'; b:='02'; c:='03'; d:='04'; e:='05'; f:='06'; g:='07'; h:='08'; if s=a then begin Current1_1:=strtoint('$'+inttohex(rbuf[3],2))*2; //将字符串转换成整形再进行计算 viewstring:='Current1_1 '+viewstring+'systime'; memo2.lines.add(viewstring); memo2.Lines.add(z); end else if s=b then begin Current1_2:=strtoint('$'+inttohex(rbuf[3],2))*2; viewstring:='Current1_2 '+viewstring; memo4.lines.add(viewstring);end else if s=c then begin Current1_3:=strtoint('$'+inttohex(rbuf[3],2))*2; viewstring:='Current1_3 '+viewstring; memo6.lines.add(viewstring);end .... else begin messagedlg('发送失败!',mterror,[mbyes],0); end; //senddata; end; procedure TForm1.Button1Click(Sender: TObject); begin abuf[1]:=byte($31); abuf[2]:=byte($13); abuf[3]:=byte($01); abuf[4]:=byte($45);bbuf[1]:=byte($31); bbuf[2]:=byte($13); bbuf[3]:=byte($02); bbuf[4]:=byte($46); .... senddata1;{调用发送函数} sleep(2000); senddata2; sleep(2000); senddata3; .....end;procedure Tform1.senddata;begin try with ADOStoredProc1 do begin Parameters.Clear; Parameters.Refresh; Parameters.ParamByName('@systime').Value := now; Surface1_1 := Current1_1; Surface1_2 := Current1_2; Surface1_3 := Current1_3; ...
数据库格式
systime Surface1_1 Surface1_2 Surface1_3....unit Unit1; procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure senddata;//发送数据到数据库 procedure send1;//发送命令到串口
procedure send2;
procedure send3;
procedure send4;
procedure send5;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
procedure Button1Click(Sender: TObject);//接受 private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Viewstring:string;
Viewstring2:string;
i:integer;
abuf:array[1..4] of byte; //水位查询命令数组 01 频率
bbuf:array[1..4] of byte; //水位查询命令数组 02 温度
cbuf:array[1..4] of byte; //水位查询命令数组 03 频率
dbuf:array[1..4] of byte; //水位查询命令数组 04 温度
Current1_1, Current1_2, Current1_3, // 渗压频率
..
Current4_1, Current4_2, Current4_3: real;
Surface1_1, Surface1_2, Surface1_3, //断面渗压
..
Surface4_1, Surface4_2, Surface4_3: real;
x:string;
z:string;
s:string;
a:string;
b:string;implementation{$R *.dfm}
//打开串口
procedure TForm1.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//关闭串口procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
//发送数据
//自定义的发送过程
procedure Tform1.send1;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 4 do
begin
if not Form1.comm1.writecommdata(@abuf[i],1) then
begin
commflg:=false;
break;
end;sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(abuf[i],2)+' ';
end;
viewstring:='发送'+viewstring;
memo1.lines.add(viewstring);
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);end;
//自定义的发送过程
procedure Tform1.send2;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 4 do
begin
if not Form1.comm1.writecommdata(@bbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(bbuf[i],2)+' ';
end;
viewstring:='发送'+viewstring;
memo3.lines.add(viewstring);
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;procedure Tform1.senddata3;
var
begin
end;
procedure Tform1.senddata4;
varbegin
end;//接收过程
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
y:integer;
systime:Tdatetime;
beginviewstring:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength doviewstring:=viewstring+inttohex(rbuf[i],2)+' ';
s:=inttohex(rbuf[3],2);
a:='01';
b:='02';
c:='03';
d:='04';
e:='05';
f:='06';
g:='07';
h:='08';
if s=a then
begin
Current1_1:=strtoint('$'+inttohex(rbuf[3],2))*2; //将字符串转换成整形再进行计算
viewstring:='Current1_1 '+viewstring+'systime';
memo2.lines.add(viewstring);
memo2.Lines.add(z);
end
else if s=b then
begin
Current1_2:=strtoint('$'+inttohex(rbuf[3],2))*2;
viewstring:='Current1_2 '+viewstring;
memo4.lines.add(viewstring);end
else if s=c then
begin
Current1_3:=strtoint('$'+inttohex(rbuf[3],2))*2;
viewstring:='Current1_3 '+viewstring;
memo6.lines.add(viewstring);end
....
else
begin
messagedlg('发送失败!',mterror,[mbyes],0);
end;
//senddata;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
abuf[1]:=byte($31);
abuf[2]:=byte($13);
abuf[3]:=byte($01);
abuf[4]:=byte($45);bbuf[1]:=byte($31);
bbuf[2]:=byte($13);
bbuf[3]:=byte($02);
bbuf[4]:=byte($46);
....
senddata1;{调用发送函数}
sleep(2000);
senddata2;
sleep(2000);
senddata3;
.....end;procedure Tform1.senddata;begin
try
with ADOStoredProc1 do
begin
Parameters.Clear;
Parameters.Refresh;
Parameters.ParamByName('@systime').Value := now;
Surface1_1 := Current1_1;
Surface1_2 := Current1_2;
Surface1_3 := Current1_3;
...
Parameters.ParamByName('@Surface1_1').Value := Surface1_1;
Parameters.ParamByName('@Surface1_2').Value := Surface1_2;
Parameters.ParamByName('@Surface1_3').Value := Surface1_3;
.. ExecProc;
end; except
// RzStatusPane1.Caption := '未能将数据送SQL Server数据库,采集失败,请重新采集!'
end;
end;end.