VC++6.0中关于处理串口数据包问题

wmswxpmyl 2009-11-10 09:03:59
大侠们:
我的串口属性定义如下:
if(m_hcomm.GetPortOpen())
m_hcomm.SetPortOpen(FALSE);//关闭串口
m_hcomm.SetCommPort(1);
m_hcomm.SetInBufferSize(1024);
m_hcomm.SetOutBufferSize(1024);
if(!m_hcomm.GetPortOpen())
m_hcomm.SetPortOpen(TRUE);
m_hcomm.SetInputMode(1);
m_hcomm.SetSettings( "115200,n,8,1 ");
m_hcomm.SetRThreshold(164);
m_hcomm.SetInputLen(0);
串口时间响应函数为:
VARIANT wariantdata;
COleSafeArray safearray;
long len=0;
long k=0;

byte radax[200];
memset(radax,0,200);
byte b0,b1,b2,b3,b4,b5,b162,b163;

CString str= " "; //十六进制显示用到的CString型变量
CString strtmp= " ";

CString str1= " "; //字符型显示用到的CString型变量
CString strtmp1= " ";

switch(m_hcomm.GetCommEvent())

{

case 2:


wariantdata=m_hcomm.GetInput();
safearray=wariantdata;
len=safearray.GetOneDimSize();
safearray.GetElement(&k,&b0);
k=k+1;
safearray.GetElement(&k,&b1);
k=k+1;
safearray.GetElement(&k,&b2);
k=k+1;
safearray.GetElement(&k,&b3);
k=k+1;
safearray.GetElement(&k,&b4);
k=k+1;
safearray.GetElement(&k,&b5);
len=len-1;
safearray.GetElement(&len,&b163);
len=len-1;
safearray.GetElement(&len,&b162);
if (b0==0x00&&b1==0x00&&b2==0x00&&b3==0x00&&b4==0x02&&b5==0xa6&&b162==0x0d&&b163==0x0a)
{
for (k=6;k <len;k++)
{
safearray.GetElement(&k,&radax[k-6]);
}
radax[k-5]= '\0 '; //用byte型数组来接收safearray中的数据;

for (k=0;k <156;k++)
{
byte bt=*(char*)(radax+k); //字符型
str1.Format( "%c ",bt); //将字符送入临时变量strtemp存放
strtmp1+=str1; //strtmp1来保存
}
//十六进制显示
for (k=0;k <55;k++)
{
str.Format( "%x ",radax[k]);
strtmp+=str;
str= " ";
}
strtmp+= "\r ";
strtmp+= "\n ";

for (k=55;k <110;k++)
{
str.Format( "%x ",radax[k]);
strtmp+=str;
str= " ";
}
strtmp+= "\r ";
strtmp+= "\n ";
for (k=110;k <156;k++)
{
str.Format( "%x ",radax[k]);
strtmp+=str;
strtmp+= "\0 ";
str= " ";
}


//字符串形式显示
int lenstrtmp1;
lenstrtmp1=strtmp1.GetLength();
((CEdit*)GetDlgItem(IDC_EDIT_SHOWDATA1))-> SetWindowText(strtmp1);
memset(radax,0,200);



((CEdit*)GetDlgItem(IDC_EDIT_SHOW_DATA))-> SetWindowText(strtmp);
}
else
{
safearray.Clear();
return;
}

我的实际工程是这样的:下位机每隔1秒发一帧数据到pc机!一帧数据是164个字节!帧头6个字节!帧尾2个字节!我就不知道如何去掉帧头、帧尾,将数据保存下来!请高手指教
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyc86 2009-11-10
  • 打赏
  • 举报
回复
我想如果知道了帧数据结构了,提取一帧里的有用信息不难的
雪影 2009-11-10
  • 打赏
  • 举报
回复
你不是发过一个这样的帖子吗?
wmswxpmyl 2009-11-10
  • 打赏
  • 举报
回复
那你说说看吧!我实在不会!!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