小弟用MSCOMM控件做了一个串口接收的小程序.
接收的过程中出现了一个问题:
比如接收的原始数据是16进制的10个数.02 05 00 35 36 38 39 41 33 0D源代码是这样的:
  var a:variant;  b:string; c;CHAR;
begin
  a:=mscomm1.input; 
  b:=a;
  edit1.text:=b;end;
 结果在edit1中显示的却是:(前面三个空格)5689A3 (后面一个空格)
 非字符的数字却显不出来. 请问怎么样才能把10个数全部正确显示. 
  小弟又试着在后面写了一行, c:=b[1];  结果程序报错。 请问是怎么回事。如何解决。还有我发现MSCOMM控件的唯一事件CONN好像不管用,不知道是什么原因.所以只好用TIMER控件来定时接收.

解决方案 »

  1.   

    1.你现在的代码是以字符形式在显示接收到的数据,而接收到的数据中前三个和最后一个字节都是控制字符,它们是不可见的,当然edit1中看到的就是你现在看到的结果。
      如果你想把接收到的数据以十六进制形式显示的话,代码需要修改。2.在打开端口之前,正确设置MSComm的一些属性:
      MSComm1.InputLen := 0;                    //每次读入整个缓冲区
      MSComm1.InputMode := comInputModeBinary;  //输入方式为字节方式
      MSComm1.RThreshold := 1;                  //接收到1个字节就产生通讯事件
      

  2.   

    请问楼上的大大,
    如何把接收到的数据在EDIT这样的显示框里全部显示出来.代码怎么样修改呢.
    麻烦各位老大了 钱不够可以再加.
      

  3.   

    代码我改成以下这样;
      
         a:=mscomm1.input;
         b:=''; for i:=0 to vararrayhighbound(a,1) do
         b:=b + inttohex(a[i],2)+' ';
      
         edit1.Text:=restr;今天早上主板坏了,所以没法去调试.请各位老大帮忙看一下 这样修改可以吗
    如果不行的话怎么改?
       
       小弟在这里先谢谢各位老哥了.