CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

求助:串口通讯问题

楼主Eog(天之眼)2005-03-02 23:41:04 在 VC/MFC / 基础类 提问

用串口连接两台机器,我用的是单线程,使用的是MSComm控件,一去一答,发送数据后等待回复的消息,(回复的消息我用串口调试助手发送),然后再处理。我用了一个循环,设置一个标志量,如果收到回复就继续进行下去,可是主机一方总是收不到回复的消息,OnComm总是没有办法激活。如果我使用一个AfxMessageBox(“等待”)就能激活收到,怎么解决,是不是必须要用多线成啊?谢谢 问题点数:50、回复次数:15Top

1 楼legendhui(秋天的叶子)回复于 2005-03-03 08:46:28 得分 2

你要用MSComm控件来收发消息,如果在一个按钮里同时处理收发消息,我还没有找到解决方法。有一个方法就是在OnComm函数中同时处理收发Top

2 楼jszj(老板说mis部不是赚钱的部门...)回复于 2005-03-03 08:52:11 得分 2

不会吧?   我想应该可以的  
   
  你能确定主机发送消息后调试助手能收到吗?Top

3 楼legendhui(秋天的叶子)回复于 2005-03-03 08:54:01 得分 2

楼上的  
   
  你想应该可以?你试过吗?  
   
  如果你试过可以,我虚心请教Top

4 楼auly403(卡西*丁布)回复于 2005-03-03 08:54:57 得分 2

两个com口连线有没有问题  
  可用两个串口调试器测试一下Top

5 楼mrxwh(大徐)回复于 2005-03-03 09:25:45 得分 5

用一个循环?是否处于死机状态了?你是使用的什么循环方式?for(;;)吗?如果是这样的话,会导致程序不工作了!  
      我送你一个例子吧。这是我最近工作用的。试试看。  
   
                UINT   CGSMFormView::CommTest()  
  //发送测试参数:基本格式和形式  
                  {  
  //不回显内容,从设置后1条生效  
  m_cSendStr=_T("ATE1\r\n");//回显  
  m_ctrlComm1.SetOutput(COleVariant(m_cSendStr));  
  m_cSendStr=_T("ATV1\r\n");//命令回显字符型  
  m_ctrlComm1.SetOutput(COleVariant(m_cSendStr));  
  Sleep(100);  
  m_oVar=m_ctrlComm1.GetInput();  
   
  //本条开始,回显内容  
  for(m_iloopCnt=0;m_iloopCnt<theApp.m_iCommLoop;m_iloopCnt++)  
  {  
  m_ctrlComm1.SetInBufferCount(0);//清除端口现有数据  
  m_cSendStr=_T("ATE1\r\n");  
  m_ctrlComm1.SetOutput(COleVariant(m_cSendStr));  
  m_ctrlComm1.SetRThreshold(m_cSendStr.GetLength());//接到原长度字符后产生中断  
   
  SetTimer(1,theApp.m_iCommWaitTime,NULL);  
  m_bTimerOkay=FALSE;  
  m_iCommResult=0;  
  m_iCommType=1; //一般命令  
   
  while(m_iCommResult<=0)  
  {  
  DoEvents();  
  }  
  if(m_iCommResult!=88)  
  {  
  continue;//继续  
  }  
  break;  
   
  }  
  if(m_iCommResult!=88)  
  {  
  ::AfxMessageBox(_T("启动通讯错误:回显设置错误!"),MB_OK+MB_APPLMODAL+MB_ICONSTOP);  
  return   'E';  
  }  
  return   'K';  
  }  
   
  BOOL   CGSMFormView::DoEvents()  
  //     类似VB的DOEVENTS功能  
  {  
  m_bIsDoEvents=TRUE;  
    MSG   msg;  
  while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))  
    {  
  //发送结束程序指令  
  /*  
    if(msg.message   ==WM_QUIT)  
    {  
          ::PostQuitMessage(0);  
    return   FALSE;//必须加入退回的语句;否则程序一致循环,当系统有机会发送  
  //WM_QUIT指令时候,窗口已经被关闭了,从而导致应用程序不能够  
  //正真的被关闭。  
    }  
  */    
  ::TranslateMessage(&msg);  
    DispatchMessage(&msg);  
    }  
  m_bIsDoEvents=FALSE;  
    return   TRUE;            
  }  
   
      说明,设置好相关参数,发送数据,循环等待接收(使用DOEVENTS()函数,防止死循环),在ONCOMM()函数中,设置好处理接收的程序,即可。  
      有问题可以联系我。mrxwh@eyou.com,mrxwh@21cn.comTop

6 楼Aerith(艾莉斯)回复于 2005-03-03 10:47:32 得分 20

你的循环是怎么做的?是不是在纯粹的兜循环而使系统没有时间处理消息?  
  你在循环里加这几句话试试看:  
  MSG   msg;  
  while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))  
  {  
  TranslateMessage(&msg);  
  DispatchMessage(&msg);  
  }  
  Top

7 楼xqk(夏乾坤)回复于 2005-03-03 11:00:17 得分 1

upTop

8 楼guyue6670()回复于 2005-03-03 11:24:12 得分 1

应该有一段等待时间,好让端口对数据进行传输和接受。Top

9 楼xinminhuibaobao(砖头)回复于 2005-03-03 12:33:20 得分 1

JustUPaGoodTopicTop

10 楼crystal521(【云淡风轻】)回复于 2005-03-03 12:52:36 得分 12

加上这个试试  
  MSG   msg;  
  while(   PeekMessage(   &msg,   0,   0,   0,   PM_REMOVE   )   )  
  {  
        ::TranslateMessage(   &msg   );  
        ::DispatchMessage(   &msg   );  
  }Top

11 楼crystal521(【云淡风轻】)回复于 2005-03-03 12:53:15 得分 0

另外,在发收之间加上延时Top

12 楼mousefj(冯杰)回复于 2005-03-03 14:01:39 得分 1

//设置OnComm触发条件  
  CMSComm m_comm;  
  m_comm.SetRThreshold(1);//设置响应端口接收事件的条件Top

13 楼Eog(天之眼)回复于 2005-03-04 23:49:36 得分 0

谢谢各位,问题解决了。:   Aerith(艾莉斯)     crystal521(水晶泪)   的方法。Top

14 楼Eog(天之眼)回复于 2005-03-04 23:51:10 得分 0

准备结贴了,再次表示感谢,还想问问为什么加上这个就可以了?我用的是个while循环。谢谢Top

15 楼legendhui(秋天的叶子)回复于 2005-03-05 09:53:50 得分 1

加上这个循环,可以截获消息Top

相关问题

  • 串口通讯
  • 串口通讯!!!
  • 串口通讯
  • 串口通讯
  • 串口通讯?[Delphi]
  • spcomm串口通讯
  • PB串口通讯?
  • c# 串口通讯
  • vb.net串口通讯
  • Dos下串口通讯

关键词

  • 消息
  • 循环
  • csendstr
  • ctrlcomm
  • 串口
  • 回复
  • 回显
  • 收到
  • 处理
  • 发送

得分解答快速导航

  • 帖主:Eog
  • legendhui
  • jszj
  • legendhui
  • auly403
  • mrxwh
  • Aerith
  • xqk
  • guyue6670
  • xinminhuibaobao
  • crystal521
  • mousefj
  • legendhui

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo