|
Delphi: AjpdSoft Cálculo de los parámetros de radiación
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 solarCon 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:
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
AjpdSoft Cálculo de los parámetros de radiación en funcionamientoEsta 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 emdios 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 chec "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:
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 extraterreste (Mh/m2), radiación diaria sobre la superficie inclinada (Wh/m2): Seleccionando en "Valores demdios 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: Ejemplo de cálculos resultantes tras pulsar en "Informe Cálculos".
Instalación y configuración de AjpdSoft Cálculo de los parámetros de radiaciónPodéis descargar el programa con el código fuente (freeware, gratuito) desde esta URL: Descarga gratuita (freeware) de AjpdSoft Cálculo de los parámetros de radiación 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ónEsta 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 (ahora Codegear) Delphi 6: AjpdSoft Cálculo de los parámetros de radiación (Código fuente Open Source en Borland Delphi 6) AjpdSoft Cálculo de los parámetros de radiación ha sido testeada y funciona correctamente en equipos con sistemas operativos: Windows 98, Windows XP, Windows 2000 Server, Windows Server 2003, Windows Vista y Windows Seven (7). A quién va dirigida AjpdSoft Cálculo de los parámetros de radiaciónLa 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
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('http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=443'), Nil, Nil, SW_SHOWNORMAL); end; end. Artículos relacionados
CréditosArtículo realizado íntegramente por Alino (Ingeniero Industrial) miembro del proyecto AjpdSoft. Otros programas desarrollados por Alino:
Nota: Revisado por AjpdSoft el 27-12-2009. Anuncios
Enviado el Viernes, 25 diciembre a las 16:58:33 por ajpdsoft
|
|