+ -
当前位置:首页 → 问答吧 → MFC 串口接收不到报文 可以发送,求解释,求一切围观

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;
...
}

作者: 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了,但就是没读到数据
串口是否确实有数据上报,,,这个怎么看啊?
;
引用 3 楼 zengwenfu 的回复:
可能性很多:串口是否打开并且初始化成功,接受线程是否正常工作,串口是否确实有数据上报。

作者: zengwenfu   发布时间: 2011-12-23