void CShiyan3Dlg::OnOnComm()
{
UpdateData(FALSE);
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strEditRXData+=strtemp;
}
}
else
{
AfxMessageBox("无法接受数据");
}
UpdateData(FALSE); //更新编辑框内容
}
串口没问题 我开两个串口助手可以相互接受 数据 但是 自己写的这个接受数据的程序不能用 会一直弹出 无法接受数据 的内容框。无法理解 求作答 感谢各位大神 编译的时候 程序是没有问题的 就是不能接受 。。。
我照着visualC++/turboC串口通信编程实践写的接受数据的程序不能用我有检查串口是没有问题的求解
答案:4 悬赏:60
解决时间 2021-12-12 20:09
- 提问者网友:无依无靠的距离
- 2021-12-12 05:55
最佳答案
- 二级知识专家网友:滚刀废物浮浪人
- 2021-12-12 06:00
不要在串口事件处理中使用对话提示框,如果想看到信息,可以用一个文本框来显示信息
既然这个事件已经响应了,就说明串口中有事件发生,你可以输出事件的值,查找原因
编译能通过,不代表程序没有问题.
把代码
else
{
AfxMessageBox("无法接受数据");
}
改成
else
{
文本框显示m_ctrlComm.GetCommEvent()的值;
// 或者提取inbuffer的内容到文本框中
}
既然这个事件已经响应了,就说明串口中有事件发生,你可以输出事件的值,查找原因
编译能通过,不代表程序没有问题.
把代码
else
{
AfxMessageBox("无法接受数据");
}
改成
else
{
文本框显示m_ctrlComm.GetCommEvent()的值;
// 或者提取inbuffer的内容到文本框中
}
全部回答
- 1楼网友:承载所有颓废
- 2021-12-12 08:41
在
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
这一句打个断点,调试一下,看接收到的事件值是否正确
- 2楼网友:为你轻狂半世殇
- 2021-12-12 07:07
似乎没有视频
但 有 pdf 电子文档,扫描件
需要 可以 联系
- 3楼网友:恕我颓废
- 2021-12-12 07:00
串口接收是按字节算的,你按字节从缓冲区读取走。不要定义这么大个缓冲区了,实际上是木有用的。串口每来一个数据,SCOMM插件就会发出一个事件信号。
你说会弹出无法接收这个框框。那就是事件2在你点击时还未出现。这说明,你去看下发出事件2的那段代码。
如果实在不行,请使用API自己做,不要使用SCOMM插件。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