关于串口通信接收数据问题

水瓶06 2009-10-10 07:24:18
void CSCommtestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integer that is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
static int count=0;
count++;
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}

}
UpdateData(FALSE); //更新编辑框内容
}

这是网上的一个串口接收数据OnComm()函数;
为什么在接收时要做那么多次数据的转换呢,并且,if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符,这时接收缓冲区内的字符会是一个还是很多个呢?MSComm控件在接收数据时具体的过程是怎样的呢?我在通信系统中传的是字符,那么接收的时候是接收到一个字符就引发一个事件吗?
我是要把收到的一些东西提取出来显示成波形,可是总也提取不对,不知道是哪里的问题。。。。
急!!!。。。。请求大家帮忙啊
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
水瓶06 2009-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feilinhe 的回复:]
使用函数MSCOMM::SetRThreshold(n);

SetRThreshold(n)表示数据来了n个,就触发一次OnComm事件,但并不是说总共N个数据,就会触发N/n次OnComm事件 
 
  每次OnComm事件读到的数据只会比n多,不会比n少,因为在你处理OnComm时,可能就会又有数据进来 
  比方SetRThreshold(1),如果你串口连续有数据,波特率较高,一般都会在OnComm时发现其实GetInput的数据远远不止1个,但也没有到40K这么夸张,一般8个字符左右,这个字符数并不一定 
  OnComm是会不断触发的,只要你串口里面有数据,上一次没Get走的数据会在下一次OnComm时获得。 
 
  如果你要一次获得很多个数据,将你的SetRThreshold值设得大一些

想要提取正确的数据就要加上判断,而不是什么数据都接收

[/Quote]
嗯,谢谢了,我明白自己之前提取的数据为什么总是有时候对有时候不对了,那我直接在m_strRXData里面提取是否可以呢,这会不会造成接收数据和提取数据之间的干扰呢?
feilinhe 2009-10-11
  • 打赏
  • 举报
回复
使用函数MSCOMM::SetRThreshold(n);

SetRThreshold(n)表示数据来了n个,就触发一次OnComm事件,但并不是说总共N个数据,就会触发N/n次OnComm事件

每次OnComm事件读到的数据只会比n多,不会比n少,因为在你处理OnComm时,可能就会又有数据进来
比方SetRThreshold(1),如果你串口连续有数据,波特率较高,一般都会在OnComm时发现其实GetInput的数据远远不止1个,但也没有到40K这么夸张,一般8个字符左右,这个字符数并不一定
OnComm是会不断触发的,只要你串口里面有数据,上一次没Get走的数据会在下一次OnComm时获得。

如果你要一次获得很多个数据,将你的SetRThreshold值设得大一些

想要提取正确的数据就要加上判断,而不是什么数据都接收
水瓶06 2009-10-10
  • 打赏
  • 举报
回复
up,大家多多发表意见,多多帮忙啊
dirdirdir3 2009-10-10
  • 打赏
  • 举报
回复
应该是有字符就会出事件,但是具体到数据的话很难说,可能有时候1个也有可能多个.........................最好自己做一下对齐,如搞个包头"pact"等..................

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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