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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题