2012-07-23 140 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

相關問題