串口问题求教

g4gemini131 2011-11-09 11:05:31
void CCommRDlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT m_Input1;
COleSafeArray m_Input2;
long length,i;
BYTE data[1024];
CString str;
if(m_comm.get_CommEvent()==2)
{
m_Input1=m_comm.get_Input();
m_Input2=m_Input1;
length=m_Input2.GetOneDimSize();
for(i=0;i<length;i++)
m_Input2.GetElement(&i,data+i);
for(i=0;i<length;i++)
{
char a=*(char *)(data+i);
str.Format(_T("%c"),a);

sText+=str;
m_ReceiveData.SetWindowText(sText);



}


}
UpdateData(false);
}

void CCommRDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码

if(!m_comm.get_PortOpen())
{
m_comm.put_PortOpen(true);

}
UpdateData(true);





}

void CCommRDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_ReceiveData.EmptyUndoBuffer();
UpdateData(false);
}

这是我在MFC中用mscomm控件写的接受程序,
我接受传感器发来的数据,可是没有显示,请教高手
...全文
109 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
g4gemini131 2011-11-12
  • 打赏
  • 举报
回复
m_comm.get_CommEvent()==3,为什么了 救命啊
g4gemini131 2011-11-11
  • 打赏
  • 举报
回复
注释掉以后不显示接收的数据,还有就是不触发oncomm事件,很郁闷
峰白 2011-11-11
  • 打赏
  • 举报
回复
你可以把有问题的语句先注释了,反正这句影响又不大,先让能跑起来再说
峰白 2011-11-10
  • 打赏
  • 举报
回复
好像是你对串口控件的设置有问题,少了不少东西,下面的是我一个程序里设置串口的代码,你参考下:
if(m_Com.GetPortOpen())
m_Com.SetPortOpen(FALSE);

m_Com.SetCommPort(m_nPort); //选择com1
if( !m_Com.GetPortOpen())
m_Com.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");

m_Com.SetSettings(m_strSettings); //波特率9600,无校验,8个数据位,1个停止位
m_Com.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_Com.SetInputMode(1);
m_Com.SetInputLen(0); //设置当前接收区数据长度为0
m_Com.GetInput();//先预读缓冲区以清除残留数据
sxqinge 2011-11-10
  • 打赏
  • 举报
回复
不会是没有添加消息映射吧?
g4gemini131 2011-11-10
  • 打赏
  • 举报
回复
我要实现的就是把传感器的数据接收并显示,我现在的问题是运行程序并连接传感器后在文本框中没有任何数据。
呔妖怪来嘛 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 g4gemini131 的回复:]
我用断点调试 程序就不响应这个函数void CCommRDlg::OnCommMscomm1() 有哪位知道 请赐教
[/Quote]
没响应是什么意思,就是说这函数都没被调用吗
g4gemini131 2011-11-10
  • 打赏
  • 举报
回复
就没有人拉哥们一把
g4gemini131 2011-11-10
  • 打赏
  • 举报
回复
BOOL CComDlg::OnInitDialog()
{
CDialog::OnInitDialog();
```````

if(m_comm.get_PortOpen())

m_comm.put_PortOpen(FALSE);

m_comm.put_CommPort(3); //选择com1

if( !m_comm.get_PortOpen())

m_comm.put_PortOpen(TRUE);//打开串口

else

AfxMessageBox(_T("cannot open serial port"));
m_comm.put_InBufferSize(1024); //接收缓冲区
m_comm.put_OutBufferSize(512);//发送缓冲区

m_comm.put_Settings(_T("9600,n,8,1")); //波特率9600,无校验,8个数据位,1个停止位

m_comm.put_InputMode(1); //1:表示以二进制方式检取数据

m_comm.put_RThreshold(1);



//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

m_comm.put_InputLen(0); //设置当前接收区数据长度为0

m_comm.get_Input();//先预读缓冲区以清除残留数据


return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

编译通过了 没有问题,在运行调试的时候就会发错误,如下
Com.exe 中的 0x7c812afb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012f1f4 处的 COleDispatchException。
Warning: Uncaught exception in WindowProc (returning 0).
单步调试在 m_comm.put_InBufferSize(1024); //接收缓冲区
m_comm.put_OutBufferSize(512);//发送缓冲区
出现问题,是内存溢出吗,怎么修改啊,高人指点

sxqinge 2011-11-10
  • 打赏
  • 举报
回复
那就是说没有收到数据了?
检查下发送的命令格式及内容是否正确,波特率、校验位、停止位等消息是否设置正确,最蛋疼的是,设备连线是否正确。。。
g4gemini131 2011-11-10
  • 打赏
  • 举报
回复
这些都没问题 程序改过了 还是不行。
我用单步调试,每次都是在if(m_comm.get_CommEvent()==2)
就跳过了 好像就没有消息响应
呔妖怪来嘛 2011-11-09
  • 打赏
  • 举报
回复
那是收到还是没收到啊
g4gemini131 2011-11-09
  • 打赏
  • 举报
回复
我用断点调试 程序就不响应这个函数void CCommRDlg::OnCommMscomm1() 有哪位知道 请赐教
g4gemini131 2011-11-09
  • 打赏
  • 举报
回复
没有收到吧 我也不清楚 反正是显示不出来
用户 昵称 2011-11-09
  • 打赏
  • 举报
回复
这肯定是不对的啦,要想用%c显示,就要跳过那些不可显示的字符以及00等等,要不就转换成16进制字符串进行显示

char a=*(char *)(data+i);
str.Format(_T("%.2X "),a);

sText+=str;

2,641

社区成员

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

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