关于串口通讯,动态创建spcomm,怎样知道接收的数据长度及接收的数据?请指教! ( 积分: 50 )

  • 主题发起人 主题发起人 taowei
  • 开始时间 开始时间
T

taowei

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中动态创建spcom即用TComm.Create,怎样知道接收数据长度。即触发事件怎样实现?
 
在程序中动态创建spcom即用TComm.Create,怎样知道接收数据长度。即触发事件怎样实现?
 
只要不超出缓冲区,在他接收函数的参数里都有阿
 
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin

end;
Buffer是他接受到的数据的地址,BufferLength是他的长度。使用时注意Buffer的类型
 
我说的是动态创建SPCOMM控件,怎样进行事件处理?

动态创建了SPCOMM,我怎样发送数据和接收数据?
 
判断长度与内容应该跟动态没有关系吧,只要读取相应的缓冲区中的数据不就行了吗?
 
to:fthanyong
怎样读取缓冲区,因为动态建立以后,怎样用进行事件处理?
 
spcom1:= TComm.Create;
spcom1.onReceiveData:= Comm1ReceiveData;
这里Comm1ReceiveData是你编写的事件处理程序。
 
这里有串口控件
http://www.anylib.com
 
to YANGWEI0308
我想知道接收数据缓冲中的长度,怎么知道?
 
spcomm的缓冲区长度默认为2048.不过我想知道你为什么要动态创建spcomm呢?
 
动态创建的SPCOMM共用一个串口发送和接收事件
创建时不同的串口赋不同的标识comm.tag:=i;
接收时i:=Tcomm(sender).Tag;就是产生接收的串口
 
我要的不是缓冲区的长度,而是已接收的数据长度。
 
lxw5214已经说过了,BufferLength就是已接收数据的长度
//串口数据接收
procedure TForm1.COMReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var s:string;
begin
setlength(s,bufferlength);
move(buffer^,s[1],bufferlength);
memo1.text:=s;
end;
 
没有必要动态创建吧,因为全部是串行处理数据的,需要用到线程么?用线程,你还必须要用到临界量。麻烦。建议用缓冲池,而comm通讯中数据的接收发送在主程序里实现就行了,这样简单一点,^_^
 
多人接受答案了。
 
后退
顶部