Añadida a la sección Descargas la aplicación AjpdSoft Cálculo de los parámetros de radiación: este programa ha sido desarrollado para el cálculo de la declinación solar así como para calcular la posición del Sol en cualquier día del año. Permite calcular, para una latitud dada, la radiación solar sobre superficie plana o inclinada en la capa exterior de la atmósfera. Los resultados se pueden guardar en fichero de texto, consultar en pantalla o copiar al portapapeles). Liberamos el código fuente – source code en Borland Delphi 6 100% Open Source.
- Información del cálculo de los parámetros de radiación solar.
- Características más importantes de AjpdSoft Cálculo de los parámetros de radiación.
- AjpdSoft Cálculo de los parámetros de radiación en funcionamiento.
- Instalación y configuración de AjpdSoft Cálculo de los parámetros de radiación.
- Datos técnicos de AjpdSoft Cálculo de los parámetros de radiación.
- A quién va dirigida AjpdSoft Cálculo de los parámetros de radiación.
- Anexo.
Información del cálculo de los parámetros de radiación solar
Con el programa pueden obtener datos de radiación para cualquier día del año. Se ha de introducir la latitud del lugar del que se quieren obtener dichos datos, así como la inclinación de la superficie si es que la tuviera, y el día que del que se quiere obtener los resultados.
Pulsando el botón Calcular una vez introducidos los datos se obtendrá la DECLINACIÓN SOLAR proveniente de la expresión propuesta por Spencer:
De la posición del Sol, los datos obtenidos hacen referencia a la siguiente figura:
- α es la altura solar.
- Ψ es el azimut.
- θz es el ángulo cenital.
- W, es el ángulo solar y corresponde
a la trayectoria del sol, 0º al mediodía. - La hora del lugar será aproximadamente una hora más en verano y dos en invierno de la hora solar.
La radiación solar en el espacio se mide en valor diario medio resultante de la expresión donde Isc es la constante solar y E0, la corrección de la órbita de la tierra:
Con el programa también se obtiene el valor de radiación difusa a partir de datos mensuales de radiación global. El programa incluye los datos de tres localidades y se usa para ello el índice de transparencia diario, que relaciona estas radiaciones, (Kd=Gd/Ids) y se aplica la correlación del Método de Page: D/G=1.00-1.13Kd.
Características más importantes de AjpdSoft Cálculo de los parámetros de radiación
- Aplicación de muy sencillo manejo, muy fácil e intuitiva, todas las opciones están en una misma ventana.
- La aplicación ha sido desarrollada en el lenguaje de programación Borland Delphi 6.
- No necesita instalación, es suficiente con ejecutar el fichero calculosradiacion.exe.
- Calcula la declinación solar, posición del Sol en cualquier día del año, calcula la radiación solar sobre superficie plana y sobre superficie inclinada.
- Muestra gráficas de los valores medios mensuales de radiación difusa y global de las localidades elegidas.
- Muestra los cálculos obtenidos en pantalla y permite guardarlos en fichero de texto.
AjpdSoft Cálculo de los parámetros de radiación en funcionamiento
Esta aplicación o programa informático permite calcular la declinación solar según la posición del Sol en cualquier día del año. Se obtiene así mismo para una latitud dada (gadros, minutos y segundos) la radiación solar sobre una superficie plana en la capa exterior de la atmósfera, medida en vatios hora por metro cuadrado. También puede calcular la radiación para una superficie inclinada (según los grados de inclinación).
AjpdSoft Cálculo de los parámetros de radiación calcula, para una hora solar dada, la posición del sol según sus ángulos. La aplicación incluye los datos de los valores medios mensuales de radiación difusa para tres localidades de las que se disponen datos de radiación global: Almería, Madrid y Santander. Calcula para estas localidades la componente difusa de dicha radiación, basado en el Método de Page, y en función de la radiación total que se recibe para esas localidades, de donde dichas radiaciones extraterrestres se han calculado con el propio programa.
En primer lugar, para introducir los datos conocidos marcaremos el check «Introducir Datos», introduciremos latitud norte (que la aplicación podrá calcular automáticamente en función de los grados, minutos y segundos), los grados de inclinación, el día del año (podremos obtener los días automáticamente para determinadas fechas:
- Solsticio de Verano: el 21 de junio (día 172 en fecha juliana).
- Equinoccio de Otoño: el 23 de septiembre (día 266 en fecha juliana).
- Solsticio de Invierno: el 21 de diciembre (día 355 en fecha juliana).
- Equinoccio de Primavera: el 31 de marzo (día 80 en fecha juliana).
O bien pulsamos los botones para cada uno de estos días del año o bien pulsamos en el desplegable del calendario y seleccionamos el día que deseemos, pulsaremos el botón «Añadir Fecha Indicada» para calcular el día del año de la fecha indicada (fecha juliana).
Una vez introducidos los datos conocidos pulsaremos «Calcular» para que la aplicación realice los cálculos automáticos de: declinación en grados, altura solar al mediodía, ángulo cenital, ángulo de salida del sol, salida para superficie inclinada, amanecer, duración del día, anochecer, radiación solar diaria extraterrestre (Mh/m2), radiación diaria sobre la superficie inclinada (Wh/m2):
Seleccionando en «Valores medios mensuales de radiación difusa» la localidad (Almería, Madrid o Santander) y pulsando en «Hallar» la aplicación calculará los valores medios de radiación difusa por cada mes:
Pulsando el botón «Mostrar gráfica» podremos ver una gráfica comparativa de según los distintos valores de radiación media mensual tanto global cómo difusa por localidad:
La aplicación permite exportar el gráfico a bmp (imagen), mostrar una vista previa para seleccionar las opciones antes de la impresión (impresora, márgenes, posición, etc.) o imprimirlo directamente en la impresora predeterminada.
En «Posición del Sol», introduciendo la hora, los minutos y los segundos, la aplicación calculará el ángulo horario, el azimut y la altura solar:
Pulsando en el botón «Informe Cálculos» podremos ver los cálculos realizados en el cuadro de texto para copiarlos al portapapeles o bien, pulsando en el botón «Guardar Informe» podremos guardarlos en fichero de texto:
Seleccionando una carpeta y un nombre de fichero se guardarán los datos de los cálculos de radiación:
Instalación y configuración de AjpdSoft Cálculo de los parámetros de radiación
Podéis descargar el programa con el código fuente (freeware, gratuito) desde esta URL:
Para el correcto funcionamiento sólo es necesario el fichero calculosradiacion.exe, el resto de ficheros corresponden al código fuente y no son necesarios para su ejecución.
La aplicación no necesita instalación, el fichero calculosradiacion.exe se puede ejecutar directamente.
Datos técnicos de AjpdSoft Cálculo de los parámetros de radiación
Esta aplicación ha sido desarrollada en el lenguaje de programación Borland Delphi 6. Guarda los cálculos realizados en un fichero de texto plano sin formato (txt).
Si eres desarrollador de software y te has registrado en nuestra web (si aún no te has registrado puedes hacerlo desde aquí gratuitamente) puedes descargar el código fuente 100% Open Source (completo y totalmente gratuito) en Borland Delphi 6:
AjpdSoft Cálculo de los parámetros de radiación ha sido testada y funciona correctamente en equipos con sistemas operativos: Windows 98, Windows XP, Windows Vista y Windows Seven, Windows 8, Windows 10, Windows 2000 Server, Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2016, Windows Server 2019.
A quién va dirigida AjpdSoft Cálculo de los parámetros de radiación
La aplicación va dirigida a ingenieros y trabajadores que quieran montar placas solares, permite calcular determinados parámetros útiles para el correcto montaje de las placas solares.
Anexo
INFORME DE CÁLCULOS:
FECHA: 25/12/2009
Número de día del año: 359
Latitud del lugar: 3.06806 Grados Latitud Norte
Superficie plana y superficie inclinada 2 grados
Declinación del día -23.398 grados
ALTURA SOLAR AL MEDIODIA: 63.534 GRADOS
Ángulo cenital: 26.466 grados
ÁNGULO DE SALIDA DEL SOL: 88.671 GRADOS
Salida sol para superficie inclinada: 88.671 grados
AMANECER: 6.09 Horas antes del mediodía
DURACIÓN DEL DÍA: 11.82 Horas
ANOCHECER: 17.91 Horas desde el mediodía
Radiación solar diaria extraterrestre de 9530.39 Wh/m2
Radiación solar diaria extraterrestre sobre superficie inclinada de 9774.15 Wh/m2
unit radiacion;
{$R WinXP.res}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,shellapi, StdCtrls, ComCtrls, Buttons, dateutils, ExtCtrls, Math,
jpeg, series, ThemeMgr;
type
TF_Radiacion = class(TForm)
Notas: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
gb_Radiacion: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label8: TLabel;
Label16: TLabel;
E_1: TEdit;
E_2: TEdit;
E_3: TEdit;
E_4: TEdit;
E_5: TEdit;
E_6: TEdit;
E_12: TEdit;
E_11: TEdit;
E_10: TEdit;
E_9: TEdit;
E_8: TEdit;
E_7: TEdit;
E_24: TEdit;
E_23: TEdit;
E_22: TEdit;
E_21: TEdit;
E_20: TEdit;
E_19: TEdit;
RB_almeria: TRadioButton;
RB_madrid: TRadioButton;
RB_santander: TRadioButton;
Button1: TButton;
E_18: TEdit;
E_17: TEdit;
E_16: TEdit;
E_15: TEdit;
E_14: TEdit;
E_13: TEdit;
B_informe: TButton;
B_Guardar: TButton;
B_salir: TButton;
M_resultados: TMemo;
GB_datos: TGroupBox;
B_calcular: TButton;
P_fecha: TPanel;
L_dia: TLabel;
E_numeroDedia: TEdit;
DTP_fecha: TDateTimePicker;
B_anadirFecha: TButton;
B_solsticioVerano: TButton;
B_equinoccioOtono: TButton;
B_SolsticioInvierno: TButton;
B_EquinoccioPrimavera: TButton;
P_latitud: TPanel;
LE_Latitud: TLabeledEdit;
LE_grados: TLabeledEdit;
LE_minutos: TLabeledEdit;
LE_Segundos: TLabeledEdit;
CB_grados: TCheckBox;
B_convertirLatitud: TButton;
LE_Inclinacion: TLabeledEdit;
CB_datos: TCheckBox;
P_resultados: TGroupBox;
L_alturaSolar: TLabel;
L_alturaCenital: TLabel;
L_resultado: TLabel;
L_angulosalidaSol: TLabel;
L_DuracionDia: TLabel;
L_fecha: TLabel;
L_horaSalidaSol: TLabel;
L_horaPuestasol: TLabel;
L_anguloSalidaInclinada: TLabel;
L_radiacionInclinada: TLabel;
L_radiacionExtra: TLabel;
E_declinacion: TEdit;
E_radiacionInclinada: TEdit;
E_radiacion: TEdit;
GB_posicionSol: TGroupBox;
L_azimut: TLabel;
L_alturaDelSol: TLabel;
L_anguloSolar: TLabel;
L_segundos: TLabel;
L_hora: TLabel;
L_minutos: TLabel;
E_segundos: TEdit;
CB_posicionDelSol: TCheckBox;
B_Posicion: TButton;
LE_azimut: TLabeledEdit;
LE_alturaSolar: TLabeledEdit;
LE_anguloSolar: TLabeledEdit;
E_Hora: TEdit;
E_minutos: TEdit;
SaveDialog1: TSaveDialog;
Image1: TImage;
Image2: TImage;
btGrafica: TButton;
LWEB: TLabel;
ThemeManager1: TThemeManager;
procedure B_calcularClick(Sender: TObject);
procedure CB_gradosClick(Sender: TObject);
procedure B_convertirLatitudClick(Sender: TObject);
procedure CB_datosClick(Sender: TObject);
procedure B_anadirFechaClick(Sender: TObject);
procedure B_solsticioVeranoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure B_equinoccioOtonoClick(Sender: TObject);
procedure B_SolsticioInviernoClick(Sender: TObject);
procedure B_EquinoccioPrimaveraClick(Sender: TObject);
procedure CB_posicionDelSolClick(Sender: TObject);
procedure B_PosicionClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure RB_almeriaClick(Sender: TObject);
procedure RB_madridClick(Sender: TObject);
procedure RB_santanderClick(Sender: TObject);
procedure B_salirClick(Sender: TObject);
procedure B_informeClick(Sender: TObject);
procedure B_GuardarClick(Sender: TObject);
procedure btGraficaClick(Sender: TObject);
procedure LWEBClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_Radiacion: TF_Radiacion;
implementation
uses grafica;
{$R *.dfm}
procedure TF_Radiacion.B_calcularClick(Sender: TObject);
var
i,j,k,di,numerodeldia : integer;
t,de,dec,w,l,Lrad,wgrad,DurDia,alfa,alfaGrad,altCen,salSol,finSol,beta,w2,
w2grad,betaRad, E0,Iod,Iod2: real;
declinacion,anguloSolar,angulosolargrados,duracionDia,alturaSol,
alturaCenital,salidaSolar,puestasol,AngulosolarInclinacion,radiaciondiaria,
radiacionDiariaInclinada : string;
begin
val(LE_Latitud.text,l,i);
val(E_numeroDedia.Text,di,j);
val(LE_Inclinacion.text,beta,k);
if (i<>0) or (j<>0) or (k<>0) then
begin
if i<>0 then
begin
showmessage('Introduzca correctamente la latitud del lugar');
LE_Latitud.clear;
LE_Latitud.setfocus;
end;
if j<>0 then
begin
Showmessage('Introduzca el día del año deseado');
B_anadirFecha.setfocus;
end;
if k<>0 then
begin
showmessage('Introduzca un valor correcto');
LE_Inclinacion.setfocus;
end;
end
else
begin
if (l>90) or (l<0) then
begin
showmessage('El valor de latitud ha de estar comprendido entre 0º y 90º');
LE_Latitud.Clear;
LE_Latitud.setfocus;
end
else
begin
B_informe.Enabled := true;
numerodeldia := dayoftheyear(DTP_fecha.date);
E_numeroDedia.text := inttostr(numerodeldia);
L_fecha.caption := 'FECHA: '+datetostr(dtp_fecha.DateTime);
t := 2*pi*((di-1)/365); //es el número de día del año
de := 0.006918-0.399912*cos(t)+0.070257*sin(t)-0.006758*cos(2*t)+0.000907*sin(2*t)
-0.002697*cos(3*t)+0.00148*sin(3*t); // da el valor de la declinacion en el día pedido
dec := de*(180/pi); // pasa de radianes a grados
str(dec:6:3,declinacion);
E_declinacion.Text := declinacion;
CB_posicionDelSol.Enabled := true;
B_calcular.setfocus;
Lrad := ((l*pi)/180); //pone la latitud en radianes
w := arcCos(-tan(Lrad)*tan(de)); //angulo solar para la salida del sol cuando alfa = 0
wgrad := w*180/pi; // pone el ángulo de salida del sol en grados
str(w:6:3,angulosolar);
str(wgrad:6:3,angulosolargrados);
L_angulosalidaSol.Caption := 'ÁNGULO DE SALIDA DEL SOL: '+
anguloSolarGrados+' GRADOS';
if (beta<0) or (beta>90) then
begin
showmessage('La inclinación ha de estar comprendida entre 0 y 90 grados');
LE_Inclinacion.text := '0';
end;
betaRad := (beta*pi)/180;
w2 := arcCos(-tan(Lrad-betaRad)*tan(de)); //angulo de salida para una superficie inclinada
w2grad :=w2*180/pi;
str(w2grad:6:3,AngulosolarInclinacion);
if (w2 <= w) then // El angulo de salida para sup. inclinada será el mínimo entre w2 y w
L_anguloSalidaInclinada.Caption := 'Salida para superfie inclinada: ' +
anguloSolarInclinacion+' grados';
if (w2 > w) then
L_anguloSalidaInclinada.Caption := 'Salida sol para superfie inclinada: '+
anguloSolarGrados+' grados';
Durdia := (wgrad*2)/15; //duración de un día, 2veces el ángulo salida del sol entre 15 grados que dura cada hora
str(durdia:6:2,duracionDia);
L_DuracionDia.caption := 'DURACIÓN DEL DÍA: '+duracionDia+' Horas';
SalSol := 12-(durDia/2);
str(salsol:6:2,salidaSolar);
L_horaSalidaSol.caption := 'AMANECER: '+salidasolar+' Hora Solar';
finSol:= 12+(durDia/2);
str(finsol:6:2,puestaSol);
L_horaPuestaSol.caption := 'ANOCHECER: '+puestasol+' Hora Solar';
alfa := arcSin(sin(Lrad)*sin(de)+cos(Lrad)*cos(de)*1); //altura solar al mediodía, cosw=1
alfaGrad := alfa*180/pi;
str(alfagrad:8:3,alturaSol);
L_alturaSolar.Caption := 'ALTURA SOLAR AL MEDIODIA: '+alturaSol+' GRADOS';
altCen := 90-alfaGrad; //el ángulo cenital es complementario de la altura solar
str(altCen:8:3,alturacenital);
L_alturaCenital.Caption := 'Ángulo cenital: '+alturaCenital+' grados';
E0 := 1+0.03333*cos(2*pi*numerodeldia/365);
//radiación global diaria exterior de la admosfera.
Iod := (24/pi)*1367*E0*(w*sin(de)*sin(Lrad)+cos(de)*cos(Lrad)*sin(w));
str(Iod:6:2,radiaciondiaria);
E_radiacion.text := radiaciondiaria;
if (w2 <= w) then //para superficie inclinada se usa el mínimo entre w y w2
Iod2 := (24/pi)*1367*E0*(w2*sin(de)*sin(Lrad-betaRad)+cos(de)*cos(Lrad-betaRad)*sin(w2));
str(Iod2:6:2,radiacionDiariaInclinada);
E_radiacionInclinada.text := radiacionDiariaInclinada;
if (w2 > w) then
Iod2 := (24/pi)*1367*E0*(w*sin(de)*sin(Lrad-betaRad)+cos(de)*cos(Lrad-betaRad)*sin(w));
str(Iod2:6:2,radiacionDiariaInclinada);
E_radiacionInclinada.text := radiacionDiariaInclinada;
end;
end;
end;
procedure TF_Radiacion.CB_gradosClick(Sender: TObject);
begin
If CB_grados.checked then
begin
LE_Latitud.clear;
LE_grados.enabled := true;
LE_grados.setfocus;
LE_minutos.enabled := true;
LE_Segundos.enabled := true;
B_convertirlatitud.Enabled := true;
end
else
begin
LE_grados.enabled := false;
LE_minutos.enabled := false;
LE_Segundos.enabled := false;
B_convertirlatitud.Enabled := false;
LE_grados.clear;
LE_minutos.clear;
LE_Segundos.clear;
end;
end;
procedure TF_Radiacion.B_convertirLatitudClick(Sender: TObject);
var
g,s,m : integer;
r : real;
resultado : string;
i,j,k : integer;
begin
val(LE_grados.text,g,i);
val(LE_minutos.text,m,j);
val(LE_Segundos.Text,s,k);
if (i<>0) or (j<>0) or (k<>0) then
begin
showmessage('Introduzca valores válidos');
LE_grados.setfocus;
end
else
begin
r := g+(m/60)+(s/3600);
str(r:8:5,resultado);
LE_Latitud.Text := resultado;
end;
end;
procedure TF_Radiacion.CB_datosClick(Sender: TObject);
begin
If CB_datos.checked then
begin
LE_Inclinacion.Enabled := true;
B_calcular.Enabled := true;
CB_grados.enabled := true;
LE_Latitud.enabled := true;
L_dia.Enabled := true;
DTP_fecha.enabled := true;
B_anadirFecha.enabled := true;
B_solsticioVerano.enabled := true;
B_SolsticioInvierno.enabled := true;
B_equinoccioOtono.enabled := true;
B_EquinoccioPrimavera.enabled := true;
end
else
begin
LE_Inclinacion.enabled := false;
B_calcular.Enabled := false;
CB_grados.enabled := false;
LE_Latitud.enabled := false;
DTP_fecha.enabled := false;
B_anadirFecha.enabled := false;
B_solsticioVerano.enabled := false;
B_SolsticioInvierno.enabled := false;
B_equinoccioOtono.enabled := false;
B_EquinoccioPrimavera.enabled := false;
CB_posicionDelSol.enabled := false;
L_dia.Enabled := false;
CB_posicionDelSol.Checked := false;
end;
end;
procedure TF_Radiacion.B_anadirFechaClick(Sender: TObject);
var
dia : TDatetime;
d : integer;
begin
dia := DTP_fecha.date;
d := DayOfTheYear(dia);
E_numeroDedia.Text := inttostr(d);
B_calcular.setfocus;
end;
procedure TF_Radiacion.B_solsticioVeranoClick(Sender: TObject);
var
solsticioVer : TDatetime;
d : integer;
begin
solsticioVer := strtodate('21/06/2009');
DTP_fecha.date := solsticioVer;
d := dayoftheyear(solsticioVer);
E_numeroDedia.Text := inttostr(d);
end;
procedure TF_Radiacion.FormCreate(Sender: TObject);
begin
DTP_fecha.date := now;
end;
procedure TF_Radiacion.B_equinoccioOtonoClick(Sender: TObject);
var
equinoccioOto : TDatetime;
d : integer;
begin
equinoccioOto := strtodate('23/09/2009');
DTP_fecha.date := equinoccioOto;
d := dayoftheyear(equinoccioOto);
E_numeroDedia.Text := inttostr(d);
end;
procedure TF_Radiacion.B_SolsticioInviernoClick(Sender: TObject);
var
solsticioInv : TDatetime;
d : integer;
begin
solsticioInv := strtodate('21/12/2009');
DTP_fecha.date := solsticioInv;
d := dayoftheyear(solsticioInv);
E_numeroDedia.Text := inttostr(d);
end;
procedure TF_Radiacion.B_EquinoccioPrimaveraClick(Sender: TObject);
var
equinoccioPri : TDatetime;
d : integer;
begin
equinoccioPri := strtodate('21/03/2009');
DTP_fecha.date := equinoccioPri;
d := dayoftheyear(equinoccioPri);
E_numeroDedia.Text := inttostr(d);
end;
procedure TF_Radiacion.CB_posicionDelSolClick(Sender: TObject);
begin
if CB_posicionDelSol.Checked then
begin
B_Posicion.enabled := true;
E_segundos.enabled := true;
E_hora.enabled := true;
E_minutos.enabled := true;
L_azimut.Enabled := true;
L_alturaDelSol.enabled := true;
L_anguloSolar.enabled:= true;
L_segundos.Enabled := true;
L_hora.Enabled := true;
L_minutos.Enabled := true;
E_Hora.setfocus;
end
else
begin
E_Hora.enabled := false;
E_segundos.enabled := false;
E_minutos.enabled := false;
B_Posicion.enabled := false;
L_segundos.Enabled := false;
L_azimut.Enabled := false;
L_alturaDelSol.enabled := false;
L_anguloSolar.enabled := false;
L_hora.Enabled := false;
L_minutos.Enabled := false;
end;
end;
procedure TF_Radiacion.B_PosicionClick(Sender: TObject);
var
h,m,s,hs,w,wgrad,alfa,alfaGrad,L,Lrad,de,deRad,azi,aziGrad : real;
i,j,k: integer;
angulosolar,azimut,alturaSolar : string;
begin
val(E_Hora.text,h,i);
val(E_minutos.text,m,j);
val(E_segundos.text,s,k);
if (i<>0) or (j<>0) or (k<>0) then
begin
showmessage('Introduzca valores horarios correctos');
E_hora.setfocus;
end
else
begin
if (E_declinacion.text = '') then
begin
showmessage('Debe introducir el día en que desea calcular la posicion del sol');
B_anadirFecha.SetFocus;
end
else
begin
if (h<0) or (h>23) or (m<0)or (m>59) or (s<0) or (s>59) then
begin
showmessage('Introduzca valores adecuados: hora entre 0 y 23; '+
'minutos y segundos entre 0 y 59');
E_hora.SetFocus;
end
else
begin
Hs := h+m/60+s/3600; // nos da la hora solar en decimal
w := (hs-12)*pi/12; // ángulo solar en radianes
wgrad := (hs-12)*180/12; // ángulo solar en grados: 1 hora = 15 grados
str(wgrad:6:2,angulosolar);
LE_anguloSolar.Text := angulosolar;
val(E_declinacion.text,de,i); // coge el valor de la declinacion para ese día
val(LE_Latitud.text,l,i); // coge el valor de la latidud del lugar
Lrad := l*pi/180; // latitud en radianes
DeRad := de*pi/180; // declinacion en radianes
//calcula altura solar a cualquier hora
alfa := arcSin(sin(Lrad)*sin(DeRad)+cos(Lrad)*cos(DeRad)*cos(w));
alfaGrad := alfa*180/pi;
str(alfagrad:8:3,alturaSolar);
LE_alturaSolar.Text := alturaSolar;
if (Hs = 12) then
LE_azimut.text := '0.00'
else
begin
// calcula el azimut en radianes
Azi := arcCos((sin(alfa)*sin(LRad)-sin(deRad))/(cos(alfa)*cos(LRad)));
AziGrad := azi*180/pi; // azimut en grados
str(azigrad:6:2,azimut);
LE_azimut.text := azimut;
end;
end;
end;
end;
end;
procedure TF_Radiacion.Button1Click(Sender: TObject);
var
e,f,m,a,ma,j,ju,ag,s,o,n,di,e2,f2,m2,a2,ma2,j2,ju2,ag2,s2,o2,n2,di2,
k1,k2,k3,k4,k5,k6,k7,k8,k9,k19,k10,k11,k12,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12 : real;
begin
if RB_almeria.Checked then
begin
e := 2800; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 3600;
E_2.text := floattostr(f);
m := 5100;
E_3.Text := floattostr(m);
a := 5700;
E_4.Text := floattostr(a);
ma := 6600;
E_5.text := floattostr(ma);
j := 7200;
E_6.text := floattostr(j);
ju := 7100;
E_7.text := floattostr(ju);
ag := 6500;
E_8.text := floattostr(ag);
s := 5500;
E_9.text := floattostr(s);
o := 4200;
E_10.text:= floattostr(o);
n := 3000;
E_11.text := floattostr(n);
di := 2500;
E_12.text := floattostr(di);
e2 := 4700; //valores de radiacion en la atmosfera para el día 15 de cada mes
f2 := 6204;
m2 := 8014;
a2 := 9851;
ma2 := 11064;
j2 := 11585;
ju2 := 11364;
ag2 := 10420;
s2 := 8846;
o2 := 6971;
n2 := 5211;
di2 := 4338;
k1 := e/e2; // k es el cociente entre radiacion global y la extraterrestre: k=Go/Ioc
k2 := f/f2;
k3 := m/m2;
k4 := a/a2;
k5 := ma/ma2;
k6 := j/j2;
k7 := ju/ju2;
k8 := ag/ag2;
k9 := s/s2;
k10 := o/o2;
k11 := n/n2;
k12 := di/di2;
D1 := e*(1-1.13*k1); // se halla el valor de la radiacion difusa por el método de Page
E_13.Text := floattostr(d1);
D2 := f*(1-1.13*k2);
E_14.Text := floattostr(d2);
D3 := m*(1-1.13*k3);
E_15.Text := floattostr(d3);
D4 := a*(1-1.13*k4);
E_16.Text := floattostr(d4);
D5 := ma*(1-1.13*k5);
E_17.Text := floattostr(d5);
D6 := j*(1-1.13*k6);
E_18.Text := floattostr(d6);
D7 := ju*(1-1.13*k7);
E_19.Text := floattostr(d7);
D8 := ag*(1-1.13*k8);
E_20.Text := floattostr(d8);
D9 := s*(1-1.13*k9);
E_21.Text := floattostr(d9);
D10 := o*(1-1.13*k10);
E_22.Text := floattostr(d10);
D11 := n*(1-1.13*k11);
E_23.Text := floattostr(d11);
D12 := di*(1-1.13*k12);
E_24.Text := floattostr(d12);
end;
if RB_madrid.Checked then
begin
e := 2000; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 2900;
E_2.text := floattostr(f);
m := 4300;
E_3.Text := floattostr(m);
a := 5400;
E_4.Text := floattostr(a);
ma := 6500;
E_5.text := floattostr(ma);
j := 7300;
E_6.text := floattostr(j);
ju := 7600;
E_7.text := floattostr(ju);
ag := 6700;
E_8.text := floattostr(ag);
s := 5300;
E_9.text := floattostr(s);
o := 3600;
E_10.text:= floattostr(o);
n := 2400;
E_11.text := floattostr(n);
di := 1800;
E_12.text := floattostr(di);
e2 := 4089; //valores de radiacion en la atmosfera para el día 15 de cada mes
f2 := 5642;
m2 := 7569;
a2 := 9598;
ma2 := 10995;
j2 := 11620;
ju2 := 11362;
ag2 := 10261;
s2 := 8490;
o2 := 6460;
n2 := 4615;
di2 := 3222;
k1 := e/e2; // k es el cociente entre radiacion global y la extraterrestre: k=Go/Ioc
k2 := f/f2;
k3 := m/m2;
k4 := a/a2;
k5 := ma/ma2;
k6 := j/j2;
k7 := ju/ju2;
k8 := ag/ag2;
k9 := s/s2;
k10 := o/o2;
k11 := n/n2;
k12 := di/di2;
D1 := e*(1-1.13*k1); // se halla el valor de la radiacion difusa por el método de Page
E_13.Text := floattostr(d1);
D2 := f*(1-1.13*k2);
E_14.Text := floattostr(d2);
D3 := m*(1-1.13*k3);
E_15.Text := floattostr(d3);
D4 := a*(1-1.13*k4);
E_16.Text := floattostr(d4);
D5 := ma*(1-1.13*k5);
E_17.Text := floattostr(d5);
D6 := j*(1-1.13*k6);
E_18.Text := floattostr(d6);
D7 := ju*(1-1.13*k7);
E_19.Text := floattostr(d7);
D8 := ag*(1-1.13*k8);
E_20.Text := floattostr(d8);
D9 := s*(1-1.13*k9);
E_21.Text := floattostr(d9);
D10 := o*(1-1.13*k10);
E_22.Text := floattostr(d10);
D11 := n*(1-1.13*k11);
E_23.Text := floattostr(d11);
D12 := di*(1-1.13*k12);
E_24.Text := floattostr(d12);
end;
if RB_santander.Checked then
begin
e := 1300; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 1900;
E_2.text := floattostr(f);
m := 2900;
E_3.Text := floattostr(m);
a := 3900;
E_4.Text := floattostr(a);
ma := 4500;
E_5.text := floattostr(ma);
j := 5100;
E_6.text := floattostr(j);
ju := 5200;
E_7.text := floattostr(ju);
ag := 4400;
E_8.text := floattostr(ag);
s := 3800;
E_9.text := floattostr(s);
o := 2400;
E_10.text:= floattostr(o);
n := 1600;
E_11.text := floattostr(n);
di := 1100;
e2 := 3567; //valores de radiacion en la atmosfera para el día 15 de cada mes
f2 := 5152;
m2 := 7169;
a2 := 9355;
ma2 := 10911;
j2 := 11627;
ju2 := 11336;
ag2 := 10099;
s2 := 8163;
o2 := 6008;
n2 := 4103;
di2 := 3200;
k1 := e/e2; // k es el cociente entre radiacion global y la extraterrestre: k=Go/Ioc
k2 := f/f2;
k3 := m/m2;
k4 := a/a2;
k5 := ma/ma2;
k6 := j/j2;
k7 := ju/ju2;
k8 := ag/ag2;
k9 := s/s2;
k10 := o/o2;
k11 := n/n2;
k12 := di/di2;
D1 := e*(1-1.13*k1); // se halla el valor de la radiacion difusa por el método de Page
E_13.Text := floattostr(d1);
D2 := f*(1-1.13*k2);
E_14.Text := floattostr(d2);
D3 := m*(1-1.13*k3);
E_15.Text := floattostr(d3);
D4 := a*(1-1.13*k4);
E_16.Text := floattostr(d4);
D5 := ma*(1-1.13*k5);
E_17.Text := floattostr(d5);
D6 := j*(1-1.13*k6);
E_18.Text := floattostr(d6);
D7 := ju*(1-1.13*k7);
E_19.Text := floattostr(d7);
D8 := ag*(1-1.13*k8);
E_20.Text := floattostr(d8);
D9 := s*(1-1.13*k9);
E_21.Text := floattostr(d9);
D10 := o*(1-1.13*k10);
E_22.Text := floattostr(d10);
D11 := n*(1-1.13*k11);
E_23.Text := floattostr(d11);
D12 := di*(1-1.13*k12);
E_24.Text := floattostr(d12);
end;
end;
procedure TF_Radiacion.RB_almeriaClick(Sender: TObject);
var
e,f,m,a,ma,j,ju,ag,s,o,n,di : real;
begin
e := 2800; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 3600;
E_2.text := floattostr(f);
m := 5100;
E_3.Text := floattostr(m);
a := 5700;
E_4.Text := floattostr(a);
ma := 6600;
E_5.text := floattostr(ma);
j := 7200;
E_6.text := floattostr(j);
ju := 7100;
E_7.text := floattostr(ju);
ag := 6500;
E_8.text := floattostr(ag);
s := 5500;
E_9.text := floattostr(s);
o := 4200;
E_10.text:= floattostr(o);
n := 3000;
E_11.text := floattostr(n);
di := 2500;
E_12.text := floattostr(di);
E_13.clear;
E_14.clear;
E_15.clear;
E_16.clear;
E_17.clear;
E_18.clear;
E_19.clear;
E_20.clear;
E_21.Clear;
E_22.clear;
E_23.Clear;
E_24.Clear;
end;
procedure TF_Radiacion.RB_madridClick(Sender: TObject);
var
e,f,m,a,ma,j,ju,ag,s,o,n,di : real;
begin
e := 2000; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 2900;
E_2.text := floattostr(f);
m := 4300;
E_3.Text := floattostr(m);
a := 5400;
E_4.Text := floattostr(a);
ma := 6500;
E_5.text := floattostr(ma);
j := 7300;
E_6.text := floattostr(j);
ju := 7600;
E_7.text := floattostr(ju);
ag := 6700;
E_8.text := floattostr(ag);
s := 5300;
E_9.text := floattostr(s);
o := 3600;
E_10.text:= floattostr(o);
n := 2400;
E_11.text := floattostr(n);
di := 1800;
E_12.text := floattostr(di);
E_13.clear;
E_14.clear;
E_15.clear;
E_16.clear;
E_17.clear;
E_18.clear;
E_19.clear;
E_20.clear;
E_21.Clear;
E_22.clear;
E_23.Clear;
E_24.Clear;
end;
procedure TF_Radiacion.RB_santanderClick(Sender: TObject);
var
e,f,m,a,ma,j,ju,ag,s,o,n,di : real;
begin
e := 1300; //valores medios mensuales de radiacion global
E_1.text := floattostr(e);
f := 1900;
E_2.text := floattostr(f);
m := 2900;
E_3.Text := floattostr(m);
a := 3900;
E_4.Text := floattostr(a);
ma := 4500;
E_5.text := floattostr(ma);
j := 5100;
E_6.text := floattostr(j);
ju := 5200;
E_7.text := floattostr(ju);
ag := 4400;
E_8.text := floattostr(ag);
s := 3800;
E_9.text := floattostr(s);
o := 2400;
E_10.text:= floattostr(o);
n := 1600;
E_11.text := floattostr(n);
di := 1100;
E_12.text := floattostr(di);
E_13.clear;
E_14.clear;
E_15.clear;
E_16.clear;
E_17.clear;
E_18.clear;
E_19.clear;
E_20.clear;
E_21.Clear;
E_22.clear;
E_23.Clear;
E_24.Clear;
end;
procedure TF_Radiacion.B_salirClick(Sender: TObject);
begin
Close;
end;
procedure TF_Radiacion.B_informeClick(Sender: TObject);
begin
M_resultados.lines.Add('IMFORME DE CÁLCULOS: ');
M_resultados.lines.Add('');
M_resultados.lines.Add(L_fecha.caption);
M_resultados.lines.Add('Número de día del año: '+E_numeroDedia.text);
M_resultados.lines.Add('Latitud del lugar: '+LE_latitud.Text+' Grados Latitud Norte');
M_resultados.lines.Add('Superficie plana y superficie inclinada '+LE_Inclinacion.Text+' grados');
M_resultados.lines.Add('Declinación del día '+E_declinacion.text+' grados');
M_resultados.lines.Add(L_alturaSolar.caption);
M_resultados.lines.Add(L_alturaCenital.caption);
M_resultados.lines.Add(L_angulosalidaSol.caption);
M_resultados.lines.Add(L_anguloSalidaInclinada.caption);
M_resultados.lines.Add(L_horaSalidaSol.caption);
M_resultados.lines.Add(L_DuracionDia.caption);
M_resultados.lines.Add(L_horaPuestasol.caption);
M_resultados.lines.Add('Radiación solar diaria extraterrestre de '+E_radiacion.Text+' Wh/m2');
M_resultados.lines.Add('Radiación solar diaria extraterrestre sobre superficie inclinada de '
+ E_radiacionInclinada.text+' Wh/m2');
B_informe.Enabled := false;
B_Guardar.enabled := true;
end;
procedure TF_Radiacion.B_GuardarClick(Sender: TObject);
begin
savedialog1.Title := 'Guardar cálculos realizados';
savedialog1.DefaultExt := 'txt';
savedialog1.filter := 'Archivos de texto (*.txt)|*.txt| Todos los archivos|*.*';
If savedialog1.execute then
begin
M_resultados.Lines.SaveToFile(savedialog1.filename);
M_resultados.Clear;
B_Guardar.enabled := false;
end
else
showmessage('Los datos NO han sido salvados');
end;
procedure TF_Radiacion.btGraficaClick(Sender: TObject);
var
serieG : TFastLineSeries;
serieDifusa : TFastLineSeries;
formulario : TformGrafica;
begin
if E_13.Text = '' then
MessageDlg('Debe seleccionar la localidad y pulsar en "Hallar".',
mtWarning, [mbok], 0)
else
begin
formulario := TformGrafica.Create(Application);
try
formulario.cGrafico.Title.Text.Clear;
if RB_almeria.Checked then
formulario.cGrafico.Title.Text.Add ('Valores medios mensuales de radiación difusa de Almería');
if RB_madrid.Checked then
formulario.cGrafico.Title.Text.Add ('Valores medios mensuales de radiación difusa de Madrid');
if RB_santander.Checked then
formulario.cGrafico.Title.Text.Add ('Valores medios mensuales de radiación difusa de Santander');
formulario.cGrafico.LeftAxis.Title.Caption := 'Radiación (Wh/m2)';
serieG := TFastLineSeries.Create(Self);
With serieG do
begin
ParentChart := formulario.cGrafico;
Title := 'Global';
AddXY(1, StrToFloat(E_1.Text), 'Enero', clRed);
AddXY(2, StrToFloat(E_2.Text), 'Febrero', clRed);
AddXY(3, StrToFloat(E_3.Text), 'Marzo', clRed);
AddXY(4, StrToFloat(E_4.Text), 'Abril', clRed);
AddXY(5, StrToFloat(E_5.Text), 'Mayo', clRed);
AddXY(6, StrToFloat(E_6.Text), 'Junio', clRed);
AddXY(7, StrToFloat(E_7.Text), 'Julio', clRed);
AddXY(8, StrToFloat(E_8.Text), 'Agosto', clRed);
AddXY(9, StrToFloat(E_9.Text), 'Septiembre', clRed);
AddXY(10, StrToFloat(E_10.Text), 'Octubre', clRed);
AddXY(11, StrToFloat(E_11.Text), 'Noviembre', clRed);
AddXY(12, StrToFloat(E_12.Text), 'Diciembre', clRed);
end;
serieDifusa := TFastLineSeries.Create(Self);
With serieDifusa do
begin
ParentChart := formulario.cGrafico;
Title := 'Difusa';
AddXY(1, StrToFloat(E_13.Text), 'Enero', clBlue);
AddXY(2, StrToFloat(E_14.Text), 'Febrero', clBlue);
AddXY(3, StrToFloat(E_15.Text), 'Marzo', clBlue);
AddXY(4, StrToFloat(E_16.Text), 'Abril', clBlue);
AddXY(5, StrToFloat(E_17.Text), 'Mayo', clRed);
AddXY(6, StrToFloat(E_18.Text), 'Junio', clRed);
AddXY(7, StrToFloat(E_19.Text), 'Julio', clRed);
AddXY(8, StrToFloat(E_20.Text), 'Agosto', clRed);
AddXY(9, StrToFloat(E_21.Text), 'Septiembre', clRed);
AddXY(10, StrToFloat(E_22.Text), 'Octubre', clRed);
AddXY(11, StrToFloat(E_23.Text), 'Noviembre', clRed);
AddXY(12, StrToFloat(E_24.Text), 'Diciembre', clRed);
end;
formulario.ShowModal;
finally
formulario.Free;
end;
end;
end;
procedure TF_Radiacion.LWEBClick(Sender: TObject);
begin
ShellExecute(Handle, Nil, PChar('https://proyectoa.com/ajpdsoft-calculo-de-los-parametros-de-radiacion/'),
Nil, Nil, SW_SHOWNORMAL);
end;
end.








