MSComm控件数据处理!```
void CPtx30Dlg::OnOnCommMscomm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,i,k=0;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp,m_RcvData,x;
if(m_CMScomm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
if (m_CMScomm.GetInBufferCount()==1)//缓冲区里有一个字节时进行判断
{
if (m_SendFlag==1)
{
m_SendFlag=0;
int len;
CString m_ascii;
CByteArray m_Array;
m_ascii="3c050301043f"; //判断返回“01”时才发这串啊
len=String2Hex(m_ascii,m_Array);
m_CMScomm.SetOutput(COleVariant(m_Array));
m_CMScomm.SetOutBufferCount(0);
}
if (m_SendFlag==3)
{
m_SendFlag=0;
int len;
CString m_ascii;
CByteArray m_Array;
m_ascii="3c0500030102af"; //判断返回“01”时才发这串啊
len=String2Hex(m_ascii,m_Array);
m_CMScomm.SetOutput(COleVariant(m_Array));
m_CMScomm.SetOutBufferCount(0);
}
}
if (m_CMScomm.GetInBufferCount()==87)
{
variant_inp=m_CMScomm.GetInput(); //读缓冲区
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(i=0;i<len;i++)
safearray_inp.GetElement(&i,rxdata+i);
for(i=0;i<len;i++)
{
BYTE bt=*(char*)(rxdata+i);
strtemp.Format("%02X",bt);
m_RcvData+=strtemp;
}
MessageBox(m_RcvData);
}
}
}
我们协议发送数据时要先握手,即发送命令时要先发送“01”,等返回“01”时才能再发送命令。
发送的命令有两条:1,发3c050301043f 返回87个字节的数据。
2,发3c0500030102af 修改机器的值,返回“01”为修改成功,没有返回的话要重发。
我上面的代码应该怎么改呢?应该在上面代码中判断接收到的为“01”才能发送后面的3c050301043f啊,但是我不知道该怎么判断咯。。。请
帮帮忙了!~~ 还有请问是不是每次执行variant_inp=m_CMScomm.GetInput();这条语句后都清空缓冲区的??