8
votes

Câble de port série débranché

Dans l'objet Serialport de .NET, est-il un moyen de déterminer si un port série est débranché ou branché.


0 commentaires

7 Réponses :


0
votes

Vous pouvez détecter les ports série disponibles, que vous pouvez essayer de communiquer avec eux à l'intérieur d'un essai ... Catch Block.

Ceci est un exemple de détection des ports en C # P>

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
}


2 commentaires

Je crois que cette forme de .Connect () dans une liaison en boucle au port pour chaque connexion est clunky, surtout si je veux un événement SerialPortDisconnect SerialPortDisconnecté entraîné.


string [] SPORTS = SERIALPORT.GETPORTNAMES (); ne fonctionne pas car lorsque le port est connecté EX: COM1 et qu'il n'est pas débranché getporTnames Rapports COM1 existe ... je viens de le tester.



1
votes

Je n'ai pas essayé, mais regardez le SERIALPORT.PINCHANGED Event and Dsrchanged .

Chaque fois qu'il y a un périphérique normal branché sur le port série et allumé, je m'attendrais à ce que la broche DSR du port soit affirmée; et inversement si ce périphérique est débranché ou quand il est éteint, je m'attendrais à ce que l'état de la broche DSR change / goutte.


La signification habituelle des différentes goupilles est la suivante:

  • DSR: le périphérique est branché et activé sur
  • CTS: le périphérique est prêt à recevoir des données (ceci peut être descendu même lorsqu'un périphérique est branché, par exemple lorsque le périphérique dispose d'un tampon à bord limité et utilise cette goupille sur le transfert de données de contrôle de flux du PC) < / li>
  • DCD: Device (modem) a établi une connexion sur la ligne téléphonique à un autre modem (donc tout ce que vous envoyez est traité comme des données à transférer sur le modem distant)

    de ceux-ci, celui qui répond à votre op est DSR.


1 commentaires

TRUE si votre appareil utilise la main du matériel. De nombreux appareils ne le font pas. En fait, certains ports série n'ont même pas ces goupilles connectées.



14
votes

Contrairement à la USB, le port série n'a pas de manière intégrée pour détecter un changement physique de statut de liaison. Une forme limitée de la signalisation "Device prêt / non prêt" peut être effectuée en utilisant certaines des broches (nommément DTR, DSR et parfois DCD), mais cela ne semble pas exactement ce que vous recherchez (ce n'est pas construit dans à RS232 - l'appareil doit le prendre en charge, vous l'utilisez principalement pour parler à des modems.)

Donc, en bref: Non, dans le cas général. Si vous savez / pouvez programmer le périphérique que vous essayez de communiquer avec et vous savez qu'il tiendra une certaine ligne élevée (par exemple), vous pouvez interrogez-la à la recherche de cette ligne. Mais si vous branchez un appareil qui n'est pas programmé pour faire quelque chose de prévisible comme ça, alors il n'y a vraiment aucun moyen de le dire. (Certains appareils peuvent contenir des DSR High par défaut, mais il n'est en aucun cas un pari sûr.)


0 commentaires

0
votes

Cela dépendra du type de périphérique avec quel type de câble.

Votre meilleur pari est d'essayer de gérer le gestionnaire d'événements pinchanged.

Certains appareils augmenteront les DSR lorsqu'ils seront connectés et allumés, d'autres CTS, d'autres les utiliseront pour la main.


0 commentaires

2
votes

La plupart des périphériques série ont un type de réponse ACK à une requête. Envoyez simplement une simple requête et attendez une réponse. Si vous ne l'obtenez pas, l'appareil n'est pas là ou du moins ne répond pas.


0 commentaires

1
votes

est un moyen de détecter la suppression / une insertion de port série dans .net - voir ma réponse à Détecter l'insertion / retrait de port série


2 commentaires

L'affiche a probablement souhaité détecter si un appareil est attaché au port série, non si le port série est installé dans le système.


@Zmaster - Vous avez tellement raison! Je suppose que je ne pensais pas comme ça. J'ai supprimé mon commentaire, mais je laisserai la réponse ici au cas où tout cherche la situation que ma réponse s'applique à.



1
votes
    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

0 commentaires