2012-06-18 15 views
6

Actualmente estoy teniendo un problema con el módulo pySerial en Python. Mi problema está relacionado con la conexión y desconexión a un dispositivo. Puedo conectarme con éxito a mi dispositivo y comunicarme con él durante el tiempo que quiera, y desconectarme de él siempre que lo desee. Sin embargo, no puedo volver a conectarme al dispositivo una vez que se ha cortado la conexión.Reconectando al dispositivo con pySerial

Aquí es la clase de contenedor que mi programa utiliza para interactuar con el puerto serie:

import serial, tkMessageBox 

class Controller: 
""" Wrapper class for managing the serial connection with the MS-2000. """ 
    def __init__(self, settings): 
     self.ser = None 
     self.settings = settings 

    def connect(self): 
     """ Connect or disconnect to MS-2000. Return connection status.""" 
     try: 
      if self.ser == None: 
       self.ser = serial.Serial(self.settings['PORT'], 
             self.settings['BAUDRATE']) 
       print "Successfully connected to port %r." % self.ser.port 
       return True 
      else: 
       if self.ser.isOpen(): 
        self.ser.close() 
        print "Disconnected." 
        return False 
       else: 
        self.ser.open() 
        print "Connected." 
        return True 
     except serial.SerialException, e: 
      return False 

    def isConnected(self): 
     '''Is the computer connected with the MS-2000?''' 
     try: 
      return self.ser.isOpen() 
     except: 
      return False 

    def write(self, command): 
     """ Sends command to MS-2000, appending a carraige return. """ 
     try: 
      self.ser.write(command + '\r') 
     except Exception, e: 
      tkMessageBox.showerror('Serial connection error', 
            'Error sending message "%s" to MS-2000:\n%s' % 
           (command, e)) 

    def read(self, chars): 
     """ Reads specified number of characters from the serial port. """ 
     return self.ser.read(chars) 

¿Alguien sabe la razón por la cual existe este problema y lo que podría tratar de hacer para solucionarlo?

+0

¿Cuál es la excepción/rastreo que obtienes cuando intentas volver a conectarte? ¿Y estás en Windows o Linux? – jedwards

+0

¿Qué quiere decir con "la conexión está cortada"? ¿Quiere decir desconectar el cable de serie o simplemente salir de su proceso de python? – TJD

+0

@andrew donelick No está relacionado con la respuesta a su problema, pero ¿por qué no inicializa el objeto 'Serie 'en' __init __() '? –

Respuesta

2

No está liberando el puerto serie cuando haya terminado. Use ser.close() para cerrar el puerto antes de salir de su programa; de lo contrario, el puerto permanecerá bloqueado indefinidamente. Sugeriría agregar un método llamado disconnect() en su clase para esto.

Si está en Windows, para remediar la situación durante las pruebas, inicie el Administrador de tareas y elimine los procesos python.exe o pythonw.exe que puedan estar bloqueando el puerto serie.

+0

Gracias. Después de toda la búsqueda que hice para cerrar el puerto serie, que Sublime Text, Python, mantuvo el puerto abierto cuando reconstruí el proyecto, esta fue la mejor solución. – Speakeasys

Cuestiones relacionadas