spcomm方面的问题(50分)

  • 主题发起人 主题发起人 pyalhm
  • 开始时间 开始时间
P

pyalhm

Unregistered / Unconfirmed
GUEST, unregistred user!
下位以采样频率50Hz不停向上位机发送数据
接收数据程序如下:
procedure TFrmMain.CommCzyReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
pByte:^Byte;
begin
try
pByte:= Buffer;
//调写日志函数 结果返回值设为 A
for i:= 0 to BufferLength-1do
begin
//解析数据
//调函数1
//调写日志函数 结果返回值为 B
//调函数2
//调写日志函数 结果返回值为 C
。。。。
//保存数据
end
inc(pByte);
end;
//for结束
except
on E:Exceptiondo
begin
//错误处理;
end;
end;
end;

跟踪这个事件,.CommCzyReceiveData事件运行结里如下:
1、 有时流程是A—B—C 然后再A—B—C 顺序执行
2、 有时流程是A—B—B—C
3、 有时流程是A—B—A—B
等等各种结里都有,
这究竟是怎么回事?该怎么办
 
应该是时序乱了,上一个CommCzyReceiveData还没处理完,下一个数据又来了,建议你在CommCzyReceiveData中不要调用过多处理过程、函数,尽量减少计算,可以只把数据接收回来放入缓冲,另外建立一个线程或者启动一个Timer来检查和处理缓冲中的数据,接收和使用分开,应该会解决的。
 
后退
顶部