Пример #1
0
def emerg_system(dlgid):
    '''
    DESCRIPTION
        Se encarga de poner a funcionar el sitema de emergencia
        
    LEYENDA:
        dlgid => datalogger id
        EJ: pump1('MER006',True)
    '''
    ## INSTANCIAS
    redis = Redis()
    #
    # CHEQUEO SI EXISTE OUTPUTS, SI NO EXSITE LO CREO CON VALOR 0
    if not (redis.hexist(dlgid, 'OUTPUTS')):
        redis.hset(dlgid, 'OUTPUTS', 0)

    # LEO LA SALIDA ACTUAL SETEADA
    last_out = redis.hget(dlgid, 'OUTPUTS')

    # APLICO LA MASCARA 1111010
    last_out = int(last_out) & int('1111010', 2)
    #
    #
    # MANDO A SETEAR LAS SALIDAS DEL DATALOGGER
    redis.hset(dlgid, 'OUTPUTS', last_out)
Пример #2
0
def douts(dlgid, out_dec):
    '''
    DESCRIPTION
        Se encarga de poner en la salida digital (d2,d1,d0) el valor que se le pasa en decimal sin afectar las otras entradas
        
    LEYENDA:
        dlgid => datalogger id
        out_dec => numero decimal que se va a querer porner en las salidas digitales (d2,d1,d0)
        EJ: douts(MER006,7)
    '''
    ## INSTANCIAS
    redis = Redis()
    #
    # LEO LA SALIDA ACTUAL SETEADA
    last_out = redis.hget(dlgid, 'OUTPUTS')
    # APLICO LA MASCARA 0000011
    last_out = int(last_out) & int('0000011', 2)
    #
    #
    #
    # APLICO LA MASCARA 0000111 A no_dec
    out_dec = int(out_dec) & int('0000111', 2)
    # HAGO UN BITWISE LEFT 3 UNIDADES
    out_dec = out_dec << 3
    #
    #
    # CONCATENO LOS DOS PRIMEROS BITS CON LA SALIDA DIGITAL
    out = out_dec | last_out
    #
    #
    # MANDO A SETEAR LAS SALIDAS DEL DATALOGGER
    redis.hset(dlgid, 'OUTPUTS', out)
Пример #3
0
def pump1(dlgid, action):
    '''
    DESCRIPTION
        Se encarga de prender o apagar la bomba 1 del sistema
        
    LEYENDA:
        dlgid => datalogger id
        action => [True (PRENDER BOMBA) | False (APAGAR BOMBA)]
        EJ: pump1('MER006',True)
    '''
    ## INSTANCIAS
    redis = Redis()
    #
    #
    # LEO LA SALIDA ACTUAL SETEADA
    last_out = redis.hget(dlgid, 'OUTPUTS')
    # APLICO LA MASCARA 1111100
    last_out = int(last_out) & int('1111100', 2)
    #
    #
    # VEO QUE ACCION ES LA SELECCIONADA
    if action: out = last_out | int('11', 2)
    else: out = last_out | int('1', 2)
    #
    #
    # MANDO A SETEAR LAS SALIDAS DEL DATALOGGER
    redis.hset(dlgid, 'OUTPUTS', out)
Пример #4
0
 def __init__(self,LIST_CONFIG):
     '''
     Constructor
     '''
     #
     self.config = config_var(LIST_CONFIG)
     #
     #VARIABLES DE EJECUCION
     self.print_log = self.config.lst_get('print_log')
     self.DLGID = self.config.lst_get('DLGID')
     self.TYPE = self.config.lst_get('TYPE')
     self.LOG_LEVEL = self.config.lst_get('LOG_LEVEL')
     
     #
     #VARIABLES DE CONFIGURACION
     self.SWITCH_OUTPUTS = str2bool(self.config.lst_get('SWITCH_OUTPUTS'))
     self.TEST_OUTPUTS = str2bool(self.config.lst_get('TEST_OUTPUTS'))
     self.RESET_ENABLE = str2bool(self.config.lst_get('RESET_ENABLE'))
     self.EVENT_DETECTION = str2bool(self.config.lst_get('EVENT_DETECTION'))
     self.TIMER_POLL = str2bool(self.config.lst_get('TIMER_POLL'))
     #
     
     # INSTANCIAS
     self.logs = ctrl_logs(self.TYPE,'CTRL_FREC_error',self.DLGID,self.print_log,self.LOG_LEVEL)
     
     self.redis = Redis()   
