Python - Problema adquisicion de datos y protector de pantalla (windows)

 
Vista:

Problema adquisicion de datos y protector de pantalla (windows)

Publicado por Javier (1 intervención) el 17/07/2013 20:42:56
Hola buen día, soy nuevo en el foro, les comento un problema que tuve que quisiera solucionar...
Estoy programando un adquisidor de datos para unos controladores de temperatura y un LVDT (para medir desplazamientos o deformaciones).

Los datos son enviados desde un equipo en forma continua por puerto serie y se reciben en la computadora.. Diseñe una interfaz grafica utilizando PyQt4. hay dos Qthreads corriendo uno que se encarga de graficar una función utilizando matplotlib a medida que se van adquiriendo los datos . y otro que se encarga de recibir los datos y guardar los mismos en un archivo. los dos Qthread son inicializados en la clase de la interfaz grafica.

El programa en principio anda bien y hace todo lo que deberia, mi problema es que si el protector de pantallas de windows se inicia al volver a la computadora .. me doy cuenta que el trhead que adquiere los datos por puerto serie dejo de funcionar .. o sea deja de adquirir datos al momento que se inicia el protector de pantallas.

Les paso el codigo del trhead en particular .. el resto es medio largo pero lo pudo pasar si lo necesitan ..


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class reader ( QtCore.QThread ):
    '''Con esta clase que herada las propiedades de hilos Qt vamos a crear un hilo que se va a encargar de tomar los datos del dispositivo. '''
    def __init__( self, parent = None ):
        QtCore.QThread.__init__( self, parent )
        self.exiting = False
        self.message = ''
 
    def read( self, port, baudrate, delay_time ):
        self.ser = serial.Serial( port = port,
                          baudrate = baudrate,
                          parity = serial.PARITY_NONE,
                          stopbits = 1,
                          bytesize = 8,
                          timeout = 2 )
 
        self.delay_time = delay_time
 
        self.start()
 
    def run( self ):
        """Proceso de Scan"""
        from time import sleep
        self.ser.close()
        self.ser.open()
        time_stamp = 0
        while not self.exiting:
 
            sleep( self.delay_time )
            time_stamp = time_stamp + self.delay_time
            if self.ser.inWaiting() > 0:
                self.ser.read( self.ser.inWaiting() )
            line = self.ser.readline()
            l = len( line )
 
            if l == 14:
                # La salida que me manda el puerto es una cadena con 14 caracteres
                temp_data = line[0:4]  # Los 5 primeros caracteres me daban un valor de temperatura
                lvdt_data = line[6:12]  # Los otros restantes un valor de voltaje
                data = [time_stamp, temp_data, lvdt_data]
                self.emit( QtCore.SIGNAL ( "readsignal(PyQt_PyObject)" ), data )
 
            elif len( line ) == 0:  # si deja de recibir datos sale? del programita...
                self.ser.close()  # cierro el puerto
                self.exiting = True
            else:
                pass
        self.ser.close()
        self.exit()
    def __del__( self ):
        self.exiting = True
        self.wait()

Saludos !!

PD:Como se hace para que el codigo quede en formato de codigo en un post ?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problema adquisicion de datos y protector de pantalla (windows)

Publicado por xve (1646 intervenciones) el 18/07/2013 08:43:17
Hola Javier, no creo que sea problema de tu código... me suena mas a una de las gracias de Windows, que al iniciar el protector, no desconecte el puerto serial, o haga alguna de las suyas...

En que versión de Windows lo estas ejecutando?
Si nos puedes mostrar el código entero, lo probaría...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar