En objeto SerialPort de .Net, ¿hay una manera de determinar si un puerto serie se desenchufa o enchufado.puerto serie Cable desconectado
Respuesta
A diferencia de USB, el puerto serie no tiene ninguna forma incorporada para detectar un cambio físico en el estado del enlace. Se puede hacer una forma limitada de señalización de "dispositivo listo/no listo" utilizando algunos de los pines (a saber, DTR, DSR y, a veces, DCD), pero esto no parece exactamente lo que está buscando (no está incorporado). a RS232 - el dispositivo debe soportarlo, principalmente lo usa para hablar con módems.)
Así que, en resumen: no, en el caso general. Si sabe/puede programar el dispositivo con el que está tratando de comunicarse, y sabe que mantendrá cierta línea alta (por ejemplo), puede sondearla buscando que esa línea se eleve. Pero si conecta un dispositivo que no está programado para hacer algo predecible como ese, entonces realmente no hay forma de saberlo. (Algunos dispositivos pueden mantener DSR alto por defecto, pero de ninguna manera es una apuesta segura.)
puede detectar los disponibles puertos serie, el que puede tratar de comunicarse con ellos en el interior un intento ... atrapar bloque.
Este es un ejemplo de detección de puertos en 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
}
Yo no lo he probado, pero mira el SerialPort.PinChanged evento y DsrChanged.
Cuando haya un dispositivo normal enchufado al puerto serie y encendido, entonces esperaría que el pin DSR del puerto se confirme; y, por el contrario, si ese dispositivo está desenchufado, o cuando está apagado, entonces esperaría que el estado del pin DSR cambie/disminuya.
El significado habitual de los diversos pins es:
- DSR: el dispositivo está enchufado y encendido
- CTS: dispositivo está listo para recibir datos (esto puede ser hacia abajo, incluso cuando una el dispositivo está enchufado, por ejemplo, cuando el dispositivo tiene una memoria intermedia limitada y utiliza este pin para transferir datos desde la PC)
- DCD: dispositivo (módem) ha establecido una conexión a través de la línea telefónica a otro módem (por lo que todo lo que envíe se trata como datos que se transferirán t o el módem remoto)
De estos, el que responde a su OP es DSR.
Verdadero si su dispositivo usa el protocolo de enlace de hardware. Muchos dispositivos no. De hecho, algunos puertos serie ni siquiera tienen esos pines conectados. –
Dependerá del tipo de dispositivo que conecte con qué tipo de cable.
Su mejor opción es intentar manejar el controlador de eventos PinChanged.
Algunos dispositivos levantan DSR cuando están conectados y se encienden, otros CTS, otros los usarán para el apretón de manos.
La mayoría de los dispositivos en serie tienen algún tipo de respuesta de respuesta a una consulta. solo envíe una consulta simple y espere la respuesta. Si no lo obtiene, el dispositivo no está allí o al menos no responde.
Hay es una forma de detectar la extracción/inserción del puerto serie en.NET - ver mi respuesta a Detect serial port insertion/removal
El póster probablemente quería detectar si un * dispositivo * está conectado al puerto serie, no si el puerto serie está instalado en el sistema. – Zmaster
@Zmaster - ¡estás tan en lo correcto! Creo que no estaba pensando de esa manera. Eliminé mi comentario, pero dejaré la respuesta aquí en caso de que alguien esté buscando la situación a la que se aplica mi respuesta. – Pat
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. Liberación de un puerto serie virtual desconectado
- 2. Leer datos del puerto serie
- 3. 'Red de cable desconectado' Detectando en el Compact Framework
- 4. Comunicación de puerto serie: puerto serie de sondeo frente a puerto serie Evento DataReceived
- 5. Simular el puerto serie
- 6. ¿El puerto serie no funciona?
- 7. Liberando el puerto serie correctamente
- 8. ¿Puerto serie o puerto USB que usa D?
- 9. Puerto serie ReadLine vs ReadExisting o cómo leer los datos del puerto serie correctamente
- 10. ¿Cómo transferir datos a un puerto en serie?
- 11. ¿Cómo detectar cuando el cable de alimentación de la computadora portátil se ha desconectado?
- 12. Programación de puerto serie y Qt
- 13. Lectura desde un puerto serie con Ruby
- 14. Interfaz Javascript con puerto serie RS-232
- 15. lectura desde el puerto serie falla
- 16. Lectura del puerto serie en Java
- 17. Detectar inserción/extracción del puerto serie
- 18. Sincronización del puerto serie Lectura/escritura
- 19. Escuchando puerto serie en Delphi 7
- 20. Lectura desde el puerto serie en C#
- 21. Acceso al puerto serie en Adobe-Air
- 22. Acceso puerto serie a través de php
- 23. Determine si el puerto serie es COM o SPP normal
- 24. WMI EnableDHCP falla en el adaptador desconectado
- 25. Cliente desconectado
- 26. No lee los datos del puerto serie completo en C#
- 27. ¿Cómo encontrar el UUID del puerto serie del dispositivo Bluetooth?
- 28. Establecer el pin del puerto serie alto usando Python
- 29. RxTx en Mac: puerto serie ya en uso
- 30. datos de la basura desde el puerto serie
Creo que esta forma de .Connect() en un bucle asociado al puerto para cada conexión es torpe, especialmente si quiero un buen evento impulsado SerialPortDisconnected Evento. – maxfridbe
'string [] sPorts = SerialPort.GetPortNames();' no funciona porque cuando el puerto está conectado ex: 'COM1' y de lo que está desenchufado' GetPortNames' todavía informa que 'COM1' existe ... Acabo de probarlo. – MrHIDEn