在windows中轮询CTS线路的状态

Posted

技术标签:

【中文标题】在windows中轮询CTS线路的状态【英文标题】:poll the status of CTS line in windows 【发布时间】:2017-04-13 12:36:19 【问题描述】:

你好 *** 用户!

我需要在 Windows 环境下轮询我的串口的 CTS 线, 我已经成功打开了COM口,

HANDLE hSerialIn;
const char* pcCommPort = TEXT("COM3");
hSerialIn = CreateFile(pcCommPort, GENERIC_READ | GENERIC_WRITE, \
                       0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

那我想要这样的东西

DCB dcb =  0 ;

while (GetCommState(hSerialIn, &dcb)) 
    if (dcb.fOutxCtsFlow)
        ;
    else
        ;

我对 COM 端口感兴趣的背景是,我有一个 USB->UART 转换器,它连接到测量设备的触发输出,这个设备每秒触发输出,我想把它放进去我的程序。当我通过 Hercules(终端应用程序)连接到 COM 端口时,它可以工作,我看到我的 CTS 线路每秒都在变化。那么如何查看CTS线路的状态呢?

提前致谢。

【问题讨论】:

为了挑剔,您想切换作为输出的 RTS(请求发送),它应该连接到作为输入的 CTS(清除发送)。这些信号仅存在于 RS-232 中,而不存在于 USB 中。 工作解决方案低于DWORD dwModemStatus; BOOL fCTS = 0; if (!SetCommMask(hSerialIn, EV_CTS)) DWORD err = GetLastError(); printf("\nHandle creation error code: %x\n", err); DWORD dwCommEvent; while(1) if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event. printf(""); else if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus; return; fCTS = MS_CTS_ON & dwModemStatus; if(fCTS) printf("%x ", fCTS); 您应该将其发布为您自己问题的答案,而不是发表评论。这样做非常好,并且在 Stack Overflow 上受到鼓励。 【参考方案1】:
DWORD dwModemStatus; 
BOOL fCTS = 0; 

if (!SetCommMask(hSerialIn, EV_CTS)) 
 
    DWORD err = GetLastError(); 
    printf("\nHandle creation error code: %x\n", err); 
 

DWORD dwCommEvent; 

while(1) 
 
    if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event. 
        printf(""); 
    else 
     
        if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus; 
            return; 
        fCTS = MS_CTS_ON & dwModemStatus; 

        if(fCTS) 
            printf("%x ", fCTS); 
      

【讨论】:

以上是关于在windows中轮询CTS线路的状态的主要内容,如果未能解决你的问题,请参考以下文章

在c#中轮询一个url

在 C 中轮询 TCP 连接

在 IE 中轮询的好的 setTimeout 间隔是多少?

如何避免在 React Native 中轮询服务器以获取新数据?

如何在 Spring Integration 中轮询时根据主题过滤电子邮件

在 erlang 中轮询接收块是一种好的做法吗?