3

简单的问题。.NETSerialPort类具有以下用于获取串行输入行的属性:

  • CDHolding- 获取端口的载波检测线的状态。
  • CtsHolding- 获取 Clear-to-Send 行的状态。
  • DsrHolding- 获取数据集就绪 (DSR) 信号的状态。

笔记RIHolding不见了。

此外,它还有PinChanged活动。这提供了一个SerialPinChange枚举值,它具有以下成员,并且确实包括一个用于 Ring:

  • CtsChanged- 清除发送 (CTS) 信号已更改状态...
  • DsrChanged- 数据集就绪 (DSR) 信号已更改状态...
  • CDChanged- 载波检测 (CD) 信号已更改状态...
  • Ring- 检测到环形指示器。
  • Break- 在输入时检测到中断。

所以我的问题是,为什么没有RIHolding财产?


如果我们查看内部SerialStream类,我们会看到CDHoldingCtsHoldingDsrHolding都是通过调用 Win32GetCommModemStatus函数实现的。他的lpModemStat输出值为以下之一:

  • MS_CTS_ON 0x0010CTS(清除发送)信号打开。
  • MS_DSR_ON 0x0020DSR(数据集就绪)信号打开。
  • MS_RING_ON 0x0040振铃指示灯信号亮。
  • MS_RLSD_ON 0x0080RLSD(接收线路信号检测)信号开启。(这映射到CDHolding

所以,添加一个只查看第 6 位的属性似乎是微不足道的RIHolding。为什么这个被遗漏了?

4

1 回答 1

4

由于振铃信号的节奏,它本质上是一个瞬态信号。如果它打开,那么它不会持续很长时间。例如,美国为 2 秒,英国为 400 毫秒。所以信号的状态意义不大,它取决于时间,更糟糕的是,当你真的很不幸时,你总是会观察到它。你最好在它打开时抓住它,因此 PinChanged 会报告它。

于 2012-07-24T05:00:04.553 回答