请问MSComm控件中有控制DTR,RTS,DSR,CTS,CD线高低电平的属性,它们相应的WIN API函数是什么?(EscapeCommFunction()函数只能控制DTR,RTD,其

时间:2021-07-04 10:17:38
请问MSComm控件中有控制DTR,RTS,DSR,CTS,CD线高低电平的属性,它们相应的WIN API函数是什么?(EscapeCommFunction()函数只能控制DTR,RTD,其它几个怎么控制?)

9 个解决方案

#1



  你可以参考一下下边的代码,看一下DCB结构的帮助
  DCB m_dcb
  GetCommState(m_hComm, &m_dcb);

  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fOutxCtsFlow =TRUE;
  m_dcb.fOutxDsrFlow =TRUE;
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE;
  BuildCommDCB(szBaud, &m_dcb);

#2


楼上的兄弟:
  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fOutxCtsFlow =TRUE;
  m_dcb.fOutxDsrFlow =TRUE;
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE
我的理解是:
 
它们指定这几条线是否用于流控制(为真时参加),而不是使它们变成高低电平.
不知对不对,请指正.

#3


这几个信号就是串口的握手线,它的高低即代表一种状态,真假最终反映在串口上即是信号的高低变化。

#4


zhusz() 兄:
  按您的方法:
  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE
  是对的.

m_dcb.fOutxCtsFlow =TRUE;(或FALSE)
  m_dcb.fOutxDsrFlow =TRUE;)或FALSE)

好象电压没变化我用表量了,也加了事件EV_CTS但不响应.
DCB dcb;
if(!GetCommState(m_hCom,&dcb))
return ;
         dcb.fOutxCtsFlow =TRUE;
     SetCommState(m_hCom,&dcb);

DCB dcb;
if(!GetCommState(m_hCom,&dcb))
return ;
         dcb.fOutxCtsFlow =FALSE;
     SetCommState(m_hCom,&dcb);
我这样做的发一高一低电平请问对不对,可为什么电压没变化.事件不响应.

#5


我最近也在作工业控制。其实那几个可以不设置。我一般只设置数据位。停止位,奇偶校验位就可以了别的不管它。如果你找不到详细的资料就不管它了。我的没出现过问题。你再试试。其实只是几个串口事件而已

#6


zjg751206(play程序) 我知道,但现在我想实现硬件握手所以要控制相关的硬件信号要用到这几个脚.

#7


你把DSR和CTS信号的意义理解错了,它们是输入信号号,而不是输出信号,它是由对方串口来控制的,你可以找到串口的书籍资料看一下,把DSR和CTS有效只是对该信号响应,并不是改变它的电平状态。

#8


你可以用GetCommModemStatus函数得到CTS,DSR,RI,CD的状态,具体可以看一下该函数的帮助

#9


收到,理解了,是我对引脚定义的理解错了.哎缺少硬件知识呀!补!!!!!!
请zhusz() ( )兄 再到http://expert.csdn.net/Expert/topic/2500/2500361.xml?temp=.5067255
另有80分相送.

#1



  你可以参考一下下边的代码,看一下DCB结构的帮助
  DCB m_dcb
  GetCommState(m_hComm, &m_dcb);

  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fOutxCtsFlow =TRUE;
  m_dcb.fOutxDsrFlow =TRUE;
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE;
  BuildCommDCB(szBaud, &m_dcb);

#2


楼上的兄弟:
  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fOutxCtsFlow =TRUE;
  m_dcb.fOutxDsrFlow =TRUE;
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE
我的理解是:
 
它们指定这几条线是否用于流控制(为真时参加),而不是使它们变成高低电平.
不知对不对,请指正.

#3


这几个信号就是串口的握手线,它的高低即代表一种状态,真假最终反映在串口上即是信号的高低变化。

#4


zhusz() 兄:
  按您的方法:
  m_dcb.fRtsControl = RTS_CONTROL_DISABLE;// set RTS bit high!
  m_dcb.fDtrControl = DTR_CONTROL_DISABLE
  是对的.

m_dcb.fOutxCtsFlow =TRUE;(或FALSE)
  m_dcb.fOutxDsrFlow =TRUE;)或FALSE)

好象电压没变化我用表量了,也加了事件EV_CTS但不响应.
DCB dcb;
if(!GetCommState(m_hCom,&dcb))
return ;
         dcb.fOutxCtsFlow =TRUE;
     SetCommState(m_hCom,&dcb);

DCB dcb;
if(!GetCommState(m_hCom,&dcb))
return ;
         dcb.fOutxCtsFlow =FALSE;
     SetCommState(m_hCom,&dcb);
我这样做的发一高一低电平请问对不对,可为什么电压没变化.事件不响应.

#5


我最近也在作工业控制。其实那几个可以不设置。我一般只设置数据位。停止位,奇偶校验位就可以了别的不管它。如果你找不到详细的资料就不管它了。我的没出现过问题。你再试试。其实只是几个串口事件而已

#6


zjg751206(play程序) 我知道,但现在我想实现硬件握手所以要控制相关的硬件信号要用到这几个脚.

#7


你把DSR和CTS信号的意义理解错了,它们是输入信号号,而不是输出信号,它是由对方串口来控制的,你可以找到串口的书籍资料看一下,把DSR和CTS有效只是对该信号响应,并不是改变它的电平状态。

#8


你可以用GetCommModemStatus函数得到CTS,DSR,RI,CD的状态,具体可以看一下该函数的帮助

#9


收到,理解了,是我对引脚定义的理解错了.哎缺少硬件知识呀!补!!!!!!
请zhusz() ( )兄 再到http://expert.csdn.net/Expert/topic/2500/2500361.xml?temp=.5067255
另有80分相送.