2010-10-07 18 views
5

Tengo el dispositivo que se conecta a la PC a través de la comunicación en serie USB. Estoy realizando siguientes pasosCómo cerrar con fuerza la conexión SerialPort?

  1. de inicio del dispositivo (Encendido) será detectado
  2. de dispositivos en mi PC como el nombre COMx
  3. Comienza mi solicitud
  4. En la base de COM PID/VID, me conecto al dispositivo
  5. Realizar la comunicación. (Hasta aquí no estoy enfrentando ningún problema)
  6. cuando apago el dispositivo, el dispositivo se desconecta pero no puedo cerrar la conexión.
  7. Cuando vuelvo a encender (encender) dispositivo, el dispositivo se detecta pero mi aplicación no puede conectarse a COMx (dispositivo). Lanza IOException "COMx no existe"

Así que creo que tengo alguna manera de cerrar el puerto de comunicación con fuerza.

Cualquier ayuda se agradece

Gracias

Respuesta

2

he encontrado solución a pesar de que no se puede llamar solución estándar pero aunque no tengo ningún problema con esa solución porque resuelve mi problema la solución es según el paso belove

  1. Crear clase.
  2. Crea y desecha una instancia de esta clase cada vez que quieras enviar datos.

PRIMER PASO: -

class clsRS232 : IDisposable 
    { 
     private SerialPort myPort; 
     public clsRS232() 
     { 
      myPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); 
     } 
     public void OpenPort() 
     { 
      myPort.Open(); 
     } 
     public void SendFunc(string str) 
     { 
      myPort.Write(str); 
     } 
     public string ReadFunc() 
     { 
      return myPort.ReadExisting(); 
     } 

     public void Dispose() 
     { 
      myPort.Dispose(); 
     } 

    } 

SEGUNDO PASO: -

using (clsRS232 mySerialPort = new clsRS232()) 
        { 
         lock (mySerialPort) 
         { 
          mySerialPort.OpenPort(); 
          mySerialPort.SendFunc(commandArg);//here "commandArg" is command or data you want to send to serial port 
          this.serialPortObj_DataReceived(mySerialPort.ReadFunc()); //here "serialPortObj_DataReceived()" is a user define method where received data will be passed 
         } 
        } 
+1

Aunque es un truco, me gusta. Aquí ha reducido mucho el riesgo de problemas. :-) –

1

¿Se ha quedado .Close() en el puerto com cuando haya terminado en él?

Lo ideal es cerrar() antes de apagar o desconectar el dispositivo.

Además, ¿está utilizando SerialPort.GetPortNames()? Si está utilizando puertos USB y los saca (o los apaga) y luego los vuelve a insertar, Windows les da un nuevo nombre.

Luego debe volver a enumerarlos con SerialPort.GetPortNames(), para verificar cuál es el nuevo nombre COM.

Es decir, su dispositivo se puede llamar COM3 en la primera conexión, en el segundo encendido podría llamarse COM4 y así sucesivamente. Después de una serie de ciclos, podría llamarse COM3 de nuevo. Por favor, llame al GetPortNames para averiguar si apareció un dispositivo "nuevo". (No es realmente un dispositivo nuevo, es su dispositivo el que se volvió a encender).

+0

estoy usando esto para conexión http://www.codeproject.com/KB/hardware -review/AUSBClassLibrary.aspx y no sé el descriptor de archivo – Pritesh

+0

cómo cambiar el USB concuerda con NAME? – Pritesh

+0

Sí, estoy usando .Close() en el puerto de comunicaciones. Pero no permite hacerlo. me da error Porque el dispositivo está desconectado, por lo que la conexión no se puede cerrar. Y tampoco puedo establecer la conexión con el interruptor En mi dispositivo, me da error. porque la conexión no está cerrada en el momento de la desconexión con mi dispositivo. – Pritesh

2

Si está comunicando con su hardware a través de un puerto en serie y utilizando un SerialEventListener, entonces creo que un Serial.DATA_BREAK (No recuerdo la exacta nombre) evento. Puede ver esto en el método SerialEvent y cerrar la conexión de su programa a su puerto. Espero que esto te ayude a cerrar por la fuerza tu conexión en el momento de la desconexión del hardware.

Cuestiones relacionadas