CSerialPort类读取消息,读不到,请大家来看看

pcn9635457 2011-11-24 06:53:44
   //定义发送单个字符的空间大小
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;



串口读消息,但是程序读不到,而且读时程序繁忙,需要强行关闭。
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2011-11-28
  • 打赏
  • 举报
回复
// 为什么一个字节一个字节的发,不是4个字节一起发?
// 也许下位机字节间超时了,始终没有收到完整的一帧命令。
liquanhai 2011-11-26
  • 打赏
  • 举报
回复
VC串口修正类应用的小项目及其CSerialPort类的经典使用,可以直接用到项目中去:http://blog.csdn.net/liquanhai/article/details/6941574
noodle123 2011-11-26
  • 打赏
  • 举报
回复
那是因为使用的是阻塞的串口读写方式,Read时程序阻塞等待串口发过来的消息,但是串口肯定并没有发过来消息(信息、数据),所以就一直死等了,所以必须强制关闭。
感觉楼主的意思是向串口发送一个命令,外部设备通过串口接收该命令后立即返回一些数据,有可能是指令格式不正确。
或者是发送的数据不够50个,所以一直在等了,用5个、1个试试看。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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