procedure Tform1.San();
var
 instring, buffer,RTDS,PWDS:string;
 RTDV,PWDV:Single;
 RTD,PWD:integer;
 label lab1;
begin
  StatusBar1.Panels[1].Text:='状态: 正在采集!';
    {  buffer:=chr($41);
     mscomm1.Output:=buffer;      repeat
      Application.ProcessMessages;
      td:=td+1;
      until td>100000;       repeat
         Application.ProcessMessages;
         tz:=tz+1;
         if tz>1000 then
           begin
           edit1.Clear;
           edit2.Clear;
           edit3.Clear;
           edit4.Text:='通讯失败!';
           goto lab1;
         end;
      until mscomm1.InBufferCount>11;
      edit4.Text := '通讯正常!';
     instring:=mscomm1.Input;         RTDS:=copy(instring,1,6);
         PWDS:=copy(instring,7,4);
         RTD:=strtoint('$'+RTDS);
         PWD:=strtoint('$'+PWDS);
         RTDV:=(RTD-8388608)/504.6+CWD;
         //8388608=8000000H,为RTD 0度对应值,504.6为1度对应的点数
         PWDV:=PWD/256; //256为片内RTD1度对应的点数}

解决方案 »

  1.   

    Application.ProcessMessages 处理消息队列 直到把消息队列中的消息处理完毕
    copy(instring,1,6) 复制instring字符串中的内容 从第一个开始复制六个字符$ 符号? 不太确定什么意思
      

  2.   

    ShowMessage(Format('%d,%d',[StrToInt('10'),StrToInt('$10')]));
    就可以看出来了哈,一个是10进制,一个是16进制
      

  3.   

    strtoint('$'+PWDS)-->16进制转换10进制
    Application.ProcessMessages--〉处理消息队列,主要是为了释放系统控制权,如果不使用这一步,如果你的处理很多,这个时候你可能根本没办法作任何操作,比如鼠标的移动,但是用了这个,后台就会自动分发处理消息,你仍然可以操作你的其他动作,你的程序也会继续处理自己的任务。就是这样的意思了。
      

  4.   

    xjjrocker(了无痕)
    strtoint('$'+PWDS)-->16进制转换10进制
    -------------------------------------反了,应该是10进制转换16进制如:$10,表示16进制的10
      

  5.   

    前面加个'$'是表示16进制,但是转换的时候StrToInt()就是16进制转换10进制了
    比如:i:=StrToInt('$'+'5B');就是把16进制的'5B'转换成10进制。
      

  6.   

    xjjrocker(了无痕)
    为什么需要对其进行这种转换呢? 但是在这里又是必须的,我不明白为什么?RTDS本来是string类型,类型是匹配的啊。我把'$'删掉就出错了。
      

  7.   

    不好意思,本人刚开始学习,先谢谢xjjrocker(了无痕)的回答了