MSCOMM串口通信 接收区缓存如何清除 请教各位大大

AgentNeo 2013-08-11 10:41:52
部分代码如下
添加串口事件消息处理函数OnComm() 打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。
这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码:
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 integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
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); //更新编辑框内容
}



我在更新前面加 m_strEditRXData=""; //清除缓存 之后发现接受的数据一次对一次不对的 如果不加这个又无法清除缓存 请教各位大大了
...全文
757 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2013-08-12
  • 打赏
  • 举报
回复
清除缓存之前应该判断是否是合理的一包, 或接收时判断是起始再清理
AgentNeo 2013-08-12
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
清除缓存之前应该判断是否是合理的一包, 或接收时判断是起始再清理
哦 明白了 我试试
AgentNeo 2013-08-11
  • 打赏
  • 举报
回复
试了下 改下这个参数就好了 改为接收字符数和要接受的字符数相等 m_ctrlComm.SetRThreshold(8);
AgentNeo 2013-08-11
  • 打赏
  • 举报
回复
m_ctrlComm.SetInBufferCount(0); //清空接收缓冲区 m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 这两条函数也试过了 没有用
AgentNeo 2013-08-11
  • 打赏
  • 举报
回复
我单步调试的时候没发现任何问题 结果也是正确的 但是直接运行就是一次对一次错的规律

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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