谁有SPComm的文档资料

gypersonal 2003-09-12 03:17:24
谁有SPComm控件的属性及方法介绍
...全文
30 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂低调 2003-12-22
  • 打赏
  • 举报
回复
这样居然也能通过,那么在我的机器中不灵,为何改为
move(buffer^,rbuf,bufferlength);
后就可以通过?
lxhong1980 2003-11-11
  • 打赏
  • 举报
回复
move(buffer^,pchar(@rbuf^),bufferlength);
改为
move(buffer^,pchar((@rbuf)^),bufferlength);
lxhong1980 2003-11-11
  • 打赏
  • 举报
回复
TObject; Buffer: Pointer; BufferLength: Word);此函数,不知为什么?
var
FComm: TFComm;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..16] of byte;

implementation

{$R *.DFM}

procedure TFComm.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;

procedure TFComm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

//自定义发送数据过程

procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='' ;
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
end;
viewstring:='发送'+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add(' ');
if not commflg then
messagedlg('发送失败 !',mterror,[mbyes],0);
end;



procedure TFComm.Btn_sendClick(Sender: TObject);
begin
sbuf[1]:=byte('a'); //帧头
sbuf[2]:=byte('5'); //命令号
sbuf[3]:=byte('4');
sbuf[4]:=byte($0d);
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0); //帧尾
senddata;//调用发送函数
end;




procedure TFComm.procedure Comm1ReceiveData(Sender: TObject; Buffer:Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring:='';
// move(buffer^,pchar(@rbuf^),bufferlength);???????
move(buffer^,rbuf,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf[i],2)+'';
viewstring:='接收'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');

end;
lxhong1980 2003-11-11
  • 打赏
  • 举报
回复
1.属性:
●CommName:表示 COM1、 COM2等串口的名字,默认是COM2.
●BaudRate: 根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改;
●ParityCheck:表示是否需要奇偶校验;
●ByteSize:根据实际情况设定的字节长度;
●Parity: 奇偶校验位;
●StopBits:停止位,提供1位半;
●SendDataEmpty:这是一个布尔型属性,为 true时表示发送缓存为空,或者发送队列里没
有信息;为 false时表示发送缓存不为空,或者发送队列里有信息。

2.方法
●Startcomm方法用于打开串口,当打开失败时会报错。错误主要有 7种:⑴串口已经打开;
⑵打开串口错误;⑶文件句柄不是通信句柄;⑷不能够安装通信缓存;⑸不能产生事件;⑹
不能产生读进程;⑺不能产生写进程;
●StopComm方法用于关闭串口,没有返回值;
●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方法 是个带有布尔
型返回值的函数,用于将一个字符串发送到写进程,发送成功返回 true,发送失败返回
false。执行此函数将立即得到返回值,发送操作随后执行。该函数有两个参数,其中
pDataToWrite是要发送的字符串, dwSizeofDataToWrite是发送字符串的长度。

3.事件
●OnReceiveData :procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word)
当有数据输入缓存时将触发该事件,在这里可以对从串口收到的数据进行处理。 Buffer中
是收到的数据, BufferLength是收到的数据长度,一般使用mov命令将数 据从缓存读入。
●OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)
当接收数据出现错误时将触发该事件。

具体实现:
单片机端我们使用现成的,avrgcc的gcctest4是个上位机通信例子,正好可以用来发数据。

1.设定 COMM1属性:


●波特率: 9600;
●奇偶校验位:无;
●字节长度: 8;
●停止位: 1;
●串口: COM1。
Memo1中将显示发送和接收的数据。


2.编写源代码


//变量说明


var
fcomm: TFCOMM;
viewstring:string;
rbuf,sbuf:array[1..8] of byte;

//打开串口

procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//关闭串口
procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

//接收过程
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring:=‘’ ;
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+ inttohex(rbuf[i],2)+‘’ ;
viewstring:=‘接收’+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add(‘’ );
end;



solonet 2003-09-12
  • 打赏
  • 举报
回复
我有mscomm控件详解
ekin 2003-09-12
  • 打赏
  • 举报
回复
可以直接看代码的

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