各位帅哥,美女,
   小弟今天:
    
    var s:byte;    begin    s:=171;
   mscomm1.output:=char(s);  //通过串口按件发送数据end;
  
  //问题是在我通过MSCOMM进行发送数据时,为何截获是数据变成了    00   ,而不是应该出现的   AB  数据?不知为何,特请指教,
   此献上50分做为悬赏分数,谢谢!

解决方案 »

  1.   

    mscomm1.InputMode := comInputModeText;
    mscomm1.output := 'AB';  或者mscomm1.InputMode := comInputModeBinary;
    mscomm1.output := 171;
      

  2.   

    大哥,mscomm1.InputMode := comInputModeBinary 是输入模式设置。
    跟输出什么关系?
      

  3.   

    最近发现经常使用MSComm发不了大于127的值的帖子,现纠正一下:var s:byte; 
    begin 
      s:=171; 
      mscomm1.output:=char(s);  //通过串口按件发送数据 
    end; 
    这种用法对于MSComm来说是错误的,因为你的S定义的是Byte类型,这样的话只能发送小于127的字节。
    请各位仔细看一下MSComm的Output类型定义,它定义的是OleVariant类型,你将其它类型的数据赋值给OleVariant类型,中间编译程序会代你进行转换,但隐式转换是会出错的!这也是为什么不能发送大于127值的原因。
    应该这样:procedure TForm1.SendButtonClick(Sender: TObject);
    var
      Data:OleVariant;
      Bytes:Array [0..255] of Byte;
      i:integer;
    begin
      //创建Variant类型的数组,数组元素为字节类型,个数256个
      Data:=VarArrayCreate([0,255],varByte);
      //为每个数组元素赋值
      for i:=0 to 255 do
      begin
        Data[i]:=i;
      end;
      //发送这256个字节
      MSComm1.Output:=Data;
    end;
    发送结果可用其它的串口调试器接收,发现其值是从00到FF的值,中间任何一个值都不缺,也就是说发送是成功的
      

  4.   

    具体到楼主的例子,应该这样:
    var s:Variant; //当然也可以定义为var s:OleVariant;这两种类型都可以
    begin 
      s:=Byte(171); 
      mscomm1.output:=s;  //通过串口按件发送数据 
    end; 
      

  5.   

    这本书上有:
    http://download.csdn.net/source/1498637
    http://download.csdn.net/source/1498644
      

  6.   

    谢了各位,问题已解决,将mscomm1.InputMode := comInputModeBinary 设为此值,以二进制形式
    然后具体操作如下:var sa:array of byte;
    begin
      setlength(sa,2);
      sa[0]:=171;
      sa[1]:=181;
      mscomm1.output:=sa;
    end;
    串口监听结果将会是 AB B5
    这就解决的串口通讯发送大于128的问题了,这里谢了各位,结贴送分!