程序
BOOL CMainDlg::OnInitDialog()
{
.........................................//略
// TODO: Add extra initialization here
m_wndCOM1.SetCommPort(1);
m_wndCOM1.SetSettings("9600,n,8,1");
m_wndCOM1.SetInputLen(0);
m_wndCOM1.SetInBufferSize (1024);
m_wndCOM1.SetPortOpen(TRUE);//打开通信口
m_wndCOM1.SetInputMode (1);
m_wndCOM1.SetRThreshold(20);
return TRUE; // return TRUE unless you set the focus to a control
}
void CMainDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CByteArray array;
array.RemoveAll();
array.SetSize(10);
array.SetAt(0,m_tmpNum); //m_tmpNum为BYTE
m_wndCOM1.SetOutput(COleVariant(array));
}
void CMainDlg::OnComm()
{
// TODO: Add your control notification handler code here
int k;
int intNum;
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,i;
BYTE rxdata[2048]={0};
CString strtemp;
switch(m_wndCOM1.GetCommEvent())
{
case 2: //comEvReceiv事件,有数据到达
//对接收到的数据做必要处理
k=m_wndCOM1.GetInBufferCount();
if(k>0)
{
,
variant_inp=m_wndCOM1.GetInput();
m_wndCOM1.SetInBufferCount(0);
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
BYTE *m_pCommData=new BYTE[len];
for(i=0;i<len;i++)
safearray_inp.GetElement(&i,rxdata+i);
for(i=0;i<len;i++)
{
m_pCommData[i]=rxdata[i];
}
intNum=m_pCommData[0];
lBinH=m_pCommData[1];
lBinL=m_pCommData[2];
delete []m_pCommData;
}
break;
default:
break;
}
}
为什么rxdata读进来的数都是255,是不是溢出了,而且每次读进来的都是30多个数,我只需要20个,好像把下一次采样也读进来了,应该怎样解决,谢谢,急……
你这样是一有数据就读,不管是不是下一次
每次对长度都判断下
把m_wndCOM1.SetInputLen(0);改为m_wndCOM1.SetInputLen(1);
你想接多少字节的数据,可以通过你上面的k值进行控制
MSCOMM 没有问题,可以用的,你看看数据的二进制对不对,如果二进制都是11111111就可能是前端的问题了.
mscomm,不会有什么问题
1.用串口调试助手看看收到的开底是什么数据.
2.定时接收比ONCOMM()事件要好.
是不是255是keepalive的消息来的,试一下把它过滤掉再接受数据。
看看数据正不正确?