Resultados 501 al 525 de 1294
- 14/08/2016, 13:33 #501
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Tienes razón, crearé un diccionario nuevo para las condiciones horarias.
Código PHP:OP={'id_rele':0,'nombre':1,'modo':2,'id_rele2':3,'operacion':4,'parametro':5,'condicion':6,'valor':7}
OH={'id_rele':0,'nombre':1,'modo':2,'id_rele2':3,'parametro_h':4,'valor_h_ON':5,'valor_h_OFF':6}
----
He pensado desconectar toda la producción FV del híbrido y pasarla al KID (regulador MPPT, máx 30A -estoy en el límite-). Así podría tener más control sobre todos los elementos que tengo ya.
¿Qué os parece?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í
-
- 14/08/2016, 13:46 #502el_cobarde Invitado
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Ningún problema. Un regulador MPPT no tiene problemas, si se supera un poco la intensidad nominal; por ejemplo 1000Wp en vez de 750Wp. Simplemente bloquea la producción FV excesiva y deja pasar solo 30A.
Quiero decir, que si te facilita el control, puedes conectar todas las placas al KID, sin miedo.
- 14/08/2016, 15:07 #503
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Así es, con un shunt a la salida del regulador junto con el que tengo en la batería puedo saber la producción y el consumo diario.
- 14/08/2016, 15:30 #504
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Yo tuve algun problema (el LCD se colgaba, etc) poniendo al FM80 mas placas de las nominales, ademas, supongo que por efecto nube, vi intensidades de carga mayores de 80 a pesar de estar limitada por configuracion...por lo que preferi quitarle placas conectadas
Supongo que si el exceso es poco no pasara nada, pero al menos a mi ,con el FM80, no me dio confianza dejarlo sobredimensionado en la entradaPVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 14/08/2016, 15:38 #505
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Ayer hice una prueba de algoritmo para el control por horario y creo que va bien con algunas limitaciones ( si quieres que encienda por ejm a las 23:00 y que apague a las 3:00 se debe hacer en dos registros....de 23:00 a 23:59 y de 0:00 a 3:00)
PVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 14/08/2016, 15:45 #506el_cobarde Invitado
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Qué potencia en placa tenías conectado al FM80 cuando te daba problemas?
Antes de tener el "regulador BBB", tenía 3400Wp conectados a mi Sunstar SS-50C (de 50A nominales), y me iba perfectamente. Claro, durante las horas de máximo sol me limitaba la intensidad a 50A, pero en un 80% del día me aprovechaba perfectamente toda la potencia conectada.
- 14/08/2016, 15:48 #507
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Creo recordar que un pico de 100-110A....como vi problemas con el LCD y en el manual te indica el array maximo que se puede instalar decidi no ponerlo en riesgo
PVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 14/08/2016, 15:52 #508
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Que raro que no puedas poner de 23:00:00 a 03:00:00. Publica aquí el código o súbelo a tu directorio de la RPi.
¿Has visto lo que puse antes de los diccionarios? ¿Era así cómo decías?
Haré unas pruebas y decidiré que hago. No me cuesta nada mover 2 cables (+PV & -PV).
------
En unos minutos veremos como que pasa con los relés hoy.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í
- 14/08/2016, 16:04 #509
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Claro que lo puedes poner....pero el algoritmo pregunta si
hora_actual > Valor_on and hora_actual < Valor_off
Para saber si esta dentro del periodo de funcionamiento, por lo que en el caso de pasar de medianoche habria que hacer algo especial para considerarlo
En un momento pongo el codigo....no estaba muy contento de como me habia quedado, pero para empezar deberia valer
De paso ya he puesto algo para que solo se ejecute la funcion i2c_rele en los reles dados de altaPVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 14/08/2016, 16:15 #510el_cobarde Invitado
- 14/08/2016, 16:36 #511
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Mientras puedo decir que los relés han vuelto a pararse. En breve podré mirar el log, que no se porque motivo lo escribe cada x minutos.
Es decir, la parte de los for -> 1 y -> 2 puede dejarse como estaba.
- - - - - - - - - - - - - - - - - - -
El problema es HW como ya se sabía, en ningún momento desde el SW se les manda ninguna instrucción de apagado. He revisado todo el log, al que añadí hora y sólo figuran los encendidos de los relés, esta mañana, según condiciones y nada más.
Ejemplo del encendido del relé TERMO esta mañana:
Código PHP:hora= 09:58:19
hora= 09:58:24
i2c_rele= 32 2 1
estado= 255
i2c_out(=1) 253
hora= 09:58:29
hora= 09:58:34
Código PHP:hora= 10:44:03
hora= 10:44:08
i2c_rele= 32 1 1
estado= 253
i2c_out(=1) 252
hora= 10:44:14
hora= 10:44:19
Quizás podríamos añadir algún algoritmo que comprobara el estado de los mismos y si es necesario los encendiera. Ya que ahora se da por hecho que están encendidos. Del tipo:
estado_actual = estado_anterior, si se cumplen las condicionesPvControl+: 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í
- 14/08/2016, 16:57 #512
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Vamos con el codigo...
Primero he importado la libreria datetime (es posible que valga con la libreria time) y creo dos nuevos diccionarios uno del join de las condiciones de horario y otro de los dias de la semana
Código PHP:import datetime
.......
OPH={'id_rele':0,'nombre':1,'modo':2,'id_rele2':3,'parametro_h':4,'valor_h_on':5,'valor_h_off':6}
NDIA={'D':0,'L':1,'M':2,'X':3,'J':4,'V':5,'S':6}
Código PHP:........
diasemana=time.strftime("%w")
ahora= datetime.datetime.now()
segundosdia=ahora.hour*60*60+ahora.minute*60+ahora.second
.......
Vamos a coger tanto la tabla reles como la reles_c como la reles_h
Código PHP:### Cargar tablas reles , reles_c, reles_h
treles = MySQLdb.connect(host = "localhost", user = "root", passwd = "fv", db = "fv")
cur = treles.cursor()
sql_reles='SELECT * FROM reles'
nreles=cur.execute(sql_reles)
nreles=int(nreles) # = numero de reles
TR=cur.fetchall()
reles = MySQLdb.connect(host = "localhost", user = "root", passwd = "fv", db = "fv")
cur = reles.cursor()
sql_reles='SELECT * FROM reles JOIN reles_c WHERE reles.id_rele = reles_c.id_rele'
ncon=cur.execute(sql_reles)
ncon=int(ncon) # = numero de condiciones
R=cur.fetchall()
reloj = MySQLdb.connect(host = "localhost", user = "root", passwd = "fv", db = "fv")
cur = reloj.cursor()
sql_reloj='SELECT * FROM reles INNER JOIN reles_h ON reles.id_rele = reles_h.id_rele'
hcon=cur.execute(sql_reloj)
hcon=int(hcon) # = numero de condiciones h
H=cur.fetchall()
Código PHP:#------------------------ ALGORITMO CONDICIONES RELES -----------------------------
Rele_Out_Ant = [i[:] for i in Rele_Out] #copio valores Rele_Out en Rele_Out_Ant
for I in range(nreles):
Puerto=(TR[I][0]%10)-1 # desde 0 a 7
GR=int((TR[I][0]-Puerto)/10-32) # desde 0 donde GR=0 si id_rele=32X, GR=1 si id_rele=33X
Rele_Out[GR][Puerto]=1 #encendemos virtualmente todos los reles por defecto
# -------------------- Bucle de condiciones de horario --------------------------
Rele_Out_H = [[0] * 8 for i in range(8)] # Inicializo variable a 0
for I in range(hcon):
print "Procesando ",H[I]
Puerto=(H[I][0]%10)-1
GR=int((H[I][0]-Puerto)/10-32)
diaok=0
horaok=0
if H[I][OPH['parametro_h']]=='T': #Todos los dias de la semana
diaok=1
elif str(NDIA[H[I][OPH['parametro_h']]])==diasemana:
diaok=1
if (segundosdia >= H[I][OPH['valor_h_on']].seconds and
segundosdia <= H[I][OPH['valor_h_off']].seconds):
horaok=1
if diaok == 1 and horaok == 1:
Rele_Out_H[GR][Puerto]+=1
print "registro activo"
print
print Rele_Out_H
for I in range(hcon):
Puerto=(H[I][0]%10)-1
GR=int((H[I][0]-Puerto)/10-32)
if Rele_Out_H[GR][Puerto]==0:
Rele_Out[GR][Puerto]=0 #apago rele
print
# -------------------- Bucle de condiciones de parametros FV --------------------------
for I in range(ncon):
print "Procesando ",R[I]
Puerto=(R[I][0]%10)-1
GR=int((R[I][0]-Puerto)/10-32)
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] == 0) :
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] == 0) :
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
print "Salida Rele=", Rele_Out[GR][Puerto]
print
# -----------------------Bucle encendido/apagado reles -----------------
Flag_Rele_Encendido = 0
for I in range(nreles):
Puerto=(TR[I][0]%10)-1 # desde 0 a 7
GR=int((TR[I][0]-Puerto)/10-32) # desde 0 donde GR=0 si id_rele=32X, GR=1 si id_rele=33X
if Rele_Out[GR][Puerto] == 1 and Rele_Out_Ant[GR][Puerto] == 0 and Flag_Rele_Encendido == 1 :
Rele_Out[GR][Puerto] = 0 #no encender rele
if Rele_Out[GR][Puerto] == 1 and Rele_Out_Ant[GR][Puerto] == 0 and Flag_Rele_Encendido == 0 :
i2c_rele(GR+32,Puerto+1,1) #encender rele
Flag_Rele_Encendido=1
if Rele_Out[GR][Puerto] == 0 and Rele_Out[GR][Puerto] == 1 :
i2c_rele(GR+32,Puerto+1,0) #apagar rele
print "Rele",TR[I][0],"=",Rele_Out[GR][Puerto]," // ",
print
Por ultimo faltara cerrar las conexiones a la BD
Código PHP:........
reles.close()
treles.close()
reloj.close
........
Pues asi a primera vista cambia e bucle de encendido de reles por este codigo
Código PHP:# -----------------------Bucle encendido/apagado reles -----------------
Flag_Rele_Encendido = 0
for I in range(nreles):
Puerto=(TR[I][0]%10)-1 # desde 0 a 7
GR=int((TR[I][0]-Puerto)/10-32) # desde 0 donde GR=0 si id_rele=32X, GR=1 si id_rele=33X
if Rele_Out[GR][Puerto] == 1 and Rele_Out_Ant[GR][Puerto] == 0 and Flag_Rele_Encendido == 1 :
Rele_Out[GR][Puerto] = 0 #no encender rele
if Rele_Out[GR][Puerto] == 1 and Rele_Out_Ant[GR][Puerto] == 0 and Flag_Rele_Encendido == 0 :
i2c_rele(GR+32,Puerto+1,1) #encender rele
Flag_Rele_Encendido=1
if Rele_Out[GR][Puerto] == 1 and Rele_Out_Ant[GR][Puerto] == 1 :
i2c_rele(GR+32,Puerto+1,1) #confirmar rele encendido
if Rele_Out[GR][Puerto] == 0 and Rele_Out[GR][Puerto] == 1 :
i2c_rele(GR+32,Puerto+1,0) #apagar rele
print "Rele",TR[I][0],"=",Rele_Out[GR][Puerto]," // "
Podemos hacer que el valor de Rele_Out_Ant no sea un valor calculado por el programa sino leido de los PCF, para ello tienes que confirmar que cuando se apagan los reles por fallo HW.. si lees el valor del PCF te da coherente
En este caso parece facil ver el estado del PCF y si no coincide con el valor de Rele_Out_Ant actuar en consecuencia
- 14/08/2016, 17:20 #513
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Voy mirando, luego me centraré con lo de la hora.
Ahora quería comentar que cogiendo también la tabla reles (1) sabes el número de relés instalados, fijándote en la info de la BD. ¿No?
De todas formas no hay problema con el anterior SW.
- - - - - - - - - - - - - - - - - - -
Sobre lo de la hora, creo que ya te lo puse.
Código PHP:hora = time.strftime("%H:%M:%S")
print('hora='),hora
Código PHP:if (hora>= "00:00:00" and hora<="00:00:05"):
Tal como has cogido el día de la semana, perfecto.
- - - - - - - - - - - - - - - - - - -
El valor del PCF cuando se 'apaga todo' es 255.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í
- 14/08/2016, 17:32 #514
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Claro..por eso he cogido la tabla TR....ademas es mas "limpio" recorrer la tabla reles que la tabla reles_c en algunos for y por eso he actualizado el codigo en algunas partes para usar TR en lugar de R
Si pero comparar dos cadenas de texto siempre me ha dado menos confianza que comparar numeros, y como me dio algun error con las variables valor_h_on y valor_h_off (por controlar poco python supongo) tire por la opcion de segundos
Luego es coherente........en este caso haz que la variable Rele_Out_Ant se actualice al valor leido de los PCF y el algoritmo reconectara los reles de uno en uno
- 14/08/2016, 17:42 #515
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Llevo usanto la variable 'hora' desde hace un mes y un día y ningún problema. Es más, piensa que en la tabla reles_h, las variables valor_h_on y valor_h_off son del tipo TIME (xx:xx:xx)
Con lo de que 'Rele_Out_Ant se actualice al valor leido de los PCF', ¿a qué te refieres? Vas mil pasos por delante mío. Sorry.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í
- 14/08/2016, 18:04 #516
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Como he comentado tuve algunos problemas con la comparación (supongo que tenia que haber pasado a texto las variables valor_h_on y valor_h_off con la funcion .strftime o algo asi...pero me sentía mas cómodo con números
Evidentemente si mejoras el código estupendo
.................
Lo de 'Rele_Out_Ant se actualice al valor leido de los PCF'.....
Ahora mismo el valor de Rele_Out_Ant sale del valor de Rele_Out antes de empezar la comparación
Código PHP:Rele_Out_Ant = [i[:] for i in Rele_Out] #copio valores Rele_Out en Rele_Out_Ant
- No encender mas de 1 rele en cada iteracion
- Solamente mandar información al PCF cuando cambia de estado
En este sentido si tienes en Rele_Out_Ant un valor de encendido y realmente el PCF esta apagado, el SW no manda la instrucción de encendido i2c_rele dado que no es necesaria en teoría.....y por tanto el rele permanece apagado
Vamos a hacer que el valor Rele_Out_Ant sea el valor leido del PCF cambiando el código
Código PHP:Rele_Out_Ant = [i[:] for i in Rele_Out] #copio valores Rele_Out en Rele_Out_Ant
Con esto se debería recuperar ante errores HW salvo que el PCF o la RPi dejen de responder
No creo que sea muy complicado hacer dicho código....intenta hacerlo, si te atrancas avisa
- 14/08/2016, 18:51 #517
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Vale, entiendo, a ver si lo he hecho bien:
Código PHP:#algoritmo condiciones reles
estado=bus.read_byte(32)
if estado != 255 :
Rele_Out_Ant = [i[:] for i in Rele_Out]
else :
Rele_Out_Ant = [[0] * 8 for i in range(8)
Es lo mismo que teníamos, lo que primero mira que valor tiene en la dirección 32 (0x20H), si no es = a 255, Rele_Out_Ant=Rele_Out y si es = a 255, pone todos los campos de Rele_Out_Ant a 0PvControl+: 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í
- 14/08/2016, 19:00 #518
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Para probar valdria pero como no se quede en 255 sino en otro valor no valdria, ademas como tengas mas de un PCF tambien ira raro
Me habia puesto a mirarlo y este era el codigo que me salia en primera pensada
Código PHP:for I in range(nreles):
Puerto=(TR[I][0]%10)-1
GR=int((TR[I][0]-Puerto)/10-32)
addr=GR+32
estado=bus.read_byte(addr) #devuelve el valor en decimal del PCF en direccion addr
estado=bin(estado)
estado=estado[2:10]
Rele_Out_Ant[GR][Puerto]=int(estado[7-Puerto])
Al final voy a empezar a conocer algo de Python
- 14/08/2016, 19:14 #519
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Vale, dejame que pruebe mañana mi código para confirmar que funciona. Y luego implemento todo lo expuesto hoy.
Desde esta noche hasta el martes por la mañana tengo invitados en casa. Pero intentaré sacar tiempo para ello.
Lo único que no me convence es lo de los segundos, por ello implementaré el programa con 'hora'.
- - - - - - - - - - - - - - - - - - -
Eso, seguro.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í
- 14/08/2016, 19:18 #520
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
OK....
Por cierto viendo la web dos temas:
- El 13/Ago tuviste un pico negativo de Ibat de -70A......lo bueno es que se ve perfectamente
- En el grafico de Kwh bateria el valor sera en wh...ya te gustaria tener mil y pico Kwh por dia
- 14/08/2016, 19:57 #521
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
1. Sí, es de ayer, con tanta prueba con la bomba de la depuradora.
2. Jajaja...ya te digo. Esta madrugada he pasado los Wh a kWh (/1000) que no lo tenía en el programa. Y luego he modificado la web. Lógicamente toda la info ahora sale como kWh. De todas formas, quizás vuelva a Wh. Iré viendo como va.
- - - - - - - - - - - - - - - - - - -
He cambiado también esta parte:
Código PHP:if (ibat>0 and ibat<1 and abs(vbat-27.4)<0.2) :
DS = DS + (AH-DS)/50
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í
- 14/08/2016, 20:04 #522
- 14/08/2016, 23:51 #523
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
Código PHP:#declaracion variables
vflotacion = 0.0
Código PHP:### Calcular voltaje sistema (12,24 o 48)
valor = adc.read_adc(2, gain=1)
voltaje = (valor * 0.125) / 1000
voltaje = voltaje * RES
if voltaje > 11 and voltaje < 15.5 :
vsis = 1
print('Voltaje nominal 12V')
vflotacion = 13.7
elif voltaje > 22 and voltaje < 31 :
vsis = 2
print('Voltaje nominal 24V')
vflotacion = 27.4
elif voltaje > 44 and voltaje < 62 :
vsis = 4
print('Voltaje nominal 48V')
vflotacion = 54.8
else :
print('Error: Imposible reconocer el voltaje del sistema')
sys.exit()
###
Código PHP:#calculo del SOC
...
if (ibat>0 and ibat<1 and abs(vbat-vflotacion)<0.2) :
DS = DS + (AH-DS)/50
else :
DS = DS + (Ip * Tiempo_horas)
Hecho.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/08/2016, 00:05 #524
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
La ventaja de tener algo que controlas tu ........ y no un sistema cerrado
No sabes la rabia que tengo de no poder entrarle al FM80 al menos para que me diera sus datos (Vbat, Iplaca,....) y poder variarle los parametros de carga Vflot,Vabs,.... en remoto
- 15/08/2016, 00:21 #525
Re: Control exhaustivo ciclo de carga/SOC/Cargas/etc
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í