Пример #5
0
    def __init__(self, LIST_CONFIG):
        '''
        Constructor
        '''
        #
        ## DEFINICION DE VARIABLES DE LA CLASE
        self.config = config_var(LIST_CONFIG)
        self.print_log = self.config.lst_get('print_log')
        self.LOG_LEVEL = self.config.lst_get('LOG_LEVEL')
        self.DLGID_CTRL = self.config.lst_get('DLGID_CTRL')
        self.TYPE = self.config.lst_get('TYPE')
        self.ENABLE_OUTPUTS = self.config.lst_get('ENABLE_OUTPUTS')
        self.ENABLE_OUTPUTS = str2bool(self.config.lst_get('ENABLE_OUTPUTS'))

        self.TYPE_IN_FREC = self.config.lst_get('TYPE_IN_FREC')
        self.DLGID_REF = self.config.lst_get('DLGID_REF')
        self.CHANNEL_REF = self.config.lst_get('CHANNEL_REF')
        self.TYPE_IN_FREC = self.config.lst_get('TYPE_IN_FREC')
        self.DLGID_REF_1 = self.config.lst_get('DLGID_REF_1')
        self.CHANNEL_REF_1 = self.config.lst_get('CHANNEL_REF_1')
        self.PROGRAMMED_FREC = self.config.lst_get('PROGRAMMED_FREC')

        ## INSTANCIAS
        self.logs = ctrl_logs(self.TYPE, 'CTRL_FREC_process', self.DLGID_CTRL,
                              self.print_log, self.LOG_LEVEL)
        self.redis = Redis()
def read_config_var(DLGID):
    ''''''

    FUNCTION_NAME = 'READ_CONFIG_VAR'

    ## INSTANCIAS
    logs = ctrl_logs(False, 'servErrorAppSelection', DLGID, print_log)
    redis = Redis()
    #
    # LEO LOS TAGS DE CONFIGURACION
    if redis.hexist(f'{DLGID}_ERROR', 'TAG_CONFIG'):
        #if gda.readAutConf(f'{DLGID}_ERROR','TAG_CONFIG'):
        TAG_CONFIG = redis.hget(f'{DLGID}_ERROR', 'TAG_CONFIG')
        #TAG_CONFIG = gda.readAutConf(f'{DLGID}_ERROR','TAG_CONFIG')
        TAG_CONFIG = TAG_CONFIG.split(',')
    else:
        #logs.print_inf(FUNCTION_NAME,f'NO EXISTE {DLGID}_TAG_CONFIG IN serv_error_APP_selection')
        #logs.print_inf(FUNCTION_NAME,'NO SE EJECUTA EL SCRIPT')
        return ''
    #

    # LEO CONFIGURACION DE LA REDIS
    #logs.print_inf(FUNCTION_NAME,'LEO CONFIG EN REDIS')
    vars_config = []
    for param in TAG_CONFIG:
        vars_config.append(param)
        vars_config.append(redis.hget(f'{DLGID}_ERROR', param))
        #vars_config.append(gda.readAutConf(f'{DLGID}_ERROR',param))
    #
    '''
    # MUESTRO VARIABLES LEIDAS
    n = 0
    for param in vars_config:
        if n < (len(vars_config)): 
            logs.print_out(FUNCTION_NAME,vars_config[n],vars_config[n+1])
            n += 2'''

    #
    # CONCATENO LAS VARIABLES DE EJECUCION Y DE CONFIGURACION
    list_out = []
    LIST_CONFIG = ['print_log', print_log, 'DLGID', DLGID, 'TYPE', TYPE]
    n = 0
    for param in LIST_CONFIG:
        if n < 4:
            list_out.append(LIST_CONFIG[n])
            n += 1

    for param in vars_config:
        list_out.append(param)

    return list_out
Пример #7
0
 def __init__(self,LIST_CONFIG):
     '''
     Constructor
     '''
     #
     ## DEFINICION DE VARIABLES DE LA CLASE
     self.config = config_var(LIST_CONFIG)
     self.print_log = self.config.lst_get('print_log')
     self.DLGID_CTRL = self.config.lst_get('DLGID_CTRL')
     self.TYPE = self.config.lst_get('TYPE')
     self.ENABLE_OUTPUTS = self.config.lst_get('ENABLE_OUTPUTS')
     self.ENABLE_OUTPUTS = str2bool(self.config.lst_get('ENABLE_OUTPUTS'))
     self.LOG_LEVEL = self.config.lst_get('LOG_LEVEL')
     
     
     ## INSTANCIAS
     self.logs = ctrl_logs(self.TYPE,'CTRL_PpotPaysandu',self.DLGID_CTRL,self.print_log,self.LOG_LEVEL)
     self.redis = Redis()
     self.gda = GDA(dbUrl)
