大侠们:
我的串口属性定义如下:
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;
}
我的串口属性定义如下:
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;
}
解决方案 »
- 不显示删除回复显示所有回复显示星级回复显示得分回复 怎样用CRecordSet的对象recordset修改当前记录的某一字段值?在数据库论坛没人理才来的
- 背景问题
- 关于CScrollView滚动的奇怪问题
- 用Visual C++6.0编写一基于单文档的应用程序,编程实现为该单文档窗口创建一可移动的工具栏。
- 请问我在win xp下用VC++10做的图像处理程序在win7下不能显示图像了?
- 如何在CTreeCtrl中显示透明图标?
- 关于消息维持
- ListView如何自动实现一格中的数据自动换行?
- 关于DLL的编译,请教高手。
- 我在网上无意看到一篇文章, 是关于前一阵子散发木马的人渣. 受害者真多啊!! 大家来关注一下!! 免得更多人受害!
- 怎么使ActiveMovie控件只显示上面部分
- 获取的实时时间显示内容重叠不刷新
我的实际工程是这样的:下位机每隔1秒发一帧数据到pc机!一帧数据是164个字节!帧头6个字节!帧尾2个字节!我就不知道如何去掉帧头、帧尾,将数据保存下来!请高手指教