【问题标题】:Set DTR, RTS, CTS, DSR and Xonn/Xoff on SerialPort在 SerialPort 上设置 DTR、RTS、CTS、DSR 和 Xonn/Xoff
【发布时间】:2015-12-26 19:44:52
【问题描述】:

我有这个 C++ 代码,我需要将其翻译成 C#。

 *hDev = CreateFile(PortNameUNC, GENERIC_READ|GENERIC_WRITE, 0, NULL, 
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 if(*hDev == INVALID_HANDLE_VALUE) return false ;

DCB *dcb = new DCB ;
memset(dcb, 0x00, sizeof(DCB)) ;
dcb->DCBlength       = sizeof(DCB);
dcb->BaudRate        = BaudRate;
dcb->Parity          = Parity;
dcb->StopBits        = StopBits;
dcb->ByteSize        = ByteSize;
dcb->fBinary         = TRUE;
dcb->fDsrSensitivity = 0;
dcb->fDtrControl     = (DTR ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE) ;
dcb->fRtsControl     = (RTS ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE) ;
dcb->fOutxCtsFlow    = (CTS ? 1 : 0) ;
dcb->fOutxDsrFlow    = (DSR ? 1 : 0) ;
dcb->fOutX           = (XonnXoff ? 1 : 0) ;
dcb->fInX            = 0 ;

我设法用 C# 翻译了大部分内容,例如

    m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);

但我不知道如何设置像DTR, RTS, CTS, DSR and Xonn/Xoff?这样的属性

我在SerialPort 上找到了Dtr.EnableRts.Enable 属性,但是其他三个怎么办? CTS、DSR 和 Xonn/Xoff?如何启用它们?


编辑:另外,这是我上面的 C# 实现。 我是否将 C++ 代码正确映射到 C#,如下所示?任何反馈表示赞赏。尤其是xon/xoff 标志和dtrrts

 public SerialPortHASP(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, bool dtr, bool rts, bool xonxoff)
    {

        m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);

        // Set XonXoff if set
        if (xonxoff)
            m_port.Handshake = Handshake.XOnXOff;

        // Set DTR/RTS
        m_port.DtrEnable = dtr;
        m_port.RtsEnable = rts;

        // Open the port for communications
        m_port.Open();
    }

【问题讨论】:

  • @Hans Passant:你为什么删除你的答案?

标签: c# c++ serial-port


【解决方案1】:

CTS 和 DSR 是输入,因此无法通过代码进行设置。可以通过访问以下属性来检查它们; CtsHolding 和 DsrHolding。

XOnXOff 是一种流控制,可以使用串口握手属性进行设置。

【讨论】:

  • “CTS 和 DSR 是输入,因此无法从代码中设置” - 我明白了,但为什么可以使用我发布的 C++ 代码设置它们?
  • 附言。您在我可能还需要在我的 C# 代码中复制的 C++ 代码中看到什么吗? (如通信属性等)据我了解 XonXoff 用于软件流控制。其他如 CTS,用于硬件流控制
猜你喜欢
  • 2014-08-16
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2019-01-18
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多