我用mscom控件读取下微机的通信数据,怎么一些字符不能显示,用?标出,但在转化成float型时就出错了,请教各位怎么更正?急求!!!!
    我接收时是 var ls:variant;
               ls:=form1.mscom1.input;
             然后用pos定位,读取字符转化成数值.
             在读书过程中有错的也有对的.....                

解决方案 »

  1.   

    首先:你接收的数据是否是正确,(例如:2.26.2)
    在转化过程总strtofloatdef(is,0)
      

  2.   

    你确定收到的东西都是可见字符,而且是数值吗?
    你应该将你收到的东西,全部用ascii码打出来,然后分析一下,看看是否都是
    可以用strtofloat函数执行的呀。
    我猜应该是你将控制字符也当成数据来处理了。所以报错
      

  3.   

    既然是不可见字符(显示为?),当然不能用strtofloat转换了传过来的应该是值吧.用个float的指针直接去指好了
      

  4.   

    DING........我曾做过一个串口通信用的也是MSCOMM,向终端发送数据后,测试有返回值,用MSCOMM的读取缓存的方法不能正确读取数据.出错.解决的朋友也给我说一下......大力支持
      

  5.   

    mscomm.input可能只能返回数据的部分或者是多条数据!
    需要数据验证,
      

  6.   

    mscomm本身设计还可以吧,它应该一般情况下不会导致数据丢失,
    除非是受到了干扰。
    串口返回数据有时比较慢,需要多读几次,才能完全读完所有的数据。
      

  7.   

       好长时间了,忘了,不好意思!
       采用二进制格式接收就好了,直接用数组方式接收,再转化成字符方式,代码如下:
       var
       m:integer;
       redate: Array of variant;
       var y:integer;
       var d:String;   
       redate:=form2.mscomm1.input;
       form2.MSComm1.InBufferCount:=0;
       d:='';
      for y:=0 to VarArrayHighBound(redate,1) do
       begin
         d:=vartostr(redate[y]);
         if d='87' then
           begin
             m:=strtoint(vartostr(redate[y+1]));