CSerialPort类读取消息,读不到,请大家来看看
时间:2011-11-24
来源:互联网
C/C++ code
串口读消息,但是程序读不到,而且读时程序繁忙,需要强行关闭。
//定义发送单个字符的空间大小 char *buffA = new char[1]; char *buffB = new char[1]; char *buffC = new char[1]; char *buffD = new char[1]; //分配每次发送的空间 memset(buffA,0,sizeof(char)*1); memset(buffB,0,sizeof(char)*1); memset(buffC,0,sizeof(char)*1); memset(buffD,0,sizeof(char)*1); //设置发送字符 buffA[0]= 'P'; buffB[0]= 'O'; buffC[0]= 'N'; buffD[0]= 13; //清空串口读写缓存; // m_SerialPort.ClearReadBuffer(); // m_SerialPort.ClearWriteBuffer(); //向串口发送数据 m_SerialPort.Write(buffA,sizeof(char)*1); SetTimeOut(); m_SerialPort.Write(buffB,sizeof(char)*1); SetTimeOut(); m_SerialPort.Write(buffC,sizeof(char)*1); SetTimeOut(); m_SerialPort.Write(buffD,sizeof(char)*1); SetTimeOut(); //数据发送完成,释放分配空间 delete[] buffA; delete[] buffB; delete[] buffC; delete[] buffD; //设置延迟,等待下位机向串口发送数据 SetTimeOut(); //开始读取串口数据 char *Readbuff = new char [50]; memset(Readbuff,0,sizeof(char)*50); m_SerialPort.Read(Readbuff,50); //读取完成,显示在文本框中 GetDlgItem(IDC_BACKMESSAGE)->SetWindowText(Readbuff); //清理串口中的读缓存 m_SerialPort.ClearReadBuffer(); m_SerialPort.ClearWriteBuffer(); //释放读取缓存空间 delete[] Readbuff;
串口读消息,但是程序读不到,而且读时程序繁忙,需要强行关闭。
作者: pcn9635457 发布时间: 2011-11-24
那是因为使用的是阻塞的串口读写方式,Read时程序阻塞等待串口发过来的消息,但是串口肯定并没有发过来消息(信息、数据),所以就一直死等了,所以必须强制关闭。
感觉楼主的意思是向串口发送一个命令,外部设备通过串口接收该命令后立即返回一些数据,有可能是指令格式不正确。
或者是发送的数据不够50个,所以一直在等了,用5个、1个试试看。
感觉楼主的意思是向串口发送一个命令,外部设备通过串口接收该命令后立即返回一些数据,有可能是指令格式不正确。
或者是发送的数据不够50个,所以一直在等了,用5个、1个试试看。
作者: noodle123 发布时间: 2011-11-26
VC串口修正类应用的小项目及其CSerialPort类的经典使用,可以直接用到项目中去:http://blog.csdn.net/liquanhai/article/details/6941574
作者: liquanhai 发布时间: 2011-11-26
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28