我要保存串口传输来的数据“//>+0.0084+0.0017+0.0008-0.0020+0.0011-0.0023+0.0111+0.0037”
保存以后就是这样。但是单步运行的时候没问题
代码如下
procedure TComm3.execute; //rawimu
var
i,x:Integer;
overlapped:TOverlapped;
readstrbuffer:string;
clear:Boolean;
comstat:TComStat;
lpErrors, dwEvtMask, dwTranser, ReadNumber3:Cardinal;
cbNum:Word;
tempstr:string;
qnum, Remainnum, tempnum:Word;
begin
FreeOnTerminate:=True;
receive3:=True;
readstrbuffer:='';
x:=0;
str1:='#01'#13;
num1:=Length(str1);
fillchar(overlapped,sizeof(Toverlapped),0);
//创建重叠读事件对象,手动复位,初始化为无信号状态
overlapped.hEvent := CreateEvent(nil,true,false,nil);
//在主线程中可设置receive来终止线程的执行
assignfile(filevar3,'E:\数据采集\3\'+savename+'.txt');
rewrite(filevar3);
while receive3 do
begin
WriteFile(hcom3,str1[1],num1,num2,@writeos3);
dwEvtMask:=0;
if not WaitCommEvent(hcom3,dwEvtMask,@overlapped) then
begin
if GetLastError = ERROR_IO_PENDING then
begin
GetOverLappedResult(hcom3,overlapped,dwTranser,true);
end;
end
else ;
if ((dwEvtMask and EV_RXCHAR)=EV_RXCHAR) then
begin
clear:=ClearCommError(hcom3,lpErrors,@comstat);
if clear then
begin
cbNum:=comstat.cbInQue;
if cbNum>0 then
begin
if ( ReadFile(hcom3,readbuffer3,cbnum,ReadNumber3,@ReadOs3)) then
begin
if GetLastError = ERROR_IO_PENDING then
begin
GetOverLappedResult(hcom3,ReadOs3,ReadNumber3,false);
end;
//>+0.0084+0.0017+0.0008-0.0020+0.0011-0.0023+0.0111+0.0037
//包头,8组数据 从第三个开始读,Vol1,Vol2,Vol3,Vol4,Vol5,Vol6
if ReadNumber3>0 then
begin
for i:=1 to ReadNumber3 do readstrbuffer := readstrbuffer + readbuffer3[i];
while True do
begin
qnum:=Pos('>',readstrbuffer);
if qnum>0 then
begin
Remainnum:=Length(readstrbuffer)-qnum+1;
if Remainnum>= 58 then
begin
tempstr := copy(readstrbuffer,qnum+1,Length(readstrbuffer)-qnum);//去除>
Vol1:=Copy(tempstr,15,7);
Vol2:=Copy(tempstr,22,7);
Vol3:=Copy(tempstr,29,7);
Vol4:=Copy(tempstr,36,7);
Vol5:=Copy(tempstr,43,7);
Vol6:=Copy(tempstr,50,7);
Inc(x);
Writeln(filevar3, format('%5d%10s%10s%10s%10s%10s%10s',[x,Vol1,Vol2,Vol3,Vol4,Vol5,Vol6]));
readstrbuffer:=Copy(readstrbuffer,qnum+50,Length(readstrbuffer)-qnum-49);
sleep(1000);
//Delay(1000);
end
else Break;
end
else Break;
end;
end;
end;
end;
end;
end;
end;
CloseFile(filevar3);
CloseHandle(overlapped.hEvent);
end;