Пример #8
0
def control_process(LIST_CONFIG):
    ''''''

    name_function = 'CONTROL_PROCESS'

    conf = config_var(LIST_CONFIG)

    # VARIABLES DE EJECUCION
    DLGID_CTRL = conf.lst_get('DLGID_CTRL')
    TYPE = conf.lst_get('TYPE')
    print_log = str2bool(conf.lst_get('print_log'))
    LOG_LEVEL = conf.lst_get('LOG_LEVEL')

    #VARIABLES DE CONFIGURACION
    ENABLE_OUTPUTS = str2bool(conf.lst_get('ENABLE_OUTPUTS'))
    TYPE_IN_FREC = conf.lst_get('TYPE_IN_FREC')
    DLGID_REF = conf.lst_get('DLGID_REF')
    CHANNEL_REF = conf.lst_get('CHANNEL_REF')
    DLGID_REF_1 = conf.lst_get('DLGID_REF_1')
    CHANNEL_REF_1 = conf.lst_get('CHANNEL_REF_1')

    ## INSTANCIAS
    logs = ctrl_logs(TYPE, 'CTRL_FREC_process', DLGID_CTRL, print_log,
                     LOG_LEVEL)
    config = configparser.ConfigParser()
    redis = Redis()
    #gda = GDA(serv_APP_config['CONFIG']['working_mode'])

    redis.no_execution('MER004')
    '''
    # INSTANCIA DE error_process
    import importlib.util
    #spec = importlib.util.spec_from_file_location("archivo", f"../{TYPE}/PROCESS/ctrl_library.py")
    spec = importlib.util.spec_from_file_location("archivo", f"/datos/cgi-bin/spx/AUTOMATISMOS/{TYPE}/PROCESS/ctrl_library.py")
    archivo = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(archivo)
    p = archivo.ctrl_process(LIST_CONFIG)'''

    p = ctrlProcess(LIST_CONFIG)

    # OBTENFO LA CARPETA EN DONDE SE ENCUENTRA EL ARCHIVO ACTUAL
    current_path = os.path.dirname(os.path.abspath(__file__))
    # LEO EL ARCHIVO DE CONFIGURACION
    config.read(f"{current_path}/ctrl_config.ini")

    #---------------------------------------------------------
    ##PROCESS

    logs.basicLog(__doc__)

    # ESCRIBO LA EJECUCION DEL SCRIPT
    logs.print_log(f"{name_function}")

    #logs.script_performance(f"{name_function}")

    # MUESTRO VARIABLES DE ENTRADA
    logs.print_in(name_function, 'print_log', print_log)
    logs.print_in(name_function, 'DLGID_CTRL', DLGID_CTRL)
    logs.print_in(name_function, 'TYPE', TYPE)
    logs.print_in(name_function, 'ENABLE_OUTPUTS', ENABLE_OUTPUTS)
    logs.print_in(name_function, 'TYPE_IN_FREC', TYPE_IN_FREC)
    logs.print_in(name_function, 'DLGID_REF', DLGID_REF)
    logs.print_in(name_function, 'CHANNEL_REF', CHANNEL_REF)
    logs.print_in(name_function, 'DLGID_REF_1', DLGID_REF_1)
    logs.print_in(name_function, 'CHANNEL_REF_1', CHANNEL_REF_1)

    # ESCRIBO NUMERO DE EJECUCION
    #redis.no_execution(DLGID_CTRL)

    # CHEQUEO QUE EXISTAN LOS LINES DEL DATALOGGER DE CONTROL Y EL DE REFERENCIA.
    if not (redis.hexist(DLGID_CTRL, 'LINE')):
        #logs.script_performance(f'{name_function} ==> NO EXISTE LINE {DLGID_CTRL}')
        logs.print_inf(name_function, f'NO EXISTE LINE {DLGID_CTRL}')
        logs.print_inf(name_function, 'EJECUCION INTERRUMPIDA')
        quit()

    if not (redis.hexist(DLGID_REF, 'LINE')):
        #logs.script_performance(f'NO EXISTE LINE {DLGID_REF}')
        logs.print_inf(name_function, f'NO EXISTE LINE {DLGID_REF}')
        logs.print_inf(name_function, 'EJECUCION INTERRUMPIDA')
        quit()

    #
    logs.print_inf(name_function, 'CHEQUEO_ALARMAS')
    p.chequeo_alarmas()
    #
    #logs.print_inf(name_function, 'CHEQUEO_SENSOR')
    #p.chequeo_sensor()
    #
    logs.print_inf(name_function, 'MAIN')

    # FUNCION MAIN
    name_function = 'MAIN'

    # CONDICIONES INICIALES
    #
    ## ACTIVO BANDERA PARA QUE control_error NOTIFIQUE QUE SE ESTA TRABAJANDO CON REFERENCIA_1
    redis.hset(DLGID_CTRL, 'flag_work_syst_ref_1', 'NO')

    # REVISO SI ESTA TRABAJANDO EN MODO LOCAL EN EL TABLERO
    if read_param(DLGID_CTRL, 'LM') == '1':
        logs.print_inf(name_function, 'TRABAJO EN MODO LOCAL')
        redis.hset(DLGID_CTRL, 'LOCAL_MODE', 'SI')
    elif read_param(DLGID_CTRL, 'LM') == '0':
        redis.hset(DLGID_CTRL, 'LOCAL_MODE', 'NO')  #VISUALIZACION
        #
        # SI NO EXISTE LA VARIABLE DE SELECCION SW1 LA CREO CON VALOR AUTO
        if not (redis.hexist(DLGID_CTRL, dic.get_dic('WEB_MODE', 'name'))):
            redis.hset(DLGID_CTRL, dic.get_dic('WEB_MODE', 'name'),
                       dic.get_dic('WEB_MODE', 'True_value'))
            # MUESTRO LOGS DE ADVERTENCIA
            logs.print_inf(name_function, 'NO EXISTE LA VARIABLE SW1 EN REDIS')
            logs.print_inf(
                name_function, 'SE CREA LA VARIABLE CON VALOR [0]'.format(
                    dic.get_dic('WEB_MODE', 'True_value')))
            #logs.script_performance('error in [0] [1] = ,'.format(name_function,dic.get_dic('WEB_MODE', 'name')))
            #logs.script_performance('error in [0], SE CREA [1] = [2]'.format(name_function,dic.get_dic('WEB_MODE', 'name'),dic.get_dic('WEB_MODE', 'True_value')))
        #
        # LEO VAERIABLE WEB_MODE
        WEB_MODE = redis.hget(DLGID_CTRL, dic.get_dic('WEB_MODE', 'name'))

        # REVISO EL MODO DE TRABAJO WEB
        if WEB_MODE == 'REMOTO':
            logs.print_inf(name_function, 'TRABAJO EN MODO REMOTO')
            p.modo_remoto()

        elif WEB_MODE in [
                dic.get_dic('WEB_MODE', 'value_1'),
                dic.get_dic('WEB_MODE', 'value_1'),
        ]:
            logs.print_inf(name_function,
                           'TRABAJO EN MODO SISTEMA DE EMERGENCIA')
            # REVISO EL ESTADO DE ENABLE_OUTPUTS
            if ENABLE_OUTPUTS:
                emerg_system(DLGID_CTRL)
            else:
                logs.print_inf(
                    name_function,
                    f"SALIDAS DESCACTIVADAS [ENABLE_OUTPUTS = {ENABLE_OUTPUTS}]"
                )
                #logs.script_performance(f"{name_function} ==> SALIDAS DESCACTIVADAS [ENABLE_OUTPUTS = {ENABLE_OUTPUTS}]")

        elif WEB_MODE == 'AUTO':
            logs.print_inf(name_function, 'TRABAJO EN MODO AUTOMATICO')
            #
            # SI NO EXISTE LA VARIABLE TX_ERROR EN DLGID_REF LA CREO CON VALOR NO
            if not (redis.hexist(DLGID_REF, dic.get_dic('TX_ERROR', 'name'))):
                redis.hset(DLGID_REF, dic.get_dic('TX_ERROR', 'name'),
                           dic.get_dic('TX_ERROR', 'False_value'))
            #
            # LEO MAG_REF SELECCIONADA POR EL CLIENTE. SI NO EXISTE LMIN LO CREO CON VALOR 1
            if not (redis.hexist(DLGID_CTRL, dic.get_dic('MAG_REF', 'name'))):
                redis.hset(DLGID_CTRL, dic.get_dic('MAG_REF', 'name'),
                           dic.get_dic('MAG_REF', 'True_value'))
            else:
                MAG_REF = float(
                    redis.hget(DLGID_CTRL, dic.get_dic('MAG_REF', 'name')))

            # LEO TX_ERROR Y # error_1min
            TX_ERROR = redis.hget(DLGID_REF, dic.get_dic('TX_ERROR', 'name'))
            error_1min = redis.hget(DLGID_REF, 'error_1min')

            # CHEQUEO ERROR TX EN EL DLG DE REFERENCIA (SE DECLARA ERROR_TX CUANDO PASAN 10 MIN SIN TRANSMITIR)
            if TX_ERROR == 'SI':
                logs.print_inf(
                    name_function,
                    f'ERROR TX EN SISTEMA DE REFERENCIA [ {DLGID_REF} ]')
                #logs.print_inf(name_function, 'AUTOMATISMO TRABAJADO CON SISTEMA DE EMERGENCIA')
                #
                # CHEQUEO QUE SE HAYA ESCRITO LA DIFERENCIA EN MAGNITUD ENTRE LOS SENSORES
                if redis.hexist(DLGID_CTRL, 'delta_ref1_ref'):
                    #
                    # LEO LA DIFERENCIA ENTRE LAS MAGNITUDES DE REFERENCIA
                    delta_ref1_ref = float(
                        redis.hget(DLGID_CTRL, 'delta_ref1_ref'))
                    #
                    # CHEQUEO EL ESTADO DEL SENSOR DE REFERENCIA 1
                    if not (p.chequeo_sensor(DLGID_REF_1, CHANNEL_REF_1)):
                        logs.print_inf(
                            name_function,
                            'ERROR DE SENSOR EN SISTEMA DE REFERENCIA 1')
                        logs.print_inf(
                            name_function,
                            'AUTOMATISMO TRABAJADO CON SISTEMA DE EMERGENCIA')
                        emerg_system(DLGID_CTRL)
                    else:
                        logs.print_inf(
                            name_function,
                            'AUTOMATISMO TRABAJADO CON SISTEMA DE REFERENCIA 1'
                        )
                        #
                        # ACTIVO BANDERA PARA QUE control_error NOTIFIQUE QUE SE ESTA TRABAJANDO CON REFERENCIA_1
                        redis.hset(DLGID_CTRL, 'flag_work_syst_ref_1', 'SI')
                        #
                        # LLAMO AL CONTROL DEL SISTEMA
                        p.control_sistema(DLGID_REF_1, CHANNEL_REF_1,
                                          MAG_REF + delta_ref1_ref)
                #
                else:
                    logs.print_inf(
                        name_function,
                        'AUTOMATISMO TRABAJADO CON SISTEMA DE EMERGENCIA')
                    emerg_system(DLGID_CTRL)

            elif TX_ERROR == 'NO':
                # ME ASEGURO QUE LA REFENCIA ME HAYA MANDADO UN DATO NUEVO
                if error_1min == 'NO':
                    # CHEQUEO ERROR EN EL SENSOR
                    if not (p.chequeo_sensor(DLGID_REF, CHANNEL_REF)):
                        logs.print_inf(
                            name_function,
                            'ERROR DE SENSOR EN SISTEMA DE REFERENCIA')
                        logs.print_inf(
                            name_function,
                            'AUTOMATISMO TRABAJADO CON SISTEMA DE EMERGENCIA')
                        #
                        emerg_system(DLGID_CTRL)
                    else:
                        logs.print_inf(name_function, 'CONTROL_SISTEMA')
                        p.control_sistema(DLGID_REF, CHANNEL_REF, MAG_REF)
                        #
                        logs.print_inf(name_function, 'DELTA_MAG')
                        p.delta_mag()
                else:
                    logs.print_inf(name_function,
                                   'EN ESPERA DE DATOS DE LA REFERENCIA')

            else:
                logs.print_inf(
                    name_function, "error in [0], [1] = [2]".format(
                        name_function, dic.get_dic('TX_ERROR', 'name'),
                        TX_ERROR))
                # DEJAR REGISTRO DEL ERROR
                #logs.script_performance("error in [0], [1] = [2]".format(name_function,dic.get_dic('TX_ERROR', 'name'),TX_ERROR))
            #
        else:
            logs.print_inf(
                name_function, 'error in [0], [1] = [2]'.format(
                    name_function, dic.get_dic('WEB_MODE', 'name'), WEB_MODE))
            # DEJAR REGISTRO DEL ERROR
            #logs.script_performance('error in [0], [1] = [2]'.format(name_function,dic.get_dic('WEB_MODE', 'name'),WEB_MODE))

    else:
        logs.print_inf(
            name_function,
            f"error in {name_function}, LM = {read_param(DLGID_CTRL,'LM')}")
        logs.print_inf(name_function, 'EJECUCION INTERRUMPIDA')
        # DEJAR REGISTRO DEL ERROR
        #logs.script_performance(f"error in {name_function}, LM = {read_param(DLGID_CTRL,'LM')}")

    # LATCHEO LAS SALIDAS
    p.latch__outpust(DLGID_CTRL)

    # PREPARO DATA_DATE_TIME PARA MOSTRAR EN LA VISUALIZACION EN EL DATALOGGER DE CONTROL
    logs.print_inf(name_function, 'SHOW_DATA_DATE_TIME')
    p.show_DATA_DATE_TIME(DLGID_CTRL)

    # PREPARO DATA_DATE_TIME PARA MOSTRAR EN LA VISUALIZACION EN EL DATALOGGER DE REFERENCIA
    p.show_DATA_DATE_TIME(DLGID_REF)

    # PREPARO PUMP1_STATE PARA MOSTRAR EL ESTADO DE LA BOMBA
    logs.print_inf(name_function, 'SHOW_PUMP1_STATE')
    p.show_pump1_state('BR1')

    # MUESTRA LA FRECUENCIA ACTUAL A LA QUE SE ESTA TRABAJANDO
    logs.print_inf(name_function, 'SHOW_WORK_FREQUENCY')
    p.show_work_frequency()
