Jon*_*art 4 .net api-design serial-port
简单的问题。.NETSerialPort
类具有以下用于获取串行输入行的属性:
CDHolding
- 获取端口的载波检测线路的状态。CtsHolding
- 获取清除发送线路的状态。DsrHolding
- 获取数据集就绪 (DSR) 信号的状态。注释RIHolding
丢失。
此外,它还有一个PinChanged
事件。它提供了一个SerialPinChange
枚举值,该值具有以下成员,并且确实包含一个用于 Ring 的成员:
CtsChanged
- 清除发送 (CTS) 信号改变状态...DsrChanged
-数据集就绪 (DSR) 信号状态更改...CDChanged
- 载波检测 (CD) 信号状态发生变化...Ring
- 检测到环形指示器。Break
- 检测到输入中断。所以我的问题是,为什么没有财产RIHolding
?
如果我们查看内部SerialStream
类,我们会发现CDHolding
、CtsHolding
、 和DsrHolding
都是通过调用 Win32GetCommModemStatus
函数来实现的。他的lpModemStat
输出值为以下之一:
MS_CTS_ON
0x0010
CTS(清除发送)信号已打开。MS_DSR_ON
0x0020
DSR(数据设置就绪)信号打开。MS_RING_ON
0x0040
响铃指示灯信号亮起。MS_RLSD_ON
0x0080
RLSD(接收线信号检测)信号打开。(这映射到CDHolding
)因此,添加一个仅查看第 6 位的属性似乎是微不足道的。RIHolding
为什么要忽略此属性?
由于振铃信号节奏,它本质上是瞬态信号。如果它打开了,那么它不会持续很长时间。例如,美国为 2 秒,英国为 400 毫秒。因此,信号的状态并没有多大意义,它取决于时间,最糟糕的情况是,当你真的很不幸时,你总是会观察到它。您最好在它打开时捕获它,这样 PinChanged 就会报告它。