用mscomm控件实现串口通信,想让程序在接到一个数据时先进行判断,当符合条件时传出数组中的一个数,不符合条件时不传。当再次符合时传送数组中的第二个数。可我这个程序一次全传完了,不知道该怎么改。由于初学,对数据类型还不了解。程序可能写的不好,还请高手指导。
void CSdmsView::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
CString strDisp;
char flag[100]={'k','t','e','y','f','j'};
int l;
if(m_MSComm.GetCommEvent()==2)
{
variant_inp=m_MSComm.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++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
}
if(strtemp=="1")
for(l=0;l<100;l++){
strDisp.Format("%d",flag[l]);
m_MSComm.SetOutput(COleVariant(strDisp));
}
}
}
还有一个问题就是当条件不符合时,用不用清空缓冲区?如果要该怎么做。
void CSdmsView::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
CString strDisp;
char flag[100]={'k','t','e','y','f','j'};
int l;
if(m_MSComm.GetCommEvent()==2)
{
variant_inp=m_MSComm.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++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
}
if(strtemp=="1")
for(l=0;l<100;l++){
strDisp.Format("%d",flag[l]);
m_MSComm.SetOutput(COleVariant(strDisp));
}
}
}
还有一个问题就是当条件不符合时,用不用清空缓冲区?如果要该怎么做。
在构造函数中给它赋初值0
if(strtemp=="1")
{
strDisp.Format("%d",flag[m_nIndex]);
m_nIndex++;
m_MSComm.SetOutput(COleVariant(strDisp));
}不用清空,因为你的响应m_MSComm.GetCommEvent()==2事件的时候已经把缓冲区中的数据全读出来了