非常抱歉,我实在是没有分数了,麻烦哪个大狭帮帮我,把每步的意思写出来。我刚开始学习SPCOMM,非常感谢!
unit FComm;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm, Spin, ExtCtrls;type
TF_comm = class(TForm)
Comm1: TComm;
Memo1: TMemo;
Btn_exit: TButton;
SpinEdit1: TSpinEdit;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
procedure Btn_exitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
F_comm: TF_comm;
Viewstring,Viewstring1,VS2,ReceiveStrBuffer:string;
StringBuf : array[1..32] of string;
i:integer;
rbuf,sbuf:array[1..8] of byte;
rP:^integer;
commflg,send_ok_flg:boolean;
X : Single;
implementation{$R *.DFM}{打开串口}
procedure TF_comm.FormCreate(Sender: TObject);
begin
comm1.StartComm;
end;{关闭串口}
procedure TF_COMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;{发送数据 }
procedure SendData;
var
i:integer;
begin
viewstring:='';
commflg:=true; for i:=1 to 2 do
begin
if not F_Comm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
end;
viewstring:='发送'+viewstring;
F_Comm.memo1.lines.add(viewstring);
// F_Comm.memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;Procedure Ds_Glb_ADDelay;
const
_AA = 12345;
_BB = 54321;
var PI1,PI2 : INTEGER;
begin
for PI1:=1 to 100000000 do PI2 := _AA * _BB ;
end;FUNCTION HEX_ASCII(X:INTEGER):STRING;
BEGIN
CASE X OF
45 : HEX_ASCII := '-';
46 : HEX_ASCII := '.';
48 : HEX_ASCII := '0';
49 : HEX_ASCII := '1';
50 : HEX_ASCII := '2';
51 : HEX_ASCII := '3';
52 : HEX_ASCII := '4';
53 : HEX_ASCII := '5';
54 : HEX_ASCII := '6';
55 : HEX_ASCII := '7';
56 : HEX_ASCII := '8';
57 : HEX_ASCII := '9';
ELSE HEX_ASCII := ' ';
END;
END;
{接收过程}procedure TF_COMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring :='';
viewstring1:='';
rP := @rbuf;
IF (BufferLength=8) THEN BEGIN
move(buffer^,pchar(rP^),bufferlength);
for i:=1 to bufferlength do begin
viewstring :=viewstring+inttohex(rbuf[i],2)+'';
viewstring1:=viewstring1+HEX_ASCII(rbuf[i]);
end;
viewstring:='接受'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add(viewstring1);
memo1.lines.add('');{收到无效数据,202020202020200A ,SEND_OK_FLG:= FLASE}
Send_OK_Flg:= FALSE;
FOR I:=2 TO 7 DO BEGIN
IF (rbuf[i]=32) THEN Send_OK_Flg:=( FALSE OR Send_OK_Flg)
ELSE Send_OK_Flg:=( TRUE OR Send_OK_Flg);
END;
IF NOT Send_OK_Flg THEN Send_OK_Flg:= FALSE
ELSE Send_OK_Flg:= TRUE; END
ELSE Send_OK_Flg:= False;
end;
(*
procedure TF_COMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var s: string;
begin
SetLength(S, BufferLength); //接收RS232的數據並顯示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;*)procedure TF_comm.Btn_exitClick(Sender: TObject);
begin
{ comm1.StopComm; } F_comm.Close;
end;Procedure Master_SendData(NUM:BYTE;VAR ReceiveStrBuffer:String);
VAR X ,COUNT : BYTE;
BEGIN
SEND_OK_FLG:=FALSE;
COUNT :=0;
REPEAT
X := 64+NUM;
Sbuf[1]:=Byte(X); {帧头}
// Sbuf[1]:=Byte($15); {帧头}
Sbuf[2]:=Byte($0A); {命令号}
SendData;{调用发送函数}
Sleep(70);
Application.ProcessMessages;
IF SEND_OK_FLG THEN StringBuf[NUM]:= viewString1;
ReceiveStrBuffer:= StringBuf[NUM];
INC(COUNT);
UNTIL SEND_OK_FLG OR (COUNT>=2);
END;Procedure BiaoStr_To_Val(S:String; Var Y:Single );
begin
IF S='' Then S := '0';
Y:= StrToFloat(S);
Y:= ABS(Y);
end;procedure TF_comm.Button1Click(Sender: TObject);
var y:byte;
begin
y:=SpinEdit1.Value;
Master_SendData(y, VS2);
Edit1.Text := VS2;
BiaoStr_To_Val(VS2, X);
Edit1.Text := FloatToStrF(X,ffGeneral,6,1);
end;
unit FComm;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm, Spin, ExtCtrls;type
TF_comm = class(TForm)
Comm1: TComm;
Memo1: TMemo;
Btn_exit: TButton;
SpinEdit1: TSpinEdit;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
procedure Btn_exitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
F_comm: TF_comm;
Viewstring,Viewstring1,VS2,ReceiveStrBuffer:string;
StringBuf : array[1..32] of string;
i:integer;
rbuf,sbuf:array[1..8] of byte;
rP:^integer;
commflg,send_ok_flg:boolean;
X : Single;
implementation{$R *.DFM}{打开串口}
procedure TF_comm.FormCreate(Sender: TObject);
begin
comm1.StartComm;
end;{关闭串口}
procedure TF_COMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;{发送数据 }
procedure SendData;
var
i:integer;
begin
viewstring:='';
commflg:=true; for i:=1 to 2 do
begin
if not F_Comm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
end;
viewstring:='发送'+viewstring;
F_Comm.memo1.lines.add(viewstring);
// F_Comm.memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;Procedure Ds_Glb_ADDelay;
const
_AA = 12345;
_BB = 54321;
var PI1,PI2 : INTEGER;
begin
for PI1:=1 to 100000000 do PI2 := _AA * _BB ;
end;FUNCTION HEX_ASCII(X:INTEGER):STRING;
BEGIN
CASE X OF
45 : HEX_ASCII := '-';
46 : HEX_ASCII := '.';
48 : HEX_ASCII := '0';
49 : HEX_ASCII := '1';
50 : HEX_ASCII := '2';
51 : HEX_ASCII := '3';
52 : HEX_ASCII := '4';
53 : HEX_ASCII := '5';
54 : HEX_ASCII := '6';
55 : HEX_ASCII := '7';
56 : HEX_ASCII := '8';
57 : HEX_ASCII := '9';
ELSE HEX_ASCII := ' ';
END;
END;
{接收过程}procedure TF_COMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring :='';
viewstring1:='';
rP := @rbuf;
IF (BufferLength=8) THEN BEGIN
move(buffer^,pchar(rP^),bufferlength);
for i:=1 to bufferlength do begin
viewstring :=viewstring+inttohex(rbuf[i],2)+'';
viewstring1:=viewstring1+HEX_ASCII(rbuf[i]);
end;
viewstring:='接受'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add(viewstring1);
memo1.lines.add('');{收到无效数据,202020202020200A ,SEND_OK_FLG:= FLASE}
Send_OK_Flg:= FALSE;
FOR I:=2 TO 7 DO BEGIN
IF (rbuf[i]=32) THEN Send_OK_Flg:=( FALSE OR Send_OK_Flg)
ELSE Send_OK_Flg:=( TRUE OR Send_OK_Flg);
END;
IF NOT Send_OK_Flg THEN Send_OK_Flg:= FALSE
ELSE Send_OK_Flg:= TRUE; END
ELSE Send_OK_Flg:= False;
end;
(*
procedure TF_COMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var s: string;
begin
SetLength(S, BufferLength); //接收RS232的數據並顯示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;*)procedure TF_comm.Btn_exitClick(Sender: TObject);
begin
{ comm1.StopComm; } F_comm.Close;
end;Procedure Master_SendData(NUM:BYTE;VAR ReceiveStrBuffer:String);
VAR X ,COUNT : BYTE;
BEGIN
SEND_OK_FLG:=FALSE;
COUNT :=0;
REPEAT
X := 64+NUM;
Sbuf[1]:=Byte(X); {帧头}
// Sbuf[1]:=Byte($15); {帧头}
Sbuf[2]:=Byte($0A); {命令号}
SendData;{调用发送函数}
Sleep(70);
Application.ProcessMessages;
IF SEND_OK_FLG THEN StringBuf[NUM]:= viewString1;
ReceiveStrBuffer:= StringBuf[NUM];
INC(COUNT);
UNTIL SEND_OK_FLG OR (COUNT>=2);
END;Procedure BiaoStr_To_Val(S:String; Var Y:Single );
begin
IF S='' Then S := '0';
Y:= StrToFloat(S);
Y:= ABS(Y);
end;procedure TF_comm.Button1Click(Sender: TObject);
var y:byte;
begin
y:=SpinEdit1.Value;
Master_SendData(y, VS2);
Edit1.Text := VS2;
BiaoStr_To_Val(VS2, X);
Edit1.Text := FloatToStrF(X,ffGeneral,6,1);
end;
解决方案 »
- dbgrideh 导出 excel 文件后多表头的问题
- 关于ado读取dbf文件的索引问题(急)
- ★★★★★CSDN成都网友会最终计划,欢迎在成都的朋友参加★★★★★
- 914(就要死)不高兴了,散分
- ★★★Oracle BLOB字段的读问题★★★
- 关于在向固定格式的Word模版中导入数据的问题,急!!!!!!!!!!!!!!!
- 我用delphi6创建远程数据模块的时候,怎样才能出现sever.tlb的类型库文件的窗口.谢谢!!
- 那位能把这段函数转换为vb或解释一下各行的意思:详细电最好
- ***********跪求delphi三层例子***********
- 在Delphi中可以做VB下用的OCX控件吗?
- 哪里可下载波到查看 系统配置 (CPU\硬盘、显卡、内存)的VCL
- 有何方法实现网页只能在twebbrowser中打开?
http://download.csdn.net/source/1498644