# CONFIGURO LAS ENTRADAS DE CONFIGURACION
if __name__ == '__main__':
    # DETECTO LLAMADA CON Y SIN PARAMETROS
    try:
        # LLAMADA CON PAR[AMETROS
        STR_CONFIG = sys.argv[1]
        LIST_CONFIG = str2lst(STR_CONFIG)
        #
    except:
        # LLAMADA SIN PARAMETROS
        LIST_CONFIG = ''
        #

    # INSTANCIA DE config_var
    conf = config_var(LIST_CONFIG)
    redis = Redis()
    gda = GDA(dbUrl)
    #
    # CHEQUEO QUE TIPO DE LLAMADA SE ESTA HACIENDO
    if bool(LIST_CONFIG):
        if conf.lst_get('DLGID'):
            # LLAMADA CON VARIABLES DE EJECUCION Y CONFIGURACION
            print_log = conf.lst_get('print_log')
            DLGID = conf.lst_get('DLGID')
            TYPE = conf.lst_get('TYPE')
        else:
            # LLAMADA SOLO CON EL ID DEL DATALOGGER
            print_log = True
            DLGID = sys.argv[1]
            TYPE = 'CHARGE'
    else:
Пример #10
0
def read_param(dlgid, param):
    '''
    DESCRIPTION
        Se encarga de leer del datalogger el canal con el nombre 'param'
        devuelve un string
        
    LEYENDA:
        dlgid => datalogger id
        param => nombre del canal que se quiere leer
                 si se quiere leer la fecha param = DATE
                 si se quiere leer la hora param = TIME
        EJ: read_param('MER001','PA')
    '''
    def head_detect(line, key_word):
        '''
        DETECTA SI LA CABECERA DEL line HAY ESTE key_word
        '''
        i = 0
        match = 0
        for char in key_word:
            if line[i] == char:
                match += 1
            i += 1
        if match == 9: return True
        else: return False

    ## INSTANCIAS
    redis = Redis()
    # LEO LINE
    if redis.hexist(dlgid, 'LINE'):
        line = redis.hget(dlgid, 'LINE')
    else:
        return None

    # DETECTO SI EXISTE CABECERA LINE
    if head_detect(line, 'LINE=DATE'):
        parsed_line = line.split(';')
        #
        # CREO UNA LISTA A PARTIR DE SEPARAR LOS CAMPOS DEL LINE
        n = 0
        my_list = []
        for elements in parsed_line:
            fields = elements.split(':')
            my_list.append(fields[0])
            try:
                my_list.append(fields[1])
            except:
                pass

            n = n + 1

        # VEO SI SE ESTA SELECCIONADO DATE O TIME
        if param == 'DATE': out = f'20{my_list[1]}'
        else:
            try:
                out = my_list[my_list.index(param) + 1]
            except:
                out = ''
        #return out

    else:

        parsed_line = line.split(',')
        #
        # CREO UNA LISTA A PARTIR DE SEPARAR LOS CAMPOS DEL LINE
        n = 0
        my_list = []
        for elements in parsed_line:
            fields = elements.split('=')
            my_list.append(fields[0])
            try:
                my_list.append(fields[1])
            except:
                pass

            n = n + 1
        #
        # VEO SI SE ESTA SELECCIONADO DATE O TIME
        if param == 'DATE': out = my_list[1]
        elif param == 'TIME': out = my_list[2]
        else:
            try:
                out = my_list[my_list.index(param) + 1]
            except:
                out = ''
        #return out

    # aplico validacion de datos modbus
    if out == '9999':
        if redis.hexist(dlgid, "lastValidData_{0}".format(param)):
            out = redis.hget(dlgid, "lastValidData_{0}".format(param))
    else:
        redis.hset(dlgid, "lastValidData_{0}".format(param), out)

    return out
