当前位置:主页>仓库管理软件> 列表

关于串口通讯,动态创建spcomm,怎样知道接收的数据长度

企业管理软件版1楼: 在程序中动态创建spcom即用TComm.Create,怎样知道接收数据长度。即触发事件怎样实现?

2楼: 只要不超出缓冲区,在他接收函数的参数里都有阿 如免费服装店管理软件

3楼: procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin

end;
Buffer是他接受到的数据的地址,BufferLength是他的长度。使用时注意Buffer的类型

4楼: 我说的是动态创建SPCOMM控件,怎样进行事件处理?

动态创建了SPCOMM,我怎样发送数据和接收数据?

5楼: 判断长度与内容应该跟动态没有关系吧,只要读取相应的缓冲区中的数据不就行了吗?

6楼: to:fthanyong
怎样读取缓冲区,因为动态建立以后,怎样用进行事件处理?

企业管理软件版7楼: spcom1:= TComm.Create;
spcom1.onReceiveData:= Comm1ReceiveData;
这里Comm1ReceiveData是你编写的事件处理程序。

8楼: 这里有串口控件
http://www.anylib.com

9楼: to YANGWEI0308
我想知道接收数据缓冲中的长度,怎么知道?

10楼: spcomm的缓冲区长度默认为2048.不过我想知道你为什么要动态创建spcomm呢?

11楼: 动态创建的SPCOMM共用一个串口发送和接收事件


创建时不同的串口赋不同的标识comm[i].tag:=i;
接收时i:=Tcomm(sender).Tag;就是产生接收的串口

12楼: 我要的不是缓冲区的长度,而是已接收的数据长度。 如财务软件免费下载

13楼: 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;

企业管理软件版14楼: 没有必要动态创建吧,因为全部是串行处理数据的,需要用到线程么?用线程,你还必须要用到临界量。麻烦。建议用缓冲池,而comm通讯中数据的接收发送在主程序里实现就行了,这样简单一点,^_^

15楼: 多人接受答案了。