用mfc里MSComm控件写简单收发串口工具,但发送数据长于10时,第十一位接收端显示会丢失,请教大神帮忙!

如图,通过串口向设备下命令,只有命令长度大于11位,第11/12(11居多)位在接收端总是显示没有收到,看起来好像是被覆盖的感觉。程序如下initial函数里里面:if(... 如图,通过串口向设备下命令,只有命令长度大于11位,第11/12(11居多)位在接收端总是显示没有收到,看起来好像是被覆盖的感觉。
程序如下
initial函数里里面:
if(m_cComm.GetPortOpen())//如果发现串口本来是打开的,则关闭串口
m_cComm.SetPortOpen(FALSE);

m_cComm.SetCommPort(m_COMNum);//选择COM-n端口
m_cComm.SetInputMode(1);//输入方式为二进制方式
m_cComm.SetInBufferSize(1024);//设置输入缓冲区
m_cComm.SetOutBufferSize(1024);//设置输出缓冲区
m_cComm.SetSettings("115200,n,8,1");//波特率115200,无校验,8个数据位,1个停止位

if(!m_cComm.GetPortOpen())
{
m_cComm.SetPortOpen(TRUE);//打开串口
m_cComm.SetRThreshold(1);//每当接收缓冲区有1个字符则接收串口数据
m_cComm.SetInputLen(0);//设置当前缓冲区长度为0
m_cComm.GetInput();//预读缓冲区以清除残留数据
}
else
AfxMessageBox("打开端口失败!",MB_ICONSTOP,0);

发送数据函数里:
UpdateData(true);//读取编辑框内容
CString str="\r";
m_cComm.SetOutput(COleVariant(m_strSendData+str));//发送数据
m_strSendData.Empty();//发送后清空输入框
UpdateData(false);//更新编辑框内容

OnComm函数里:
//从串口接收数据并显示在编辑框中
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
byte rxdata[2048];//设置BYTE数组
CString strtemp;
if(m_cComm.GetCommEvent()==2)//值为2表示接收缓冲区内有字符
{
variant_inp=m_cComm.GetInput();//读缓冲区消息
safearray_inp=variant_inp;///变量转换
len=safearray_inp.GetOneDimSize();//得到有效的数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)//将数组转换为CString型变量
{
char bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRecvData+=strtemp;//加入接收编辑框对应字符串
}
}
CString temp=("\r\n");//显示完成后要自动换行
m_strRecvData+=temp;
UpdateData(FALSE);//更新编辑框内容
展开
 我来答
来自月岩仪态万千的比目鱼
2014-05-08 · TA获得超过1571个赞
知道小有建树答主
回答量:1221
采纳率:50%
帮助的人:964万
展开全部
char bt=*(char*)(rxdata+k);//字符型
你在这里加个断点,调试看看,接收到的rxdata数据对不对。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-05-08
展开全部
感觉明显是你 程序处理过程中 丢失
追问
请您给出程序修改建议或是大概问题所在,感谢!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chd_ww
2018-11-05
知道答主
回答量:3
采纳率:0%
帮助的人:3.7万
展开全部
请问最后问题如何解决的?我也遇到一样的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式