求助,用oncomm时间接收的数据不全
用VS中的mscomm控件写了一个串口上位机程序,但测试的时候发现,接收到的数据不全
当我发送1234时,可以收到1234,但当我发送123456时,只能收到12 56,当我发送12345678时,只能收到12 78,程序如下,求各位大神帮帮忙
这是初始化
m_ctrlcomm.put_CommPort(1); //选择COM1
m_ctrlcomm.put_Settings(_T("9600,n,8,1"));//波特率9600无检验位,8个数据位,1个停止位
m_ctrlcomm.put_InBufferSize(10000); //接收缓冲区
m_ctrlcomm.put_OutBufferSize(1024);//发送缓冲区
m_ctrlcomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_ctrlcomm.put_InputMode(1);//以二进制方式读写数据
m_ctrlcomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
oncomm事件
void CMFCApplication6Dlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
{
VARIANT variant_inp;
COleSafeArray safearry_inp;
LONG len,k;
BYTE rxdata[4096];
CString strtemp;
int order;
char *str;
CByteArray data;
if(m_ctrlcomm.get_CommEvent() == 2)//事件值为2表示接收缓冲区内有数据
{
variant_inp = m_ctrlcomm.get_Input();//读缓冲区
safearry_inp = variant_inp;//VARIANT转化为COleSafeArray
len = safearry_inp.GetOneDimSize();//字符长度
for(k=0;k<len;k++)
{
safearry_inp.GetElement(&k,rxdata+k);//转化为BYTE型数组
}
for(k=0;k<len;k++)//将数组转化成Cstring型变量
{
BYTE bt = *(char*)(rxdata+k);
if(m_checkdis.GetCheck())
{
strtemp.Format(_T(" %02X "),bt);
order=_tcstol(strtemp, NULL, 16);
}
else
{
strtemp.Format(_T("%c"),bt);
order = _ttoi(strtemp);
}
}//将字符送入临时变量strtemp中存放
Display1 += strtemp;//加入接收编辑框对应字符串
SetDlgItemText(IDC_EDIT_DISPLAY1,Display1);
m_editdisplay.LineScroll(m_editdisplay.GetLineCount()-1);
CSeries(m_chart.Series(0)).Add(order,_T(""),1);
CAxes chartaxis=(CAxes)m_chart.get_Axis();
CAxis chartaxisbottom=(CAxis)chartaxis.get_Bottom();
chartaxisbottom.Scroll(1,TRUE);
}
}
}