有关串口通信的问题(100分)

  • 主题发起人 主题发起人 wally
  • 开始时间 开始时间
W

wally

Unregistered / Unconfirmed
GUEST, unregistred user!
在用SPCOMM控件作串口通信时,接受数据可以通过OnReceiveData函数来执行,
1. The input buffer contains received data and
2. more than a limit size or
3. read time-out
以上三个事件都将激活OnReceiveData,我想知道如果超时的话是不是也收到数据,是什么呢?
还有ReadIntervalTimeout,ReadTotolTimeout,,ReadTotolTimeoutMultiplier分别应该怎么设置,我的程序在收数据上一直有问题。

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var receive:byte;
begin
//我的下位机每次只发送一个数据,所以我只接受一个数据
move(buffer^,receive,1);
showmessage(inttostr(receive)) ;


end;
 
SPCOMM 的缓冲区的默认大小为2048,默认读超时为100MS,所以当下位机连续发数据间隔不大于100MS时则直到缓冲区中数据达到2048B 才触发OnReceiveData
以上三个参数中第一个不是设置间隔多长时间触发该事件
对于你的程序一般不这样来设置收数据应该把1 改为BufferLength 这样才能保证接收所有收到的数据至于一次一个数据要通过程序的其它设置来实现,如把缓冲区的大小改为1
 
同意ayu310, 我也覺得這樣可能會有問題, 接收不準确
move(buffer^,receive,1);
 
主要是缓冲区大小的问题,
接受后注意要把缓冲区清空。
 
以上三个参数中第一个不是设置间隔多长时间触发该事件
这一句写错了把”不“去掉
 
1.如果下位机数据必须1字字接收,可将SPCOMM.PAS拷入程序文件夹,找到设置缓冲区语句(原大小=2048),改成1
2.如果可一起接收,将 move(buffer^,receive,1);
改成 move(buffer^,receive,BufferLength);
 
后退
顶部