wangguixi110 发表于 2011-5-23 07:38:22

关于MSCOMM控件中CommEvent的一个疑问

对于MSCOMM控件中CommEvent的2号值,也就是ComEvReceive我有点弄不懂,在2号值处设置一个断点,该事件发生时,SAFEARRAY中pvData的数据总是能全部接收到。我不懂的是,串行口波特率不一样,数据传输时间也可能不一样,为什么该事件只需要发生一次就能将所有数据接收到呢?我的SetRThreshold设置的为1,也就是只需要缓冲区中有一个数就发生一次串口响应事件。

marshallemon 发表于 2011-5-23 08:28:50

=2是串口接收事件,让下位机一字节一字节的发,上位机就一字节,一字节的收了,每个字节都有com事件

ysoni 发表于 2011-5-23 08:46:02

自己要做数据长度判断的。

wangguixi110 发表于 2011-5-23 10:32:10

我不懂的是这个时间差是怎么来的呢。串口速度是很慢的相对于CPU的运行速度。我运行到这个断点程序就将所有数据接收到了。一个字节产生一次,我用串口调试助手上千个字节也能在一刹那接收完成,按1200波特率计算需要的时间大约是1/1200(bps)*120(个数据)*10(位)=1s左右呢,这里面有什么原因么?

wangguixi110 发表于 2011-5-23 10:34:14

恳请高手们给个详细解答!

comway 发表于 2011-5-24 18:53:47

能收到就好啦

ysoni 发表于 2011-5-24 19:01:03

OnComm事件里

if MSComm1.CommEvent= comEvReceive then
begin
if MSComm1.InBufferCount > xxx{字节} then
begin
end;
end;

如果是用定时查询,要确保定时时间内,上位机能收到所有数据。
--------
最后,貌似mscomm32.ocx有内存泄漏。串口通讯最好自己用api写

wangguixi110 发表于 2011-5-26 21:13:03

6楼你好,你说的我懂,我想知道的是接收的时间差产生在什么时候?有没有能从操作系统或者计算机原理给个深层次解答
页: [1]
查看完整版本: 关于MSCOMM控件中CommEvent的一个疑问