spcomm为什么不能触发接收数据事件(50分)

  • 主题发起人 主题发起人 zts566
  • 开始时间 开始时间
Z

zts566

Unregistered / Unconfirmed
GUEST, unregistred user!
unit comm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
type
TFComm = class(TForm)
Memo1: TMemo;
BtnSend: TButton;
Comm1: TComm;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure BtnSendClick(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
procedure SendData;
public
{ Public declarations }
end;

var
FComm: TFComm;
ViewString:string;
i:integer;
sbuf:array[1..6] of byte;
implementation
{$R *.dfm}
procedure TFComm.FormShow(Sender: TObject);
begin
self.Comm1.StartComm;
end;

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

procedure TFComm.SendData;
var
i:integer;
commflg:boolean;
str:string;
count:integer;
begin
viewString:='';
commflg:=true;
for i:=1 to 8do
begin
if not self.Comm1.WriteCommData(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2);
{发送时字节间的延时}
ViewString:=ViewString+inttohex(sbuf,2)+' ';
//inttohex():10-16进制的转换
end;
ViewString:='发送'+ViewString;
self.Memo1.Lines.Add(ViewString);
self.Memo1.Lines.Add('');
if not commflg then
MessageDlg('发送失败!', mtError, [], 0);
end;

procedure TFComm.BtnSendClick(Sender: TObject);
begin
sbuf[1]:=byte($f0);
{帧头}
sbuf[2]:=byte($01);
{命令号}
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($0f);
{帧尾}
SendData;
//发送数据;
end;

procedure TFComm.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
i:integer;
recivedata:array of byte;
rbuf:array of byte;
begin
showmessage('dd');
ViewString:='';
move(buffer^,recivedata,bufferlength);
for i:=1 to bufferlengthdo
begin
ViewString:=ViewString+inttohex(recivedata,2)+' ';
end;
ViewString:='接受'+ViewString;
self.Memo1.Lines.Add(ViewString);
self.Memo1.Lines.Add('');
end;

end.

这是在网上找到的一个例子,为什么就是没有触发ReceiveData()事件呢?
 
SPComm 我用过 很多啊
你有问题

你的下位机 发了数据没有?
 
我是刚开始学的.
我在发送完数据后,又调用了一下接收数据的事件,
这样就可以接收了,不过我还是不明白.不调用它就是不会执行.
 
我在发送完数据后,又调用了一下接收数据的事件?
不明白 你是 做啥
FComm.onreive的事件 := Comm1ReceiveData;
你是不是 连 事件 都没绑定啊?
 
你看看 你的 窗体 的 Comm1 的事件 设置了没有
 
嘿嘿,这个事件设置了.不是我自定义的.是通过组件的事件里进去写的.可能是我的机器的原因吧.
我又找一个例子还是不行.
 
你的下位机联接了吗?下位机的指令和例子中一样吗?一个空的串口是不会返回任何数据的。把串口的2、3两个脚连起来就可以收到你发出去的数据了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
671
import
I
后退
顶部