#!/usr/bin/env python2.4 #-*- coding: utf-8 -*- ########################################################## # ADQUISITOR DE DATOS v1.0 # ########################################################## # Autor: Juan Miguel Taboada Godoy # # Fecha: Malaga, 03 de agosto de 2006 # # Descripción: Fichero de configuración de Adquisión # # Versión: 2006080300 # # # # Codigo fuente bajo licencia GNU/GPL # # Centrologic (Computational Logistic Center) # # http://www.centrologic.com - info@centrologic.com # ########################################################## # Librerias {{{1 from src.etcbin.adquirir_momentum import * import os import sys # }}}1 # Decisión según parámetros de entrada if ((len(sys.argv)==2) and (sys.argv[1]=='--silent')): debug=False else: debug=True # Cargo el estado de debug en los Telemandos for t in listado_telemandos: t.set_debug(debug) # Inicializo los datos vez=0 end=False escribir=False try: # Ejecutar siempre while (not end): # Espero 5 segundos time.sleep(dormir) # Control de ejecucciones if (vez==veces): # Inicializo vez vez=0 # Escribe a disco ahora escribir=True else: # Incremento una vez vez=vez+1 # No escribas a disco ahora escribir=False # Para todos los Telemandos for t in listado_telemandos: try: # Descargo datos del Telemando t.execute() # Control de escritura a disco if (escribir): # Escribo a fichero t.write() # Obtengo el listado de registradores listado_registradores=t.registradores() # Para el listado de registradores for registrador in listado_registradores: # Otengo el nombre del fichero de salida try: # Fichero de salida fichero=registrador.fichero() except Exception: # No hay fichero de salida en este registrador fichero=None # Si existe fichero de salida, lo proceso if (fichero): # Compruebo la existencia del fichero FLUSH {{{1 if (os.path.exists("%s.signal.dat.flush" % (fichero))): # Indico con un mensaje de debug el inicio de la accion t.debug("[ADQUIRIR_MODBUS] Procesando FLUSH") # Hago flush del fichero t.write() # Compruebo si los datos estan comprimidos reg_comprimido=registrador.compress() # Compruebo si existe un fichero de datos if ((not reg_comprimido) and (os.path.exists("%s.signal.dat.reg" % (fichero)))): # Si existe, indico que no hay que añadir la cabecera cabecera=False elif ((reg_comprimido) and (os.path.exists("%s.signal.dat.reg.gz" % (fichero)))): # Si existe comprimido, indico que no hay que añadir la cabecera cabecera=False else: # Si no existe, indico que hay que añadir la cabecera cabecera=True # Si el fichero no está comprimido if (not reg_comprimido): # Abre el fichero de destino FILE_DEST=open("%s.signal.dat.reg" % (fichero),'a') # Abre el fichero de origen FILE_ORIG=open("%s.signal.dat" % (fichero),'r') else: # Abre el fichero de destino gz FILE_DEST=open("%s.signal.dat.reg.gz" % (fichero),'a') # Abre el fichero de origen gz FILE_ORIG=open("%s.signal.dat.gz" % (fichero),'r') # Leo el contenido del origen contenido=FILE_ORIG.readlines() # Transfiero la cabecera if (cabecera): FILE_DEST.write(contenido[0]) # Transfiero todas las lineas for linea in contenido[1:]: FILE_DEST.write(linea) # Cierro el fichero de destino FILE_DEST.close() # Cierro el fichero de origen FILE_ORIG.close() # Borro el fichero de origen if (not reg_comprimido): os.unlink("%s.signal.dat" % (fichero)) else: os.unlink("%s.signal.dat.gz" % (fichero)) # Borro la solicitud os.unlink("%s.signal.dat.flush" % (fichero)) # Indico con un mensaje de debug el fin de la accion t.debug("[ADQUIRIR_MODBUS] FLUSH procesado") # }}}1 # Compruebo la existencia del fichero CLEAN {{{1 if (os.path.exists("%s.signal.dat.clean" % (fichero))): # Indico con un mensaje de debug el inicio de la accion t.debug("[ADQUIRIR_MODBUS] Procesando CLEAN") # Compruebo si los datos estan comprimidos reg_comprimido=registrador.compress() # Borro el fichero de datos if (not reg_comprimido): os.unlink("%s.signal.dat.reg" % (fichero)) else: os.unlink("%s.signal.dat.reg.gz" % (fichero)) # Borro la solicitud os.unlink("%s.signal.dat.clean" % (fichero)) # Indico con un mensaje de debug el fin de la accion t.debug("[ADQUIRIR_MODBUS] CLEAN procesado") # }}}1 except KeyboardInterrupt: raise except Exception,e: # Muestro el error print "Error descargando del Telemando %s : %s" % (t.internal_id(),e) # Marco la salida end=True # Termino el bucle break except KeyboardInterrupt,e: # Muestro el mensaje de salida print "Saliendo del programa a peticion del usuario..." # Escribo los resultados for t in listado_telemandos: t.write() # Muestro mensaje de fin print "Escritura finalizada"