2012-07-23 174 views
2

简单的问题。在.NET SerialPort类有越来越串行输入线以下属性:为什么SerialPort类没有RIHolding属性?

  • CDHolding - 获取载波的状态检测线的端口。
  • CtsHolding - 获取清除待送线的状态。
  • DsrHolding - 获取数据集就绪(DSR)信号的状态。

注意RIHolding缺失。

此外,它具有PinChanged事件。这提供了一个SerialPinChange枚举值,它具有下列构件,并且确实包括一个用于环:

  • CtsChanged - 的清除发送(CTS)信号改变状态...
  • DsrChanged -The数据设置就绪(DSR)信号状态发生了改变......
  • CDChanged - 载波检测(CD)信号状态发生了改变......
  • Ring - 检测到环指标。
  • Break - 输入被检测到一个间隔。

所以我的问题是,为什么没有RIHolding属性?


如果我们看一下内部SerialStream类,我们看到CDHoldingCtsHoldingDsrHolding都是由对Win32 GetCommModemStatus函数的调用来实现。他的lpModemStat输出值是下列之一:

  • MS_CTS_ON0x0010的CTS(清除以发送)信号为ON。
  • MS_DSR_ON0x0020 DSR(数据集就绪)信号开启。
  • MS_RING_ON0x0040振铃指示灯信号亮。
  • MS_RLSD_ON0x0080 RLSD(接收线路信号检测)信号开启。 (它映射到CDHolding

因此,它似乎将是微不足道的添加RIHolding属性,只是看起来在位6.为什么要这样离开了?

回答

3

它本质上是一个瞬态信号,由于振铃信号的节奏。如果它是在那么它不会持续很长时间。例如,美国2秒,英国400毫秒。所以信号的状态并没有太大的意义,它依赖于时间,更糟糕的是,当你真的不走运时,你总是会观察它。你最好赶上它,因此PinChanged报告它。

+0

但是,如果您想要显示它,例如在GUI中,400毫秒是足够的时间。 – 2012-08-07 15:34:45

+0

谢谢你为什么这个解释*被遗漏了。尽管如此,我并没有对此感到高兴:-) – 2012-11-18 05:37:20

+0

在许多实现中,RI信号正在生成硬件中断,从而消除了轮询过程。 – 2017-10-31 08:40:39

相关问题