Пример #11
0
def error_process(LIST_CONFIG):

    name_function = 'ERROR_PROCESS'

    conf = config_var(LIST_CONFIG)

    #VARIABLES DE EJECUCION
    print_log = str2bool(conf.lst_get('print_log'))
    DLGID = conf.lst_get('DLGID')
    TYPE = conf.lst_get('TYPE')
    LOG_LEVEL = conf.lst_get('LOG_LEVEL')

    #VARIABLES DE CONFIGURACION
    SWITCH_OUTPUTS = str2bool(conf.lst_get('SWITCH_OUTPUTS'))
    TEST_OUTPUTS = str2bool(conf.lst_get('TEST_OUTPUTS'))
    RESET_ENABLE = str2bool(conf.lst_get('RESET_ENABLE'))
    EVENT_DETECTION = str2bool(conf.lst_get('EVENT_DETECTION'))
    TIMER_POLL = str2bool(conf.lst_get('TIMER_POLL'))

    ## INSTANCIAS
    #logs = ctrl_logs(TYPE,DLGID,print_log)
    logs = ctrl_logs(TYPE, 'CTRL_FREC_error', DLGID, print_log, LOG_LEVEL)
    redis = Redis()
    #
    # INSTANCIA DE error_process
    import importlib.util
    #spec = importlib.util.spec_from_file_location("archivo", f"../{TYPE}/PROCESS/ctrl_library.py")
    spec = importlib.util.spec_from_file_location(
        "archivo",
        f"/datos/cgi-bin/spx/AUTOMATISMOS/{TYPE}/PROCESS/ctrl_library.py")
    archivo = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(archivo)
    e = archivo.error_process(LIST_CONFIG)

    #---------------------------------------------------------
    ##ERROR PROCESS

    #logs.print_log(__doc__)
    logs.basicLog(__doc__)

    # ESCRIBO LA EJECUCION DEL SCRIPT
    logs.print_inf(name_function, '')

    # MUESTRO VARIABLES DE ENTRADA
    logs.print_in(name_function, 'print_log', print_log)
    logs.print_in(name_function, 'DLGID', DLGID)
    logs.print_in(name_function, 'TYPE', TYPE)
    #
    if SWITCH_OUTPUTS:
        logs.print_in(name_function, 'SWITCH_OUTPUTS', SWITCH_OUTPUTS)
    if SWITCH_OUTPUTS:
        logs.print_in(name_function, 'TEST_OUTPUTS', TEST_OUTPUTS)
    if SWITCH_OUTPUTS:
        logs.print_in(name_function, 'RESET_ENABLE', RESET_ENABLE)
    if EVENT_DETECTION:
        logs.print_in(name_function, 'EVENT_DETECTION', EVENT_DETECTION)
    if EVENT_DETECTION: logs.print_in(name_function, 'TIMER_POLL', TIMER_POLL)
    #

    # ESCRIBO NUMERO DE EJECUCION
    redis.no_execution(f'{DLGID}_ERROR')

    # CHEQUEO ERROR TX
    logs.print_inf(name_function, 'TEST_TX_ERRORS')

    testTxResult = e.test_tx()  # chequeo estado de transmision del equipo

    if testTxResult != 'noLine':
        if testTxResult:
            # LLAMAO A FUNCIONES QUE SOLO CORREN CON DATALOGGER 8CH Y SIN ERRORES TX
            if dlg_detection(DLGID) == '8CH':
                #
                # DETECCION DE EVENTOS
                logs.print_inf(name_function, 'EVENT_DETECTION')
                e.event_detection()
                #
                # ALTERNO LAS SALIDAS
                logs.print_inf(name_function, 'SWITCH_OUTPUTS')
                e.switch_outputs()
                #
                # TESTEO LAS SALIDAS
                logs.print_inf(name_function, 'TEST_OUTPUTS')
                state_test_outputs = e.test_outputs()
                #
                # PREPARO VARIABLES DE TIEMPO QUE SE MUESTRAN EN LA VISUALIZACION
                logs.print_inf(name_function, 'PUMP1_TIME')
                e.pump_time('BR1', 1)
                #
            elif dlg_detection(DLGID) == '5CH':
                # DATALOGGER DE 5CH DETECTADO
                #
                logs.print_inf(name_function, 'DLG 5CH NO SE DETECTAN EVENTOS')
                logs.print_inf(name_function, 'DLG 5CH NO SE ALTERNAN SALIDAS')

            else:
                # NO SE DETECTA EL TIPO DE DATALOGGER
                #
                logs.print_inf(name_function,
                               'NO SE DETECTA EL TIPO DE DATALOGGER')
                logs.script_performance(
                    f'{name_function} => NO SE DETECTA EL TIPO DE DATALOGGER')
        else:
            logs.print_inf(name_function,
                           'NO SE DETECTAN EVENTOS POR ERROR TX')
    else:
        logs.print_inf(name_function, f'NO EXISTE VARIABLE LINE EN {DLGID}')
        logs.print_inf(name_function, f'NO SE EJECUTA {name_function}')
    #
    logs.print_inf(name_function, 'VISUAL')
    e.visual()
