请教:spcomm串口接收数据时间过长的问题

yanni23 2011-05-24 05:01:53
利用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;
...全文
466 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hylf1985 2011-07-13
  • 打赏
  • 举报
回复
碰到共鸣的人了,我在spcomm控件上也有这样的问题,可是还没解决
a15963254 2011-06-02
  • 打赏
  • 举报
回复
最好的解决方法就是设置好他的默认等待时间
goodhj 2011-06-02
  • 打赏
  • 举报
回复
spcomm的接收机制搞清楚呀,是定时接收的,你可以设置小点,但太小也是不现实的,别折腾了,建议你听取楼上的
看那山瞧那水 2011-06-01
  • 打赏
  • 举报
回复
用cport3吧,不要spcomm
skylkj 2011-06-01
  • 打赏
  • 举报
回复
你去下个sscom之类的工具试试看,如果还是慢的话应该不是程序的问题

或者你开了流控? spcomm默认是开了软流控的,0x17和0x19是软流控保留字,数据里不能包含这样的字节
hongss 2011-06-01
  • 打赏
  • 举报
回复
查看一下这个参数是否合适,可以适当改小一点。
// Default size of the Input Buffer used by this code.
INPUTBUFFERSIZE = 2048;

yqdragon 2011-06-01
  • 打赏
  • 举报
回复
一次只发一个字节,这么少啊,通讯协议怎么定的,这个字节实现什么功能啊
yanni23 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 skylkj 的回复:]
你一次发了多少数据? 默认波特率是9600,这是b/s,就是每秒最多 9600/8 = 1200字节
发多了肯定慢啊
[/Quote]

我一次只发一个字节呢,发一个等待一个回答,再发下一个,请继续指教a~~~~
「已注销」 2011-05-31
  • 打赏
  • 举报
回复
你看一下你数据的格式,还有你每帧数据哦之间的间隔,我一直用的,蛮好用的
无条件为你 2011-05-31
  • 打赏
  • 举报
回复
缩短一下串口通讯时间就可以了,不过,要注意读取的写法,如果读取中用到了动态数组,要做到防止多次数据一次性读完,也就是说要防止本该多次出现的数据变成一次出现。

你给的分太少,看来是对问题不够重视。别告诉我说你没分,连续在本论坛回别人的贴子一周,即可得到100分以上的可用分。
skylkj 2011-05-31
  • 打赏
  • 举报
回复
你一次发了多少数据? 默认波特率是9600,这是b/s,就是每秒最多 9600/8 = 1200字节
发多了肯定慢啊
yanni23 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 skyclin 的回复:]
我也是碰到这个问题,客户把反映了很久,也没找到好办法解决
[/Quote]

哇 还有共鸣者啊~~~~共同寻找办法,解决问题吧~~~
skyclin 2011-05-25
  • 打赏
  • 举报
回复
我也是碰到这个问题,客户把反映了很久,也没找到好办法解决
yanni23 2011-05-24
  • 打赏
  • 举报
回复
在线求救啊~~~各位大侠们~~~
yanni23 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
把接收到的数据先放到列表,后台弄一个线程去处理列表中的数据,不要放到主线程中,那样会阻塞的
[/Quote]

谢谢,我刚接触这个,不太明白要怎么操作,我现在是发送一个数据,从串口收到返回应答数据后,再发送下一个,都是在onReceiveData中编码的,但是现在发现接收数据时间很长,请问,照您这么说的要怎么编写程序呢,谢谢~~~
bdmh 2011-05-24
  • 打赏
  • 举报
回复
把接收到的数据先放到列表,后台弄一个线程去处理列表中的数据,不要放到主线程中,那样会阻塞的

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