大家好!
  谁用 MSCOMM 和 Delphi 开发过串口通讯程序,只用来接受和发送十六进制数据的一个简单的小程序.????????????????????

解决方案 »

  1.   

    试用过,只是在没有注册MSCOMM控件的系统下程序会报错
      

  2.   

    大家好!!!
         有没有开发过在Delphi 中利用MSComm控件通讯的问题????      代码如下:
    var
      Form1: TForm1;
      senddata:array[1..10] of char;
      reData:array of oleVariant;
      sendstr:string;
      restr:string;
      i,j:longint;
      w :integer ;implementation{$R *.dfm}
    procedure tform1.sendhex(s:string);
    var
      s2,s3:string ;
      bufl:array[0..50000] of byte;
      i:integer;
    begin
      s2 := '';
      s3 := '';
      for i:=1 to length(s) do
        begin
          if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9')) or ((copy(s,i,1)>='a') and (copy(s,i,1)<='f')) or ((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
            begin
              s2 := s2 +copy(s,i,1);
            end;
        end ;
      for i:= 0 to (length(s2) div 2-1) do
        begin
          bufl[i]:=strtoint('$'+copy(s2,i*2+1,2));
          s3 := s3 +char(bufl[i]);
        end ;
      mscomm1.Output := s3 ;
    end ;procedure TForm1.FormCreate(Sender: TObject);
    begin
      sendstr:='';
      w:= 0 ;
      mscomm1.CommPort := 1;                    //指定端口
      mscomm1.Settings := '9600,N,8,1';        //其它参数
      mscomm1.InBufferSize := 1024;             //接收缓冲区
      mscomm1.OutBufferSize := 1024;            //发送缓冲区
      mscomm1.InputMode := comInputModeBinary;  //接收模式
      mscomm1.InputLen := 0;                    //一次读取所有数据
      mscomm1.SThreshold := 0;                  //一次发送所有数据
      mscomm1.InBufferCount := 0;               //清空读取缓冲区
      mscomm1.OutBufferCount := 0;              //清空发送缓冲区
      MSComm1.RThreshold := 1;               //设置接收多少字节开产生oncomm事件
      mscomm1.PortOpen:=true;                 //打开端口end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      sendhex('8800');
    end;
    我的问题是:为什么发8800时,只能发出去00呢?????????????????????????????????????????????
               发5500时却都能发出去!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!我的是十六进制接发送数据的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!请高手指点或给个列子
      

  3.   

    s3 := s3 +char(bufl[i]);
    //----$88是什么字符?ASCII字符最大也只能有$7F啊.
    //----$55是在ASCII表示范围内的.当然可以发送了.
    你不如直接用字节数组发送就可以了.
      

  4.   

    procedure tform1.sendhex(s:string);//-------你在调用函数时,注意对发送内容进行检验!
    var
      s2,s3:string ;
      v:variant;
      bufl:array[0..50000] of byte;
      i:integer;
    begin
      s2 := '';
      s3 := '';
      for i:=1 to length(s) do
        begin
          if (s[i] in ['0'..'9','a'..'f','A'..'F']) then
    //---判断一个字符可以用上面的方式
            begin
              s2 := s2 +s[i];
            end;
        end ;
      i:=length(s2) div 2+1;
      v:=VarArrayCreate([0,i],varByte);
      for i:= 0 to (length(s2) div 2-1) do
        begin
           v[i]:=strtoint('$'+copy(s2,i*2+1,2));
         
        end ;
      mscomm1.Output := V ;
    end ;
      

  5.   

    //---呵~~,下面的代码要改一下;
    if length(s2) mod 2=0 then
      i:=length(s2) div 2
    else  
      i:=length(s2) div 2+1;
      v:=VarArrayCreate([0,i],varByte);
    ......
      

  6.   

    留下E-mail  我发测试软件给你