Пример #12
0
def control_process(LIST_CONFIG):
    ''''''

    name_function = 'CONTROL_PROCESS'
    processName = 'CTRL_PpotPaysandu'

    conf = config_var(LIST_CONFIG)

    # VARIABLES DE EJECUCION
    DLGID_CTRL = conf.lst_get('DLGID_CTRL')
    TYPE = conf.lst_get('TYPE')
    print_log = str2bool(conf.lst_get('print_log'))
    LOG_LEVEL = conf.lst_get('LOG_LEVEL')

    #VARIABLES DE CONFIGURACION
    ENABLE_OUTPUTS = str2bool(conf.lst_get('ENABLE_OUTPUTS'))

    ## INSTANCIAS
    logs = ctrl_logs(TYPE, 'CTRL_PpotPaysandu', DLGID_CTRL, print_log,
                     LOG_LEVEL)
    redis = Redis()
    ctrl = ctrl_process(LIST_CONFIG)
    gda = GDA(dbUrl)

    #---------------------------------------------------------
    ## PROCESS ##

    # ESCRIBO LA EJECUCION DEL SCRIPT
    logs.basicLog(__doc__)
    logs.print_log(f"{name_function}")

    # MUESTRO VARIABLES DE ENTRADA
    logs.print_in(name_function, 'print_log', print_log)
    logs.print_in(name_function, 'DLGID_CTRL', DLGID_CTRL)
    logs.print_in(name_function, 'TYPE', TYPE)
    logs.print_in(name_function, 'ENABLE_OUTPUTS', ENABLE_OUTPUTS)

    # CHEQUEO QUE EXISTA EL DATALOGGER DE CONTROL.
    if not (redis.hexist(DLGID_CTRL, 'LINE')):
        logs.print_inf(name_function, f'NO EXISTE LINE {DLGID_CTRL}')
        logs.print_inf(name_function, 'EJECUCION INTERRUMPIDA')
        quit()

    # Garantizo que las variables que se van a usar en la visualizacion siempre existan
    ctrl.setVisualVars()

    # Garantizo que las variable de control esten siempre disponibles para el automatismo
    ctrl.checkAndSetControlVars()

    # Leo las variables de control
    WEB_Mode = conf.lst_get('WEB_Mode')
    WEB_ActionPump = conf.lst_get('WEB_ActionPump')
    WEB_Frequency = int(conf.lst_get('WEB_Frequency'))
    SOFT_Mode = ctrl.getAndUpdateMode(
        WEB_Mode)  # obtengo el modo actual de funcionamiento del sistema

    #---------------------------------------------------------
    ## MAIN DEL FUNCIONAMIETO DEL SISTEMA ##

    name_function = 'MAIN'

    # muestro logs de las variables de entrada del software
    logs.print_in(name_function, 'SOFT_Mode', SOFT_Mode)
    logs.print_in(name_function, 'WEB_Mode', WEB_Mode)
    logs.print_in(name_function, 'WEB_ActionPump', WEB_ActionPump)
    logs.print_in(name_function, 'WEB_Frequency', WEB_Frequency)

    # DETECTO MODO DE TRABAJO
    if SOFT_Mode == 'EMERGENCIA':
        logs.print_inf(name_function, 'TRABAJO EN MODO EMERGENCIA')
        redis.hset(DLGID_CTRL, 'PLC_SoftMode', 'EMERGENCIA')

    elif SOFT_Mode == 'REMOTO':
        logs.print_inf(name_function, 'TRABAJO EN MODO REMOTO')
        redis.hset(DLGID_CTRL, 'PLC_SoftMode',
                   'REMOTO')  # guardo variable para la visualizacion web
        #
        # accion sobre la bomba
        if not WEB_ActionPump in ['ON', 'OFF']:
            logs.print_error(name_function, 'ACCION NO ADMITIDA')
        else:
            ctrl.pump(WEB_ActionPump)
            #
        # seteo de frecuencia si la comunicacion es estable
        if WEB_ActionPump == 'ON':
            if ctrl.getTxState():
                ctrl.setFrequency(WEB_Frequency)
                redis.hset(DLGID_CTRL, 'UnstableTx',
                           'NO')  # guardo variable para la visualizacion web
            else:
                logs.print_inf(
                    name_function,
                    'NO SE ACTUALIZA LA FRECUENCIA POR PROBLEMAS TX')
                redis.hset(
                    DLGID_CTRL, 'UnstableTx', 'SI'
                )  # activo alerta de transmision inestable para la visualizacion web

    elif SOFT_Mode == 'LOCAL':
        logs.print_inf(name_function,
                       "TRABAJANDO EN MODO LOCAL DESDE EL TABLERO")
        redis.hset(DLGID_CTRL, 'PLC_SoftMode',
                   'LOCAL')  # guardo variable para la visualizacion web

    else:
        logs.print_error(name_function, 'MODO DE TRABAJO NO ADMITIDO')

    # Preparo para la visualizacion web los estados y alarmas del sistema
    ctrl.showStatesAndAlarms()
