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
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 |
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. |