搜索
bottom↓
回复: 7

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

[复制链接]

出0入0汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入85汤圆

发表于 2011-5-23 08:28:50 | 显示全部楼层
=2是串口接收事件,让下位机一字节一字节的发,上位机就一字节,一字节的收了,每个字节都有com事件

出0入0汤圆

发表于 2011-5-23 08:46:02 | 显示全部楼层
自己要做数据长度判断的。

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2011-5-23 10:34:14 | 显示全部楼层
恳请高手们给个详细解答!

出0入0汤圆

发表于 2011-5-24 18:53:47 | 显示全部楼层
能收到就好啦

出0入0汤圆

发表于 2011-5-24 19:01:03 | 显示全部楼层
OnComm事件里

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

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

出0入0汤圆

 楼主| 发表于 2011-5-26 21:13:03 | 显示全部楼层
6楼你好,你说的我懂,我想知道的是接收的时间差产生在什么时候?有没有能从操作系统或者计算机原理给个深层次解答
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 12:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表