dnwpy 2019-06-11 15:02
浏览 123

delphi单步调试没问题,全速运行时,保存的txt文件里是乱码?

我要保存串口传输来的数据“//>+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;
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 c语言,请帮蒟蒻看一个题
    • ¥15 名为“Product”的列已属于此 DataTable
    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)