我用spcomm控件做的1个串口通讯的例子,求大侠帮忙看下错在那里?
  设置
    Comm1.CommName := 'COM1';  //串口名
    Comm1.BaudRate := 19200;   //波特率
    Comm1.Parity := None;
    Comm1.ByteSize := _8;
    Comm1.StopBits := _1;
  发送
    SendMsg := 'A&' + '13100001111' + '&' + SendMsg;
    if Comm1.WriteCommData(PChar(SendMsg), Length(SendMsg)) then
      SendResult := Format('信息%s发送成功', [SendMsg])
    else
      SendResult := Format('信息%s发送失败', [SendMsg]);
  接收
    SetLength(RMsg,BufferLength);
    move(Buffer^,pchar(@RMsg[1])^,BufferLength);
    Memo2.Lines.Add(RMsg);在没发送信息前可以读取到串口的初始化信息,但是点击发送按钮后提示‘发送成功’但接收不到‘发送’信息,在一台电脑上通过发个消息给板,板收到消息后把信息发到串口。
急等

解决方案 »

  1.   

    我觉得是不是你的下位机板卡上的程序处理的有问题?
    建议使用AdpComPort控件。
      

  2.   

    先用串口调试助手等工具发送一下看看,如果发送的内容正确并有返回信息那么spcomm的那些超时参数看看是否有问题,比如读取间隔超时参数,如果调试工具发送后也没有返回信息那么请检查发送的数据格式协议是否正确。
      

  3.   

    测试了下,发送正常;接收也正常,我用
    var
      S:String;
    begin
      SetLength(S, BufferLength);
      Move(Buffer^, PChar(S)^, BufferLength);
      

  4.   

    用调试工具试了板是没问题的,我把ReadIntervalTimeOut从50到500都试过了还是读不到,郁闷死了
    卡了两天在网上也没找到答案,有的说是spcomm控件的问题,我从新下载了一个新的还是没用
      

  5.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      RMsg: string;
    begin
      //ShowMessage('111111111');
      Memo1.Lines.Add('come');
      SetLength(RMsg,BufferLength);
      Move(Buffer^, Pchar(RMsg)^,BufferLength);   //@RMsg[1]
      //ShowMessage(RMsg);
      Memo2.Lines.Add(RMsg);
    end;
    这个不就是绑定的接收事件吗。我最纳闷的是没发送前可以监听到串口信息,自己一发送就收不到了
      

  6.   

    ReadIntervalTimeOut改成5
    用串口监控软件看看发送的内容
      

  7.   

    就是说你的Comm1ReceiveData事件不能触发?
      

  8.   

    是的,发送之后不能出发Comm1ReceiveData事件,我用其它调试工具检查可以看到消息已发出去了
      

  9.   

    我也碰到过不能触发的问题。你把你的SpComm控件属性中,所有的True全改成False再试试~~~
      

  10.   

    http://topic.csdn.net/u/20100524/16/74dd6658-6771-469c-bcbb-795448f0859c.html?7220
      

  11.   

    给你传个串口监控软件,AccessPort,很好用的,你可以设置监控串口,同时打开你的软件,测试相应串口,这样就可以看到是没有发出去(或是没有发对)呢?还是没有收到数据?
    有没有邮箱,或是在网上也可以找到的
    刚才发错了