MFC 串口接收不到报文 可以发送,求解释,求一切围观
时间:2011-12-23
来源:互联网
串口可以发送,但接受不到数据,,,,求解释
打开串口 创建接收线程,然后就一直处于接收状态,关闭串口,退出线程
void CAerolianvibration_TestDlg::OnOpencom()
{
...
...
//建立线程
OpenCom = true;
Handle_Recv = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Recv,(LPVOID)this,0,NULL);
}
DWORD __stdcall CAerolianvibration_TestDlg::Thread_Recv(LPVOID lpParameter)
{
...
while (1)
{
if (OpenCom)
break;
// {
//接收数据
bReadStat=ReadFile(hcom,readdata,256,&dwRecv,NULL);
//PurgeComm(pTestDlg->hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
if(bReadStat==0)
{
AfxMessageBox("读串口失败......!");
}
else
{
//判断包头
if (dwRecv>0 && readdata[0] == 0xA5 && readdata[1] == 0x5A)
{
pTestDlg->GetDlgItem(IDC_MSG)->GetWindowText(str_msg);
if (readdata[6] == 0x01) //工作状态报
{
char *preaddata;
preaddata = &readdata[0];
if (CRC16((unsigned char *)preaddata,12) == readdata[13] * 256 + readdata[12])
{
//显示
for (i=0;i<14;i++)
{
sprintf(HexRead,"%02X ",BYTE(readdata[i]));
strcat(ShowData,HexRead);
}
str_msg += "工作状态报:";
str_msg += ShowData;
str_msg += "\r\n";
}
else
{
str_msg += "ACK_即时采集微风振动数据:校验位错误";
str_msg += "\r\n";
}
continue;
}
void CAerolianvibration_TestDlg::OnClosecom()
{
...
OpenCom = false;
...
}
打开串口 创建接收线程,然后就一直处于接收状态,关闭串口,退出线程
void CAerolianvibration_TestDlg::OnOpencom()
{
...
...
//建立线程
OpenCom = true;
Handle_Recv = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Recv,(LPVOID)this,0,NULL);
}
DWORD __stdcall CAerolianvibration_TestDlg::Thread_Recv(LPVOID lpParameter)
{
...
while (1)
{
if (OpenCom)
break;
// {
//接收数据
bReadStat=ReadFile(hcom,readdata,256,&dwRecv,NULL);
//PurgeComm(pTestDlg->hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
if(bReadStat==0)
{
AfxMessageBox("读串口失败......!");
}
else
{
//判断包头
if (dwRecv>0 && readdata[0] == 0xA5 && readdata[1] == 0x5A)
{
pTestDlg->GetDlgItem(IDC_MSG)->GetWindowText(str_msg);
if (readdata[6] == 0x01) //工作状态报
{
char *preaddata;
preaddata = &readdata[0];
if (CRC16((unsigned char *)preaddata,12) == readdata[13] * 256 + readdata[12])
{
//显示
for (i=0;i<14;i++)
{
sprintf(HexRead,"%02X ",BYTE(readdata[i]));
strcat(ShowData,HexRead);
}
str_msg += "工作状态报:";
str_msg += ShowData;
str_msg += "\r\n";
}
else
{
str_msg += "ACK_即时采集微风振动数据:校验位错误";
str_msg += "\r\n";
}
continue;
}
void CAerolianvibration_TestDlg::OnClosecom()
{
...
OpenCom = false;
...
}
作者: liumin611 发布时间: 2011-12-23
自己顶一下
作者: liumin611 发布时间: 2011-12-23
该回复于2011-12-23 10:09:01被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#3楼 得分:0回复于:2011-12-23 10:09:58
|
作者: liumin611 发布时间: 2011-12-23
串口打开了,可以写报文,
线程是否正常工作怎么看啊?线程函数里我放了很多AfxMessageBox("......"),流程还是对的
明明读串口函数返回1了,但就是没读到数据
串口是否确实有数据上报,,,这个怎么看啊?
;
线程是否正常工作怎么看啊?线程函数里我放了很多AfxMessageBox("......"),流程还是对的
明明读串口函数返回1了,但就是没读到数据
串口是否确实有数据上报,,,这个怎么看啊?
;
引用 3 楼 zengwenfu 的回复:
可能性很多:串口是否打开并且初始化成功,接受线程是否正常工作,串口是否确实有数据上报。
可能性很多:串口是否打开并且初始化成功,接受线程是否正常工作,串口是否确实有数据上报。
作者: zengwenfu 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28