void CINSDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
char ch;
BYTE rxdata[2048];
CString strtemp;
if(m_Com.GetCommEvent()==2)
{
variant_inp=m_Com.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);//字符型
// BYTE bt=*(char*)(str+k);//字符型
// strtemp.Format("%c",bt);//可能引起零为无数据
if((flag==1)&&(count<=26))
{
data[count]=bt;
count++;
m_strRXData+=bt;
}
else
{
flag=0;
}
ch=(char)bt;
if((ch=='E')&&(flag_first==1)) //是否连续收到0x7f,'E';
{
flag=1;
count=0;
// strcpy(data,m_strRXData);//会把零当为字符串结束
m_strRXData.Empty();
}
else
{
flag_first=0;
}
if(ch==0x7f)
{
flag_first=1;//是否收到头字符0x7f
}
else
{
flag_first=0;
}
}
}
UpdateData(FALSE);
}
此博客展示了一段 C++ 代码,用于处理串口通信事件。代码从串口缓冲区读取数据,将 VARIANT 型变量转换为 BYTE 型数组,对数据进行处理和筛选,根据特定字符设置标志位,最后更新数据显示。
1万+

被折叠的 条评论
为什么被折叠?



