2009-11-18 15 views
8

Sto tentando di aprire COM1, ma ricevo uno strano errore ogni volta che chiamo SerialPort.Open().Impossibile aprire la porta seriale in .NET

L'errore è:

Il nome della porta dato non inizia con il COM/com o non risolve a una porta seriale valido. Nome parametro: portName

Il codice è molto semplice:

SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One); 
port.Handshake = Handshake.RequestToSend; 
port.Open(); 

Se chiamo SerialPort.GetPortNames(), restituisce una porta chiamata "COM1".

Ho verificato di avere una "COM1" sul mio computer e non la sto utilizzando in altre applicazioni. Quando eseguo il codice su un altro computer, funziona. Il mio sistema esegue Windows Vista. La versione di .NET è 2.0.

C'è un settaggio di sicurezza che devo cambiare da qualche parte? Ho effettuato l'accesso come amministratore e ho disattivato il controllo dell'account utente.


Maggiori informazioni

Ho usato Process Explorer e ha confermato che non sta usando \ Device \ Serial0.


Soluzione

Ho installato un adattatore USB-seriale (COM3), e funziona benissimo. Vai a capire. Deve esserci un problema con COM1.

+0

So che a volte il 'GetPortNames()' dà a personaggi strabilianti. –

+0

Il hyperterminal funziona? – SwDevMan81

risposta

-1

Forse un refuso? Assicurati di digitare COM1 in tutte le lettere inglesi.

+5

Sono sicuro al 100% "COM1" è stato digitato correttamente. –

1

Provare a utilizzare la notazione \. \ COMX anziché solo COMX. Garantire a fuggire i personaggi: "\\ \ COM1"

Edit: Wops, sfugge quindi il mio \ quindi dovrebbe essere simile a questo (spazi ommit): "\ \ \ \ \ \ COM1"

+1

In questo caso viene visualizzata un'eccezione che indica che la porta COM non può iniziare con un \ –

1

Si potrebbe provare a impostare le proprietà della porta, anziché utilizzare il costruttore.

mPort = new System.IO.Ports.SerialPort(); 
if(mPort.IsOpen) 
{ 
    mPort.Close(); 
} 
mPort.PortName = "COM1"; 
mPort.BaudRate = 19200; 
mPort.Parity = Parity.None; 
mPort.DataBits = 8; 
mPort.StopBits = StopBits.One; 
mPort.Handshake = Handshake.RequestToSend; // Handshake.None; 
mPort.Open(); 

Ho anche avuto problemi con Serial Comm e Microsoft Active Sync. Non sono sicuro che tu stia funzionando o no, ma potrebbe valere la pena di ucciderlo (il nome del processo nel Task Manager è wcescomm.exe). Spero possa aiutare.

Si potrebbe anche provare a utilizzare Marshal.GetLastWin32Error() per vedere se qualcosa di basso livello sta causando un problema? Non sono sicuro se questo ti darà più informazioni.

+0

In questo caso, è possibile (in questo caso) omettere la chiamata a .PortName, poiché questa impostazione viene automaticamente impostata su "COM1" per impostazione predefinita. – Andy

+0

E anche DataBit e StopBits. – SwDevMan81

5

Ho avuto anche questo problema. È risultato che avevo un set di stampanti per usare la porta COM che stavo cercando di aprire. Una volta che ho cambiato la stampante per usare un'altra porta, la porta si è aperta perfettamente.

+0

Grazie - Ho passato 2 ore cercando di capirlo! –

1

Alcune applicazioni in esecuzione in background probabilmente aprono la porta (vedere questo question).

Scarica Process Explorer e utilizza "Trova maniglia o DLL" nel menu Trova per trovare il processo con la porta com aperta. Nel mio caso spoolsv.exe utilizza sempre COM1, porta COM3. quindi ho usato un altro comport (COM2) in bocca al lupo!

Problemi correlati