delphi中使用cport控件编写上位机接收蓝牙串口数据问题
delphi吧
全部回复
仅看楼主
level 3
逸小飞🔥 楼主
最近在使用cport控件做一个上位机,要实事采集下位机发来的数据,使用USB转串口采集后在memo上显示没问题,同样的数据处理使用蓝牙串口就会出现数据卡顿问题,把count值实时显示在edit上发现数据处理的速度没有接收的快,且最大为8092。常规来讲有线串口应该比无线串口快呀,为什么反而用无线的反倒处理不过来呢。请大神帮忙解决,代码如下:
procedure TForm_Main.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str:ansistring;
Temp:ansistring;
i:integer;
begin
Edit_SendData.text:=inttostr(count);
if(AdvanceReceiveFlag)then
begin
if not ReadStatu then
begin
i:=0;
repeat
ComPort.ReadStr(temp,1);
i:=i+1;
ReceiveCount:=ReceiveCount+1;
until (Ord(temp[1])=$88)or(i=count) ;
if(Ord(temp[1])=$88)then
begin
Str:=temp;
ReadStatu:=true;
end;
end
else
begin
i:=0;
repeat
ComPort.ReadStr(temp,1);
str:=str+temp;
i:=i+1;
ReceiveCount:=ReceiveCount+1;
until (i=23)or(i=count) ;
if(i=23)then
begin
ReadStatu:=false;
if(DataShowFlag)then
begin
str:=StrToHex(str);
Memo_AdvanceReceive.Lines.add(str);
end;
end;
end;
end;
2014年09月05日 07点09分 1
level 3
逸小飞🔥 楼主
if(UncodeFlag)then
begin
//AppendStr(ReceiveStrBuf,str);
ReceiveStrBuf:=ReceiveStrBuf+str; //保存数据
while(length(ReceiveStrBuf)>0) do //循环读数
begin
TotalLen:=length(ReceiveStrBuf); //计算长度
LeaveLen:=TotalLen;
if(not ReadReady)then
begin
for i := 1 to TotalLen do
begin
Temp:= Ord(ReceiveStrBuf[1]);
if Temp = FrameIndex_Receive then break; //如果不等于0xAA,则删除,否则跳出循环
delete(ReceiveStrBuf,1,1);
LeaveLen:=LeaveLen-1;
end;
// ReceiveCount:=ReceiveCount+i;
if(LeaveLen=1) then exit; //如果数据为空,则退出
ReadReady:=true;
end
else
begin
if(LeaveLen<FrameLength_Receive)then exit; //如果长度不足则退出继续读数
str:=**;
str:=copy(ReceiveStrBuf,1,FrameLength_Receive);
delete(ReceiveStrBuf,1,FrameLength_Receive);
// LeaveLen:=LeaveLen-FrameLength;
// ReceiveCount:=ReceiveCount+FrameLength;
ReadReady:=false;
DataProcess(str);
end;
end;
end
2014年09月22日 03点09分 4
1