2009-11-18 30 views
8

Estoy intentando abrir COM1, pero obtengo un error extraño cada vez que llamo al SerialPort.Open().No se puede abrir el puerto serie en .NET

El error es:

El nombre de puerto dado no se inicia con el COM/com o no se resuelve en un puerto de serie válido. Nombre Parámetro: PORTNAME

El código es muy simple:

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

Si llamo SerialPort.GetPortNames(), devuelve un puerto llamado "COM1".

He verificado que tengo un "COM1" en mi computadora, y no lo estoy usando en ninguna otra aplicación. Cuando ejecuto el código en otra computadora, funciona. Mi sistema está ejecutando Windows Vista. La versión de .NET es 2.0.

¿Hay alguna configuración de seguridad que deba cambiar en alguna parte? He iniciado sesión como administrador y he desactivado el UAC.


Más información

que utiliza el explorador de procesos y confirmó que nada está utilizando \ Device \ Serial0.


Solución

He instalado un adaptador USB-serie (COM3), y funciona bien. Imagínate. Debe haber un problema con COM1.

+0

Sé que alguna vez el 'GetPortNames()' le da a los personajes wonky. –

+0

¿Funciona el hiperterminal? – SwDevMan81

Respuesta

-1

¿Quizás un error tipográfico? Asegúrese de estar escribiendo COM1 en todas las letras inglesas.

+5

Estoy 100% seguro de que "COM1" está escrito correctamente. –

1

Intente utilizar la notación \. \ COMX en lugar de simplemente COMX. Asegúrese a escapar de los personajes: "\\ \ COM1"

Editar: Wops, así se escapa de mi \ por lo que debe ser como este (espacios ommit): "\ \ \ \ \ \ COM1"

+1

Si hago eso, recibo una excepción que indica que el puerto COM no puede comenzar con un \ –

1

Puede intentar configurar las propiedades del puerto, en lugar de usar el constructor.

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(); 

También he tenido problemas con Serial comm y Microsoft Active Sync. No estoy seguro de si tiene esta ejecución o no, pero podría valer la pena intentarlo (el nombre del proceso en el Administrador de tareas es wcescomm.exe). Espero que ayude.

También podría intentar y usar Marshal.GetLastWin32Error() para ver si algo de nivel bajo está causando un problema? No estoy seguro de si eso te dará más información.

+0

. Podría (en este caso) omitir la llamada a .PortName, ya que esto se establece internamente en "COM1" de forma predeterminada. – Andy

+0

Y también DataBits y StopBits. – SwDevMan81

5

Tuve este problema también. Resultó que tenía una impresora configurada para usar el puerto COM que estaba tratando de abrir. Una vez que cambié la impresora para usar otro puerto, el puerto se abrió correctamente.

+0

Gracias - ¡Pasé 2 horas tratando de resolver esto! –

1

Puede haber alguna aplicación ejecutándose en segundo plano, es probable que haya abierto su puerto (vea esto question).

Descargue Process Explorer y use "Buscar controlador o DLL" en el menú Buscar para encontrar el proceso con el puerto com abierto. En mi caso, spoolsv.exe siempre usa el puerto COM1, COM3. entonces utilicé otro puerto COM (COM2) ¡buena suerte!

Cuestiones relacionadas