i := 0;
    t0 := Now;
    while True do
    begin
      if ((Now-t0)*24*3600*1000 >= 200) then
      begin
        error := '[' + IntToStr(n) + ']';
        Break;
      end; while True do  t0 := Now; ((Now-t0)*24*3600*1000 >= 200

解决方案 »

  1.   

    procedure TMeasurement.GetEveryAdam;
    var
      port, n, i, j, k, c: Integer;
      cmd: string;
      buf: array[0..99] of Char;
      buf1: array[0..19] of Char;
      v0: double;
      t0: TDateTime;
      error: string;
      seq: Integer;
    begin
      port := m_Comm.m_CommData.Port;
      for n := First_Adam to Last_Adam do
      begin
        sio_flush(port, 2);
        cmd := '#' + FormatFloat('00', n) + #13;
        StrPCopy(buf, cmd);
        i := Length(cmd);
        if (sio_write(Port, buf, i) <= 0) then
          Break;
        for i := 0 to Length(buf)-1 do
          buf[i] := 'A';
        i := 0;
        t0 := Now;
        while True do
        begin
          if ((Now-t0)*24*3600*1000 >= 200) then
          begin
            error := '[' + IntToStr(n) + ']';
            Break;
          end;
          j := sio_read(g_Measurement.m_Comm.m_CommData.Port, @buf[i], 10);
          if (j >= 1) then
          begin
            i := i + j - 1;
            if (buf[i] = #13) then
            begin
              k := 2; //从第二个字节开始
              c := -1; //通道0
              while (k < Length(buf)) and (buf[k] <> #13) do
              begin
                for j := 0 to Length(buf1)-1 do
                  buf1[j] := #0;
                buf1[0] := buf[k-1];
                j := 1;
                while (buf[k] <> '-') and (buf[k] <> '+') do
                begin
                  if (buf[k] = #13) then
                    Break;
                  buf1[j] := buf[k];
                  j := j + 1;
                  k := k + 1;
                  if k >= Length(buf) then
                    Break;
                end;
                if (buf[k] <> #13) then
                  k := k + 1;
                c := c + 1;
                buf1[j] := #0;
                cmd := buf1;
                try
                  v0 := StrToFloat(cmd);
                  seq := Log_No[n, c];
                  Real_Value[seq] := a2[Seq]*v0*v0 + a1[Seq]*v0 + a0[Seq];
                except
                  Continue;
                end;
              end;
              Break;
            end; { end of if (buf[i] = #13) then}
            i := i + 1;
          end; {end of if (j >= 1) then}
        end; { end of while True }
      end; { end of for n := First_ADam }
      if (Error <> '') then
        MainForm.StatusBar1.Panels[3].Text := Error + '号前端通讯超时'
      else
        MainForm.StatusBar1.Panels[3].Text := '前端通讯正常';
    end;整个过程如上 但里面的部分代码 不理解 请高手解读一下
      

  2.   

    不懂之处 主要有如下三处:
     i := 0; 
        t0 := Now; 
        while True do 
        begin 
          if ((Now-t0)*24*3600*1000 >= 200) then  i := i + j - 1; 
    Real_Value[seq] := a2[Seq]*v0*v0 + a1[Seq]*v0 + a0[Seq]
      

  3.   

    延时200ms后执行一个操作搞不懂,为什么不用gettickcount(),难道说,这么做更能体现开发人员的技术高超?...... -_-!!
      

  4.   

    Real_Value[seq] := a2[Seq]*v0*v0 + a1[Seq]*v0 + a0[Seq]这个和你设备的通讯协议有关吧.楼主你不是从代码看懂做的是什么,而是先搞清楚这些代码是做什么的,然后再去一句句的看