利用SPCOMM串口接收数据后,触发事件,发现每次在发送数据过后,串口接收数据时间过长,单步跟踪发现在如下代码中的PWM_SENDDATAEMPTY:   _SendDataEmpty; 多次运行后再跳转至ReceiveData( PChar(msg.LParam), msg.WParam );,这是为什么呢,可以设置什么参数跳过这个有什么解决办法,直接一收到数据就进入ReceiveData( PChar(msg.LParam), msg.WParam );,从而触发数据接收事件,谢谢,急救~~~~~procedure TComm.CommWndProc( var msg: TMessage );
begin
     case msg.msg of
          PWM_GOTCOMMDATA:
          begin
               ReceiveData( PChar(msg.LParam), msg.WParam );
               LocalFree( msg.LParam )
          end;
          PWM_RECEIVEERROR:    ReceiveError( msg.LParam );
          PWM_MODEMSTATECHANGE:ModemStateChange( msg.LParam );
          PWM_REQUESTHANGUP:   RequestHangup;
          PWM_SENDDATAEMPTY:   _SendDataEmpty; 
     end;
end;

解决方案 »

  1.   


    谢谢,我刚接触这个,不太明白要怎么操作,我现在是发送一个数据,从串口收到返回应答数据后,再发送下一个,都是在onReceiveData中编码的,但是现在发现接收数据时间很长,请问,照您这么说的要怎么编写程序呢,谢谢~~~
      

  2.   

    查看一下这个参数是否合适,可以适当改小一点。
    // Default size of the Input Buffer used by this code.
         INPUTBUFFERSIZE = 2048;
      

  3.   

    你去下个sscom之类的工具试试看,如果还是慢的话应该不是程序的问题或者你开了流控? spcomm默认是开了软流控的,0x17和0x19是软流控保留字,数据里不能包含这样的字节
      

  4.   

    spcomm的接收机制搞清楚呀,是定时接收的,你可以设置小点,但太小也是不现实的,别折腾了,建议你听取楼上的
      

  5.   

    碰到共鸣的人了,我在spcomm控件上也有这样的问题,可是还没解决