Пример #13
0
def error_process(LIST_CONFIG):
    
    name_function = 'ERROR_PROCESS'
    
    conf = config_var(LIST_CONFIG)
       
    #VARIABLES DE EJECUCION
    print_log = str2bool(conf.lst_get('print_log'))
    DLGID = conf.lst_get('DLGID') 
    TYPE = conf.lst_get('TYPE')         
    LOG_LEVEL =  conf.lst_get('LOG_LEVEL')        

    
    
    #VARIABLES DE CONFIGURACION
    SWITCH_OUTPUTS = str2bool(conf.lst_get('SWITCH_OUTPUTS'))
    TEST_OUTPUTS = str2bool(conf.lst_get('TEST_OUTPUTS'))
    RESET_ENABLE = str2bool(conf.lst_get('RESET_ENABLE'))
    EVENT_DETECTION = str2bool(conf.lst_get('EVENT_DETECTION'))
    TIMER_POLL = str2bool(conf.lst_get('TIMER_POLL'))
    
    ## INSTANCIAS
    #logs = ctrl_logs(TYPE,DLGID,print_log)
    logs = ctrl_logs(TYPE,'CTRL_FREC_error',DLGID,print_log,LOG_LEVEL)
    redis = Redis()
    e = errorProcess(LIST_CONFIG)

    #---------------------------------------------------------
    ##ERROR PROCESS
    logs.basicLog(__doc__)
    #logs.print_log(__doc__)
    
    # ESCRIBO LA EJECUCION DEL SCRIPT
    logs.print_inf(name_function,'')
    
    
    # MUESTRO VARIABLES DE ENTRADA
    logs.print_in(name_function, 'print_log', print_log)
    logs.print_in(name_function, 'DLGID', DLGID)
    logs.print_in(name_function, 'TYPE', TYPE)
    #
    if SWITCH_OUTPUTS: logs.print_in(name_function, 'SWITCH_OUTPUTS', SWITCH_OUTPUTS)
    if SWITCH_OUTPUTS: logs.print_in(name_function, 'TEST_OUTPUTS', TEST_OUTPUTS)
    if SWITCH_OUTPUTS: logs.print_in(name_function, 'RESET_ENABLE', RESET_ENABLE)
    if EVENT_DETECTION: logs.print_in(name_function, 'EVENT_DETECTION', EVENT_DETECTION)
    if EVENT_DETECTION: logs.print_in(name_function, 'TIMER_POLL', TIMER_POLL)
    #
    
    # ESCRIBO NUMERO DE EJECUCION
    redis.no_execution(f'{DLGID}_ERROR')
    
    # CHEQUEO ERROR TX
    logs.print_inf(name_function, 'TEST_TX_ERRORS')

    
    testTxResult = e.test_tx()          # chequeo estado de transmision del equipo

    if testTxResult != 'noLine':
        if testTxResult:
            # Condicion que se cumple cuando el equipo no presenta errores TX
            pass
                
        else:
            pass

    else:
        logs.print_inf(name_function, f'NO EXISTE VARIABLE LINE EN {DLGID}')
        logs.print_inf(name_function, f'NO SE EJECUTA {name_function}')