1.我使用来自[  Kaersoft    卡尔软件]的一个串口通讯控制器,可以成功的向一个AD模块发送命令,然后接收数据.
但没有这个软件所使用的一个控件[TApdComPort],不知道那位哥哥可以给一个.2.我使用SPCOMM组件的时候,不知道出现了什么问题,希望各位大侠帮忙解决.
问题:
我可以成功的打开串口,也可以写命令字进去,但是读不到数据.简易源代码如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
      var
S: string;
//问题主要在这里...这个接收数据的事件总是不执行
begin
   inc(i);
   Label1.Caption := IntToStr(i);
    showmessage('receivedata'); SetLength(S, BufferLength);
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
   Comm1.StopComm;
   Comm1.CommName := 'COM1';//打开串口..串口的其它配置信息在组件的属性栏已经设置
   Comm1.StartComm;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
   Comm1.StopComm;
end;procedure TForm1.Button2Click(Sender: TObject);
begin//writecommdata执行后,可以返回true.
     if Comm1.WriteCommData(pchar(Edit1.Text),length(Edit1.Text)) then
       showmessage('true')
     else showmessage('false');end;希望各位大侠看看,我是一个串口通讯的初学者,不知道如何接收数据..

解决方案 »

  1.   

    TApdComPort 應該在如下就可下載到!
    http://www.turbopower.com/updates/
      

  2.   

    一時看不出你的代碼有什麼問題, 也許, 你修改下 spcomm 那個 Tx.on Continue那個屬性吧, 你看看, 太長了, 我記不全!!
      

  3.   

    具体问题可以这样描述:在那个来自[卡尔]的软件,我设置好串口名,波特率这些东西后,我在命令栏输入#025,然后点发送,可以得到来自模块的信息,例如+1.536.在我用SPCOM写的程序中,我Comm1.WriteCommData(pchar(edit1.text),length(Edit1.Text)) 
    edit1.text 为 #025,发送成功后,rReceiveData事件不执行.也就是说,我发了命令,但是接收不到数据...命令#025没有错...
      

  4.   

    升级 SPCOM,低版本的SPCOM有问题W2k下有时候读不到数据
      

  5.   

    Edit1.Text:='#025'??
    Edit1.Text:=#025;!!
      

  6.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word); var strRecv:string;
      i:byte;
        begin
     setlength(strRecv,BufferLength);
      move(buffer^,pchar(strRecv)^,Bufferlength);  memo1.Lines.Add('已收到'+intTostr(Bufferlength)+'字节');
    for i:=1 to BufferLength do
     memo1.Lines.Add('s:'+intTohex(byte(strRecv[i]),1));
     Memo1.Invalidate;end;
    处界到COM的是HEX数
      

  7.   

    你是在同一电脑上测试吗?如果是的话,你肯定接收不到数据的。
    因为你用Comm1发送数据(从Com1),此时接收数据的是Com2(假设你电脑就只有两个Com口),如果你要显示接收到数据,还得加一个控件Comm2,设置端口为Com2,然后在Comm2的ReceiveData事件中接收数据就OK了!
      先决条件:要由一根线将Com1和Com2相连接。
      

  8.   

    TO楼上....我的模块连接的COM1,命令通过COM1发送过去..为什么接收的数据会到COM2呢??不可能吧......
      

  9.   

    to 楼上...我使用了串口监视...确实发送了数据...
    我在CSDN的另外一帖子中看到这样的说法:spcomm在WIN2K下有BUG,读不到数据...不知道是不是真的..
      

  10.   

    你用了串口监视就应该知道,模块有没有给你返回数据,有就是spcomm的问题,没有就是协议、线路等其它问题了
      

  11.   

    我用了串口监视,模块接收得命令,但没有返回数据。。我使用另外一个控件就可以得到数据,就是turbopower就可以
      

  12.   

    接收数据procedure TForm.Comm1ReceiveData(Sender: TObject;
      Buffer: Pointer; BufferLength: Word);
    var
       i:integer;
    begin
       sRece1:='';
       move(buffer^,pchar((@rbuf)^),bufferlength);
       for i:=1 to bufferlength do
       begin
         sRece1:=sRece1+ inttohex(rbuf[i],2);
       end;
    end;