Frage

In .Net Serialport-Objekt, ist es eine Möglichkeit, zu bestimmen, ob eine serielle Schnittstelle in steckt oder eingesteckt wird.

War es hilfreich?

Lösung

Im Gegensatz zu USB, wird die serielle Schnittstelle hat keine integrierte Möglichkeit, eine physikalische Veränderung in dem Verbindungsstatus zu erfassen. Eine begrenzte Form von „Gerät bereit / nicht bereit“ Signalisierung kann getan werden, einige der Stifte verwendet (nämlich DTR, DSR, und manchmal DCD), aber dies scheint nicht, wie genau das, was Sie suchen (nicht gebaut ist in zu RS232 -. das Gerät muss es unterstützen, können Sie es in erster Linie nutzen, um Modem zu sprechen)

Also, kurz gesagt: nein, im allgemeinen Fall. Wenn Sie wissen / können das Gerät programmieren, mit dem Sie kommunizieren sind, und lassen Sie wissen, dass es eine bestimmte Linie (zum Beispiel) hoch halten wird, könnten Sie es für diese Zeile abzufragen suchen hoch zu gehen. Aber wenn Sie ein Gerät anschließen, das nicht programmiert ist, etwas vorhersehbar wie das zu tun, dann gibt es wirklich keine Möglichkeit zu sagen. (Einige Geräte DSR hoch standardmäßig halten, aber es ist in keiner Weise eine sichere Wette.)

Andere Tipps

Die meisten seriellen Geräte haben irgendeine Art von ack Antwort auf eine Anfrage. nur eine einfache Abfrage senden und auf Antwort warten. Wenn Sie es nicht bekommen, ist das Gerät nicht dort oder zumindest nicht zu reagieren.

Ich habe nicht versucht, aber Blick auf die SerialPort.PinChanged Ereignis und DsrChanged .

Jedes Mal, wenn es irgendwelche normalen Gerät an die serielle Schnittstelle angeschlossen und eingeschaltet ist, dann würde ich erwarten, dass der DSR-Pin des Port geltend gemacht werden; und umgekehrt, wenn das Gerät nicht angeschlossen ist, oder wenn es ausgeschaltet ist, dann würde ich der DSR Pin Zustand erwarten / Drop geändert werden.


Die übliche Bedeutung der verschiedenen Stifte ist:

  • DSR: Gerät angeschlossen und eingeschaltet
  • CTS: Gerät bereit ist, Daten zu empfangen (dies unten noch sein kann, wenn ein Gerät angeschlossen ist, zum Beispiel, wenn das Gerät einen begrenzten On-Board-Puffer hat und verwendet diese Pin-Transfer zu fließen-Steuerdaten aus dem PC)
  • DCD: Gerät (Modem), um eine Verbindung über die Telefonleitung zu einem anderen Modem (behandelt wird, so alles, was Sie senden als Daten an das Remote-Modem übertragen werden) etabliert

Von diesen ist die eine, die Ihre OP beantwortet ist DSR.

Es ist eine Möglichkeit, Serial Port Entfernen / Einfügen in .NET zu erkennen - siehe meine Antwort auf Detect serielle Schnittstelle Einfügen / Entfernen

    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

Sie die verfügbaren seriellen Ports erkennen können, versuchen die Sie können mit ihnen in einem try ... catch-Block zu kommunizieren.

Dies ist ein Beispiel für Ports Erkennung in 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
}

Es wird davon abhängen, welche Art von Gerät, das Sie verbinden mit, welche Art von Kabeln.

Am besten ist es, die PinChanged Event-Handler, um zu versuchen Handhabung.

Einige Geräte DSR erhöhen, wenn angeschlossen und eingeschaltet, andere CTS, andere diese für Handshaking verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top