在我的程序的基于CFormView的视图类中,拖入MSComm串口通讯控件,自动生成相关类CMSComm,再在classwisuard中为此控件添加变量:CMSComm m_Com;  然后为此控件添加一消息处理函数:ImageRecogView.h中:
.....
afx_msg void OnCommMscomm1();
DECLARE_EVENTSINK_MAP()
//}}AFX_MSG
DECLARE_MESSAGE_MAP()ImageRecogView.cpp中:
BEGIN_EVENTSINK_MAP(CImageRecogView, CFormView)
    //{{AFX_EVENTSINK_MAP(CImageRecogView)
ON_EVENT(CImageRecogView, IDC_MSCOMM1, 1 /* OnComm */, OnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
......void CImageRecogView::OnCommMscomm1() 
{ AfxMessageBox( "A Dumping Test---"); 
int nEvent;
nEvent=m_Com.GetCommEvent();
switch(nEvent)
{
    case 2:  //收到>=RThresshold 个字符
             AfxMessageBox( "A Dumping Test---");  
             break;
        case 3:  //CTS状态线发生变化
             AfxMessageBox( "A Dumping Test---");  
    break;
        case 4:  //DSR状态线发生变化
   AfxMessageBox( "A Dumping Test---"); 
   break;
        case 5:  //CD状态线发生变化
            AfxMessageBox( "A Dumping Test---"); 
   break;
        case 6:  //Ring Indicator状态线发生变化(引脚9)
            AfxMessageBox( "A Dumping Test---"); 
            break;
}
UpdateData(FALSE);
}我的问题是:
当我用连在计算机串口上的触发器(就是最简单的形式,只给串口的几个引脚送高低电平),为什么相应引脚的状态值改变之后上面的消息处理函数捕捉不到呢?
我的触发器是这样的:内置的公公端接线和引脚4相连(有什么用啊?),外面的四个开关可分别给1、6、8、9引脚传送信号。希望各位高手不吝赐教,谢谢啦!

解决方案 »

  1.   

    9针的rs232 5 是共用地,2,3分别是数据的接收和发送,7,8是握手,1,9 4,6 一般不用
    (见你的另一贴)
    如果是25针:
      2--TX
      3--RX
      4--RTS
      5--CTS
      6--DSR
      7--GND
      8--DCD
      20--DTR
      21--RI
      

  2.   

    RS232的数据输入/出的电平定义:
      0--- >=+3V
      1-- <=-3V
    你接地肯定是没用的
      

  3.   

    应该是+5V~+15V,-5V~-15V
    你应该用外部电源,当然,用232的输出也可以,如RTS,它为输出,它是有源的
      

  4.   

    “用232的输出也可以,如RTS,它为输出,它是有源的”中的RTS是什么东西啊?
    有没有方便的外部电源可用啊?
      

  5.   

    可以,你将RTS输出为1(第4脚)
    m_Com.RTSEnable(TRUE);
    这样RTS线上就有约-12V电压.
    将1,6,8,9以4为公用端.这样,当它们与4连通时,就会有1的信号(-12V)
    反之,m_Com.RTSEnable(FALSE);就会有0的信号
      

  6.   

    可是,RTS是第7脚啊,第4脚是DTR.我手头的触发器公公端是第4脚,不能作有源输出么?
      

  7.   

    我是以25针作为标准的,如果是9针的,4脚的确是DTR,可用m_Com.DTREnable来改变状态并作为电源.