Nel oggetto SerialPort di Net, c'è un modo per determinare se una porta seriale viene scollegato o collegato.cavo porta seriale Unplugged
risposta
differenza USB, la porta seriale non ha alcun modo integrato per rilevare un cambiamento fisico in stato di collegamento. Una forma limitata di segnalazione "dispositivo pronto/non pronto" può essere eseguita utilizzando alcuni dei pin (vale a dire DTR, DSR e talvolta DCD), ma questo non sembra esattamente quello che stai cercando (non è integrato a RS232 - il dispositivo deve sostenerla, si utilizza principalmente per parlare con i modem)
Così, in breve: no, nel caso generale.. Se sai/puoi programmare il dispositivo con cui stai cercando di comunicare, e sai che manterrà una certa linea alta (per esempio), potresti eseguire il polling cercando quella linea per andare in alto. Ma se si collega un dispositivo che non è programmato per fare qualcosa di prevedibile come quello, allora non c'è davvero modo di dirlo. (Alcuni dispositivi possono detenere DSR alto di default, ma è in nessun modo una scommessa sicura.)
è possibile rilevare il disponibili porte seriali, la si può provare a comunicare con loro interno una prova ... cattura blocco.
Questo è un esempio di rilevamento di porte 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
}
non l'ho provato, ma all'evento SerialPort.PinChanged e DsrChanged.
Ogni volta che c'è un qualsiasi dispositivo normale collegato alla porta seriale e acceso, quindi mi aspetto pin DSR del porto di affermare; e viceversa se quel dispositivo è scollegato, o quando è spento, allora mi aspetto che lo stato del pin DSR cambi o scenda.
Il significato usuale dei vari perni è:
- DSR: dispositivo è collegato e acceso
- CTS: dispositivo è pronto a ricevere dati (questo può essere premuto anche quando un dispositivo è collegato, ad esempio quando il dispositivo ha un buffer limitato di bordo e utilizza questo perno di regolazione di flusso dati di trasferimento dal PC)
- DCD: periferica (modem) ha stabilito un collegamento sulla linea telefonica ad un altro modem (quindi tutto ciò che si invia viene considerato come dati da trasferire t o il modem remoto)
Di questi, quello che risponde al tuo OP è DSR.
Vero se il dispositivo utilizza l'handshake hardware. Molti dispositivi no. In effetti alcune porte seriali non hanno nemmeno quei pin collegati. –
Dipenderà da che tipo di dispositivo si connette con che tipo di cavo.
La soluzione migliore è provare a gestire il gestore di eventi PinChanged.
Alcuni dispositivi sollevare DSR se collegato e acceso, altri CTS, altri utilizzeranno questi per handshaking.
La maggior parte dei dispositivi seriali presenta un tipo di risposta ack a una query. invia semplicemente una query e attendi la risposta. Se non si ottiene, il dispositivo non è lì o almeno non risponde.
Lì è un modo per rilevare rimozione/inserimento porta seriale in.NET - vedere la mia risposta a Detect serial port insertion/removal
Probabilmente il poster voleva rilevare se un * dispositivo * è collegato alla porta seriale, non se la porta seriale è installata nel sistema. – Zmaster
@Zmaster - hai ragione! Immagino che non stavo pensando in quel modo. Ho cancellato il mio commento, ma lascerò la risposta qui nel caso in cui qualcuno stia cercando la situazione a cui la mia risposta si applica. – 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. Timeout della comunicazione seriale su timeout cavo lungo
- 2. Programmazione Qt e porta seriale
- 3. caratteri privi di porta seriale
- 4. lettura dalla porta seriale fallisce
- 5. Invia un segnale quando un cavo seriale USB è scollegato
- 6. Porta seriale ReadLine vs ReadExisting o come leggere correttamente i dati dalla porta seriale
- 7. Come trasferire i dati su una porta seriale?
- 8. Ascolto della porta seriale su Delphi 7
- 9. Polling porta seriale e gestione dati
- 10. Accesso alla porta seriale via php
- 11. Leggi file dalla porta seriale utilizzando Java
- 12. Impossibile aprire la porta seriale in .NET
- 13. Accesso alla porta seriale in Adobe-Air
- 14. Invio tasto "INVIO" tramite porta seriale
- 15. Lettura da porta seriale con ciclo while
- 16. Come leggere e scrivere dalla porta seriale
- 17. Utilizzare la porta seriale nell'ambiente Web
- 18. Interfaccia Javascript con porta seriale RS-232
- 19. Lettura dalla porta seriale in C#
- 20. Monitor porta seriale/Com per Windows x64
- 21. Connessione porta seriale (RS -232) in C++
- 22. impostazione interruzione porta seriale in linux
- 23. Java/Arduino - Lettura dati dalla porta seriale
- 24. Porta seriale Linux: blocco lettura con timeout
- 25. Determinare se la porta seriale è normale COM o SPP
- 26. Come rilevare l'aggiunta di una nuova porta seriale?
- 27. Ottenere nomi di porta seriale errati da bluetoothdevice (C#)
- 28. Come trovare l'UUID del dispositivo Bluetooth della porta seriale?
- 29. Protocollo per porta seriale remota, con autenticazione e crittografia
- 30. lettura dalla porta seriale in un'applicazione Ruby on Rails pende
Credo che questa forma di .Connect() in un ciclo di legame alla porta per ogni connessione è goffo, specialmente se voglio un bel event driven SerialPortDisconnected evento. – maxfridbe
'string [] sPorts = SerialPort.GetPortNames();' non funziona perché quando la porta è connessa ex: 'COM1' e poi scollegata' GetPortNames' riporta ancora 'COM1' esiste ... L'ho appena testato. – MrHIDEn