Página 18 de 52 PrimerPrimer ... 817181928 ... ÚltimoÚltimo
Resultados 426 al 450 de 1294
  1. #426
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Control exhaustivo ciclo de carga/SOC/Cargas/etc-rrrrr.jpg

    He probado mil formas diferentes y no va, asignando una tabla a la otra, dentro del programa. En otro abierto para dicho fin sí, como puede verse en la imagen anterior.

    Ok, ya he modificado la creación de las matrices inicializando el contenido a 0.

    También he cambiado una condición '<' que estaba al revés, cosas del copy&paste.

    - - - - - - - - - - - - - - - - - - -

    Hemos dado un gran paso.

    Tal como mencionabas en posts anteriores, y visto el resultado del print():

    Código PHP:
    ...
    Apagar reles
    Apagar reles
    Encender rele 
    (direccion,puerto)= 0 0     # direccion 32, rele1 (1 de 8)
    Encender rele (direccion,puerto)= 0 1     # direccion 32, rele2 (2 de 8) 
    Supongo ahora tocara el paso de que no se enciendan todos los reles de golpe...Como puede verse en la secuencia anterior.

    -------------

    Hay que definir número de integrados PCF8574P para que no pete el programa:

    Código PHP:
    ### Definir matrices Rele_Out y Rele_Out_Ant y apagar todos los reles

    Rele_Out = [[0] * for i in range(8)]
    Rele_Out_Ant = [[0] * for i in range(8)]

    for 
    I in range(1) :              #numero de integrados instalados     <= SOLUCION: NUMERO DE INTEGRADOS
            
    for J in range(8) :
                    
    #Rele_Out[I][J] = 0
                    #Rele_Out_Ant[I][J] = 0
                    
    i2c_rele(I+32,J+1,0
    Ahora el problema mayor es que ha dejado de graficar y entrar datos en la BD. Será alguna interferencia entre los distintos comandos mysql. Toca revisar. Mientras vuelvo al programa de antes.
    Última edición por nikitto; 07/08/2016 a las 16:37
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  2. #427
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Esto ya está funcionando. Para ello he sacado la parte de la lectura de las tablas fuera del bucle.

    Mientras no tenemos implementación del estado de los relés vía web, he escrito este programa para saber su estado:

    Código PHP:
    from smbus import SMBus
    bus 
    SMBus(1)
    abus.read_byte(0x20)
    if 
    a== 254 :
            print (
    'Rele1-ON')
            print (
    'Rele2-OFF')

    elif a== 253:
            print (
    'Rele1-OFF')
            print (
    'Rele2-ON')

    elif a== 252:
            print (
    'Rele1-ON')
            print (
    'Rele2-ON')

    else:
            print (
    'Rele1-OFF')
            print (
    'Rele2-OFF'
    Ahora mismo sólo está:

    Código PHP:
    nikitto@asako ~/FV python estado_reles.py
    Rele1_OFF
    Rele2
    -ON 
    Última edición por nikitto; 07/08/2016 a las 22:33
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  3. #428
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Dado que me he instalado Python y estan los Juegos Olimpicos...he hecho unas pruebas de verificacion del codigo mientras veia las pruebas deportivas

    Tambien he cambiado alguna cosilla:

    -La forma de asignar Rele_Out_Ant a Rele_Out....Dado que es cierto que no funciona la asignación directa, me pique con no utilizar un doble bucle.

    - Ya he puesto un algoritmo para solo encender 1 rele en cada muestra

    Como no tengo BD mi algoritmo lo simula
    Igualmente no incorporo las sentencias I2C para encender/apagar realmente los reles

    No lo he pensado mucho...pero no veo la necesidad de decir por programa los integrados que realmente se tienen instalados

    Con todo esto....aquí el código que me sale :

    Código PHP:
    # ------------------ INICIO PROGRAMA --------------------

    #import MySQLdb # Quitar comentario en sistema con BD Mysql

    DatosFV={} #Creamos diccionario para guardar los datos FV de cada muestra

    #Diccionario para tablas condiciones Reles
    OP={'id_rele':0,'nombre':1,'modo':2,'id_rele2':3,'operacion':4,'parametro':5,'condicion':6,'valor':7}


    ### Definir matrices Rele_Out y Rele_Out_Ant y apagar todos los reles

    Rele_Out = [[0] * for i in range(8)]
    Rele_Out_Ant = [[0] * for i in range(8)]
    print(
    "Matrices Rele_Out inicializadas a 0")
          
    for 
    I in range(8) :
            for 
    J in range(8) :
                    
    J=#Utilizar funcion I2C_Rele para apagar todos los reles

    #--------Lectura BD de las tablas condiciones RELES -------------
                    
    # Dado que no esta en el bucle principal la lectura de las tablas de condiciones,
    # hay que asegurar que cuando se actualicen las condiciones via web se actualice
    # tambien la matriz R y la variable ncon

    # Si se pone en el bucle principal, es mas facil, pero hay que ver rendimiento
                    
     # reles = MySQLdb.connect(host = "localhost", user = "fv", passwd = "fv", db = "fv")
     # cursor = reles.cursor()
     # sql_reles='SELECT * FROM reles JOIN reles_c WHERE reles.id_rele = reles_c.id_rele'
     # ncon=cursor.execute(sql_reles)
     # ncon=int(ncon)
     # R=cursor.fetchall()

    #Simulo lectura de las tablas de condiciones de la BD
               
    R= [[321,"Termo","PRG",321,"ON","Vbat",">",26],[332,"Depuradora","PRG",332,"ON","Vbat",">",25],
        [
    321,"Termo","PRG",321,"OFF","Vbat","<",24],[332,"Depuradora","PRG",332,"OFF","Vbat","<",23],
        [
    321,"Termo","PRG",321,"ON","SOC",">",90],[332,"Depuradora","PRG",332,"ON","SOC",">",85],
        [
    321,"Termo","PRG",321,"OFF","SOC","<",85],[332,"Depuradora","PRG",332,"OFF","SOC","<",80]]

    ncon=#Nº de registros condiciones........

    print("Tabla de condiciones")
    print (
    R)
    print()

    # ------------------ BUCLE PRINCIPAL --------------------


    #En lugar de un bucle indefinido simulo unas muestras de Vbat y SOC

    for x in [22,99],[22,50],[27,89],[27,84],[27,92],[23.5,92],[23.5,79],[27,95],[27,95],[22,95]:
            
           
    DatosFV['Vbat']=x[0]
           
    DatosFV['SOC']=x[1]

           
    #-------------------------------------
           # Guardar en BD las muestras obtenidas
           #-------------------------------------

           
           #-------Algoritmo condiciones reles------------

           
    Rele_Out_Ant = [i[:] for i in Rele_Out#Guardo el estado anterior de los reles

           
    print("Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat="DatosFV['Vbat'], " SOC=",DatosFV['SOC'])
           print (
    Rele_Out_Ant)
           print()
           
           for 
    I in range(ncon):
                    
    Puerto=(R[I][0]%10)-1   # desde 0 a 7
                    
    GR=int((R[I][0]-Puerto)/10)-32 # desde 0 donde GR=0 si id_rele=32X, GR=1 si id_rele=33X
                    
    Rele_Out[GR][Puerto]=#encendemos virtualmente todos los reles por defecto

           
           
    print ("Ejecutando bucle condiciones")
           print()
           
           for 
    I in range(ncon):
                    
    Puerto=(R[I][0]%10)-1   # desde 0 a 7
                    
    GR=int((R[I][0]-Puerto)/10)-32 # desde 0 donde GR=0 si id_rele=32X, GR=1 si id_rele=33X,....
                                  
                    
    if R[I][OP['condicion']]=='<':
                            if 
    R[I][OP['operacion']]=='ON' and DatosFV[R[I][OP['parametro']]] > R[I][OP['valor']] and Rele_Out_Ant[GR][Puerto] == :
                                    
    Rele_Out[GR][Puerto]=0
                                    
                            
    if R[I][OP['operacion']]=='OFF' and DatosFV[R[I][OP['parametro']]] < R[I][OP['valor']] :
                                    
    Rele_Out[GR][Puerto]=0
                                    
                    
    if R[I][OP['condicion']]=='>':
                            if 
    R[I][OP['operacion']]=='ON' and DatosFV[R[I][OP['parametro']]] < R[I][OP['valor']] and Rele_Out_Ant[GR][Puerto] == :
                                    
    Rele_Out[GR][Puerto]=0
                                    
                            
    if R[I][OP['operacion']]=='OFF' and DatosFV[R[I][OP['parametro']]] > R[I][OP['valor']] :
                                    
    Rele_Out[GR][Puerto]=0
                                    

                    
    ### Forzado ON/OFF
                    
    if R[I][OP['modo']]=='ON' :
                            
    Rele_Out[GR][Puerto]=1
                    
    if R[I][OP['modo']]=='OFF' :
                            
    Rele_Out[GR][Puerto]=0
                                   
           
    # Bucle encendido/apagado reles

           
    Flag_Rele_Encendido=#Flag para encender un unico rele cada muestra
           
           
    for I in range(8):
                    for 
    J in range(8):
                            if 
    Rele_Out[I][J] == and Rele_Out_Ant[I][J] == and Flag_Rele_Encendido==1:
                                    print(
    "No Encendiendo rele =",I,J#No encender rele
                                    
    Rele_Out[I][J] = 0
                            
                            
    if Rele_Out[I][J] == and Rele_Out_Ant[I][J] == and Flag_Rele_Encendido==0:
                                    print(
    "Encendiendo rele =",I,J#encender rele
                                    
    Flag_Rele_Encendido=1

                            
    if Rele_Out[I][J] == and Rele_Out_Ant[I][J] == :
                                    print(
    "Apagando rele =",I,J#apagar rele  
           
    print()
           print(
    "Situacion Rele_Out despues cuando Vbat="DatosFV['Vbat']," SOC=",DatosFV['SOC'])
           print (
    Rele_Out)
           print(
    "-------------------------------------------"

    Si se ejecuta..... con las condiciones que he dado de alta y los valores Vbat y SOC que simulo tengo este resultado

    Código PHP:
    Matrices Rele_Out inicializadas a 0
    Tabla de condiciones
    [[321'Termo''PRG'321'ON''Vbat''>'26], [332'Depuradora''PRG'332'ON''Vbat''>'25], [321'Termo''PRG'321'OFF''Vbat''<'24], [332'Depuradora''PRG'332'OFF''Vbat''<'23], [321'Termo''PRG'321'ON''SOC''>'90], [332'Depuradora''PRG'332'ON''SOC''>'85], [321'Termo''PRG'321'OFF''SOC''<'85], [332'Depuradora''PRG'332'OFF''SOC''<'80]]

    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat22  SOC99
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones


    Situacion Rele_Out despues cuando Vbat
    22  SOC99
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat22  SOC50
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones


    Situacion Rele_Out despues cuando Vbat
    22  SOC50
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat27  SOC89
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Encendiendo rele 
    1 1

    Situacion Rele_Out despues cuando Vbat
    27  SOC89
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat27  SOC84
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones


    Situacion Rele_Out despues cuando Vbat
    27  SOC84
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat27  SOC92
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Encendiendo rele 
    0 0

    Situacion Rele_Out despues cuando Vbat
    27  SOC92
    [[10000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat23.5  SOC92
    [[10000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Apagando rele 
    0 0

    Situacion Rele_Out despues cuando Vbat
    23.5  SOC92
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat23.5  SOC79
    [[00000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Apagando rele 
    1 1

    Situacion Rele_Out despues cuando Vbat
    23.5  SOC79
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat27  SOC95
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Encendiendo rele 
    0 0
    No Encendiendo rele 
    1 1

    Situacion Rele_Out despues cuando Vbat
    27  SOC95
    [[10000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat27  SOC95
    [[10000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Encendiendo rele 
    1 1

    Situacion Rele_Out despues cuando Vbat
    27  SOC95
    [[10000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    Situacion Rele_Out y Rele_Out_Ant antes algoritmo cuando Vbat22  SOC95
    [[10000000], [01000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]

    Ejecutando bucle condiciones

    Apagando rele 
    0 0
    Apagando rele 
    1 1

    Situacion Rele_Out despues cuando Vbat
    22  SOC95
    [[00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]]
    -------------------------------------------
    >>> 

    Esto parece ya controlado....falta

    A) Algoritmo programación horaria

    B) Interfaz web para:
    B1) Dar de alta/modificar/borrar Reles (Id, Nombre, Modo)
    B2) Dar de alta/modificar/borrar condiciones de los Reles
    B3) Dar de alta/modificar/borrar condiciones de horario de los Reles ...por ejm (Id_rele, Operacion (ON/OFF), Valor)
    Última edición por Mleon; 08/08/2016 a las 04:57

  4. #429
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Perfecto, tanto el bucle FOR, como el encendido/apagado de reles en cada muestra.

    Cambia esta última parte (donde el encendido/apagado):

    Código PHP:
            #bucle encendido/apagado reles
            
    Flag_Rele_Encendido 0

            
    for I in range(8):
                    for 
    J in range(8):
                            if 
    Rele_Out[I][J] == and Rele_Out_Ant[I][J] == and Flag_Rele_Encendido == :
                                    print(
    'No Encender Rele (direccion,puerto)='),I,#no encender rele
                                    
    Rele_Out[I][J] = 0

                            
    if Rele_Out[I][J] == and Rele_Out_Ant[I][J] == and Flag_Rele_Encendido == :
                                    print(
    'Encender Rele (direccion,puerto)='),I,#encender rele
                                    
    Flag_Rele_Encendido 1
                            
    if Rele_Out[I][J] == and Rele_Out_Ant[I][J] == 1:
                                    print(
    'Apagar Rele (direccion,puerto)='),I,#apagar rele 
    Es una 'chorrada' pero de esta forma se aprecia mejor la dirección y puerto del relé que activa/desactiva.

    Sobre la base de datos, ya había pensado en ello. Al moverla fuera del bucle principal, te obliga a cargar el programa cada vez que se haga un cambio. Y eso por ahora puede ser un problema.

    No se en arduino, pero aquí puedes ejecutar el mismo programa las veces que quieras. Cada programa tiene asignado un número de identificación (PID). En caso de suceder, las muestras obtenidas no son reales, ni tampoco el contenido guardado en la BD. Ya me pasó alguna vez. Esto supongo que puede corregirse desde el propio sistema operativo con algún flag. Habrá que estudiarlo también.

    Iremos viendo sobre la marcha. Demasiados palos estamos tocando.

    - - - - - - - - - - - - - - - - - - -

    Varias cosas:

    Código PHP:
    import time   # Al principio del programa, para importar funciones relacionadas con fecha/hora

    while True:   # Iniciar bucle principal (hay otra manera más elegante - def main() -, pero todavía no lo he mirado)



         
    time.sleep(1.5)   # el bucle se repite cada 1,5 segundos. Necesita del 'import time' 
    Para romper el bucle y salir del programa, uso CTRL+C

    Luego para obtener fecha y hora u hora, tienes:

    Código PHP:
            tiempo time.strftime("%Y-%m-%d %H:%M:%S")  #esta la uso para guaradar los registros en la BD
            
    hora time.strftime("%H:%M:%S")  #para reiniciar el contador de kWh_batería a las 12 de la noche 

    Por ejemplo:

    Código PHP:
    if (hora>= "00:00:00" and hora<="00:00:05"):    # 5 seg. de margen (tiempo de mis muestras)
                    
    kWh_bat 0.0
                    kWhp_bat 
    0.0
                    kWhn_bat 
    0.0 
    Hay otros sistemas/métodos, pero este es el más fácil y entendible que he encontrado.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  5. #430
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Ya he pasado los cambios al programa fv.py y repito, si no ponemos el número de integrados, la función i2c_rele() falla.

    Código PHP:
    for I in range(1) :              #numero de integrados instalados
            
    for J in range(8) :
                    
    #Rele_Out[I][J] = 0
                    #Rele_Out_Ant[I][J] = 0
                    
    i2c_rele(I+32,J+1,0
    Código PHP:
    nikitto@asako ~/FV Traceback (most recent call last):
      
    File "/home/nikitto/FV/fv.py"line 142in <module>
        
    i2c_rele(I+32,J+1,0)
      
    File "/home/nikitto/FV/fv.py"line 75in i2c_rele
        estado
    =bus.read_byte(addr)  #devuelve el valor en decimal
    IOError: [Errno 5Input/output error 
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  6. #431
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Cita Iniciado por nikitto Ver mensaje
    Ya he pasado los cambios al programa fv.py y repito, si no ponemos el número de integrados, la función i2c_rele() falla.

    Código PHP:
    for I in range(1) :              #numero de integrados instalados
            
    for J in range(8) :
                    
    #Rele_Out[I][J] = 0
                    #Rele_Out_Ant[I][J] = 0
                    
    i2c_rele(I+32,J+1,0
    Código PHP:
    nikitto@asako ~/FV Traceback (most recent call last):
      
    File "/home/nikitto/FV/fv.py"line 142in <module>
        
    i2c_rele(I+32,J+1,0)
      
    File "/home/nikitto/FV/fv.py"line 75in i2c_rele
        estado
    =bus.read_byte(addr)  #devuelve el valor en decimal
    IOError: [Errno 5Input/output error 
    OK...supongo que sera por la libreria bus.read_byte(addr) que si intenta leer en un addr que no existe da error

    Se pueden hacer varias cosas

    A) Una seria controlar el error en Python.....viendo un poco el tema se podria hacer asi:

    Código PHP:
    ........
    try:
       
    estado=bus.read_byte(addr)  #devuelve el valor en decimal 

    ..... 
    B) Otra es controlar que addr es una direccion que esta dada de alta en la tabla Reles

    .....

    Una vez que el algoritmo funcione completamente, tendremos que plantearnos alguno temas de "supervivencia" de tal forma que si por ejm un integrado se estropea no implique que el programa aborte sino que funcione en forma degradada pero segura

  7. #432
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Vale, este es el nuevo código:

    Código PHP:
    # Defincion de funciones

    def i2c_rele(addr,port,out) :

            try:
                    
    estado=bus.read_byte(addr)  #devuelve el valor en decimal

                    
    if out == :
                            
    i2c_out estado & (2**(port-1) ^ (255))
                            print(
    'i2c_out(=1)'),i2c_out
                    
    else :
                            
    i2c_out estado 2**(port-1)
                            print(
    'i2c_out(!=1)'),i2c_out

                    bus
    .write_byte(addr,i2c_out)
            
    except:
                    
    pass
            
    return
    ### 

    Para que podamos definir el número máximo de integrados:

    Código PHP:
    ### Definir matrices Rele_Out y Rele_Out_Ant y apagar todos los reles

    Rele_Out = [[0] * for i in range(8)]
    Rele_Out_Ant = [[0] * for i in range(8)]

    for 
    I in range(8) :              #numero maximo de integrados
            
    for J in range(8) :
                    
    i2c_rele(I+32,J+1,0
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  8. #433
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Estupendo... en el bucle solo se escribe en direcciones que esten dadas de alta en la tabla Reles....por lo que a mi me parece bien que el programa no limite y se pueda poner por ejm un integrado en la direccion 32 y otro en la 38 y ademas que no se tenga que cambiar el codigo dependiendo del numero de integrados instalados

    Una idea que se me ocurre es simplemente iniciar los reles en lugar de utilizar esta forma

    Código PHP:
    for I in range(8) :              #numero maximo de integrados
            
    for J in range(8) :
                    
    i2c_rele(I+32,J+1,0
    Hacedlo leyendo antes las tabla de condiciones de los reles (matriz R) y aplicando un algoritmo como por ejm

    Código PHP:
    for I in R
            Puerto
    =(R[I][0]%10)   # desde 1 a 8
            
    Direct=int((R[I][0]-Puerto)/10# direccion del Rele
            
    i2c_rele(Direct,Puerto,0
    Con esto, si la función i2c_rele(() falla es que algo va mal y, por tanto en la parte except: podemos codificar que lo trate
    Última edición por Mleon; 09/08/2016 a las 02:39

  9. #434
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Segundo día con el mismo fallo: Entre las 16h (hora en la que se apaga la depuradora por reloj, no así por relé, que sigue activo según condiciones establecidas) y las 17h, tanto el relé de la depuradora como el del termo se apagan. Y siguen sin activarse, cumpliéndose las condiciones.
    El programa sigue funcionando tal cual, generando datos y demás.

    - - - - - - - - - - - - - - - - - - -

    La lectura de las tablas reles join reles_c vuelve a estar dentro del bucle, con lo cual pueden añadirse nuevas condiciones sin necesidad de relanzar el programa.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  10. #435
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Pasame el código completo (por mp o aqui) junto con las tablas Rele y Rele_C dadas de alta y lo miro por si detecto el origen del fallo

    - - - - - - - - - - - - - - - - - - -

    Visto el codigo ......detecto dos temas (no te lo mando por privado dado que tienes el buzón lleno


    En esta parte hay que poner int para asegurar que el valor de GR es correcto

    Código PHP:
           .......
            for 
    I in range(ncon):
                    
    Puerto=(R[I][0]%10)-1   # desde 0 a 7
                    
    GR=int((R[I][0]-Puerto)/10)-32 # desde 0 donde GR=0 si id_rele=32X, GR=0 si id_rele=33X
                    
    Rele_Out[GR][Puerto]=#encendemos virtualmente todos los eles por defecto
                                                    
            
    for I in range(ncon):
                    
    Puerto=(R[I][0]%10)-1   # desde 0 a 7
                    
    GR=int((R[I][0]-Puerto)/10)-32 # desde 0 donde GR=0 si id_rele=32X, GR=0 si id_rele=33X
            
    ...........
    ..... 
    Faltaba poner Flag_Rele_Encendido=1 aqui

    Código PHP:
    if Rele_Out[I][J] == and Rele_Out_Ant[I][J] == and Flag_Rele_Encendido == :
                                    
    i2c_rele(I+32,J+1,1#encender rele
                                    
    Flag_Rele_Encendido=
    He probado simulando valores de Vbat y SOC y va bien

  11. #436
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Aplicaré los cambios que mencionas y veremos como va.

    Voy a vaciar el buzón también.

    A parte de putty.exe, uso: SSH Secure Shell Client, o para la transferencia de archivos (win-linux-win) uso: SSH Secure File Transfer Client

    Si quieres practicar un poco con Linux, puedes instalarte el VMware Player para Windows, luego bajas p.e. ubuntu y lo instalas en la máquina virtual (VMware) y a experimentar.

    Por cierto, si ves conveniente que tu hijo le de un vistazo al programa, por el tema depuración, sin problemas. En general tiene un sentido: importar librerías, declarar variables, declarar funciones, importar datos de la BD y bucle principal con lectura de variables, tratamiento de las mismas y escritura en BD. De todas formas, seguro puede depurarse y mucho.
    Última edición por nikitto; 10/08/2016 a las 07:47
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  12. #437
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Con estas nubes, hoy probaremos seguro el control fotovoltaico.

    - - - - - - - - - - - - - - - - - - -

    El relé de la depuradora hace lo que debe, por encima de vbat y soc se enciede, por debajo de cualquiera de los dos valores definidos, se apaga.
    El termo por el contrario se ha apagado en una de las veces que se apagó la depuradora (sin haber caido el valor de ninguo de los parámetros definidos) y sigue apagado aún cumpliéndose las dos.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  13. #438
    el_cobarde Invitado

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Cita Iniciado por nikitto Ver mensaje
    El termo por el contrario se ha apagado en una de las veces que se apagó la depuradora ... y sigue apagado aún cumpliéndose las dos.
    Será el termostato del termo?

  14. #439
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Cita Iniciado por el_cobarde Ver mensaje
    Será el termostato del termo?
    Realmente no existe tal termo, es el relé al que he llamado termo. Este hilo es casi un whatsapp entre mleon y yo.

    Perdón por inducir a confusión.

    Si entras en la web, en Menú - Relés verás el estado de los mismo.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  15. #440
    el_cobarde Invitado

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Cita Iniciado por nikitto Ver mensaje
    Este hilo es casi un whatsapp entre mleon y yo ... Si entras en la web, en Menú - Relés verás el estado de los mismo.
    Si, ya me he dado cuenta de que no necesitáis ayuda. De todas formas sigo el hilo con mucho interés.

    Para entrar en la web: Sería mucho más cómodo si la dirección web aparecería en tu firma "Raspberry Pi: Control ..."
    Edito: Perdón, veo que ya está hecho. Basta pinchar encima de la firma. Muy bien!

  16. #441
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Leñe...algo se esta escapando...en el algoritmo de simulacion que tengo van sin problemas todos los reles

    Para pillarlo..vamos a poner algunos elementos de control

    En la pagina web de reles o donde te sea mas facil captura cuando se supone que no esta funcionando bien

    - Situación reles: lo que ya esta
    - Valores de DatosFV[]
    - Valor de R[]
    - Valor de ncon
    - Valor de Rele_Out[]
    - Valor de Rele_Out_Ant[]
    - Valor de Flag_Rele_Encendido

    Simulando con los valores que tienes...este es el resultado

    Código PHP:
    Situacion Rele_Out despues cuando Vbat27.22  SOC95.25
    [[11000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000], [00000000]] 
    Luego los dos reles encendidos


    Cuando revise el programa ayer (con Python 3.5) ademas de modifilarlo para simular la parte de BD y captura de valores, me dio varios errores de "ident" que tuve que corregir con el IDLE de Python (usando Ident region y Dedent region)
    Última edición por Mleon; 10/08/2016 a las 15:47

  17. #442
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    He cambiado esto casi al final del programa....

    Código PHP:
            cur.close()
            
    reles.close()
            
    # Repetir bucle cada 5 segundos
            
    time.sleep(5
    - - - - - - - - - - - - - - - - - - -

    Cita Iniciado por Mleon Ver mensaje
    Cuando revise el programa ayer (con Python 3.5) ademas de modifilarlo para simular la parte de BD y captura de valores, me dio varios errores de "ident" que tuve que corregir con el IDLE de Pythonm (usando Ident region y Dedent region)
    Creo que eso tiene que ver con los saltos del tabulador, luego los reviso todos.

    Igualmente definiré un int(Puerto) al principio del programa.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  18. #443
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Nikitto

    Mientras se pilla el fallo...por eso de tener caracter español y hacer varias cosas a la vez....hay que codificar el control por horario

    ¿Quieres que me piense yo el algoritmo o prefieres pensarlo tu?

  19. #444
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Voy mirándolo, pero dime donde quieres poner la hora de encendido y apagado. Otra tabla ?
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  20. #445
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Cita Iniciado por nikitto Ver mensaje
    Voy mirándolo, pero dime donde quieres poner la hora de encendido y apagado. Otra tabla ?
    Parece lógico poner otra tabla, y...si seguimos con la misma lógica empleada:

    - id_rele
    - parametro_h: (puede tener los valores T (todos los dias) o L,M,X,J,V,S,D
    - operacion_h: ON u OFF
    - Valor_h: hora en la que queremos que se encienda o apague

    Con esto deberíamos poder encender o apagar las veces que queramos y poder decidir si diariamente o que dia de la semana

    En este caso dado que no hay campo condicion ">" o "<",,.....mejor dicho la condicion siempre es ">" por lo que no hace falta ponerla, te puedes plantear juntar en un solo registro ON y OFF tal que:

    - id_rele
    - parametro_h: puede tener los valores T (todos los dias) o L,M,X,J,V,S,D
    - Valor_h_ON: hora en la que queremos que se encienda
    - Valor_h_OFF: hora en la que queremos que se apague

  21. #446
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Me parece bien, supongo que luego podemos hacer un:

    'SELECT * FROM reles JOIN reles_c JOIN reles_h WHERE reles.id_rele = reles_c.id_rele = reles_h.id_rele' ????

    - - - - - - - - - - - - - - - - - - -

    Te he dejado el archivo fv.py corregido: saltos de tabulador.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  22. #447
    Fecha de ingreso
    oct 2014
    Ubicación
    Masquefa
    Mensajes
    351

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Como se nota que estamos de vacaciones y hay tiempo para cacharrear.....

    Bona feina!!!
    Biomasa: GREEN ECOTHERM Mario Long Time 18kW + DI 500l + Retenedor humos + Estabilizador de tiro
    Solar: 10590Wp + 48V 1000Ah C5 + OUTBACK FLEXMAX LCD 80A + Fangpusun 80A + Inversor Schneider
    XW+ 8548 E
    Monitoring Solar con Rpi

  23. #448
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Gracias Francesc!

    Ya tengo la tabla creada y funcionando los 'JOINs'

    SELECT * FROM reles INNER JOIN reles_c ON reles.id_rele=reles_c.id_rele INNER JOIN reles_h ON reles.id_rele=reles_h.id_rele;

    Control exhaustivo ciclo de carga/SOC/Cargas/etc-joins.jpg
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  24. #449
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Creo que si se hace un join de las tres tablas se complica mas el algoritmo que si se tienes 2 join distintos:

    - Uno con la condiciones de Vbat,..
    - Otro con las condiciones de horario


    Ademas con un join de 3 tablas no se podria dar el caso de un rele que se activara solamente por horario (sin otras condiciones) o solo por condiciones (sin horario)..

    Ten en cuenta que 1 rele puede tener N condiciones por horario (por ejm encender la depuradora un rato por la mañana y otro por la tarde)


    Pero vamos .... dale una vuelta a como seria el algoritmo
    Última edición por Mleon; 10/08/2016 a las 21:46

  25. #450
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc

    Vale, creía que querías relacionarlo todo. No tiene sentido poner la depuradora a las 11h si la batería está descargada o el voltaje es muy bajo o ...
    Posteriormente ya tendremos los modos On/Off para saltarnos las restricciones. ¿Cómo tienes tú lo de los horarios?
    Por ahora la tabla está creada, el Join sólo ha sido una prueba, bajo MySQL.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

Página 18 de 52 PrimerPrimer ... 817181928 ... ÚltimoÚltimo



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