2013-11-21 10 views
5

Innanzitutto, voglio dire che so che ci sono già versioni di questo punto su questo sito e altre che descrivono i problemi con gli adattatori seriali USB ed elaborano la loro disconnessione fisica nell'applicazione di qualcuno. Ho esaminato diverse di quelle discussioni e ho provato i vari suggerimenti senza alcun successo. Forse mi manca qualcosa ma forse non lo sono. A questo punto, ho perso la cognizione di quanti e quanti ho provato e sto cercando di iniziare le cose fresche da questo post e non solo rimettere a posto vecchi elementi.Rilevamento fisico della scheda seriale USB

Per riassumere la maggior parte dei post originali con il più recente di almeno lo scorso anno, si è verificato un problema noto in Windows/gestione dello sviluppo di adattatori seriali USB scollegati. Alcuni dei post/soluzioni sono incentrati su un'eccezione non gestita/non controllabile che si verifica quando si chiude la porta seriale e una correzione in .NET 4.0 che dovrebbe risolvere il problema e, penso, consentire l'intercettazione dell'evento/eccezione.

Quello che sto facendo e vivendo è questo:

Ho un NET 4.0 un'applicazione di servizio scritto in C# che apre una porta COM e ascolto per i dati utilizzando la classe built-in SerialPort. Questi dati vengono quindi riportati possibilmente ad altre applicazioni locali o in remoto ad altre posizioni. Sto testando un adattatore Tripp Lite da USB a Serial Port, ma il rapporto reale di un problema è stato causato da qualcuno che utilizzava un laptop dotato di un adattatore USB interno a una porta seriale che di volta in volta "disconnette" e "riconnette" da/al sistema operativo Windows. Sto simulando il problema con il mio dispositivo scollegando fisicamente il dispositivo USB mentre la porta è aperta nella mia applicazione di servizio Windows.

Quello che vedo nel mio test/debugging è che non vi è alcuna reazione alla disconnessione o riconnessione del dispositivo USB. Ricevo i dati e il flusso di dati si ferma all'applicazione di servizio. Se ricollego il dispositivo, la porta COM è ancora aperta per l'applicazione ma non ci sono nuovi dati. Se chiudo la porta, non vi è alcun errore di "application blow up"/UnhandledException. La porta si chiude e l'applicazione si arresta normalmente. In nessun momento, ricevo un'eccezione catrabile che è ciò che vorrei vedere accadere. Se avvio l'applicazione, i dati riprendono a scorrere.

Desidero che l'applicazione sappia quando la porta USB seriale/COM viene rimossa dal sistema preferibilmente con qualche tipo di eccezione a livello SerialPort che mi consenta di rilevare l'eccezione, chiudere la porta e andare in "riapertura" porta "fino a quando il dispositivo non è" riconnessa "al PC. Questo sarà possibile in questo modo attorno alla classe SerialPort o dovrò perseguire una soluzione centrata attorno al "Dispositivo USB" generico disconnesso anziché "Serial Port" che viene disconnesso? (Ho la mia applicazione a livello di programmazione che determina che il dispositivo è già un dispositivo USB piuttosto che doverlo contrassegnare come tale in preparazione per quest'ultimo ...............)

Grazie, Mark

+0

Qualcosa che da allora ho scoperto: Con l'adattatore seriale USB scollegato e interrompere l'applicazione di servizio, il valore SerialPort.IsOpen è impostato su false in modo da qualcosa rileva la disconnessione e la marcatura la porta seriale chiuso (è che il .NET 4.0 correzione ??). Tuttavia, non ho determinato in ogni caso di prendere quando si verifica il cambio del flag IsOpen. Ho un override di Close() sul posto e non viene chiamato al momento della disconnessione. –

risposta

0

Qual è il dispositivo con cui si sta comunicando tramite seriale? Ha qualche supporto per l'invio di una richiesta di handshake/status? In tal caso, è possibile eseguire il polling in modo intermittente per verificare che il dispositivo sia ancora lì e, se non viene restituito nulla dopo un timeout, sollevare l'eccezione autonomamente?

In alternativa, ho utilizzato questo library una volta in precedenza, che consente di interagire con Gestione periferiche di Windows. L'articolo fornisce alcuni dettagli su come estendere la classe per monitorare le modifiche del dispositivo, potresti implementarlo e con un po 'di fortuna avere un evento sollevato nel momento in cui il dispositivo si disconnette brevemente - potresti usarlo per testare il tuo dispositivo piuttosto di polling continuo, possibile?

Problemi correlati