在.NET中的的SerialPort對象,是有辦法,以確定是否串行端口獲取拔出或插入。串口電纜被拔出
串口電纜被拔出
回答
與USB不同,串行端口沒有任何內置方式來檢測鏈路狀態的物理變化。可以使用某些引腳(即DTR,DSR,有時DCD)完成「設備就緒/未準備好」信號的有限形式,但這看起來不像您正在尋找的內容(它不是內置的到RS232 - 設備必須支持它,你主要用它來與調制解調器通信。)
因此,簡而言之:不,在一般情況下。如果你知道/可以編程你想要與之通信的設備,並且你知道它將保持一定的高度(例如),那麼你可以輪詢它,尋找那條線路進入高位。但是如果你插入一個沒有編程的設備來做一些可預測的事情,那麼真的沒有辦法告訴。 (某些設備可能默認DSR爲高電平,但絕對不能確定。)
可以檢測可獲取的串行端口,則可以嘗試裏面與他們comunicate一個try ... catch塊。
這是端口檢測在C#
using System;
using System.Collections.Generic;
using System.IO.Ports;
public class MyClass
{
public static void Main()
{
string[] sPorts = SerialPort.GetPortNames();
foreach(string port in sPorts)
WL(port);
RL();
}
#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
我還沒有嘗試過,但看SerialPort.PinChanged事件和DsrChanged一個例子。
每當有任何正常的設備插入串口並打開,那麼我希望端口的DSR引腳被聲明;相反,如果該設備被拔掉,或者它被關閉,那麼我預計DSR引腳狀態會改變/下降。
的各引腳的通常含義是:
- DSR:設備已插入且接通
- CTS:設備已準備好接收數據(這可以是向下即使當設備被插入,例如當設備具有有限的板載緩衝器並且使用該引腳來流控制來自PC的數據傳輸時)
- DCD:設備(調制解調器)已經通過電話線建立到另一個調制解調器的連接(所以你發送的任何東西都被視爲要傳輸的數據遠程調制解調器)
其中,回答你的OP的是DSR。
如果您的設備正在使用硬件握手,則爲true。許多設備不。事實上一些串口甚至沒有連接這些引腳。 – 2009-06-29 19:33:23
這取決於您使用什麼類型的設備連接什麼樣的電纜。
最好的辦法是嘗試處理PinChanged事件處理程序。
某些設備在連接和打開時會引發DSR,而其他設備則會使用這些設備進行握手。
大多數串行設備對查詢都有某種類型的ack響應。只需發送一個簡單的查詢並等待響應。如果你沒有得到它,設備不在那裏或至少沒有響應。
還有是一種檢測串口移除/插入的方法。NET - 見我的答案在Detect serial port insertion/removal
Public Class SerialPort
Inherits IO.Ports.SerialPort
Event Disconnected()
Public Sub OpenWithDisconnectionevent()
Me.Open()
Dim t As New Threading.Thread(AddressOf ConnectivityChecker)
t.Start()
End Sub
Sub ConnectivityChecker()
Do
If Me.IsOpen = False Then
RaiseEvent Disconnected()
GoTo ThreadExit
End If
Loop
ThreadExit:
End Sub
End Class
- 1. TCP服務器斷開/電纜拔出
- 2. Wiznet W5100拔出電纜檢測
- 3. 如何獲取插入/拔出的電纜狀態
- 4. 在精簡框架中檢測'網絡電纜未拔掉'
- 5. 聽取以太網電纜拔出TCP服務器應用程序的事件
- 6. 我需要幫助寫/讀/從串口使用ftdi usb串口電纜
- 7. Meshlab出口紋理拔後
- 8. 支持CDC的USB串行電纜
- 9. RedPark串行電纜部分數據
- 10. 在拔下USB電纜後重新連接應用程序進行調試
- 11. config動作電纜的Heroku - 錯誤本地主機:3000 /電纜
- 12. 檢測當iPhone被拔出並插入
- 13. 無法通過USB串口電纜訪問GSM調制解調器
- 14. 優化電纜總數
- 15. Iphone通過電纜同步
- 16. 當網絡電纜插入/無線連接時被通知
- 17. 此接口是否需要空調制解調器電纜?
- 18. ADB TCPIP命令在窗口不列入工作不帶電纜
- 19. 檢測即使沒有電源時電源線已拔出
- 20. Android 2.1藍牙SPP到LM058(串行電纜更換)問題
- 21. Redpark串行電纜沒有接收數據
- 22. 移除網絡電纜時拋出的DOM異常
- 23. 行動電纜是否與Faye一樣?
- 24. 如何關閉Action電纜的連接?
- 25. Rails 5行動電纜不工作
- 26. 動作電纜沒有使用rails 5
- 27. AMPL優化 - 不同的電纜類型
- 28. postgoSQL的行動電纜配置?
- 29. 在.NET中檢測HDMI電纜事件?
- 30. 愛普生EPOS JavaScript和USB電纜
我認爲,這種形式的.Connect()的循環綁定到端口的每個連接是笨重的,尤其是如果我想驅動SerialPortDisconnected事件一個很好的事件。 – maxfridbe 2009-06-29 19:30:48
`string [] sPorts = SerialPort.GetPortNames();`不起作用,因爲當端口連接成ex:`COM1`而不是被拔出時`GetPortNames`仍然報告'COM1`存在......我剛測試過它。 – MrHIDEn 2015-01-21 09:44:54