Sie sind auf Seite 1von 244

ESCUELA SUPERIOR DE AGRICULTURA DE BARCELONA

Ingeniera Tcnica Agrcola


Hortofruticultura y Jardinera
Trabajo Final de Carrera
Autor: Vctor Yusta Laguna
Diciembre de 1998
Programa
para el clculo
de las necesidades hdricas
de los cultivos
2
ESCUELA SUPERIOR DE AGRICULTURA DE BARCELONA
Ingeniera Tcnica Agrcola
Hortofruticultura y Jardinera
Trabajo Final de Carrera
Profesor ponente: Nuria Caameras i Riba
Autor: Vctor Yusta Laguna
Diciembre de 1998
Programa
para el clculo
de las necesidades hdricas
de los cultivos
3
AGRADECIMIENTOS.
A la profesora, Nuria Caameras, por su ayuda y prestancia.
A mi esposa, Mara Luz, por estar a mi lado.
A mi hermana, Cristina, siempre est cuando la necesito.
A mi sobrino, Vctor Manuel, me ha ayudado mucho en las traducciones.
A mi amiga, Pilar Barcel, por su sabia crtica constructiva.
A mis padres, Paco y Maruja, les quiero mucho.
4
RESUMEN.
La utilizacin del agua en la agricultura ha contribuido a un aumento muy
importante de la produccin en los ltimos aos.
El aumento del consumo de agua para la agricultura origina un conflicto con las
necesidades de consumo urbanas e industriales.
Por tanto, la necesidad de realizar un consumo equilibrado es fundamental. Para
ello se cuenta con mtodos para estimar el agua necesaria para las plantas.
Uno de los mtodos de estimacin que se propone es este trabajo es el descrito
por la FAO, basado en el balance hdrico. Este calcula las entradas y salidas de
agua en el conjunto aire-suelo-planta.
Los clculos mediante este mtodo, sin ser complicados, son muy laboriosos y
llevan a la necesidad de utilizar herramientas de ayuda para realizarlos.
La informtica es una herramienta que puede ayudar a realizar los clculos de
una manera rpida y eficaz. As mismo, se convierte en un instrumento de
simulacin para adoptar estrategias cambiantes.
El resultado ha sido un programa que realiza el clculo del agua necesaria para
un cultivo, mediante el mtodo del balance hdrico propuesto por la FAO. Se
tienen en cuenta los aspectos ms importantes del balance hdrico: localizacin
del cultivo, caractersticas del cultivo, datos meteorolgicos, tipo de suelo, tipo de
agua de riego, tipo de riego, y programacin del riego.
Palabras claves: agricultura - cultivo - regado - necesidad hdrica - balance
hdrico - informtica.
5
RESUM.
La utilitzaci de l'aigua a l'agricultura ha contribut a un augment molt important de
la producci en aquests ltims anys.
L'augment del consum d'aigua per a l'agricultura origina un conflicte amb les
necessitats de consum urbanes i industrials.
Per tant, la necessitat d'arribar a fer un consum equilibrat s fonamental. Per tal
d'arribar a aconseguir-ho es poden fer servir mtodes per estimar l'aigua
necessria per a les plantes.
Un dels mtodes d'estimaci que es proposa en aquest treball s el que descriu la
FAO, basat en el balan hdric. Aquest mtode calcula les entrades y sortides
d'aigua en el conjunt aire-sl-planta.
Els clculs mitjantant aquest mtode, sense que siguin complicats, sn molt
laboriosos i comporten la necessitat de fer servir eines d'ajut per realitzar-los.
La informtica s una eina que pot ajudar a realitzar els clculs d'una manera
rpida i efica. Aix mateix, es converteix en un instrument de simulaci per
adoptar estratgies canviants.
El resultat ha estat un programa que realitza el clcul de l'aigua necessria per a
un cultiu, mitjanant el mtode del balan hdric proposat per la FAO. Es tenen en
compte els aspectes ms importants del balan hdric: localitzaci del cultiu,
caracterstiques del cultiu, dades meteorolgiques, tipus de sl, tipus d'aigua de
reg, tipus de reg i programaci del reg.
Paraules clau: agricultura - cultiu - regadiu - necessitat hdrica - balan hdric -
informtica.
6
SUMMARY.
In recent times, water use for agricultural purposes has contributed to a dramatic
increase in production.
Higher water consumption in agriculture conflicts, however, with urban and
industrial water needs
A balanced water consumption policy is therefore crucial, methods being
necessary to calculate the amount of water required by growing crops.
One of the methods discussed in this work is the FAO water balance-based
method, which measures water incomes and outputs for the whole system of air-
soil-plant.
Calculations obtained with this method are not complicated but they are really
laborious. Thus, some calculating tools become necessary.
Computers are useful, rapid tools to undertake these calculations. They may be
also employed as simulation instruments to adopt changing strategies.
The result has been a program based on the FAO water balance method to
determine the quantity of water required by a crop. The major factors of this
method crop location, crop features, weather data, soil type, water type for
irrigation, irrigation type and irrigation schedulinghave been considered.
Key words: agriculture - crop irrigation water need water balance
computers.
Indice
7
NDICE.
1.Introduccin 10
1.1. Superficie de regado 11
1.2. Consumo equilibrado de agua 13
1.3. Estimacin de las necesidades hdricas de los cultivos 14
1.3.1. Descripcin 14
1.3.2. Punto ptimo de riego 17
1.3.2.1. Estado hdrico del suelo 18
1.3.2.2. Estado hdrico de la planta 19
1.3.2.3. Balance hdrico suelo-planta-atmsfera 19
1.3.3. Dficit hdrico 21
1.4. Estimacin de las necesidades hdricas mediante el mtodo FAO-24 23
1.4.1. Clculo de la evapotranspiracin 24
1.4.1.1. Clculo de la evapotranspiracin de referencia 24
1.4.1.1.1. Mtodo Blaney-Criddle 25
1.4.1.1.2. Mtodo de la Radiacin 26
1.4.1.1.3. Mtodo de Penman (FAO) 27
1.4.1.1.4. Evapormetro de cubeta 29
1.4.1.1.5. Penman-Monteith (FAO-1990) 30
1.4.2. Coeficiente de cultivo 37
1.4.3. Evapotranspiracin del cultivo 40
1.4.4. Factores locales que influyen en la evapotranspiracin del cultivo 41
1.4.4.1. Clima 41
1.4.4.2. Humedad del suelo 42
1.4.4.3. Mtodo de riego 42
1.4.4.4. Prcticas de cultivo 43
1.4.4.5. Rendimiento de los cultivos 44
1.4.5. Balance hdrico 44
1.4.5.1. Evapotranspiracin del cultivo 44
1.4.5.2. Precipitacin efectiva 45
Indice
8
1.4.5.3. Aguas subterrneas 46
1.4.5.4. Percolacin profunda 46
1.4.5.5. Variacin de la reserva de agua en el suelo 47
1.4.6. Necesidades netas de riego 48
1.4.7. Lavado de sales 49
1.4.8. Eficiencia de la aplicacin 51
1.4.9. Necesidades brutas de riego 52
1.4.10. Programacin del riego 53
1.4.10.1. Perodos crticos 53
1.4.10.2. Momento de riego 54
1.4.10.3. Dosis de riego 54
1.4.10.4. Reserva de agua al inicio del cultivo 55
1.4.10.5. Duracin del riego 55
1.5. Utilizacin de la informtica para el clculo de las necesidades hdricas 56
1.6. Programas existentes para el clculo de las necesidades hdricas 58
1.6.1. Programa para el clculo de la evapotranspiracin de referencia 59
1.6.2. Programa para el clculo de la evapotranspiracin de cultivo 59
1.6.3. Programa para el clculo de la textura 60
1.6.4. Programas para la adquisicin de datos meteorolgicos 60
1.6.5. Programas para el clculo de las necesidades hdricas
de los cultivos 61
1.6.6. Programas para la simulacin de las necesidades hdricas 63
1.6.7. Otros programas relacionados con las necesidades hdricas 63
2. Objetivos 65
3. Material y mtodos 67
3.1. Material 68
3.2. Mtodos 68
Indice
9
4. Resultados y discusin 70
4.1. Flujo de datos 72
4.2. Programa 73
4.2.1. Diseo 74
4.2.2. Mantenimiento de tablas 74
4.2.3. Finca 75
4.2.4. Cultivo 76
4.2.5. Meteorologa 79
4.2.6. Suelo 82
4.2.7. Agua de riego 84
4.2.8. Tipo de riego 85
4.2.9. Programacin del riego 86
4.2.10. Resultados 88
5. Conclusines 89
6. Bibliografa 91
7. Anejos 93
7. Anejo 1. Tablas y figuras del manual FAO-24. 94
7. Anejo 2. Programas para el clculo de las necesidades hdricas. 107
7. Anejo 3. Programa realizado. 124
7. Anejo 4. 157
Captulo 1. Clculo del Kc inicial. 157
Captulo 2. Determinacin indirecta de la capacidad de campo y
del punto de marchitamiento. 160
Captulo 3. Tringulo de texturas 161
7. Anejo 5. Listado del programa 162
1. Introduccin
10
1. INTRODUCCIN.
1. Introduccin
11
1. INTRODUCCIN.
1.1. SUPERFICIE DE REGADO.
El gran auge que ha tenido la agricultura en nuestro pas en el ltimo siglo se ha
debido, entre otros factores, a una mayor utilizacin del agua para transformar
cultivos y tierras de secano en otras de regado ms productivas.
Excepto dos parntesis histricos, el perodo rabe y durante el reinado de Carlos
III (Nadal et alter, 1995), no es sino a partir de la Ley de Aguas de 1879 y la Ley
de Grandes Regados de 1883, cuando aumenta la superficie de regados de una
manera importante.
Es a partir del inicio de este siglo cuando la superficie agrcola de regado se
triplica, pasando de las 1.200.000 hectreas de 1904 a las 2.500.000 hectreas
de 1971 y llegando a las 3.400.000 hectreas de regado actuales.
Este aumento tiene su causa en dos aspectos importantes:
- El aspecto poltico: Las ya mencionadas Ley de Aguas de 1879 y la Ley de
Grandes Regados de 1883 son dos leyes impulsadas por D. Joaqun Costa
para el desarrollo de la agricultura de regado (Nadal et alter, 1995)
- Los avances tecnolgicos: Gracias al avance tecnolgico de finales del siglo
pasado se pudieron empezar a realizar embalses, canales y la infraestructura
necesaria para cultivar ms cantidad de productos en menor espacio.
Hoy en da, la productividad relativa del regado frente al secano est entre 3, en
el peor caso (zonas hmedas) y 100 (zonas ridas y soleadas) (Corominas,
1997).
1. Introduccin
12
Las 3.200.000 hectreas de regado que se cultivan hoy en da suponen el 60%
de la produccin agraria til (Valiente et alter, 1998). Pero esta produccin slo
representa alrededor del 5% del producto interior bruto (Nadal et alter, 1995) y, sin
embargo, consume el 80% de la demanda total de agua (Nadal et alter, 1995 -
Valiente et alter, 1997).
Por este motivo, no es extrao que el uso agrcola del agua produzca tensiones
con los otros usos del agua: el urbano y el industrial. Estas tensiones se agudizan
en periodos crticos: verano y en pocas de sequa y, sobre todo, en zonas
deficitarias (zona mediterrnea).
Nadal expone que para una correcta utilizacin del agua por parte del agricultor,
han de estar presentes varios aspectos: un uso eficiente en la aplicacin del riego,
una correcta programacin del momento y de la dosis de riego y un coeficiente de
uniformidad lo ms alto posible (Nadal et alter, 1995).
Las prdidas de agua que se producen durante la distribucin pueden suponer
hasta un 50% del caudal inicial (Lujn, 1992). Siendo el sector agrcola el que
ms agua consume, esta falta de eficiencia en la distribucin representa un
volumen de prdida muy alto.
Nadal indica que el ahorro de agua que se puede conseguir, aumentando la
eficiencia, puede llegar a satisfacer las futuras necesidades urbanas, industriales
y agrcolas (Nadal et alter, 1995).
1. Introduccin
13
1.2. CONSUMO EQUILIBRADO DE AGUA.
El agricultor ha de procurar realizar una correcta planificacin en la distribucin,
en la dosis y en la aplicacin del agua, con la finalidad de ahorrar el mayor
volumen de agua posible (Valiente et alter, 1998 Fereres, 1995 Nadal et alter
1995). Esto quiere decir, que se ha de realizar un consumo sensato y equilibrado
del agua.
Las vas que permiten realizar un consumo equilibrado de agua son varias:
Los conductos de distribucin del exterior de la explotacin: se ha de exigir y
conseguir que los conductos se construyan con las mnimas prdidas posibles
(prdidas por filtracin en embalses, falta de eficiencia en la distribucin,
prdidas por evaporacin, etctera).
Mecanismos de distribucin en el interior de la explotacin: es vlido el
mismo principio que para el anterior punto.
Programacin del riego: se ha de regar en el momento adecuado y con la
dosis precisa (segn la necesidad del cultivo).
Eficiencia en la aplicacin: se ha de seleccionar el sistema de riego ms
eficiente posible y dotarlo de los medios necesarios para poder aumentar esa
eficiencia.
Uniformidad: se ha de procurar que la uniformidad sea elevada, evitando as
tener que aumentar las dosis para impedir zonas con dficit hdrico.
La programacin de riegos se basa en el clculo de la necesidad hdrica de un
cultivo con la finalidad de regar en el momento adecuado y con la dosis precisa.
1. Introduccin
14
1.3. ESTIMACIN DE LAS NECESIDADES HDRICAS DE LOS CULTIVOS.
1.3.1. Descripcin.
La necesidad hdrica de un cultivo se ha definido como: el volumen de agua
requerido para el proceso de evapotranspiracin, desde la fecha de siembra o
plantacin hasta el da de la recoleccin, de un cultivo dado en una regin
climtica especfica, cuando el contenido de agua del suelo est mantenido
suficientemente por las precipitaciones y/o el riego, de tal forma que sta no limita
el crecimiento de las plantas o el rendimiento de los cultivos (Martn de Santa
Olalla at alter, 1993).
El agua es un elemento indispensable de las plantas porque tiene una doble
funcin:
- Funcin constitutiva: ya que una proporcin mas o menos alta de la planta est
constituida por agua.
- Funcin de transporte: porque el agua, al ser un disolvente, transporta las sales
minerales y los nutrientes del suelo a la planta.
Si se consideran ambas funciones como la totalidad, la funcin constitutiva
representa un porcentaje muy bajo respecto a la funcin de transporte. Martn de
Santa Olalla et alter(1993) cita un ejemplo esclarecedor: una hectrea de maz,
que produce 20 Tm. de materia seca, a lo largo de su cultivo retiene 4 m
3
de
agua y para ello habr absorbido unos 6.000 m
3
de agua, desde el suelo hasta la
planta.
Una vez que el agua ha realizado la funcin de transporte, pasa a la atmsfera en
forma de vapor a travs de los estomas. A esta liberacin de vapor se le llama
comnmente evapotranspiracin (ET).
1. Introduccin
15
La evapotranspiracin tiene, en realidad, 2 componentes:
- La evaporacin, que es la cantidad de agua que, por un proceso de
vaporizacin, pasa del suelo a la atmsfera. Al inicio del cultivo el valor de la
evaporacin es ms alto que en etapas subsiguientes.
- La transpiracin es la cantidad de agua que pasa, por el mismo proceso de
vaporizacin, de la planta a la atmsfera. Al final del cultivo este valor es ms
alto que en etapas anteriores.
A efectos prcticos, estos dos componentes se determinan conjuntamente porque
representan el consumo de agua de la planta ms el consumo de agua del suelo
que sustenta a la planta.
Los factores que influyen en la evapotranspiracin son:
> Factores climticos: Radiacin, temperatura, humedad del aire, velocidad del
viento.
> Factores edficos: Conductivilidad hdrica, capacidad hdrica, etctera.
> Factores biolgicos: ndice LAI, profundidad radical, etctera.
> Factores fitotcnicos: Laboreo, rotacin, orientacin, densidad, poda.
> Factores geogrficos: Extensin del rea, efecto borde.
La evapotranspiracin se puede determinar por varios mtodos:
- Mtodos directos: se utilizan unos aparatos que se denominan lismetros. Los
lismetros son: unos recipientes grandes llenos de suelo ubicados en la parcela
cultivada para recoger las condiciones naturales, de superficie desnuda o con
cubierta vegetal, utilizados para determinar la ET de un cultivo o la evaporacin
de suelos desnudos (Aboukhaled et alter, 1986). Este es el mtodo que sirve
para verificar o calibrar los otros mtodos. Por supuesto, es un mtodo inviable
en una explotacin agrcola.
1. Introduccin
16
- Mtodos indirectos. Aqu se engloban tres tipos diferentes:
> Micrometeorolgico: se basa en una combinacin del balance de energa y
del transporte aerodinmico del vapor de agua, utilizando diversas variables
climticas (temperatura, humedad, velocidad del viento, radiacin).
> Balance hdrico del suelo: mide indirectamente la ET a partir de los
parmetros que intervienen en el balance hdrico (suelo, aire y planta).
> Fisiolgico: Son tcnicas que miden la prdida de agua de la planta o de una
parte de ella. Se utilizan trazadores o termmetros que analizan el
movimiento de agua en la planta.
Debido a la dificultad que presenta la medida de la ET por mtodos directos o
indirectos, stos han sido sustituidos por diversos modelos de estimacin.
El modelo ms comn es el que se basa en la evolucin del coeficiente cultural
(Kc). Este coeficiente sirve para calcular la evapotranspiracin de un cultivo (ETc)
con una periodicidad regular (das, semanas o meses) mediante la siguiente
relacin:
ETc = ETo x Kc
Siendo ETo, la evapotranspiracin de referencia del cultivo de referencia [mm].
ETc, la evapotranspiracin del cultivo [mm].
Kc, el coeficiente cultural del cultivo.
Los cultivos de referencia pueden ser gramneas o alfalfa. En algunos casos, se
denominaba a la a la ETo de las gramneas como Etrg y al Kc correspondiente
Kcg; si la referencia es la alfalfa, se denominaba Etra y Kca respectivamente.
El Kc de un cultivo se define experimentalmente como la relacin entre la ETc del
cultivo y la ETo medida.
1. Introduccin
17
El modelo ms extendido en el mundo para determinar las necesidades hdricas
es el de la FAO (Martn de Santa Olalla et alter, 1993). Este modelo se desarrolla
en cuatro etapas:
- Clculo de la ETo mediante uno de cuatro mtodos:
Penman
Radiacin
Blaney-Criddle
Cubeta de evaporacin clase A
- Evolucin de la curva del Kc a lo largo del cultivo
- Clculo de ETc mediante la relacin: ETc = ETo x Kc
- Factores correctores de carcter local: Adveccin, humedad, fertilidad del
suelo, sistema de riego, salinidad, etc.
1.3.2. Punto ptimo de riego.
Es el momento ms idneo para el riego, tanto desde el punto de vista
agronmico como desde el punto de vista de la ingeniera del riego. Consiste en
regar de tal manera que la planta no sufra disminuciones en su rendimiento actual
ni futuro. Por ejemplo, si se regara sin tener en cuenta el lavado de sales,
posiblemente no se disminuira la produccin actual pero s que se podra producir
una disminucin en un futuro.
Desde el punto de vista de la ingeniera del riego, el tema es de vital importancia
porque puede determinar el sistema de riego, la dosis de riego y el intervalo de
riego.
Se ha de tratar de aunar los dos puntos de vista, para que el rendimiento no se
altere y para que el protocolo de riego sea viable.
1. Introduccin
18
Martn Santa Olalla et alter(1993), cita tres mtodos para determinar el punto
ptimo de riego:
1.3.2.1. Estado hdrico del suelo.
Se basa en el conocimiento del nivel de agua que hay en el suelo. La
programacin del riego se basa en el punto en que se haya dedicido regar.
Existen 3 mtodos para determinar la cantidad de agua que hay en el suelo:
- Resistencia elctrica: Debido a que el agua es una solucin salina, por la
cantidad de sales que lleva disueltas, la medida de la conductividad elctrica
nos dar la cantidad de agua que hay en el suelo. Para ello, se utilizan unos
bloques de yeso o de nylon enterrados en el suelo. Debido a que se mide el
potencial osmtico y el potencial de tensin, estos bloques resultan afectados
por la salinidad. Son de poca aplicacin en la agricultura y se utilizan en
investigacin.
- Radiactividad: Se utiliza una fuente de neutrones. La energa de los neutrones
se pierde al chocar con los puentes de hidrgeno del agua. De tal manera, que
a una mayor cantidad de agua habr una prdida mayor de energa. Por su
naturaleza radiactiva, es utilizado por personal autorizado.
- Potencial hdrico. Se basa en la medicin de la tensin que se origina en una
cpsula llena de agua. Esta cpsula tiene una membrana porosa que est en
contacto con otra superficie en la cual hay una cantidad distinta de agua. El
utensilio se llama tensimetro y se calibra a 0 cuando el suelo est saturado
de agua. En el momento en que el suelo se seca, el agua del tensimetro pasa
al suelo y provoca un vaco en la cpsula. Este vaco se registra mediante un
manmetro. Cuando la lectura llega a un valor determinado, se ha de regar.
Este valor depende del suelo y del cultivo.
Aunque la lectura tiene un cierto retardo se puede registrar continuamente y
puede servir para activar mecanismos de riego. Se utiliza en la agricultura y en
investigacin.
1. Introduccin
19
1.3.2.2. Estado hdrico de la planta.
Se basa en el conocimiento del agua que se mueve en la planta. Para llegar a
este conocimiento existen dos mtodos:
- Tensin de agua. Se mide mediante la cmara de tensin xilemtica. Para ello
se corta una muestra de tejido xilemtico, por el que se hace pasar nitrgeno a
una cierta presin. La lectura se realiza cuando aparece la savia, debido al
empuje del gas nitrgeno.
Es un mtodo destructivo y slo se utiliza en investigacin
- Temperatura. Cuando existe evapotranspiracin, la temperatura en el exterior
de la planta es menor que la del aire que la circunda. A mayor
evapotranspiracin, menor temperatura exterior habr.
Se utilizan unos termmetros de infrarrojos de onda media que pueden medir a
una cierta distancia. Sirven para grandes extensiones de terreno.
1.3.2.3. Balance hdrico: suelo-planta-atmsfera.
Se basa en la medicin del balance hdrico que resulta de sumar las entradas de
agua y de restar las salidas de sta.
Al resultado del balance se le llama variacin de la reserva de agua en el suelo y
es su valor el que determina el riego.
Las entradas de agua se deben a las precipitaciones (Pe), a la ascensin capilar
(Ge) y a la escorrenta superficial de salida (EsS)
Las salidas de agua se deben a la evapotranspiracin (ET), a la percolacin
profunda (Pp) y a la escorrenta superficial de entrada (EsE).
(Pe + Ge + EsS ) - (ET+Pp+EsE) + w
El objetivo es mantener la variacin de reserva de agua en el suelo (w) igual a 0.
Pero como no se riega a cada instante, la w variar de 0 a un nivel que no
produzca la marchitez inviable de la planta. Este nivel es el que corresponde al
agua til.
1. Introduccin
20
El agua til (AU) es la cantidad de agua que existe entre la capacidad de campo
(CC) y el punto de marchitez (PM).
AU = CC PM
En la prctica agronmica, el hecho de que el margen de w est situado entre la
capacidad de campo y el punto de marchitamiento, no es sinnimo de que no
haya habido reduccin del rendimiento en el cultivo; se ha de buscar un valor en
el que no haya reduccin del rendimiento. A este valor se le llama nivel de
agotamiento permisible (NAP) y es el que corresponde al comienzo de la
disminucin de la tasa de evapotranspiracin. Quedando el intervalo de humedad
disponible en un punto que hay entre la capacidad de campo y el punto de
marchitamiento:
NAP = f * AU
Siendo f el factor de agotamiento permisible en el cual no se produce una
reduccin en el rendimiento de la planta, dependiendo del tipo de cultivo y de la
evapotranspiracin diaria que exista (Doorenbos, 1973).
Como la planta slo puede extraer el agua mediante sus races, se define el
concepto de profundidad efectiva de las races (z1). Este valor depende de la
profundidad radical y de la profundidad del suelo cultivado. Siendo z1 el menor
valor de los dos.
A menudo, el valor que resulta de multiplicar NAP y z1 es denominado como
reserva fcilmente utilizable (RFU).
Las necesidades de riego netas (Nn) sern las siguientes:
Nn = (Pe + Ge + EsS ) - (ET + Pp + EsE) + w
Siendo w un valor que estar comprendido entre 0 y la RFU.
1. Introduccin
21
1.3.3. Dficit hdrico.
Existe otra estrategia de riego, que no es objeto de este trabajo, pero que se va a
definir por considerar que tiene un futuro muy prometedor para zonas con dficits
hidrulicos estacionales o incluso anuales. A esta estrategia se la denomina riego
deficitario controlado (RDC) y se est aplicando puntualmente en algunas zonas
de clima mediterrneo (Levante murciano, Sur de Francia, etctera).
El RDC es un conjunto de estrategias que se basan en una menor aportacin de
agua de riego, en las pocas de escasez de agua, y en una posible aportacin
suplementaria en las pocas de abundancia de agua, pero sin que exista una
disminucin acusada de la productividad y de la calidad de los frutos.
Segn cita (Segura, P., 1995) en la regin murciana la infradotacin hdrica oscila
entre 2.000 m
3
/ha y 3500 m
3
/ha entre los aos 1991 y 1993, cifra que puede llegar
a corresponder a la cantidad de agua ahorrada con el RDC.
No hay que confundir el RDC con la disminucin de rendimiento debida al dficit
de agua. La disminucin de rendimiento ha sido estudiada por Doorenbos et alter
en su obra Efecto del agua sobre el rendimiento de los cultivos. Esta obra se
basa en la disminucin del rendimiento de un cultivo, debido a una
evapotranspiracin ms baja de lo normal. Esta menor evapotranspiracin est
causada por una menor aportacin de agua.
Las estrategias sobre las que se basa el RDC son las siguientes:
- Perodos crticos en el cultivo. Se centra en suministrar agua en aquellos
estados fenolgicos que puedan condicionar la produccin y/o la calidad de la
cosecha. Cada cultivo tiene sus perodos crticos.
- Crecimiento vegetativo y del fruto. Se basa en evitar un exceso de vigor que
pueda inducir a una mayor demanda hdrica en estados fenolgicos
posteriores. En estos cultivos podra ser interesante aportar al estado
fenolgico de crecimiento del fruto el agua ahorrada anteriormente. En algunos
cultivos, el crecimiento del fruto es un periodo crtico en cuanto al dficit
1. Introduccin
22
hdrico pero a la vez responden de una manera positiva al aporte de agua
(Cohen y Goell, 1984).
- Caractersticas del suelo. Para el RDC se recomiendan suelos poco profundos y
con poca retencin hdrica, para que se puedan reponer de agua forma ms
rpida y precisa y para que el sistema radical sea pequeo.
- Sistema de riego. El riego ms aconsejable es el que se efecta por el sistema
por goteo, por ser ms preciso y tener una eficiencia ms alta.
- Clima. Se recomienda la utilizacin del RDC en lugares con escasa pluviometra,
para alcanzar los efectos perseguidos con el RDC.
- Resistencia a la sequa. Existen diversas adaptaciones a la sequa: aumentar la
profundidad radicular, el ajuste osmtico por el cual una planta es capaz de
extraer agua con un potencial hdrico mas elevado del normal, el cierre estomtico
para evitar la deshidratacin foliar y el defoliamiento foliar.
En la bibliografa, constantemente se recomienda no extrapolar los resultados de
una experiencia con RDC de una zona a otra y se recomienda tener en cuenta
las necesidades de lixiviacin de los cultivos, aportando agua suplementaria en
pocas en que no se carezca de ella (Segura, P, 1995).
1. Introduccin
23
1.4. ESTIMACIN DE LAS NECESIDADES HDRICAS MEDIANTE EL MTODO
FAO-24
Uno de los mtodos ms utilizados para el clculo de las necesidades hdricas de
los cultivos es el que public la FAO en 1974. Se public con el nombre de Las
necesidades de agua de los cultivos (Doorenbos et alter, 1974) y en 1977 se
realiz una revisin. Por ser el volumen 24 de una serie de publicaciones de la
serie Riegos y Drenajes, es conocido con el nombre de FAO-24.
Este mtodo consiste en una serie de pautas de aplicacin de carcter prctico.
Es un mtodo de aplicacin mundial por intentar reflejar en sus datos la mayor
parte de los climas, cultivos y sistemas de riego que hay en el mundo.
Por ser un mtodo generalista, sus autores admiten que hay que ser crticos con
los resultados obtenidos y, en la medida de lo posible, variar los datos para
adecuarlos a nuestras necesidades.
El mtodo FAO-24 consta de tres partes diferenciadas:
- Clculo de la evapotranspiracin.
- Clculo de las necesidades de riego.
- Clculo del suministro de riego.
Desde la publicacin de FAO-24 han pasado unos 25 aos. A pesar del tiempo
transcurrido, este mtodo sigue utilizndose ampliamente en todo el mundo.
Lgicamente, muchos de los aspectos de FAO-24 han quedado en desuso, se
han modificado o se han ampliado con nuevos datos o clculos.
1. Introduccin
24
1.4.1. Clculo de la evapotranspiracin del cultivo.
El clculo de la evapotranspiracin de un cultivo se compone de 4 partes:
- Clculo de la evapotranspiracin de referencia (ETo).
- Eleccin del coeficiente de cultivo (Kc).
- Clculo de la evapotranspiracin de cultivo (ETc).
- Factores locales que influyen en la ETc.
1.4.1.1. Clculo de la evapotranspiracin de referencia (ETo)
La evapotranspiracin de referencia (ETo) se define como la evapotranspiracin
de un cultivo de gramneas verdes de 8 a 15 cm., de altura uniforme, con
crecimiento activo, que sombree el suelo y en el que no escasee el agua.
Normalmente, el clculo de la ETo utiliza o se vale de factores climticos
(temperatura, humedad, radiacin, viento, etctera).
Existen 4 mtodos para calcular la ETo por la va FAO-24, aunque ltimamente se
ha aadido un quinto mtodo:
- Blaney-Criddle.
- Radiacin.
- Penman.
- Evapormetro de cubeta.
- Penman-Monteith combinado (publicado en 1990 por la FAO).
A continuacin, se exponen los datos mnimos para cada una de las cinco
determinaciones:
1. Introduccin
25
Tabla 1: Datos necesarios para calcular la ETo.
Mtodo Temperatura Humedad Viento Insolacin Radiacin Evaporacin Condiciones
Locales
Blaney-Criddle * 0 0 0 - - 0
Radiacin * 0 0 * (*) - 0
Penman * * * * (*) - 0
Cubeta clase A - * 0 - - * *
Penman-Monteith * * * * (*) - 0
* datos medidos
0 datos estimados
(*) datos cuando se dispone de ellos
- No se necesita
Los 4 primeros mtodos se utilizan para perodos de 10 o 30 das, siendo la ETo
calculada, la media diaria en mm/da para el perodo considerado.
El quinto mtodo se aadi en 1990 y puede servir para datos diarios y
mensuales.
A continuacin, se exponen los 5 mtodos.
1.4.1.1.1. Blaney-Criddle.
Este mtodo utiliza la temperatura, el porcentaje de horas diurnas, la humedad
relativa y la velocidad del viento.
Primero, se determina un factor f mediante la siguiente frmula:
f = P (0,46T + 8,13)
donde: P : Porcentaje medio de horas diurnas del da sobre las horas
diurnas anuales, vase tabla 1 del anejo 1 [%].
f : Factor de clculo que depende de la temperatura y del
porcentaje medio de horas diurnas, vase tabla 2 del anejo 1.
T : Promedio de las temperaturas mximas y mnimas diarias [C].
Para determinar la ETo [mm dia
-1
], la figura 1 del anejo 1 se presentan 9 grficos
en funcin de 3 tipos de humedad relativa mnima y de 3 tipos de porcentajes
1. Introduccin
26
medios de horas diurnas del da sobre las horas diurnas anuales. Cada uno de
estos 9 grficos contiene 3 rectas, correspondientes a 3 tipos de velocidad de
viento diurnos.
Es un mtodo que sirve para estimaciones mensuales y que algunos autores
desaconsejan porque hace una estimacin de la humedad, de las horas de sol y
del viento (Martn de Santa Olalla et alter, 1993 y Pizarro, 1996).
1.4.1.1.2. Radiacin.
Este mtodo relaciona la ET con la radiacin, la temperatura y un factor de
ponderacin W que depende de la humedad relativa media y del viento.
Para determinar la ETo se calcula con la siguiente frmula:
ETo = funcin (Rs W, humedad relativa media, viento diurno)
donde: ETo : Evapotranspiracin de referencia [ mm da
-1
]
Rs : Radiacin solar, vase tabla 5 del anejo 1 [ mm da
-1
].
W : Factor de ponderacin en funcin de la temperatura y altitud,
vase tabla 6 del anejo 1.
La Radiacin solar (Rs) se calcula mediante la frmula:
Ra
N
n
b a Rs

,
_

+
donde: a : Para un clima medio a =0,24.
b : Para un clima medio b =0,50
n : Horas de sol reales en el da [horas].
N : Horas de sol mximas en el da, vase tabla 4 del anejo 1 [horas].
R
a
: Radiacin extraterrestre, vase tabla 3 del anejo 1 [mm d
-1
].
Los valores de la radiacin extraterrestre estn tabulados en funcin del hemisferio,
de la latitud y del mes.
1. Introduccin
27
Para determinar la ETo [mm d
-1
], se utiliza la figura 2 del anejo 1. En el que
presenta1 4 grficos en funcin de 4 tipos de humedad relativa media. Cada uno
de los grficos presenta 4 rectas en funcin de la velocidad del viento diurno.
Estas rectas relacionan el clculo WRs con la ETo.
Pizarro (1996) desaconseja la utilizacin de este mtodo; afirma que slo tiene
validez en zonas hmedas. Martn de Santa Olalla et alter(1993) afirma que este
mtodo es una simplificacin del mtodo Penman.
1.4.1.1.3. Penman.
El manual FAO-24 aconseja utilizar este mtodo cuando se disponga de datos
meteorolgicos completos: temperatura, humedad relativa, viento y radiacin solar
o insolacin (1974).
La ecuacin de Penman (1949) se defini para determinar la evaporacin de una
superficie libre de agua. Se bas en el balance energtico de la superficie
evaporante y en el proceso de transformacin turbulenta del vapor de agua.
La ecuacin de Penman (Eo) original consta de 2 trminos: el de radiacin o debido
a la radiacin solar (primer parntesis) y el aerodinmico o debido al viento
(segundo parntesis).

,
_

,
_

Ea Rn Eo
donde: Eo : Evapotranspiracin (Penman original) [mm d
-1
].
: pendiente de la curva de presin de vapor en funcin de la
temperatura [mm de Hg].
: constante psicromtrica [mm de Hg].
Rn : radiacin neta en la superficie de evaporacin [mm d
-1
].
Ea : Presin vapor [mm d
-1
].
1. Introduccin
28
( ) ( )
a s 2
e e U 0092 , 0 1 35 , 0 Ea +
donde: U
2
: velocidad del viento diario a 2 metros de altura [millas h
-1
].
e
s
: presin de vapor de saturacin del aire [mm de Hg].
e
a
: presin actual de vapor del aire [mm de Hg].
El manual FAO-24 propone un mtodo Penman modificado, para adaptar la
ecuacin a la prediccin de la necesidad de agua de los cutivos:
( ) ( ) ( ) [ ]
a s
e e U f W 1 WRn c ETo +
donde: ETo : evapotranspiracin de referencia [mm dia
-1
].
c : factor de ajuste en funcin del viento diario y viento nocturno.
Vase tabla 7 del anejo 1.
1-W : factor de ponderacin en funcin de la temperatura y de la
altitud del lugar. Vase tabla 6 del anejo 1.
Rn : Radiacin neta en la superficie de evaporacin [mm dia
-1
].
es : presin de vapor de saturacin del aire [mb]. Vase tabla 9 del
anejo 1.
ea : presin actual de vapor del aire [mb]. Vase tabla 8 del anejo 1.
f(U) : funcin relacionada con el viento.

,
_

+
100
U
1 27 , 0 ) U ( f
2
donde: f(U) : funcin relacionada con el viento.
U
2
: velocidad del viento diario a 2 metros de altura [km dia
-1
].
nl ns
R R Rn
donde: Rn : radiacin neta [mm d
-1
].
R
ns
: radiacin de onda corta [mm d
-1
]. Vase tabla 10 del anejo 1.
R
nl
: radiacin de onda corta [mm d
-1
].
1. Introduccin
29
Ra
N
n
5 , 0 25 , 0 75 , 0 R
ns

,
_

+
donde: R
ns
: radiacin de onda corta [mm d
-1
].
n : horas de sol recibidas [horas].
N : horas mxima de sol [horas]. Vase tabla 4 del anejo 1.
Ra : radiacin extraterrestre [mm d
-1
]. Vase tabla 3 del anejo 1.
( ) ( )

,
_

N
n
f ed f t f R
nl
donde: R
nl
: radiacin de onda larga [mm d
-1
].
f(t) : funcin de la temperatura. Vase tabla 11 del anejo 1.
f(ed) : funcin de la presin de vapor. Vase tabla 12 del anejo 1.
f(n/N)
l
: funcin de n/N . Vase tabla 13 del anejo 1.
n : horas de sol recibidas [horas].
N : horas mxima de sol [horas]. Vase tabla 4 del anejo 1.
1.4.1.1.4. Evapormetro de cubeta.
El evapormetro de cubeta es un tanque lleno de agua en el que se produce la
evaporacin.
Con este mtodo se miden los efectos integrados de la radiacin, del viento, de la
temperatura y de la humedad.
La adecuada instalacin y mantenimiento de la cubeta son fundamentales. El
manual FAO-24 hace aviso de una serie de problemas si no se cumplen las
condiciones de trabajo: diferencias de reflexin del agua y de la zona circundante,
transferencias de calor de la zona colindante, turbulencias del aire, etctera.
1. Introduccin
30
La evapotranspiracin se calcula mediante la siguiente frmula:
ETo = Epan Kp
donde: ETo : evapotranspiracin de referencia [mm dia
-1
].
Epan : evaporacin de la cubeta [mm dia
-1
].
Kp : coeficiente de la cubeta de clase A. Vase cubeta de clase A
en la tabla 14 del anejo 1.
El coeficiente de la cubeta depende de varios factores: del tipo de cubeta, del
cultivo que la rodea, de la humedad relativa media diaria, de la distancia a
barlovento del tipo de cubierta vegetal.
La cubeta ms utilizada es la del evapormetro de cubeta de la clase A. Y puede
haber dos estrategias en cuanto al tipo de cubierta vegetal: cubierta verde baja y
barbecho de secano.
1.4.1.1.5. Penman-Monteith.
En un estudio efectuado por Jensen et alter (1990), con diversos mtodos de
clculo de la evapotranspiracin, se comprob que el mtodo Penman-Monteith era
el que mejor se ajustaba a la medida de varios lismetros (vase tabla 2).
1. Introduccin
31
Tabla2. Sumario de estadsticas y su ranking para varios mtodos de estimacin mensual de la
evapotranspiracin.
All Months Peak Month Weigh
ted
SEE
(7)
Ranking Method (1)
% (2) SEE (3) b (4) r (5) ASEE (6) % SEE B R ASEE
1 Penman-Monteith 101 0.36 1.00 0.99 0.36 97 0.52 1.03 0.99 0.47 0.40
2 1982 Kimberly-Penman 107 0.53 0.95 0.98 0.49 107 0.79 0.96 0.96 0.73 0.59
3 FAO-PPP-17 Penman 111 0.66 0.93 0.97 0.56 105 0.72 0.99 0.97 0.72 0.66
4 Penman (1963) 106 0.57 0.99 0.97 0.57 99 0.95 1.07 0.96 0.81 0.67
5 Penman (1963), VPD #3 113 0.67 0.93 0.97 0.57 105 0.77 1.00 0.96 0.77 0.68
6 1972 Kimberly-Penman 112 0.74 0.93 0.96 0.67 102 0.72 1.03 0.97 0.70 0.72
7 FAO-24 Radiation 114 0.73 0.91 0.97 0.59 110 0.88 0.95 0.96 0.78 0.73
8 FAO-24 Blaney-Criddle 108 0.68 0.95 0.96 0.64 106 0.98 0.98 0.94 0.97 0.76
9 FAO-24 Penman (c=1) 121 0.91 0.88 0.96 0.65 111 0.84 0.95 0.96 0.76 0.82
10 Jansen-Haise 85 0.84 1.11 0.95 0.71 83 1.44 1.15 0.92 1.06 0.95
11 Hargreaves et al. (1985) 108 0.88 1.00 0.93 0.88 101 1.47 1.07 0.87 1.39 1.05
12 Businger-van Bavel 121 1.10 0.87 0.92 0.90 110 1.19 0.97 0.91 1.16 1.08
13 FAO-24 Corrected Penman 127 1.16 0.82 0.96 0.65 122 1.53 0.86 0.93 1.00 1.10
14 FAO-24 Pan 100 0.92 0.94 0.92 0.88 95 1.58 1.03 0.82 1.57 1.11
15 SCS Blaney-Criddle 101 1.16 0.99 0.87 1.15 103 1.31 1.05 0.89 1.26 1.20
16 Christiansen pan 92 0.95 1.03 0.91 0.94 88 1.88 1.11 0.78 1.73 1.21
17 Pan evaporation 118 1.34 0.82 0.92 0.87 113 1.82 0.88 0.83 1.56 1.35
18 Turc 90 1.30 1.20 0.89 1.07 85 2.26 1.31 0.84 1.49 1.46
19 Priestley-Taylor 85 1.29 1.22 0.90 1.02 86 2.34 1.28 0.78 1.72 1.48
20 Thornthwaite 79 1.68 1.24 0.78 1.47 79 2.69 1.41 0.79 1.70 1.84
NOTES
(1) All equation estimates have been adjusted for the reference crop of the lysimeter.
(2) Average percentage of lysimeter measurements.
(3) Standard error of estimate for ET estimates in mm d-1 that have not been adjusted by regression.
(4) Regression coefficient (slope) for regression through the origin of lysimeter versus equation estimates.
(5) Correlation coefficient for regression through the origin of lysimeter versus equation estimates.
(6) Standard error of estimate for ET estimates in mm d-1 that have been adjusted by regression through the origin.
(7) Weighted standard error of estimate calculated as 0.7(0.67(Col. 4)+0.33(Col. 7) + 0.3(0.67(Col.9)+0.33(Col. 12).
Al mtodo Penman-Monteith se le llama de un paso porque no maneja los
conceptos de evapotranspiracin de referencia y de coeficiente de cultivo, frente a
los cuatro mtodos tradicionales de FAO-24 que son de dos pasos.
1. Introduccin
32
El mtodo Penman-Monteith se basa en la valoracin de la resistencia de la
cubierta vegetal y, para ello, se vale de la siguiente relacin:
LAI 5 , 0
R
r
1
c

donde: r
c
: resistencia de la cubierta vegetal [s m
-1
].
R
1
: Resistencia media diaria (24 horas) de los estomas de una
simple hoja [s m
-1
].
LAI : ndice de rea foliar .
En una reunin que realizaron los expertos de la FAO en 1990 adoptaron el mtodo
Penman-Monteith como nuevo estndar en la determinacin de la
evapotranspiracin.
Estos expertos determinaron que, ante la falta de datos sobre la resistencia de los
cultivos, se poda calcular la ETo por el mtodo Penman-Monteith suponiendo los
siguientes valores:
Altura del cultivo igual a 12 cm (hc=0,12 m).
Resistencia de la cubierta vegetal igual a 70 s/m (r
c
=70s/m).
Albedo igual a 0,23 (=0,23).
Estas caractersticas, coinciden con la definicin de la evapotranspiracin de un
cultivo de gramneas, es decir, con la definicin de evapotranspiracin de referencia
(ETo).
Como se ha asimilado la ecuacin de Penman-Monteith a un proceso de dos
pasos, es necesario seguir utilizando el coeficiente de cultivo para relacionarlo con
la evapotranspiracin de referencia. La reunin de los expertos aconsej seguir
utilizando los Kc que se detallaban en FAO-24.
1. Introduccin
33
A continuacin se expone la frmula de Penman-Monteith para un cultivo con las
caractersticas anteriormente mencionadas:
( )
)
U
0.34 + (1 +
e e U
273 T
900
R 408 , 0
ETo
2
d a 2 n

+
+

donde: ETo : evapotranspiracin de referencia [mm d


-1
].
R
n
: radiacin neta en la superficie del cultivo [MJ m
-2
d
-1
].
G : flujo del calor del sol [MJ m
-2
d
-1
].
T : temperatura media [C].
U
2
: velocidad del viento a 2 metros de altura [m s
-1
].
(e
a
-e
d
) : dficit de la presin de vapor [kPa].
: pendiente de la curva de presin de vapor [kPa C
-1
].
: constante psicromtrica [kPa C
-1
].
nl ns n
R R R
donde: R
n
: radiacin neta en la superficie del cultivo [MJ m
-2
d
-1
].
R
ns
: radiacin percibida de onda corta [MJ m
-2
d
-1
].
R
nl
: radiacin neta de onda larga [MJ m
-2
d
-1
].
R
)
N
n
0.50 + (0.25 77 , 0 =
R a ns
donde: R
ns
: radiacin percibida de onda corta [MJ m
-2
d
-1
].
n : horas de sol percibidas [h].
N : horas mximas de sol [h].
R
a
: radiacin extraterrestre [MJ m
-2
d
-1
].
1. Introduccin
34
s
64 , 7 N
donde: N : horas mximas de sol [h].
w
s
: ngulo horario de puesta de sol [rad].
( ) ) sen( ) d cos( ) l cos( ) l sen( ) d sen( dr 6 , 37
R
s s a
+
donde: R
a
: radiacin extraterrestre [MJ m
-2
d
-1
].
dr : distancia relativa Sol-Tierra .
ws : ngulo horario de puesta de sol [rad].
d : declinacin solar [rad].
l : latitud [rad].
( ) ) d tg( ) l tg( cos =
1
s


donde: w
s
: ngulo horario de puesta de sol [rad].
l : latitud [rad].
d : declinacin solar [rad].
) 39 , 1 J 0172 , 0 sen( 409 , 0 = d
donde: d : declinacin solar [rad].
J : nmero de da del ao .
) J 0172 , 0 cos( 033 , 0 1 = dr +
donde: dr : distancia relativa Sol-Tierra .
J : nmero de da del ao .
1. Introduccin
35
2 Dia 30
9
Mes
275 = J
DIA

,
_

+
donde: J
DIA
: Nmero de da del ao para estimacin diaria .
Mes : Nmero de mes del ao en curso .
Dia : Nmero de da del mes del ao en curso .
23 , 15 Mes 42 , 30 = J
MES

donde: J
MES
: Nmero de da del ao para estimacin mensual .
Mes : Nmero de mes del ao en curso .
)
T
+
T
( ) ed 0.14 - (0.34 0.1) +
N
n
(0.9
10
. 2.45 =
R
4
minima
4
maxima
-
nl
9
donde: R
nl
: radiacin neta de onda larga [MJ m
-2
d
-1
].
n : horas de sol percibidas [h].
N : horas mximas de sol [h].
e
d
: presin actual de vapor [kPa].
T
maxima
: temperatura mxima del aire [K].
T
minima
: temperatura mnima del aire [K].
) tmax ( a ) tmin ( a
media
d
e
50
e
50
HR
= e
+
donde: e
d
: presin actual de vapor [kPa].
e
a(tmin)
: presin de vapor saturante en la temperatura mnima [kPa].
e
a(tmin)
: presin de vapor saturante en la temperatura mxima [kPa].
HR
dmedia
: humedad relativa media [%].
1. Introduccin
36

,
_

+ 3 , 237 T
T 27 , 17
a
e 6108 , 0 = e
donde: e
a
: presin de vapor de saturacin a la temperatura T [kPa].
T : temperatura [C].
Cl
P
00163 , 0 =
donde: y : constante psicromtrica [kPa C
-1
].
P : presin atmosfrica [kPa].
Cl : calor latente de vaporizacin [MJ kg
-1
].
26 , 5
T 273
alt 0065 . 0 ) T 273 (
3 , 101 = P

,
_

+
+
donde: P : presin atmosfrica en la altitud alt [kPa].
T : temperatura del aire [C].
alt : altitud [m].
) T 10 361 , 2 ( 501 , 2 = Cl
3

donde: Cl : calor latente de vaporizacin [MJ kg


-1
].
T : temperatura del aire [C].
( )
2
a
3 , 273 T
e 4098
+

donde: A : pendiente de la curva de presin de vapor en saturacin
[kPaC
-1
].
e
a
: presin de vapor de saturacin a la temperatura T [kPa].
T : temperatura del aire [C].
1. Introduccin
37
1.4.2. Coeficiente de cultivo (Kc).
El coeficiente de cultivo relaciona la evapotranspiracin de referencia con la
evapotranspiracin del cultivo:
ETc
ETo
Kc
Los factores que pueden influir en el coeficiente de cultivo son: las caractersticas
del cultivo, la fecha de siembra o plantacin, el ritmo de desarrollo del cultivo, la
duracin del perodo vegetativo, la humedad relativa, el viento, etctera.
El manual FAO-24 resume los factores que influyen en el coeficiente de cultivo, en
una agrupacin de cultivos.
Tabla 3. Factores que influyen en diversos tipos de cultivo.
FACTORES TIPO DE CULTIVO
A B D E F G H L
Cubierta vegetal
P P P P
Heladas
P P P P
Humedad
P P P P P P P P P P
Viento
P P P P P P P P P P P P
Edad
P P P P P P
Frecuencia riegos o lluvias
P P P P P P
Textura del suelo
P P
Tipos de cultivo
Leyenda:
A = Cultivos extensivos y de hortalizas
B = Arroz
C = Caa de Azcar
D = Alfalfa
E = Arboles caducifolios y de nuez
F = Ctricos
G = Uva
H = Banana
I = Hierbas acuticas
J = Caf
K = T
L = Suelos desnudos
1. Introduccin
38
Los cultivos de caa de azcar [c], hierbas acuticas (I), caf (J) y t (K) se han
omitido por no tener mucho inters en Espaa.
Cada uno de estos 12 tipos de cultivos puede agrupar uno o ms cultivos y
corresponden a criterios comunes en la aplicacin del coeficiente de cultivo.
a) cultivos extensivos y de huerta
Los cultivos extensivos y de huerta se presentan con 4 fases de desarrollo: fase
inicial, fase de desarrollo, fase media y fase final.
Cada una de estas fases tiene su duracin y tiene asignado un coeficiente de
cultivo.
El coeficiente de cultivo de la fase inicial de estos cultivos se determina a partir de
unos grficos que relacionan la frecuencia de riego/lluvias ms la ETo diaria con el
coeficiente de cultivo. En clculo del Kc inicial del anejo 4 se puede ver el grfico
y la forma de estimar el Kc inicial.
El coeficiente de cultivo de la fase media y de la fase final se determina a partir de
uno grficos que relacionan cada uno de los cultivos con la humedad relativa
mnima y con el viento diario.
La fase inicial tiene un Kc constante, la fase de desarrollo tiene un Kc que aumenta
linealmente a lo largo de los das, la fase media tiene un Kc constante y la fase final
tiene un Kc que disminuye linealmente a lo largo de los das.
Para determinar el Kc de la fase de desarrollo se realiza una estimacin a partir del
Kc inicial y del Kc medio y se multiplica por el nmero de das transcurridos de la
fase.
Para determinar el Kc de la fase final se realiza una estimacin a partir del Kc
medio y del Kc final y se multiplica por el nmero de das transcurridos de la fase.
1. Introduccin
39
b) arroz.
Para nuestro pas se considera que el cultivo del arroz se desarrolla en la estacin
seca, aunque en otros lugares del mundo puede ser en la estacin hmeda.
Los valores de Kc se dividen en funcin del viento y se agrupan en 4 fases: primer
mes de cultivo, segundo mes de cultivo, mediados del perodo y 3-4 ltimas
semanas de cultivo.
d) alfalfa, trbol, leguminosas herbceas y pastos.
Se desarrolla de forma similar a los cultivos extensivos, aunque las 4 fases se
desarrollan de 2 a 8 veces al ao.
En la prctica, se define un Kc medio para todo el cultivo en funcin de los vientos y
de la humedad.
e) rboles caducifolios frutales y de nuez.
En este tipo de cultivo, se presentan valores de Kc para cada mes, excepto en los
meses de menos necesidad hdrica.
Los valores de Kc se definen en funcin de: el tipo de cultivo, el mes de cultivo, el
tipo de cubierta vegetal, el tipo de viento, la humedad relativa, el tipo de invierno y
la edad de las plantaciones.
En algunos casos, se aplica el coeficiente de cultivo de la fase inicial de los cultivos
extensivos.
f) ctricos.
Los ctricos se presentan con valores de Kc mensual.
Los valores de Kc dependen de: tipo de ctrico, mes de cultivo, tipo de cubierta
vegetal y edad de la plantacin.
1. Introduccin
40
g) uva.
La uva se presenta con valores de Kc mensual.
Los valores de Kc dependen de: mes de cultivo, tipo de helada, tipo de viento y
humedad relativa.
h) pltano
El pltano se presenta con valores de Kc mensual.
En el pltano se diferencian dos estaciones: la primera que corresponde a las
plantas originales y la segunda que corresponde al hijo que sale. Hay un momento
en que la planta original es cortada, quedando en el cultivo el hijo.
Los valores de Kc dependen de: tipo de estacin, mes de cultivo, tipo de viento y
humedad relativa.
l) suelos no cultivados o desnudos.
En los suelos desnudos se produce una prdida de agua que est en funcin de la
evaporacin (E) que tienen.
El valor de Kc depende de la textura del suelo y de la frecuencia de riego. Para ello,
se utilizan los grficos de la fase inicial de los cultivos extensivos, para despus
realizar un ajuste en funcin del tipo de suelo.
1.4.3. Determinacin de la evapotranspiracin del cultivo (ETc).
La evapotranspiracin del cultivo se determina mediante la frmula:
ETc = ETo Kc
El valor de la ETc se suele expresar en mm por perodo; el periodo se puede
expresar en mes, semana, das, etctera.
1. Introduccin
41
Cuando la ETo se mide con un tanque evaporimtrico la ETc se halla mediante la
relacin:
ETc = ETo Kc Kp
Siendo Kp, el coeficiente de la cubeta.
1.4.4. Factores locales que influyen en la ETc.
Existen una serie de factores, generalmente locales, que pueden variar la
evapotranspiracin de un cultivo.
El manual FAO-24 los divide en 5 grupos:
Clima
Humedad del suelo
Mtodo de riego
Prcticas de cultivo
Rendimiento de los cultivos
1.4.4.1. Clima.
Dentro de las variaciones debidas al clima se encuentran los siguientes factores:
- Tiempo: Es la variacin de ETc que se puede producir temporalmente por el tipo
de clima.
- Distancia: Es la variacin ocasionada por la distancia a la que se encuentra la
estacin meteorolgica. Las variaciones de la estimacin de la ETC en zonas con
climas extremos son ms acusadas que en los climas suaves.
- Adveccin: Son las variaciones que se producen cuando el lugar de medicin
micrometeorolgico tiene unas caractersticas distintas a la zona de cultivo. Estas
variaciones pueden cambiar la ETo en una proporcin que va desde la mitad a la
vez y media del valor inicial estimado. Se calcula en funcin del tamao del cultivo
puesto en regado.
1. Introduccin
42
- Altitud: La ETc de un cultivo vara con la altitud. La frmula de Penman-Monteith
lo contempla al tener en cuenta la constante psicromtrica. La constante
psicromtrica depende de la presin y por tanto de la altitud.
1.4.4.2. Humedad del suelo.
- Nivel de humedad: Son las variaciones de evapotranspiracin que se producen
en un cultivo cuando disminuye la tensin de humedad del suelo. Normalmente, la
ET corresponder a la ETc mxima, mientras la tensin de humedad est prxima
a la capacidad de campo (0,2-5 atmsferas), pero a medida que aumente la
tensin de humedad ir disminuyendo la ETc del cultivo.
- Absorcin de agua por el suelo: El tipo y profundidad de las races sern
factores determinantes para la absorcin de agua por el suelo y, por tanto, la
evapotranspiracin del cultivo
- Niveles freticos: Los niveles freticos cercanos pueden disminuir la ETc del
cultivo al causar dficits de oxgeno para las races.
- Salinidad: La salinidad aumenta la presin osmtica y puede reducir la absorcin
de agua del suelo, provocando una alteracin de la ETc del cultivo.
1.4.4.3. Mtodo de riego.
El sistema de riego puede afectar a la evapotranspiracin del cultivo, en tanto en
cuanto vara las condiciones del microclima.
Los riegos a voleo (aspersin) provocan una modificacin temporal de la
evaporacin al variar la temperatura y la humedad de la zona de riego.
En los riegos por goteo puede haber una disminucin de la ETc al aplicarse el
agua localmente. Esta disminucin ocurre en campos con cultivos espaciados,
suelos arenosos y con gran evaporacin.
En riegos localizados, Pizarro (1996) propone calcular un coeficiente de
localizacin en funcin del rea sombreada y de las relaciones estudiadas por
1. Introduccin
43
diversos autores entre el rea sombreada y el coeficiente de localizacin. Este
factor provoca una menor evapotranspiracin porque el riego se aplica a zonas
puntuales, generalmente a la sombra del cultivo.
La fraccin del rea sombreada es la relacin que existe entre la superficie
proyectada por un cultivo y la superficie total donde est asentado el cultivo.
La relacin entre la fraccin de rea sombreada y el coeficiente de localizacin ha
sido estudiada por diversos autores y es la siguiente:
Aljibury Kl = 1,34A
Decroix Kl = 0,1 +A
Hoare Kl = 0,5A + 0,5
Keller Kl = 0,85A + 0,15
Siendo; Kl : coeficiente de localizacin
A : fraccin rea sombreada
Pizarro propone realizar la media de los 2 coeficientes de localizacin ms
prximos a la media y rechazar los valores que son ms extremos.
1.4.4.4. Prcticas de cultivo.
La fertilizacin inadecuada puede provocar variaciones en la ETc al haber
alteraciones en el desarrollo de las races.
La densidad de plantacin tiene unos efectos sobre la ETc similares a los de la
cubierta sombreada.
Los paravientos artificiales pueden variar la ETc de un cultivo en zonas ventosas.
1. Introduccin
44
1.4.4.5. Rendimiento de los cultivos.
La evapotranspiracin tiene una estrecha relacin con el rendimiento del cultivo.
En algunos casos, al igual que en la RDC, se adopta como estrategia un menor
rendimiento del cultivo mediante una menor evapotranspiracin.
Esta menor transpiracin se produce al regar menos la zona del cultivo.
1.4.5. Balance hdrico.
El balance hdrico es una metodologa de clculo de las necesidades hdricas que
se base en controlar las entradas y salidas de agua y la variacin que se produce
en la reserva de agua del suelo.
El balance hdrico engloba una serie de variables y es el paso previo al clculo de
las necesidades netas de riego.
Las variables que integran el balance hdrico son:
Evapotranspiracin del cultivo
Precipitaciones efectivas
Contribucin de aguas subterrneas
Percolacin profunda
Variacin del agua almacenada en el suelo.
1.4.5.1. Evapotranspiracin del cultivo.
Se aplicar el dato obtenido por uno de los cinco mtodos de clculo de la
evapotranspiracin de referencia, ms el correspondiente coeficiente de cultivo.
Si se dispone de datos climticos medios, se aplicar el valor que corresponda a
las mximas necesidades de riego.
1. Introduccin
45
En los casos de riego localizado se aplicar el coeficiente de localizacin en
funcin del rea sombreada por el cultivo.
Para proyectos grandes se aplicar el coeficiente corrector de adveccin.
1.4.5.2. Lluvia efectiva.
El conocimiento de la lluvia es indispensable para poder planificar el riego. Se
pueden aplicar mtodos de clculo de precipitacin para un perodo deseado,
pero estos datos tienen que venir apoyados de un gran nmero de aos.
La lluvia efectiva es la parte de agua de lluvia que llega a la zona de las races; el
resto se pierde por evaporacin en la zona area, por percolacin o por
escorrenta.
Existen diversos mtodos para calcular la precipitacin efectiva:
- Porcentaje de la lluvia. Se aplica un coeficiente a la precipitacin
Pe=AP
siendo: Pe : precipitacin efectiva [mm/mes]
P : precipitacin [mm/mes]
A : porcentaje [%]
- Mtodo FAO/AGWL (climas ridos o subridos)
Pe = 0,6P 10 P < 60 mm/mes
Pe = 0,8P 25 P > 60 mm/mes
siendo: Pe : precipitacin efectiva [mm/mes]
P : precipitacin [mm/mes]
- Mtodo de la USDA Soil conservation Service:
Pe = P(125 0,2P)/125 P < 250 mm/mes
Pe =125+ 0,1P P > 250 mm/mes
siendo: Pe : precipitacin efectiva [mm/mes]
P : precipitacin [mm/mes]
1. Introduccin
46
- Mtodo emprico (con datos locales):
Pe = A1P B1 -> P<C1 mm/mes
Pe = A2P B2 -> P<C2 mm/mes
siendo: Pe : precipitacin efectiva [mm/mes]
P : precipitacin [mm/mes]
A1 : valor emprico para la zona
B1 : valor emprico para la zona
C1 : valor emprico para la zona
A2 : valor emprico para la zona
B2 : valor emprico para la zona
C2 : valor emprico para la zona
- No se considera.
En algunos casos no se considera por ser cultivos en invernadero o porque no
interesa tener en cuenta la precipitacin.
1.4.5.3. Contribucin de aguas subterrneas (Ge).
Se han de considerar los casos en que existan aguas subterrneas a una
profundidad menor de 4 metros.
El manual FAO-24 relaciona la Ge con el tipo de suelo y con la profundidad de las
aguas subterrneas.
En la prctica, no se considera, por ser un fenmeno minoritario de carcter local.
1.4.5.4. Percolacin profunda (F).
Es el agua que pasa a los horizontes profundos y no est al abasto de las races.
Depende del tipo de suelo. Los suelos ligeros (arenosos) tendrn una mayor
percolacin que los suelos pesados (arcillosos).
No hay que confundir la percolacin profunda con la percolacin debida a la
eficiencia de la aplicacin o con la percolacin provocada para evitar acmulos
1. Introduccin
47
de sales en la rizosfera. Son fenmenos separados que no han de contabilizarse
como percolacin profunda.
En la prctica, el fenmeno de la percolacin se ha de determinar
experimentalmente en el campo de cultivo.
1.4.5.5. Variacin del agua almacenada en el suelo (w).
La reserva de agua en el suelo puede variar desde prcticamente cero hasta un
nivel llamado capacidad de campo. La capacidad de campo (CC) es cuando la
reserva de agua en el suelo est en su mximo nivel de capacidad. Existe un nivel
superior a este, pero termina por desaparecer en forma de escorrenta. El valor
cero en la CC supondra la extincin total de cualquier forma de vida.
En la prctica agrcola se suele considerar un nivel mnimo, a partir del cual se
produce el marchitamiento de la planta. Este nivel se llama punto de
marchitamiento (PM). El agua contenida desde el punto de marchitamiento hasta
el nivel de capacidad de campo se llama agua til (AU).
Por seguridad, se considera un nivel ms cercano al de la capacidad de campo, a
partir del cual no se produce disminucin de rendimiento en la produccin del
cultivo. Este nivel se llama nivel de agotamiento permisible. El agua contenida
desde este nivel hasta la capacidad de campo se llama reserva fcilmente
utilizable (RFU).
La medida de la variacin de agua en el suelo tiene por objeto que un cultivo no
agote el agua que hay en la RFU o en el AU.
El valor de la variacin de agua en el suelo determinar el momento y la dosis de
riego.
1. Introduccin
48
Hay autores que indican una cierta relacin entre la textura del suelo y los valores
de CC y PM. Yage (1996) cita dos frmulas que relacionan la textura con la CC y
el PM, pero aconseja utilizarlas cuando no se disponga de anlisis. En el captulo
2 del anejo 4 se exponen las dos frmulas.
FAO-24 relaciona las clases texturales con la tensin de humedad del suelo y con
el porcentaje de humedad del suelo, a la vez que dice que el punto de
marchitamiento corresponde a una tensin de humedad de 16 atm. y la CC a una
tensin de humedad de 0,2-0,3 atm.
1.4.6. Necesidades netas de riego (Nn).
La necesidad neta de riego de un cultivo es la cantidad de agua que resulta de
considerar las entradas de agua, las salidas de agua y la variacin de agua en la
reserva del suelo.
Las necesidad neta de riego se expresa mediante la siguiente frmula:
Nn = ( ETc + F + R ) ( Pe + Ge + N ) + )W
Siendo:
ETc=Evapotranspiracin Cultivo [mm] Pe = Lluvia Efectiva [mm]
F = prdidas por percolacin [mm] Ge = Aportacin Capilar [mm]
R = Escorrenta de salida [mm] N = Escorrenta de entrada [mm]
)w = variacin de la reserva de agua [mm]
A menudo, se considera F, R, Ge y N igual a cero, por su pequea aportacin. De
esta manera, la frmula quedara as:
Nn = Pe ET + )W
Las necesidades netas de agua quedan compensadas con el dficit del balance
hdrico.
1. Introduccin
49
El riego se efectuar cuando la variacin de agua en el suelo ()w) llegue a una
tensin superficial de unas 16 atmsferas. En este punto, si no se riega, la planta
se marchitar irreversiblemente.
El riego sin disminucin de rendimiento se realizar cuando la variacin de agua
en el suelo coincida con el nivel de agotamiento permisible. La tensin superficial
en este nivel es variable en funcin del cultivo.
Para que no haya reduccin de la ET, y por tanto, reduccin del rendimiento en el
cultivo, es necesario regar antes de que se llegue al punto de marchitamiento.
Este punto se ha estimado para cada cultivo y proporciona un valor que
corresponde a la reserva fcilmente utilizable (RFU).
El agua que se contiene en la RFU es la siguiente:
RFU = ( CC-PM ) z NAP
Siendo: RFU : Reserva fcilmente utilizable [mm]
CC : Humedad en la capacidad de campo [mm/cm]
PM : Humedad en el punto de marchitez permanente [mm/cm]
z : Profundidad efectiva de las races [cm]
NAP : Nivel de agotamiento permisible [tanto por uno]
En ciertas ocasiones se expresa CC y PM como porcentaje en peso. Para
convertir estos valores en mm por centmetro de suelo, se ha de multiplicar por la
densidad aparente del suelo en gramos por centmetro cbico.
1.4.7. Lavado de sales.
El efecto osmtico de las sales disueltas en el agua sobre las races, hace que las
plantas tengan que hacer un esfuerzo adicional para absorber agua. Adems del
potencial hdrico han de vencer el potencial osmtico.
1. Introduccin
50
Si el agua en el suelo no es un factor limitante, la planta podr vencer la suma de
los dos potenciales. Pero, a menudo, el potencial osmtico aumenta por un efecto
acumulativo y llega un momento en que la planta no es capaz de absorber agua.
El efecto que se produce en la planta es, primero una disminucin paulatina del
rendimiento, para despus morir.
Para evitar la salinizacin de un terreno se aplica una dosis suplementaria de
agua. Esta dosis suplementaria ha de evitar la acumulacin de sales en el suelo y
realizar un lavado del suelo.
La necesidad de lixiviacin depende del sistema de riego, de la concentracin
mxima permisible de sal en el suelo y de la concentracin de sal en el agua. La
concentracin de sal se relaciona elctricamente mediante la conductividad
elctrica. En las siguientes frmulas se puede ver las necesidades de lixiviacin
para dos mtodo de riego:
-riego por gravedad y aspersin a baja frecuencia:
CEa CEs 5
CEa
LR

siendo LR : Requerimiento de lavado .


CEa : Conductividad elctrica del agua de riego [dS/m]
Ces : Conductividad elctrica del extracto de saturacin del suelo
para la produccin deseada [dS/m].
-riego por goteo y aspersin de alta frecuencia:
MaxCEs 2
CEa
LR
siendo LR : Requerimiento de lavado .
CEa : Conductividad elctrica del agua de riego [dS/m]
MaxCe : Conductividad elctrica del extracto de saturacin del suelo
para un descenso en la produccin del 100% [dS/m].
1. Introduccin
51
Como puede verse, existe una relacin entre la concentracin de sal en el suelo y
la produccin obtenida.
En el manejo del riego es necesario determinar el descenso de la produccin
deseada, en funcin de la concentracin de sal en el agua. De lo contrario, con
aguas salinizadas sera necesario regar con un volumen muy elevado de agua.
La relacin entre la produccin deseada y el grado de tolerancia del cultivo debido
a la sal del suelo es lineal. Para determinar la conductividad elctrica del suelo
con la produccin deseada se aplica la siguiente frmula:
% o
% 100 % o
S
CE P
100
CE CE
CE +
1
]
1

donde CE
s
: Conductividad elctrica mxima permisible para la produccin
deseada [dS/m].
CE
0%
: Conductividad elctrica para una produccin del 0 % [dS/m].
CE
100%
: Conductividad elctrica para una produccin del 100 %
[dS/m].
P : Produccin deseada [%].
La fraccin de lavado (Fl) es la relacin que se aplicar a la necesidad neta de
agua y es igual a 1-LR.
1.4.8. Eficiencia de la aplicacin.
La eficiencia es un factor corrector que se ha de tener en cuenta por la propia
naturaleza del sistema de riego, que no se comporta de una manera perfecta en
la distribucin del agua.
La eficiencia en la aplicacin suele ser muy baja en los riegos por gravedad y muy
buena en los riegos localizados.
1. Introduccin
52
Existe otro factor corrector que depende de algunos sistemas de riego: el
coeficiente de uniformidad (CU). El CU es la variacin que se produce en la
aplicacin del agua entre un elemento y otro (aspersor, gotero, etc.). El CU es un
factor de carcter hidrulico. En algunos casos, se considera el CU como un
factor incluido en la eficiencia de la aplicacin.
1.4.9. Necesidades brutas de riego.
Es la necesidad adicional de agua que se aplica a la necesidad neta, para realizar
el lavado de sales del suelo o para solventar las carencias de agua en la
eficiencia de la aplicacin.
Entre la fraccin de lavado(Fl) y la eficiencia en la aplicacin(Ea), se escoge el de
correccin que implique mayor gasto de agua.
Cuando Ea < Fl, se aplicar la Ea. Siendo la necesidad bruta de riego la siguiente
(Nb):
Ea
Nn
Nb
siendo Nb : Necesidad bruta de riego [mm].
Nn : Necesidad neta de riego [mm].
Ea : Eficiencia en la aplicacin .
Cuando Ea > Fl, se aplicar la Fl. Siendo la necesidad bruta de riego la siguiente
(Nb):
Fl
Nn
Nb
siendo Nb : Necesidad bruta de riego [mm].
Nn : Necesidad neta de riego [mm].
Fl : Fraccin de lavado .
1. Introduccin
53
1.4.10. Programacin del riego.
La programacin del riego es una prctica que depende de multitud de factores:
- Perodos crticos.
- Momento de la aplicacin.
- Dosis a aplicar.
- Reserva de agua al inicio del cultivo.
- Duracin del riego.
1.4.10.1. Perodos crticos.
Cada cultivo tiene unos perodos crticos con respecto a la tensin de humedad
del suelo; stos son debidos a las propias caractersticas de los cultivos.
En algunos casos, la falta de agua puede comportar una mejora en la calidad de
la produccin. En otros casos, el cultivo prefiere suelos hmedos.
Pero, en la mayora de los casos, existen unos perodos crticos en la falta de
agua que pueden afectar a la calidad y cantidad de la produccin. Estos perodos
crticos pueden coincidir con uno o ms estados fenolgicos; por ejemplo, en el
maz existen diversos perodos crticos: en la inflorescencia, en la polinizacin y
en la fructificacin.
La disminucin en la produccin es una estrategia que se adopta en la
programacin del riego cuando existen carencias de agua.
La relacin que existe entre la produccin obtenida y la cantidad evaporada es
cuasi lineal, a menor evapotranspiracin menor ser la produccin de un cultivo.
Esta relacin depende del cultivo y de la fase en que se encuentre.
1. Introduccin
54
La relacin es la siguiente:

,
_


ETm
ETa
1 Ky
Ym
Ya
1
donde Ya : Produccin obtenida en funcin de la cantidad
evapotranspirada con carencia de agua .
Ym : Produccin obtenida cuando no existe carencia de agua .
Km : Factor de respuesta del cultivo .
ETa : Evapotranspiracin que se produce cuando existe carencia de
agua [mm/fase-s].
ETm : Evapotranspiracin que se produce cuando no existe carencia
de agua [mm/fase-s].
La relacin se puede aplicar para una o ms fases del cultivo.
1.4.10.2.Momento de riego.
El momento de riego vendr dado por la eleccin de diversas estrategias:
- Nivel de humedad en la RFU: El momento de riego se producir cuando la RFU
llegue a un nivel determinado (cuando se agote la RFU, cuando se agote un
porcentaje determinado de la RFU, etctera).
- Intervalo de riego: Se puede fijar el intervalo de riego para regar en perodos
constantes. Es una estrategia muy utilizada en riegos localizados o en
comunidades de regantes.
- Perodos concretos: Consiste en regar en unos periodos concretos. Se puede
utilizar en el riego deficitario controlado (RDC), en comunidades de regantes.
1.4.10.3. Dosis a aplicar.
La dosis a aplicar depende del gasto que haya hecho el cultivo en un perodo
concreto y de la variacin de la reserva de agua en el suelo.
La dosis variar en funcin del porcentaje de agua que tenga la RFU al inicio del
riego y del porcentaje de agua que tenga al final del mismo.
1. Introduccin
55
1.4.10.4.Reserva de agua al inicio del cultivo.
Todo cultivo tiene una reserva inicial de agua en el suelo en funcin de lo que ha
llovido anteriormente, de un prerriego inicial. En los cultivos plurianuales, la
reserva inicial de agua en la programacin ha de ser la misma que tena en la
anterior programacin.
Una forma de referir la reserva inicial es con un porcentaje determinado de RFU.
1.4.10.5.Duracin del riego.
La duracin del riego depende de diversos factores: del volumen de agua a
aportar, de la infiltracin del terreno y del caudal de la instalacin.
La velocidad de infiltracin depende de las propiedades fsicas y qumicas del
suelo. Las propiedades fsicas que afectan a la infiltracin son: la textura del
suelo, la pendiente del suelo y la humedad del suelo. Las propiedades qumicas
que afectan a la infiltracin son concentraciones de determinadas sales o la
calidad del agua de riego.
Para conocer la tasa de infiltracin real es necesario realizar pruebas peridicas
en el campo, ya que puede variar en el tiempo.
1. Introduccin
56
1.5. Utilizacin de la informtica para el clculo de las necesidades hdricas.
La informtica es una disciplina que realiza el tratamiento automtico de la
informacin por medio de ordenadores.
As pues, la informtica es una herramienta que puede simplificar la complejidad
del tratamiento de la informacin para el clculo de las necesidades hdricas.
Normalmente, se pueden escoger dos estrategias para realizar este clculo:
- Tiempo real: Se basa en datos meteorolgicos diarios reales.
- Previsin: Se basa en datos meteorolgicos medios para el periodo considerado
(mes, quincena, semana).
Para realizar el tratamiento de la informacin se utilizan tres ejes fundamentales:
- Anlisis: Es el conjunto de procedimientos mediante los cuales se analiza cmo
se han de recoger y procesar los datos para que tengan una entidad inteligible.
- Programa. Es el conjunto de instrucciones mediante las cuales se realiza el
tratamiento de los datos.
- Ordenador. Es el aparato a travs del cual se realiza el tratamiento del conjunto
de datos.
El anlisis es una tarea que requiere a tcnicos en informtica pero que tambin
implica a tcnicos de otras disciplinas. El analista, como su nombre indica, ha de
analizar cmo le llegar la informacin, cmo tratar esta informacin, cmo se
enva la informacin procesada, de qu herramientas dispone, etctera.
El conjunto de instrucciones que forman parte de un programa est escrito con un
lenguaje determinado. El lenguaje traduce el programa escrito a otro conjunto de
instrucciones (lenguaje mquina) ms inteligible para el ordenador. El lenguaje ha
de tener instrucciones capaces de recibir, tratar y enviar la informacin.
En la actualidad, existen lenguajes de tipo visual, que liberan al programador de la
necesidad de describir la apariencia y el lugar de insercin de la informacin que
1. Introduccin
57
se ofrece, tanto por el monitor como por la impresora. Uno de los lenguajes
visuales ms extendidos es el lenguaje Visual-Basic. La palabra BASIC hace
referencia a que en su origen parta de las instrucciones del lenguaje BASIC
(Beginens All-Purpuse Symbolic Instrucions Code) que resultaba ser un lenguaje
muy popular por facilidad de uso.
Normalmente, el lenguaje y el programa traducido funcionan sobre otro lenguaje
que se llama sistema operativo. El sistema operativo, por si solo, no realiza nada,
pero es el punto de unin entre los programas y el ordenador.
El ordenador es una herramienta que contiene una serie de dispositivos para
recibir, tratar y enviar la informacin. Estos dispositivos pueden llegar a ser
numerosos, pero el ms esencial es la unidad central de proceso de datos, o
procesador, porque realiza el tratamiento de la informacin que le llega a travs
de un canal de informacin y la enva tratada.
La informacin se puede recibir de mltiples maneras: a travs del teclado, del
ratn, de dispositivos de almacenamiento de datos, de dispositivos de
comunicacin de datos (lnea telefnica, redes de datos, etc.). La informacin
tratada se puede enviar por pantalla, por impresora, por dispositivos de
almacenamiento de datos, por dispositivos de comunicacin de datos, etc.
Una forma de almacenar la informacin es en unos ficheros electrnicos que se
denominan base de datos. Las bases de datos suelen ser dispositivos de
almacenamiento de datos en los que la informacin se guarda de una forma
lgica. Sirven para facilitar al ordenador y al usuario la recepcin, el tratamiento,
el almacenamiento y el envo de datos.
1. Introduccin
58
1.6. PROGRAMAS EXISTENTES PARA EL CLCULO DE LAS NECESIDADES
HDRICAS.
En el mercado existen diversos programas para el clculo de las necesidades
hdricas de los cultivos, basados en datos meteorolgicos medios o en datos en
tiempo real.
Se har mencin de algunos programas que pueden servir de ayuda para el
clculo de las necesidades hdricas: clculo de la evapotranspiracin, textura de
suelos y simuladores.
Los programas analizados son, en su mayora, de adquisicin gratuita y el medio
ms rpido de obtenerlos es a travs de Internet. El hecho de que sean gratuitos
no significa que se puedan utilizar comercialmente sino que lo son para el
aprendizaje, para la prueba durante un tiempo o como referencia.
Al final de la descripcin de algunos de los programas probados se proporciona la
direccin de un servidor de la Universidad de Kassel (Alemania) donde se
pueden obtener los programas gratuitamente o comprarlos directamente a sus
desarrolladores.
Los programas se dividen, segn su funcin, en:
-Clculo de la evapotranspiracin de referencia.
-Clculo de la evapotranspiracin de cultivo.
-Clculo de la textura.
-Adquisicin de datos meteorolgicos.
-Clculo de las necesidades hdricas de los cultivos.
-Simuladores.
-Otros programas relacionados con las necesidades hdricas.
1. Introduccin
59
1.6.1. Programa para el clculo de la evapotranspiracin de referencia.
Se describir un programa que puede realizar el clculo de la evapotranspiracin
de referencia (ETo).
Daylet.
Realizado por la Universidad de Cranfield (UK).
Est editado en ingls. Y es de libre distribucin en: www.cranfield.ac.uk/SAFE
Este programa sirve para el clculo de la evapotranspiracin de referencia
mediante algunos de estos mtodos: Penman, FAO-Penman y Penman-Monteith.
Existe una variante del programa, publicado por la misma universidad, que realiza
el clculo de la ETo para una serie de datos meteorolgicos. Esta variante del
programa se llama ET.
Vase figura 1 en el anejo 2.
1.6.2. Programa para el clculo de la evapotranspiracin del cultivo.
La FAO public un programa en forma de hoja de clculo para estimar la ETo.
Fao.Pmon.xls
Es una hoja de clculo que sirve para evaluar mensualmente la
evapotranspiracin de referencia mediante el mtodo Penman-Monteith.
Ha sido realizado por la FAO y est editado en ingls y es de libre distribucin,
pudindose encontrar en www.fao.org.
Es un programa altamente didctico y un excelente simulador: Fcil de entender.
Los clculos se actualizan en el momento en que se cambia algn dato. En una
hoja adyacente se dibuja la ETo del cultivo.
Vase figuras 2, 3, 4, y 5 del anejo 2.
1. Introduccin
60
1.6.3. Programa para el clculo de la textura.
Existe un programa para el clculo de la textura de un suelo:
SW_ES
Es un programa que sirve para el clculo de la textura de un suelo y que
proporciona los datos que se pueden ver en la imagen, de acuerdo a cada
porcentaje textural.
El programa ha sido realizado por el Dr. Saxton y existe una edicin en castellano.
Es de libre distribucin en la direccin:
"http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html".
Vase figura 6 del anejo 2.
1.6.4. Programas para la adquisicin de datos meteorolgicos.
Existen diversos programas y servicios meteorolgicos que se ocupan de
suministrar datos referentes a la meteorologa:
FAO
La FAO suministra datos meteorolgicos medios para diversas zonas del mundo.
Para Espaa distribuye 58 estaciones meteorolgicas, que suelen coincidir con
capitales provinciales. Los datos se estraen de una secuencia de 20 a 30 aos.
Se pude encontrar en la direccin de Internet: www.fao.org
INM
El Instituto Nacional de Meteorologa suministra datos meteorolgicos a la carta.
Son datos con el correspondiente cargo econmico.
PACCOM
La Generalitat de Catalunya, a travs de su "Departament d'Agricultura",
distribuye datos agrometeorolgicos de 40 estaciones, repartidas por la geografa
catalana, mediante lnea telefnica.
1. Introduccin
61
Los datos que se pueden extraer son: horarios, diarios y mensuales.
El servicio es gratuito y se pude obtener a travs del Departament dAgricultura,
Ramaderia i Pesca.
Constituye el referente ms cercano a nivel de cultivo por ser estaciones
repartidas por todas las comarcas de Catalunya.
Vase figura 7 del anejo 2.
1.6.5. Programas para el clculo de las necesidades hdricas de los cultivos.
Para la el clculo de las necesidades hdricas de los cultivos existe diversos
programas. Se mostrar una hoja de clculo, el programa suministrado por la
FAO y el programa que suministra la Generalitat de Catalunya:
ReqRiego.xls
Es un programa en forma de hoja de clculo para evaluar las necesidades
hdricas mensuales de los cultivos mediante el mtodo Penman.
Est realizado por el profesor Gonzalo Freites del Departamento de Hidrologa de
la Universidad Central de Caracas (Venezuela). Su presentacin est hecha en
castellano.
Se puede obtener a travs de la red Irrisoft (vase bibliografa).
Es un programa altamente didctico y un excelente simulador: Fcil de entender.
Los clculos se actualizan cuando se modifica algn dato. Realiza el dibujo del
Kc.
Vase figuras 8, 9, 10 y 11 del anejo 2.
1. Introduccin
62
CROPWAT
Es un programa para el clculo de las necesidades hdricas de los cultivos por el
mtodo Penman-Monteith combinado (FAO, 1990) que se nutre de datos
meteorolgicos medios mensuales y de los datos de cultivo que tiene
almacenados. En todo momento es posible modificar los datos a travs de su
men.
Ha sido realizado por la FAO. Existe una versin antigua (5.7) en castellano y dos
versiones en ingles: la versin 7.0 y la versin Windows. La versin de Windows
est en fase de prueba y algunas de sus opciones no estn disponibles.
Se puede obtener gratuitamente en www.fao.org. La versin en castellano (5.7) va
incorporada en el volumen 46 de Riegos y Drenajes.
La versin 7.0 simplifica el manejo y proporciona un aspecto ms grfico.
Vase figura 12 del anejo 2.
PACREG
Es un programa para el clculo de las necesidades hdricas de los cultivos pero
presume calculada la ETo del cultivo. El programa puede recoger los datos
meteorolgicos obtenidos a travs del programa PACREG.
Lo ha realizado la Generalitat de Catalunya y est editado en cataln.
Se puede obtener gratuitamente a travs del Departament dAgricultura,
Ramaderia i Pesca.
Es un programa que abarca el clculo de las necesidades hdricas. Realiza algn
clculo correspondiente al diseo hidrulico al tener en cuenta el caudal de la
instalacin, el caudal de emisores y el coeficiente de uniformidad. La entrada
manual de datos meteorolgicos es algo engorrosa y presume calculada la ETo.
Vase figura 13 del anejo 2.
1. Introduccin
63
1.6.6. Programas para la simulacin de las necesidades hdricas.
Los anteriores programas podran servir como simuladores, en la medida en que
se pueden introducir datos supuestos para realizar sus correspondientes clculos.
Pero existen diversos programas que entran dentro de la categora de la
simulacin, por ser herramientas destinadas a investigadores o tcnicos. Slo se
mencionar la existencia de alguno de ellos por no ser el objetivo primordial de
este trabajo: Bigsim, CropSyst y WaterMod.
Vase figuras 14, 15, y 16 del anejo 2.
1.6.7. Otros programas relacionados con las necesidades hdricas.
En la direccin http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html
se pueden encontrar programas destinados a la irrigacin. Alguno de los
programas son de libre distribucin pero otros son comerciales. Alguno de los
programas comerciales se puede probar por un perodo determinado.
Vase figura 17 del anejo 2.
A continuacin, se detallan los programas disponibles en la direccin arriba
indicada:
AWSET (Potential Evapotranspiration for Automatic Weather Stations)
BALANCE ( Soil Water BALANCE)
BIGSIM (Balanced Irrigation schedule with Groundwater contribution SIMulation model)
CITRUS IRRIGATION SCHEDULING (Citrus irrigation, scheduling, moisture level, stress)
CLIMWAT ( A Climatic Database for Irrigation Planning and Management)
CROPWAT (Crop Water Requirements and Irrigation Scheduling)
CWR-VB (Crop Water Requirements for Windows)
DAILYET ( Daily Evapotranspiration)
ENWATBAL (Evaporation from the soil and plant canopy)
ETPOT 1.0 (Module for the calculation of potential transpiration and evaporation )
EVAP (Program to calculate Evapotransipration using one of 5 metrics)
HFAM (Watershed Resource Analysis, Reservoir Management, irrigation, hydropower, water
supplies)
HOURLYET (Hourly Evapotranspiration for Automatic Weather Stations)
HOWWET ? (Estimating the storage of water and mineralised nitrogen in your soil using rainfall
records )
HYDRA (Modelling and Decision Support Systems to irrigation)
I M S ( Irrigation Scheduling)
1. Introduccin
64
INCA (Irrigation Network Control & Analysis)
I W R ( Irrigation Water Requirements
LANDSCAPE WATER MANAGEMENT SOFTWARE (Auditing & Budgeting) Mac
PET (potential evapotranspiration, Macintosh)
Microweather 94 (Evapotranspiration, crop microclimate simulation, climate, soil)
P E T (Potential Evapotranspiration)
POT._EVAPO. (Potential Evapotranspiration)
PRORIEGO (Available only in Spanish - sorry)
REF-ET (Reference evapotranspiration)
REQRIEGO (Reference evapotranspiration and crop water requirements)
SPACTEACH (Soil/plant water dynamics)
THE WATER AND PLANT RELATIONSHIP (Relationship, water in plants, photosynthesis )
UCA ( Unit Command Area Simulation Model )
WATER MANAGEMENT UTILITIES (Water management - irrigation system design)
WATERMGT (Water Management - CD Rom)
WATROP ( Irrigation Sytem Uniformity on Crop Yield )
2. Objetivos
65
2. OBJETIVOS.
2. Objetivos
66
2. OBJETIVOS.
Realizar un programa para el clculo de las necesidades de riego de los cultivos,
considerando para el clculo de la evapotranspiracin de referencia el mtodo
Penman-Monteith de dos pasos descrito por la FAO en 1990.
3. Material y mtodos
67
3. MATERIAL Y MTODO
3. Material y mtodos
68
3.1. MATERIAL.
Se ha empleado el material informtico que a continuacin se detalla:
- Lenguaje de programacin Visual-Basic 5.0

.
- Base de datos Microsoft Access-97

.
- Sistema operativo de trabajo Windows-98

.
- Ordenador personal con las siguientes caractersticas: Procesador Pentium, 64
megabytes de memoria de solo lectura (RAM) y 2 gigabytes de disco duro.
3.2. MTODO.
El mtodo utilizado para la realizar el programa programacin se ha basado en
una programacin clsica, apoyada en mdulos que coinciden con las entradas
de datos (clima, suelo, etc.) pero con un aspecto visual para el usuario.
Mtodo para realizar el clculo de las necesidades hdricas:
- Metodologa expuesta por Doorenbos-Prutt en el cuaderno FAO-24.
- Clculo de la ETo por el mtodo Penman-Monteith de dos pasos publicado por
la FAO en 1990.
- Los coeficientes de cultivo estarn divididos en cuatro fases, exceptuando los
cultivos plurianuales que lo estarn en doce fases correspondientes a 12
meses. Como datos opcionales, recoger los coeficientes de cultivo (Kc)
propuestos por FAO-24, se exceptuarn los cultivos menos interesantes para
la nuestro pas (caf, t...). Dichos coeficientes han de ser susceptibles de ser
modificados. El Kc inicial de los cultivos de 4 fases con el valor en blanco o
asterisco se calcular mediante una estimacin de las 5 grficas.
- La entrada de datos climticos ser: mensual para calcular la previsin de riego
o diaria para calcular el riego en tiempo real (da a da).
3. Material y mtodos
69
- La precipitacin Efectiva se calcular por alguno de los mtodos expuestos en
la introduccin.
- No se tendrn en cuenta los fenmenos de Percolacin profunda, escorrenta,
aportacin capilar y el fenmeno de adveccin.
- Se tendr en cuenta la velocidad de infiltracin.
- Se contemplar el efecto de localizacin debido al porcentaje de terreno
sombreado para los riegos localizados.
- Cuando sea necesario, se efectuar el lavado de sales para una productividad
mnima deseada.
- La programacin del riego estar comprendida dentro de la reserva fcilmente
utilizable, suponiendo que no hay limitaciones de agua. El momento de riego
ser cuando se agote un porcentaje de la RFU, o en un intervalo de das de
riego. Cuando se introduzca el intervalo de riego, el momento de riego ser el
primero que cumpla la condicin: agotamiento de un porcentaje de la RFU o
intervalo de riego.
- La dosis de riego vendr marcada por el porcentaje de llenado de la RFU.
- Se contemplar el porcentaje inicial de agua de la RFU.
- Para calcular las necesidades brutas se tendr en cuenta la eficiencia de la
aplicacin y la fraccin de lavado. Aplicndose, el que suponga mayor dosis
de lavado.
- No se tendr en cuenta el diseo hidrulico, exceptuando el caudal de la
instalacin.
- Se realizar una estimacin del tiempo mnimo de riego debido a la infiltracin y
al caudal de la instalacin.
- Los clculo que se obtendrn sern: balance hdrico y riegos a efectuar
4. Resultados y discusin
70
4. RESULTADOS Y DISCUSIN
4. Resultados y discusin
71
4. RESULTADOS Y DISCUSION.
El resultado ha sido un programa con funcionamiento modular, que calcula las
necesidades hdricas cuando detecta que todos los datos estn introducidos.
El diseo comienza con un nombre que identifica el grupo de datos que se van a
introducir.
A continuacin, se puede introducir la informacin que corresponde a cada una
de las reas (descripcin de la finca, suelo, clima, agua de riego, tipo de riego y
programacin).
Por ltimo, se encuentra el mdulo de clculo que realiza las operaciones y las
muestra por pantalla.
Adems, se dispone de un programa de mantenimiento para entrar datos
correspondientes a cada tabla.
El listado del programa se puede ver en el anejo 5.
4. Resultados y discusin
72
4.1. FLUJO DE DATOS.
Como se puede apreciar en la figura 1 del anejo 3, existen siete mdulos de
entrada de datos para poder realizar el clculo. En realidad, seran 2 mdulos
ms si se incluye la entrada del diseo y el mdulo de clculos.
El flujo de informacin converge hacia el proceso de clculo, pero, en ocasiones,
se pueden ver flechas con ambos sentidos. Este doble sentido en el flujo de la
informacin indica que la informacin se puede visualizar en cualquier momento
para corregirla o ampliarla. Por ejemplo, el mdulo de entrada de datos enva la
informacin a la tabla Programacin Clima; esta informacin se ha de poder
corregir y ampliar con nuevos datos climticos.
La informacin necesaria para realizar la estimacin puede proceder del soporte
magntico o se pude introducir a travs del teclado; por ejemplo, el mdulo de
datos del cultivo puede recoger informacin entrada por teclado o puede realizar
una lectura a las siguientes tablas: Cultivos, Kc, profundidad races, fraccin
agotamiento, das cultivo, y tolerancia a sales.
El nexo de unin entre cada uno de los ficheros suele ser el nombre del diseo,
excepto en los ficheros que se encuentran en la parte superior. Estos ficheros
estn unidos por el tipo de informacin.
Cada vez que se realiza una modificacin o ampliacin de datos, el proceso de
clculo rellena con los datos oportunos el fichero de balance hdrico; de tal
manera que el fichero de balance hdrico contendr informacin referente a los
datos entrados por cada uno de los mdulos.
4. Resultados y discusin
73
4.2. PROGRAMA.
Los mdulos disponibles en el programa son:
- Diseo.
- Mantenimiento de tablas.
- Finca.
- Cultivo.
- Clima.
- Suelo.
- Agua de riego.
- Tipo de riego.
- Programacin del riego.
- Resultados.
Todas las pantallas que aparecen en el programa informan en su parte superior
del nombre de diseo agronmico que est activo.
Exceptuando el men, cada uno de los programas tiene tres partes diferenciadas:
1) Parte superior: es la barra donde van alojadas las funciones de grabacin y
salida del mdulo.
2) Parte media: Es donde se introducen o visualizan los datos. En algunos
mdulos se encuentra la figura [...], que sirve para buscar datos en las tablas.
3) Parte inferior: Contiene una lnea de mensajes para informar de las acciones
que se han de realizar.
El men, como se puede apreciar en la figura 2 del anejo 3, es el lugar de acceso
a cada uno de los mdulos.
Si la aplicacin no est conforme con algn dato entrado, surge una pantalla de
formato pequeo que informa de la accin incorrecta.
4. Resultados y discusin
74
A continuacin, se expondrn con detalle la funcin de cada uno de los mdulos:
4. 2. 1. Diseo.
El diseo est contenido en el men DISEO AGRONMICO.
Consta de dos carpetas con funciones distintas:
- Carpeta Nuevo Diseo. Es el lugar por el cual se introducir el nombre del
nuevo diseo. Si el nombre de diseo existiera, el programa dar aviso. Vase
figura 3 del anejo 3.
- Carpeta Abrir Diseo. Esta carpeta tiene dos funciones: escoger un diseo
existente o eliminarlo.
Para seleccionar un diseo se tendr que apuntar con el ratn en la zona
donde aparecen todos los diseos y pulsar Aceptar.
Para borrar un diseo, primero se apuntar a la zona donde aparecen todos
los diseos y despus se pulsar Eliminar. El programa pedir confirmacin
para eliminar el diseo.
Cuando se pulsa en alguno de los diseos, aparece una pequea descripcin
de las caractersticas que servir de orientacin sobre el diseo.
Vase figura 4 del anejo 3.
4.2.2.Mantenimiento de tablas.
El mantenimiento de tablas est contenido en el men Diseo Agronmico.
Sirve para dar de alta, modificar o eliminar datos correspondientes a las tablas del
programa. Vase figura 5 del anejo 3. Los datos que se entren por este mdulo
pasarn a estar disponibles para la toda aplicacin
4. Resultados y discusin
75
Estas tablas son: nombre de cultivo, Kc del cultivo, das de cultivo, raz del cultivo,
fraccin de agotamiento permisible del cultivo, meteorologa, tipo de textura y
sistemas de riego. En la figura 6 del anejo 3 se puede ver el acceso a la tabla de
sistemas de riego.
4.2. 3. Finca.
El mdulo Finca est en el men de Entrada de Datos.
Por este mdulo se introducirn los datos referentes a la finca y el tipo de datos
meteorolgicos. Algunos de los datos no tienen relevancia para el clculo de las
necesidades hdricas, pero es necesario disponer de una pequea referencia.
Vase figura 7 del anejo 3.
Los datos que se solicitan son:
Descripcin: Una pequea descripcin de la finca y del usufructuario de la
misma.
Nombre de la finca: Nombre con el que es conocida la finca.
Poblacin. Entrar la poblacin
Provincia. Entrar la provincia y el pas.
Latitud: Es una de las coordenadas que sitan a la finca dentro de la Tierra.
Adems, tiene utilidad para el clculo de la radiacin neta cuando slo se
disponga del nmero de horas de sol (Smith, M., 1990).
Longitud: Es la otra coordenada que ubica a la finca dentro de la Tierra.
Altitud: Tiene utilidad para estimar la evapotranspiracin de referencia (Smith,
1990).
Datos meteorolgicos: Por esta entrada se definen qu datos meteorolgicos se
van a suministrar. Se introducir D en el caso de disponer de datos climticos
diarios y M para datos climticos mensuales.
Superficie de la finca: Se introducir en metros cuadrados. Servir para calcular
la dosis bruta de riego de la finca.
4. Resultados y discusin
76
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
Para realizar alguna modificacin, se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4. 2. 4. Cultivo.
El mdulo Cultivo est en el men de Entrada de Datos.
En este mdulo se introducirn los datos referentes al cultivo: coeficiente de
cultivo (Kc), fraccin de agua disponible en el suelo, das de cultivo, profundidad
de las races, tolerancia a la sal y fecha de plantacin.
En este mdulo se pueden seleccionar los datos publicados por al FAO en el
manual FAO-24 o se pueden variar de acuerdo a las necesidades.
Si se seleccionan todas las opciones disponibles en los iconos [...] presentar los
datos publicados por la FAO (Doorenbos et alter, 1977).
Se ha intentado respetar la entrada de los coeficientes de cultivo: en el caso de
cultivos leosos el Kc est dividido en 12 meses y en el resto de los cultivos est
divido en 4 fases (inicial, desarrollo, media y final).
Vase figuras 8 y 9 del anejo 3.
Los datos que se solicitan son:
Nombre del cultivo: Se puede entrar el nombre del cultivo o se puede
seleccionar de una lista pulsando en el icono de la derecha.
4. Resultados y discusin
77
Grupo: Pulsando en el icono de la derecha aparecen 7 grupos de cultivos:
cultivos extensivos y hortalizas, arroz, alfalfa, rboles caducifolios (y de nuez),
ctricos, uva y pltano. Se seleccionar el ms adecuado a nuestras necesidades.
Cada grupo de cultivos determina que la entrada del Kc sea mensual o en 4
fases; si se escogen rboles caducifolios, ctricos, uva o pltano, el Kc ser
mensual; si se escoge el resto estar dividido en 4 fases.
Adems, para poder recoger los valores publicados en FAO-24 (Doorenbos et
alter, 1977), cada grupo de cultivos activar las opciones de: cubierta vegetal,
heladas, humedad relativa, viento y edad de plantacin. Por ejemplo, el grupo de
ctricos activar las opciones de cubierta vegetal y edad de plantacin. En este
caso, si el usuario rellena las opciones de heladas y edad de plantacin,
aparecer el valor publicado en FAO-24. Si no se est interesado en los valores
de FAO-24, se continuar por la entrada de los coeficientes de cultivo.
Cubierta vegetal. Es una de las opciones del manual FAO-24. Est disponible
para rboles caducifolios y ctricos.
Heladas. Es una de las opciones del manual FAO-24. Est disponible para
rboles caducifolios y uva.
Humedad relativa. Es una de las opciones del manual FAO-24. Est disponible
para cultivos extensivos y hortalizas, arroz, alfalfa, rboles caducifolios y uva.
Viento. Es una de las opciones del manual FAO-24. Est disponible para cultivos
extensivos y hortalizas, arroz, alfalfa, rboles caducifolios, pltano y uva.
Edad plantacin. Es una de las opciones del manual FAO-24. Est disponible
para rboles caducifolios, ctricos y pltano. En el caso concreto del pltano, se
refiere a pltanos de primer cultivo o pltanos de los siguientes cultivos.
En la figura 8 del anejo 3, se puede observar un ejemplo de seleccin de los
valores publicados en FAO-24 para un cultivo de ctricos sin cubierta vegetal y
para rboles adultos; se puede ver que los coeficientes estn divididos en 12
meses.
Si el usuario no est conforme con los valores propuestos puede modificarlos
como considere oportuno.
Si no se hubieran rellenado las opciones del grupo de cultivo, se tendrn que
introducir los valores manualmente.
4. Resultados y discusin
78
Kc. Por este campo se introducen los valores correspondientes de coeficiente de
cultivo. Est divido en 4 fases para los cultivos extensivos y huerta, arroz y alfalfa;
y est divido en 12 fases para los cultivos de rboles caducifolios, ctricos, uva y
pltano.
En los cultivos de 4 fases, el valor correspondiente a la fase de desarrollo no se
introduce porque el programa realiza una estimacin proporcional entre el valor de
la fase inicial y el valor de la fase final por el nmero de das que tiene la fase de
desarrollo.
Si el valor de la fase inicial de los cultivos divididos en 4 fases est en blanco o en
asterisco, el programa realizar una estimacin de acuerdo a la ETo y al intervalo
de riegos. Si el valor de intervalo de riegos est en blanco, el programa presupone
un intervalo de riegos de 7 das.
Das. Es el nmero de das que tiene la fase del cultivo. Es una opcin disponible
en los cultivos divididos en 4 fases. Este valor servir para calcular el valor de Kc
de la fase de desarrollo, la profundidad de la raz en la fase de desarrollo y la
fecha de final de cultivo. Es una opcin no disponible para los cultivos de 12
fases.
Profundidad de Races. Es la profundidad efectiva de las races. En los cultivos
de 4 fases se divide en 4 partes, realizndose una estimacin en la fase de
desarrollo. En los cultivos de 12 fases se supone un nico valor de profundidad
radicular.
El valor de la profundidad radicular servir para conocer la cantidad de agua que
es capaz de absorber un cultivo.
Se deber entrar el valor de la profundidad del terreno, si el valor de ste es
menor que la profundidad radicular.
Fraccin de agua disponible en el suelo. Es el valor en el que no se produce
una reduccin del rendimiento del cultivo debido a la carencia de agua. Este valor,
multiplicado por la diferencia entre la capacidad de campo y el punto de
marchitamiento, determinar la reserva de agua fcilmente utilizable (RFU).
Tolerancia a las sales. Este valor determinar la cantidad agua suplementaria
que se deber aportar para tener un rendimiento determinado.
4. Resultados y discusin
79
Fecha de plantacin. En los cultivos anuales se introducir la fecha (mes-dia-
ao) correspondiente y se introducir el primer da del ao para el resto de
cultivos (01-01-xxxx), siendo xxxx el valor del ao correspondiente.
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
Para realizar alguna modificacin se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4.2.5. Meteorologa.
El mdulo Meteorologa est en el men de Entrada de Datos.
En este mdulo se introducirn los datos referentes a los valores
micrometeorolgicos para calcular la evapotranspiracin de referencia (Smith,
1990).
La pantalla inicial dispone de dos opciones (vase figura 10 anejo 3):
Entrada de datos
Obtener datos externos.
La opcin de entrada de datos sirve para entrar manualmente los datos
climticos o para modificarlos.
La opcin obtener datos externos realiza una lectura de los datos climticos
disponibles en un fichero externo que se puede grabar por mantenimiento de
tablas
Cuando se realiza una entrada de datos o se obtiene un fichero externo, el
programa trabaja sobre la base del tipo de datos meteorolgicos introducidos por
la pantalla de datos de la finca. Si el fichero es diario (D) crear unos registros
diarios para los datos meteorolgicos. Si el fichero es mensual (M) crear unos
registros mensuales para los datos meteorolgicos.
4. Resultados y discusin
80
Primero se explicar la obtencin de datos externos.
Obtencin de datos externos.
Como se puede ver en la figura 11 del anejo 3, en el momento en que se pulsa
Obtener datos externos aparece una lista con los datos disponibles. En el caso
de datos mensuales, se puede decir que los datos servirn para cualquier ao. En
el caso de datos diarios, esta lista no estar actualizada.
Entrada de datos.
Esta opcin tendr un calendario mensual para datos meteorolgicos mensuales
(vase figura 13 del anejo 3) y un calendario diario para datos meteorolgicos
diarios (vase figura 12 del anejo 3).
El calendario mensual dispone de los doce meses del ao. De tal manera, que al
pulsar sobre cualquier mes se activar la pantalla de entrada de datos.
El calendario diario dispone de los das que hay en el mes y ao consultados. Se
puede ir de un mes a otro y de un ao a otro pulsando sobre las teclas [<], [<<],
[>>] y [>].
En la figura 14 del anejo 3, se puede ver la entrada de datos meteorolgicos.
La entrada de datos meteorolgicos es comn para los dos tipos de datos
(mensuales y diarios) e informa, en su parte superior, de la fecha que se ha
pulsado.
Dispone de las siguientes entradas:
Temperatura mxima. Se introducir la temperatura mxima en grados
centgrados. Se dispone de una precisin de un decimal. Si slo se tiene la
temperatura media, se introducir el mismo valor en temperatura mxima y en
temperatura mnima.
4. Resultados y discusin
81
Temperatura mnima. Se introducir la temperatura mnima en grados
centgrados. Se dispone de una precisin de un decimal. Si slo se dispone de la
temperatura media, se introducir el mismo valor en temperatura mxima y en
temperatura mnima.
Humedad mxima y mnima. Si se activa este cuadro, las entradas de humedad
mxima i humedad mnima estarn disponibles.
Humedad mxima. Se introducir el calor porcentual de la humedad mxima.
Slo est disponible si el cuadro de Humedad mxima y mnima est activado.
Humedad mnima. Se introducir el calor porcentual de la humedad mnima. Slo
est disponible si el cuadro de Humedad mxima y mnima est activado.
Humedad media. Se introducir el calor porcentual de la humedad media. Slo
est disponible si el cuadro de Humedad mxima y mnima NO est activado.
Viento. Se introducir la velocidad del viento diario en kilmetros por segundo.
Radiacin. Si se activa el cuadro de Radiacin, estar disponible la entrada de la
radiacin neta. Si no est activado el cuadro de Radiacin, estar disponible la
entrada del nmero de horas de sol.
Radiacin Neta. Se introducir el valor de la radiacin neta diario en megajulios
por metro cuadrado y da. Se dispone de una precisin de un decimal. Esta
entrada estar activada cuando el cuadro de radiacin tenga la marca .
Horas sol. Se introducir el valor del nmero de horas de sol diarias en horas da.
Se dispone de una precisin de un decimal. Esta entrada estar activada cuando
el cuadro de radiacin NO tenga la marca .
Precipitacin. Se introducir el valor de la precipitacin cada en milmetros por
metro cuadrado y perodo. Siendo el perodo diario si la entrada de datos
meteorolgicos es diario y mensual cuando la entrada de datos meteorolgicos
sea mensual.
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben y est disponible el calendario.
4. Resultados y discusin
82
4. 2. 6. Suelo.
El mdulo Suelo est en el men de Entrada de Datos.
En este mdulo se introducirn los datos referentes a las caractersticas fsicas
del suelo (vase figura 15 del anejo 3).
Existen tres vas para entrar los datos:
- Se dispone de la clase textural.
- Se dispone del porcentaje textural.
- Se dispone de la analtica fsica de suelos.
Es conveniente disponer de un anlisis de suelos para tener constancia de la
realidad del suelo donde se asienta el cultivo. Entrar la clase textural o el
porcentaje textural supone una estimacin fsica del suelo que puede llevar a
obtener datos errneos. En la tabla 4 se puede ver los datos asignados a cada
clase textural (Yage, 1996):
Tabla 4. Datos asignados por defecto.
Textura Arena
[%]
Arcilla
[%]
Limo
[%]
Densidad
Aparente
[g/cm3]
Infiltracin
[mm/hora]
Eficiencia
Lavado
[%]
Fuente
ARCILLOSO 18 65 17 1,19 3,8 30 YAGE
ARCILLOSO-ARENOSO 50 45 5 1,34 8 70 ESTIMADA
ARCILLOSO-LIMOSO 6 48 46 1,30 5 50 YAGE
ARENOSO 94 4 2 1,70 19 100 YAGE
ARENOSO-FRANCO 83 7 10 1,66 17 90 YAGE
FRANCO 41 19 40 1,51 8,9 70 YAGE
FRANCO-ARCILLOSO 33 35 32 1,40 6,4 60 YAGE
FRANCO-ARCILLOSO-ARENOSO 60 28 12 1,45 12 80 ESTIMADA
FRANCO-ARCILLOSO-LIMOSO 10 35 55 1,40 12 60 ESTIMADA
FRANCO-ARENOSO 65 10 25 1,60 16 80 YAGE
FRANCO-LIMOSO 20 15 65 1,51 7,6 60 YAGE
LIMOSO 7 7 86 1,51 8 60 YAGE
4. Resultados y discusin
83
A continuacin se vern los datos a entrar segn la va escogida:
- Clase textural: Pulsando en opciones del tipo de suelo aparecen las 12 clases
texturales de la USDA, vase captulo 3 del anejo 4. Al pulsar en una de ellas
aparece el valor estimado del porcentaje de arena, limo y arcilla (slo es
informativo), la capacidad de campo, el punto de marchitamiento, la densidad
aparente estimada, la tasa de infiltracin y la eficiencia de lavado de sales
estimada. Hay que volver a avisar que estos datos son meramente
informativos.
- Porcentaje textural: Introduciendo los valores porcentuales de arena, arcilla y
limo calcula la clase textural y los valores estimados de capacidad de campo,
punto de marchitamiento, densidad aparente, la tasa de infiltracin y la
eficiencia en el lavado de las sales.
- Anlisis de suelos: Se introducir el valor de la analtica de suelos. Es la
entrada ms recomendada. Se aconseja disponer de anlisis de suelos.
Las entradas en esta pantalla son:
Arena. Se introducir el porcentaje de arena.
Arcilla. Se introducir el porcentaje de arcilla.
Limo. Se introducir el porcentaje de limo.
Tipo de suelo. Se escoger la clase textural de las opciones o se calcular
automticamente, de acuerdo a los valores entrados para cada textura.
Capacidad de campo. Se introducir la capacidad de campo en porcentaje de
suelo seco, o el programa lo calcular automticamente (Yage, 1996).
Punto de marchitamiento. Se introducir el porcentaje de suelo seco en el punto
de marchitamiento, o el programa lo calcular automticamente (Yage, 1996).
Densidad aparente. Se introducir la densidad aparente en gramos por
centmetro cbico, o el programa propondr un valor.
Infiltracin. Se introducir la tasa de infiltracin en milmetros por hora, o el
programa propondr un valor.
4. Resultados y discusin
84
Eficiencia Lavado. Se introducir el porcentaje de la eficiencia en el lavado de
sales.
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
Para realizar alguna modificacin se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4. 2. 7. Agua de riego.
El mdulo Agua de riego est en el men de Entrada de Datos.
En este mdulo se introducirn los datos referentes a la conductividad elctrica
del agua de riego (vase figura 16 del anejo 3). Este valor determinar el aporte
suplementario de agua para realizar el lavado de sales (Yage, 1996).
El nico valor a entrar es el siguiente:
Conductividad elctrica Agua. Se introducir el valor de la conductividad
elctrica del agua de riego en dS/m.
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
Para realizar alguna modificacin se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4. Resultados y discusin
85
4. 2. 8. Tipo de riego.
El mdulo Tipo de riego est en el men de Entrada de Datos.
En este mdulo se introducirn los datos referentes al sistema de riego, eficiencia
de la aplicacin y caudal de la instalacin (vase figura 17 del anejo 17).
En un diseo total (agronmico + hidrulico) esta pantalla tendra un valor
importante. Sera el lugar para entrar las caractersticas del sistema de riego:
caudal de los emisores, disposicin de los emisores, laterales de riego, etctera.
Los datos a entrar son los siguientes.
Sistema de Riego. Se ha de introducir el nombre del sistema de riego o se
escoger el disponible en la lista de opciones. Si se escoge de la lista de
opciones, los valores de tipo de riego y eficiencia en la aplicacin del riego sern
proporcionados automticamente.
Tipo de Riego. Se introducir L en el caso de riego localizado y S para el resto.
Este valor determina la forma de clculo en el lavado de sales.
Eficiencia de Riego. Se introducir el porcentaje de la eficiencia en la aplicacin
de agua de riego. Este valor, junto con el tipo de riego y con la dosis neta, servir
para calcular la dosis bruta de riego.
Caudal Instalacin. Se introducir el caudal de agua de la instalacin,
considerado en metros cbicos/hora. El caudal de la instalacin, la superficie de la
instalacin y la tasa de infiltracin del suelo determinarn el tiempo mnimo de
riego en horas.
rea sombreada. Se introducir el porcentaje de sombra que da el cultivo sobre
el campo. Servir para calcular el coeficiente de localizacin en cultivos regados
por goteo.
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
4. Resultados y discusin
86
Para realizar alguna modificacin se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4. 2. 9. Programacin del Riego.
El mdulo Programacin del riego est en el men de Entrada de Datos.
En este mdulo se introducirn los datos relativos a la programacin del riego y al
tipo de lluvia efectiva (vase figura 18 del anejo 3).
Para la programacin del riego se ha de establecer el momento de riego, el
volumen de riego y la reserva inicial de agua en el suelo.
El momento de riego determina en qu instante se debe regar. Existen diversos
mtodos: cuando se agota la RFU, a intervalos regulares de das, en perodos
concretos, etctera. En este programa se contemplan los dos primeros mtodos.
De manera que, si los valores de agotamiento de la RFU y de intervalo de das se
han rellenado, el momento de riego ser el primer da que cumpla alguna de las
dos condiciones.
El volumen o dosis de riego establece la cantidad de agua que se suministrar en
el momento de riego. Tambin existen diversos mtodos: recarga de la RFU,
volumen constante, volumen variable en funcin de la poca del ao, etctera. En
este programa, se ha contemplado el primer concepto.
La reserva inicial es el volumen de agua que tiene la RFU. En la programacin de
riegos es muy habitual empezar con la capacidad de campo al 100%. Esto
equivale al 100% de la RFU.
La precipitacin efectiva se pude determinar por cuatro mtodos, explicados en la
introduccin. Cada mtodo se adaptar mejor a un clima. Para utilizar el mtodo
4. Resultados y discusin
87
emprico, se deberan calcular los valores de las ecuaciones para la zona de
cultivo.
En la precipitacin efectiva slo se pude activar uno de los cuatro mtodos.
Las entradas en la programacin del riego son las siguientes:
Agotamiento de la RFU. Es el porcentaje de la RFU en el cual se establece el
momento de riego. Puede ir combinado con el intervalo de riego.
Intervalo de riego. Es la frecuencia con que se desea establecer el riego. Puede
ir combinado con el valor de agotamiento de la RFU.
Recarga de la RFU. Es el porcentaje con el que quedar la RFU una vez que se
ha terminado el riego. El valor de recarga de RFU no puede ser igual o inferior al
porcentaje de agotamiento de la RFU.
Porcentaje RFU (reserva inicial). Es el porcentaje de agua que tendr la RFU al
inicio de la programacin del riego.
Porcentaje precipitacin: Representa el porcentaje de precipitacin cada que
ser efectiva.
FAO/AGWL. Son dos ecuaciones que fijarn el volumen de precipitacin efectiva.
El programa utilizar una frmula u otra en funcin de la precipitacin mensual (70
mm/mes).
USDA. Son dos ecuaciones que fijarn el volumen de precipitacin efectiva. El
programa utilizar una frmula u otra en funcin de la precipitacin mensual (250
mm/mes).
Emprico: Son dos ecuaciones variables en las que se han de introducir las
constantes de las mismas. El programa utilizar una frmula u otra en funcin de
la de la constante. Esta constante representa la precipitacin mensual (250
mm/mes).
Una vez que se hayan introducido estos datos se podr pulsar Aceptar para que
los datos se graben.
4. Resultados y discusin
88
Para realizar alguna modificacin se cambiar el valor del campo deseado y
despus se pasar por cada uno de los campos hasta que aparezca Aceptar.
4. 2. 10. Resultados.
El mdulo Resultados est en el men de Resultados.
En este mdulo se realizan los clculos y se visualizan los datos (vase figura 19
del anejo 3).
Al acceder al mdulo se efectan los clculos, apareciendo un mensaje en rojo
que invita a esperar un momento.
Cuando se han efectuado los clculos, se activan dos iconos: Balance hdrico,
Riegos a efectuar. Al pulsar sobre alguno de estos dos iconos se activa la
informacin correspondiente.
Balance Hdrico. Se abre una pantalla en un tratamiento de textos que nos
informa del balance hdrico a lo largo del cultivo. Se puede ver un ejemplo en la
figura 20 del anejo 3.
Al final del balance hdrico se hace un resumen.
Riegos a efectuar. Se abre una pantalla en un tratamiento de textos que nos
informa de los riegos a efectuar a lo largo del cultivo. Se puede ver un ejemplo en
la figura 21 del anejo 3.
Al final del balance hdrico se hace un resumen.
5. Conclusiones
89
5. CONCLUSIONES.
5. Conclusiones
90
5. CONCLUSIONES.
Se ha realizado un programa que permite calcular las necesidades hdricas de
los cultivos, mediante el mtodo del balance hdrico propuesto por la FAO.
El xito en la obtencin de resultados depende de la calidad de los datos que
caracterizan el cultivo. ste es el aspecto ms difcil para conseguir una
estimacin ajustada.
Ser necesario disponer de unos coeficientes de cultivo que se ajusten el
mximo posible al cultivo considerado.
Es necesario realizar pruebas peridicas de evaluacin del sistema de riego
para conocer la eficiencia en la aplicacin del agua.
La eleccin de una buena estrategia en la programacin del riego puede
mejorar las condiciones del cultivo y del personal que realiza el riego.
6. Bibliografa
91
6. BIBLIOGRAFA
6. Bibliografa
92
6. BIBLIOGRAFA.
COROMINAS, J. 1997. El regado en el umbral del siglo XXI: Plan Nacional de
Regados y Plan de Regados de Andaluca. Nmero: 90. Pginas: 22-37. Riegos
y Drenajes XXI.
COROMINAS, J. 1997. El regado en el umbral del siglo XXI: Plan Nacional de
Regados y Plan de Regados de Andaluca. Nmero: 91. Pginas: 46-55. Riegos
y Drenajes XXI.
DOORENBOS, J. y PRUITT, W.O. . 1977. Las necesidades de agua de los
cultivos. FAO-24. F.A.O. 194 pp.
FUENTES YAGE, J.L. . 1996. Tcnicas de riego. M.A.P.A. 471 pp.
GENERALITAT DE CATALUNYA. 1997. PACCOM. Manual de l'usuari.Generalitat
de Catalunya. D.A.R.P. 19 pp.
GENERALITAT DE CATALUNYA.1997.PACREG. Programa de reg localizat i per
superficie (versio 3.0). Manual de l'usuari. Generalitat de Catalunya. D.A.R.P. 48
pp.
M. STEIN, THOMAS. 1998. Irrisoft.
http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html
MARTIN DE SANTA OLALLA, F. y DE JUAN VALERO, J.A. . 1993. Agronoma
del riego. Ediciones Mundi-Prensa. 730 pp.
NADAL, E. Y LACASA, M. 1995. El agua y el regado en el futuro del mundo rural.
M.A.P.A. . 130 pp.
PIZARRO, F. . 1996. Riegos localizados de alta frecuencia (RLAF) goteo,
microaspersin, exudacion. Ediciones Mundi-Prensa. 513 pp.
SEGURA, P. Y ZAPATA, M. . 1995. Riego deficitario controlado. Ediciones Mundi-
Prensa. 188 pp.
SMITH, M. . 1993. CROPWAT. Programa de ordenador para planificar y manejar
el riego. FAO-46. F.A.O. 133 pp.
SMITH, M. .1990. Revised FAO Methodology for Crop Water Requirements.
http://www.fao.org/ag/agl/aglw/webpub/REVPUB.htm. 70 pp.
VALIENTE, M., MONTERO, J., ORTEGA, J.F y TARJUELO, J.M. . 1998 .
Recomendaciones para un eficiente diseo y manejo del riego. Nmero: 97.
Pginas: 39-47. Riegos y Drenajes XXI.
7. Anejos
93
7. ANEJOS.
7. Anejo 1
94
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla1. Porcentaje diario medio de horas diurnas anuales a diferentes latitudes.
7. Anejo 1
95
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 2. Valores del factor f de Blaney-Criddle para diferentes temperaturas y porcentaje diario medio horas diurnas anuales.
7. Anejo 1
96
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Figura 1. Prediccin de la ETo a partir del factor f de Blaney-Criddle.
7. Anejo 1
97
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 3. Radiacin extraterrestre.
7. Anejo 1
98
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 4. Duracin mxima de las horas fuertes de insolacin.
7. Anejo 1
99
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 5. Coeficiente de correccin de radiacin extraterrestre (Ra) en radiacin solar (Rs).
7. Anejo 1
100
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 6. Factor de ponderacin W.
7. Anejo 1
101
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Figura 2. Grficos para determinar la ETo por el mtodo de radiacin.
7. Anejo 1
102
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 7. Factor de correccin c en la ecuacin de Penman.
7. Anejo 1
103
7. ANEJO1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 8. Presin saturante del vapor ea.
7. Anejo 1
104
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 9. Presin del vapor ed.
7. Anejo 1
105
7.ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 10. Factor de conversin de la radiacin extraterrestre en radiacin solar neta.
Tabla 11. Correccin para la temperatura f(t) con respecto a la radiacin de onda larga.
Tabla 12. Correccin para la presin de vapor f(ed) con respecto a la radiacin de onda larga.
Tabla 13. Correccin para la relacin n/N f(n/N) con respecto a la radiacin de onda larga.
7. Anejo 1
106
7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.
Tabla 14. Coeficiente Kp para una cubeta de clase A.
7. Anejo 2
107
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 1. Programa DAYLET.
7. Anejo 2
108
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 2. Programa FAO-PMAN.XLS (continuacin).
7. Anejo 2
109
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 3. Programa FAO-PMAN.XLS (continuacin).
7. Anejo 2
110
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 4. Programa-FAO PMAN.XLS (continuacin)
Tmax Temperatura mxima [C] Aeroterm Trmino aerodinmico [mm d
-1
]
Tmin Temperatura mnima [C] Month Mes
RHmean Humedad relativa media [%] Dayno Da del ao
RHmin Humedad relativa mnima [%] Soldeclin Declinacin solar [rad]
Wind (km/d) Humedad relativa mxima [%] Omega Angulo horario [rad]
Sunhours Horas de sol Dr Distancia relativa Sol-Tierra
ET fao ETo FAO [mm] Ra Radiacin extraterrestre [MJ m
-2
d
-1
]
Avg Temp Temperatura media [C] N Horas de sol mximas
n/N Relacin horas Sol y horas mximas de Sol Rns Radiacin neta de onda corta [MJ m
-2
d
-1
]
Wind (m/s) Viento diario [m/s] f(n/N) Factor de nubes bajas
Ea(Tmax) Presin de vapor en saturacin a temp. Mxima [kPa] sigma(Tx_Tn) Constante de Stefan-Boltzman [MJ
-2
K
-4
d
-1
]
Ea(Tmin) Presin de vapor en saturacin a temp. Mnima [kPa] emissivity Emisividad
Edew Presin actual de vapor [kPa] Rbo Radiacin neta de onda larga [MJ m
-2
d
-1
]
RH(max-min) Humedad relativa media [%] LWR Radiacin neta de onda larga [MJ m
-2
d
-1
]
Dlt(ETx-ETn) Pendiente de la curva de presin de vapor [kPA] Rn (Rns-Rl) Radiacin Neta [MJ m
-2
d
-1
]
P-atm. Presin atmosfrica [kPa] G Flujo de calor del suelo [MJ m
-2
d
-1
]
lambda Calor latente de vaporizacin [MJ kg
-1
] Rn-G Radiacin neta - Flujo de calor del suelo [MJ m
-2
d
-1
]
gamma Constante psicromtrica [kPa C
-1
] Rad Term Trmino debido a la radiacin [MJ m
-2
d
-1
]
rc Resistencia aerodinmica del cultivo Rad Term(-G) Trmino radiacin - Flujo calor suelo [MJ m
-2
d
-1
]
ra Resistencia aerodinmica [ s m
-1
] ETcomb ETo [mm]
gamma* Constante psicromtrica modificada [kPa C
-1
] ET (-G) Evapotranspiracin - Flujo de calor del suelo [mm]
Leyenda de la hoja de clculo FAO-PMON.XLS
7. Anejo 2
111
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 5. Programa FAO-PMAN.XLS (continuacin).
FAO Penman-Monteith - ETo
Ref. Evapotranspiration Rome
0,00
1,00
2,00
3,00
4,00
5,00
6,00
7,00
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
E
T
o

m
m
/
d
a
y
ETo (-G) ETo
7. Anejo 2
112
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 6. Programa SW.
7. Anejo 2
113
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 7. Programa PACCOM.
____ Men gener al __________________________________________________________
____ - - - - - - - - - - - - ___________________+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +___
_____________________________________ 0 Fi ___
____ Est aci ons aut omt i ques _________ 1 Dades di r i es ( r esum) ___
____ - - - - - - - - - - - - - - - - - - - - - - _________ 2 Dades di r i es ( t ot es l es est . ) ___
_____________________________________ 3 Temper at ur es ___
_____________________________________ 4 Humi t at r el at i va ___
____ Dades di r i es __________________ 5 ETo ___
____ - - - - - - - - - - - - - __________________ 6 Radi aci ons ___
_____________________________________ 7 Vel oci t at i di r ecci de vent ___
_____________________________________ 8 Pl uvi omet r i a ___
_____________________________________ 9 Bal an h dr i c ___
_____________________________________ A Expor t ar dades di r i es ___
_____________________________________ B FI NALI TZAR I PENJ AR MODEM ___
_____________________________________+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +___
DARP ( GENERALI TAT CATALUNYA) Di a : 21/ 11/ 98
7. Anejo 2
114
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 8. Programa REQRIEGO.XLS.
7. Anejo 2
115
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 9. Programa REQRIEGO.XLS (continuacin).
7. Anejo 2
116
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 10. Programa REQRI EGO.X LS (continuacin)
ea Presin de vapor saturante [kPa]
HR Humedad relativa [%]
ea-ed Dficit de presin de vapor [kPa]
Uo Velocidad viento diario [m s
-1
]
f(n) Funcin de viento [mm kPa
-1
]
Delta Pendiente de la curva de presin de vapor [kPa]
Gamma Constante psicromtrica [kPa C
-1
]
W Funcin de peso
T. Suelo Tipo de suelo (textura)
CC Capacidad de campo [%]
PMP Punto de marchitamiento permanente [%]
Da Densidad aparente [g cm
-3
]
Pr Profundidad races [cm]
K Factor agotamiento permisible
DEC Declinacin solar [rad]
N Horas de sola mxima [h]
Ra Radiacin extraterrestre [MJ m
-2
d
-1
]
n Horas de sol percibidas [h]
Rns Radiacin neta de onda corta [MJ m
-2
d
-1
]
Rnl Radiacin neta de onda larga [MJ m
-2
d
-1
]
ETo Evapotranspiracin de referencia [mm periodo
-1
]
Kc Coeficiente de cultivo
ETc Evapotranspiracin de cultivo [mm dia
-1
]
Precip.efect. precipitacin efectiva [mm periodo
-1
]
BALANCE Balance hdrico [mm mes
-1
]
Leyenda de la hoja de clculo REQRIEGO.XLS
7. Anejo 2
117
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 11. Programa REQRIEGO.XLS (continuacin).
Kc vs meses del ao
-0,200
0,000
0,200
0,400
0,600
0,800
1,000
1,200
1,400
0 1 2 3 4 5 6 7 8 9 10 11 12
meses del ao
K
c
Ser i e1
7. Anejo 2
118
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 12. Programa CROPWAT 5.7 en espaol.
i - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MENU PRI NCI PAL DE CROPWAT ( 5. 7)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

OPCI ONES DEL PROGRAMA:
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1. Cl cul os de ETo Penman- Mont ei t h
2. Necesi dades de agua de l os cul t i vos
3. Pr ogr amaci n del r i ego
4. Necesi dades de agua del si st ema de r i ego

5. Regul aci n de l a i mpr esor a
6. Sel ecci n de di r ect or i os
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9. Sal i da del CROPWAT
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
Su opci n ?
7. Anejo 2
119
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 13. Programa PACREG 3.0.
____________________________________________________________________________
____________________________________________________________________________
____ Men gener al ___________________+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +___
____ - - - - - - - - - - - - ___________________ 0 Fi ___
_____________________________________ 1 Fi t xer de cul t i us ___
_____________________________________ 2 Dades de l a par cel l a ___
_____________________________________ 3 Reg per super f ci e ___
_____________________________________ 4 Reg l ocal i t zat ___
_____________________________________ 5 Fi t xer cl i mt i c dades r eal s ___
_____________________________________ 6 Fi t xer cl i mt i c dades mi t j anes ___
_____________________________________ 7 Opci ons especi al s ___
_____________________________________+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +___
____________________________________________________________________________
DARP ( GENERALI TAT CATALUNYA) Di a : 17/ 10/ 98
7. Anejo 2
120
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 14. Programa BIGSIM.
7. Anejo 2
121
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 15. Programa CROPSYST.
7. Anejo 2
122
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 16. Programa WATERMOD.
7. Anejo 2
123
7. ANEJO 2. PROGRAMAS PARA EL CLCULO DE LAS NECESIDADES HDRICAS.
Figura 17. RED IRRISOFT
7. Anejo 3
124
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 1. Flujo de datos
PROGRAMACIN
Datos
Finca
Datos
Cultivo
Datos
Climticos
Datos
Suelo
Datos
Agua Riego
Programacin
Riego
Prof. Races
Kc
Sistemas Riego Cultivos
Fraccin Agotami.
Das Cultivo Clima
Tolerancia Sal
BALANCE HDRICO
Clculos
Decisin
BALANCE HDRICO RIEGOS
Texturas Suelo
Tipo Riego
LEYENDA
Entrada/Visualizacin de datos
Proceso
Decisin
Fichero
Listado
7. Anejo 3
125
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 2. Men del programa.
7. Anejo 3
126
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 3. Nuevo diseo en diseo agronmico.
7. Anejo 3
127
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 4. Abrir diseo en diseo agronmico.
7. Anejo 3
128
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 5. Mantenimiento de tablas.
7. Anejo 3
129
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 6. Sistemas de riego en mantenimiento de tablas.
7. Anejo 3
130
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 7. Datos de la finca.
7. Anejo 3
131
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 8. Datos del cultivo (cultivo con Kc en 12 fases).
7. Anejo 3
132
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 9. Datos del cultivo (cultivo con Kc en 4 fases).
7. Anejo 3
133
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 10. Datos meteorolgicos (formato de entrada).
7. Anejo 3
134
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 11. Datos meteorolgicos (obtencin de un fichero meteorolgico).
7. Anejo 3
135
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 12. Datos meteorolgicos (calendario diario).
7. Anejo 3
136
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 13. Datos meteorolgicos (calendario mensual).
7. Anejo 3
137
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 14. Datos meteorolgicos (entrada de datos meteorolgicos).
7. Anejo 3
138
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 15. Datos del suelo.
7. Anejo 3
139
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 16. Datos del agua de riego.
7. Anejo 3
140
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 17. Datos del tipo de riego.
7. Anejo 3
141
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 18. Datos de la programacin de riego.
7. Anejo 3
142
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 19. Resultados.
7. Anejo 3
143
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 20. Resultados. Listado del balance hdrico.
BALANCE HDRICO 28/11/98 19:23:55
Programacin........................................: NARANJAS (CLIMA DIARIO, AO 1998, VICENTE MAS)
Finca...............................................: La Taronjera
Poblacin...........................................: Alcanar
Provincia...........................................: Tarragona
Latitud [g,m,s].....................................: 40 3' 33'' N
Longitud [g,m,s]....................................: 0 31' 28'' E
Altitud [m].........................................: 35
Superficie [m2].....................................: 10000
Cultivo.............................................: NARANJO
Fraccin agua disponible en el suelo................: 0,35
Clase textural......................................: FRANCO
Densidad aparente [g/cm3]...........................: 1,51
Capacidad de Campo [% peso].........................: 19
Punto de Marchitamiento [%peso].....................: 10
Sistema Riego.......................................: GOTEO (ZONAS ARIDAS)
Eficiencia en la aplicacin [%].....................: 90
Caudal instalacin riego [m3/parcela]...............: 12
Conductividad agua de riego [dS/m)..................: 1
Eficiencia en el lavado de sales [%]................: 70
Rendimiento mnimo deseado debido a salinidad [%]...: 100
Fecha Plantacin/Inicio.............................: 01-01-1998
Momento de Riego. Agotamiento de la RFU [%].........: 100
Intervalo de riego [das]...........................: 2
Dosis de riego. Recarga de la RFU [%]...............: 100
Nivel de agua de la RFU al inicio [%]...............: 0
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
01-01-1998 0,97 0,75 0,79 0,57 6,24 60 0,35 28,5 5,67 0,00 0,00 0,0 0,0 0,0
02-01-1998 0,85 0,75 0,79 0,51 6,08 60 0,35 28,5 11,24 0,00 0,00 0,0 0,0 0,0
03-01-1998 1,75 0,75 0,79 1,04 24,10 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
04-01-1998 2,03 0,75 0,79 1,20 0,00 60 0,35 28,5 27,33 0,00 0,00 0,0 0,0 0,0
05-01-1998 0,50 0,75 0,79 0,30 4,06 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
06-01-1998 0,49 0,75 0,79 0,29 31,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
07-01-1998 1,13 0,75 0,79 0,67 0,93 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
08-01-1998 0,32 0,75 0,79 0,19 7,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
144
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
09-01-1998 1,16 0,75 0,79 0,69 0,31 60 0,35 28,5 28,53 0,38 0,57 5,7 6,5 0,5
10-01-1998 2,03 0,75 0,79 1,20 0,00 60 0,35 28,5 27,34 0,00 0,00 0,0 0,0 0,0
11-01-1998 1,05 0,75 0,79 0,62 0,00 60 0,35 28,5 28,53 1,82 2,78 27,8 0,3 2,3
12-01-1998 1,21 0,75 0,79 0,72 0,16 60 0,35 28,5 27,98 0,00 0,00 0,0 0,0 0,0
13-01-1998 0,50 0,75 0,79 0,30 0,16 60 0,35 28,5 28,53 0,69 1,05 10,5 0,1 0,9
14-01-1998 1,07 0,75 0,79 0,63 0,16 60 0,35 28,5 28,06 0,00 0,00 0,0 0,0 0,0
15-01-1998 1,41 0,75 0,79 0,83 0,00 60 0,35 28,5 28,53 1,31 1,99 19,9 0,2 1,7
16-01-1998 1,13 0,75 0,79 0,67 0,00 60 0,35 28,5 27,86 0,00 0,00 0,0 0,0 0,0
17-01-1998 0,79 0,75 0,79 0,47 6,56 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
18-01-1998 1,29 0,75 0,79 0,76 0,16 60 0,35 28,5 27,93 0,00 0,00 0,0 0,0 0,0
19-01-1998 0,60 0,75 0,79 0,36 2,96 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
20-01-1998 1,32 0,75 0,79 0,78 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
21-01-1998 1,10 0,75 0,79 0,65 0,16 60 0,35 28,5 28,53 0,49 0,75 7,5 8,5 0,6
22-01-1998 1,19 0,75 0,79 0,70 0,62 60 0,35 28,5 28,45 0,00 0,00 0,0 0,0 0,0
23-01-1998 0,97 0,75 0,79 0,58 4,21 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
24-01-1998 0,91 0,75 0,79 0,54 3,28 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
25-01-1998 1,03 0,75 0,79 0,61 5,46 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
26-01-1998 1,18 0,75 0,79 0,70 0,00 60 0,35 28,5 27,83 0,00 0,00 0,0 0,0 0,0
27-01-1998 0,72 0,75 0,79 0,42 0,16 60 0,35 28,5 28,53 0,96 1,47 14,7 0,2 1,2
28-01-1998 1,32 0,75 0,79 0,78 0,16 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,0
29-01-1998 0,75 0,75 0,79 0,44 9,04 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
30-01-1998 1,41 0,75 0,79 0,83 0,16 60 0,35 28,5 27,86 0,00 0,00 0,0 0,0 0,0
31-01-1998 0,79 0,75 0,79 0,47 0,16 60 0,35 28,5 28,53 0,98 1,50 15,0 0,2 1,2
01-02-1998 1,32 0,75 0,79 0,78 0,00 60 0,35 28,5 27,75 0,00 0,00 0,0 0,0 0,0
02-02-1998 0,97 0,75 0,79 0,57 0,16 60 0,35 28,5 28,53 1,20 1,82 18,2 0,2 1,5
03-02-1998 1,65 0,75 0,79 0,98 1,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
04-02-1998 1,39 0,75 0,79 0,82 0,00 60 0,35 28,5 28,53 0,82 1,26 12,6 0,1 1,0
05-02-1998 1,32 0,75 0,79 0,78 0,16 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,0
06-02-1998 1,75 0,75 0,79 1,03 0,00 60 0,35 28,5 28,53 1,66 2,53 25,3 0,3 2,1
07-02-1998 1,63 0,75 0,79 0,97 0,16 60 0,35 28,5 27,73 0,00 0,00 0,0 0,0 0,0
08-02-1998 1,48 0,75 0,79 0,88 0,16 60 0,35 28,5 28,53 1,53 2,33 23,3 0,3 1,9
09-02-1998 1,50 0,75 0,79 0,89 0,16 60 0,35 28,5 27,80 0,00 0,00 0,0 0,0 0,0
10-02-1998 1,38 0,75 0,79 0,82 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,8
11-02-1998 1,68 0,75 0,79 0,99 0,16 60 0,35 28,5 27,70 0,00 0,00 0,0 0,0 0,0
12-02-1998 1,92 0,75 0,79 1,14 0,00 60 0,35 28,5 28,53 1,97 3,00 30,0 0,3 2,5
13-02-1998 2,79 0,75 0,79 1,65 0,00 60 0,35 28,5 26,88 0,00 0,00 0,0 0,0 0,0
14-02-1998 2,04 0,75 0,79 1,21 0,00 60 0,35 28,5 28,53 2,86 4,36 43,6 0,5 3,6
15-02-1998 4,48 0,75 0,79 2,66 2,34 60 0,35 28,5 28,22 0,00 0,00 0,0 0,0 0,0
16-02-1998 1,85 0,75 0,79 1,09 0,00 60 0,35 28,5 28,53 1,41 2,15 21,5 0,2 1,8
17-02-1998 1,65 0,75 0,79 0,98 0,00 60 0,35 28,5 27,56 0,00 0,00 0,0 0,0 0,0
18-02-1998 1,42 0,75 0,79 0,84 0,00 60 0,35 28,5 28,53 1,82 2,77 27,7 0,3 2,3
19-02-1998 1,71 0,75 0,79 1,01 0,00 60 0,35 28,5 27,52 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
145
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
20-02-1998 1,85 0,75 0,79 1,09 0,00 60 0,35 28,5 28,53 2,11 3,21 32,1 0,4 2,7
21-02-1998 1,35 0,75 0,79 0,80 0,16 60 0,35 28,5 27,90 0,00 0,00 0,0 0,0 0,0
22-02-1998 1,18 0,75 0,79 0,70 0,00 60 0,35 28,5 28,53 1,34 2,04 20,4 0,2 1,7
23-02-1998 1,12 0,75 0,79 0,66 0,00 60 0,35 28,5 27,87 0,00 0,00 0,0 0,0 0,0
24-02-1998 1,58 0,75 0,79 0,94 0,16 60 0,35 28,5 28,53 1,44 2,19 21,9 0,2 1,8
25-02-1998 2,00 0,75 0,79 1,18 0,00 60 0,35 28,5 27,35 0,00 0,00 0,0 0,0 0,0
26-02-1998 3,63 0,75 0,79 2,15 0,00 60 0,35 28,5 28,53 3,34 5,08 50,8 0,6 4,2
27-02-1998 2,33 0,75 0,79 1,38 0,00 60 0,35 28,5 27,16 0,00 0,00 0,0 0,0 0,0
28-02-1998 1,73 0,75 0,79 1,03 0,00 60 0,35 28,5 28,53 2,41 3,66 36,6 0,4 3,1
01-03-1998 1,26 0,80 0,79 0,79 0,00 60 0,35 28,5 27,74 0,00 0,00 0,0 0,0 0,0
02-03-1998 1,52 0,80 0,79 0,96 0,16 60 0,35 28,5 28,53 1,59 2,43 24,3 0,3 2,0
03-03-1998 1,20 0,80 0,79 0,76 0,16 60 0,35 28,5 27,94 0,00 0,00 0,0 0,0 0,0
04-03-1998 1,45 0,80 0,79 0,92 0,00 60 0,35 28,5 28,53 1,52 2,31 23,1 0,3 1,9
05-03-1998 1,43 0,80 0,79 0,90 0,00 60 0,35 28,5 27,63 0,00 0,00 0,0 0,0 0,0
06-03-1998 1,53 0,80 0,79 0,97 0,00 60 0,35 28,5 28,53 1,87 2,84 28,4 0,3 2,4
07-03-1998 2,00 0,80 0,79 1,27 0,00 60 0,35 28,5 27,27 0,00 0,00 0,0 0,0 0,0
08-03-1998 2,70 0,80 0,79 1,71 0,16 60 0,35 28,5 28,53 2,81 4,28 42,8 0,5 3,6
09-03-1998 2,60 0,80 0,79 1,64 0,00 60 0,35 28,5 26,89 0,00 0,00 0,0 0,0 0,0
10-03-1998 2,54 0,80 0,79 1,60 0,00 60 0,35 28,5 28,53 3,25 4,94 49,4 0,6 4,1
11-03-1998 3,03 0,80 0,79 1,91 0,00 60 0,35 28,5 26,62 0,00 0,00 0,0 0,0 0,0
12-03-1998 2,52 0,80 0,79 1,59 0,00 60 0,35 28,5 28,53 3,51 5,34 53,4 0,6 4,5
13-03-1998 2,48 0,80 0,79 1,57 0,00 60 0,35 28,5 26,97 0,00 0,00 0,0 0,0 0,0
14-03-1998 2,45 0,80 0,79 1,55 0,00 60 0,35 28,5 28,53 3,12 4,75 47,5 0,5 4,0
15-03-1998 2,46 0,80 0,79 1,55 0,00 60 0,35 28,5 26,98 0,00 0,00 0,0 0,0 0,0
16-03-1998 2,46 0,80 0,79 1,55 0,00 60 0,35 28,5 28,53 3,11 4,74 47,4 0,5 3,9
17-03-1998 2,37 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,0
18-03-1998 3,15 0,80 0,79 1,99 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,4
19-03-1998 6,14 0,80 0,79 3,88 0,00 60 0,35 28,5 24,65 0,00 0,00 0,0 0,0 0,0
20-03-1998 2,96 0,80 0,79 1,87 0,00 60 0,35 28,5 28,53 5,75 8,77 87,7 1,0 7,3
21-03-1998 2,40 0,80 0,79 1,52 0,00 60 0,35 28,5 27,02 0,00 0,00 0,0 0,0 0,0
22-03-1998 2,29 0,80 0,79 1,45 0,00 60 0,35 28,5 28,53 2,97 4,52 45,2 0,5 3,8
23-03-1998 2,26 0,80 0,79 1,43 0,00 60 0,35 28,5 27,10 0,00 0,00 0,0 0,0 0,0
24-03-1998 3,22 0,80 0,79 2,03 0,62 60 0,35 28,5 28,53 2,84 4,33 43,3 0,5 3,6
25-03-1998 1,65 0,80 0,79 1,04 0,00 60 0,35 28,5 27,50 0,00 0,00 0,0 0,0 0,0
26-03-1998 2,83 0,80 0,79 1,79 0,00 60 0,35 28,5 28,53 2,83 4,31 43,1 0,5 3,6
27-03-1998 2,81 0,80 0,79 1,78 0,00 60 0,35 28,5 26,76 0,00 0,00 0,0 0,0 0,0
28-03-1998 2,94 0,80 0,79 1,86 0,00 60 0,35 28,5 28,53 3,63 5,53 55,3 0,6 4,6
29-03-1998 2,30 0,80 0,79 1,45 0,00 60 0,35 28,5 27,08 0,00 0,00 0,0 0,0 0,0
30-03-1998 2,78 0,80 0,79 1,75 0,00 60 0,35 28,5 28,53 3,21 4,89 48,9 0,5 4,1
31-03-1998 2,17 0,80 0,79 1,37 0,00 60 0,35 28,5 27,16 0,00 0,00 0,0 0,0 0,0
01-04-1998 2,43 0,80 0,79 1,54 0,00 60 0,35 28,5 28,53 2,91 4,43 44,3 0,5 3,7
02-04-1998 2,81 0,80 0,79 1,78 0,00 60 0,35 28,5 26,76 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
146
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
03-04-1998 3,01 0,80 0,79 1,90 0,00 60 0,35 28,5 28,53 3,68 5,61 56,1 0,6 4,7
04-04-1998 3,92 0,80 0,79 2,48 0,00 60 0,35 28,5 26,06 0,00 0,00 0,0 0,0 0,0
05-04-1998 3,52 0,80 0,79 2,23 0,00 60 0,35 28,5 28,53 4,70 7,16 71,6 0,8 6,0
06-04-1998 3,40 0,80 0,79 2,15 0,00 60 0,35 28,5 26,38 0,00 0,00 0,0 0,0 0,0
07-04-1998 2,51 0,80 0,79 1,59 0,00 60 0,35 28,5 28,53 3,74 5,69 56,9 0,6 4,7
08-04-1998 1,88 0,80 0,79 1,19 0,00 60 0,35 28,5 27,35 0,00 0,00 0,0 0,0 0,0
09-04-1998 3,17 0,80 0,79 2,00 0,00 60 0,35 28,5 28,53 3,19 4,85 48,5 0,5 4,0
10-04-1998 3,48 0,80 0,79 2,20 0,16 60 0,35 28,5 26,50 0,00 0,00 0,0 0,0 0,0
11-04-1998 3,38 0,80 0,79 2,14 0,00 60 0,35 28,5 28,53 4,18 6,36 63,6 0,7 5,3
12-04-1998 3,99 0,80 0,79 2,52 0,00 60 0,35 28,5 26,01 0,00 0,00 0,0 0,0 0,0
13-04-1998 3,08 0,80 0,79 1,94 0,00 60 0,35 28,5 28,53 4,47 6,81 68,1 0,8 5,7
14-04-1998 3,32 0,80 0,79 2,10 0,00 60 0,35 28,5 26,44 0,00 0,00 0,0 0,0 0,0
15-04-1998 3,14 0,80 0,79 1,99 0,16 60 0,35 28,5 28,53 3,92 5,98 59,8 0,7 5,0
16-04-1998 3,07 0,80 0,79 1,94 0,00 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,0
17-04-1998 1,13 0,80 0,79 0,71 2,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
18-04-1998 1,05 0,80 0,79 0,67 7,64 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
19-04-1998 1,74 0,80 0,79 1,10 0,78 60 0,35 28,5 28,53 0,32 0,49 4,9 5,5 0,4
20-04-1998 0,48 0,80 0,79 0,30 24,60 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
21-04-1998 3,49 0,80 0,79 2,20 0,00 60 0,35 28,5 28,53 2,20 3,36 33,6 0,4 2,8
22-04-1998 3,65 0,80 0,79 2,30 0,00 60 0,35 28,5 26,23 0,00 0,00 0,0 0,0 0,0
23-04-1998 3,58 0,80 0,79 2,26 0,00 60 0,35 28,5 28,53 4,57 6,96 69,6 0,8 5,8
24-04-1998 2,79 0,80 0,79 1,76 0,00 60 0,35 28,5 26,77 0,00 0,00 0,0 0,0 0,0
25-04-1998 3,42 0,80 0,79 2,16 0,00 60 0,35 28,5 28,53 3,92 5,98 59,8 0,7 5,0
26-04-1998 2,91 0,80 0,79 1,84 0,16 60 0,35 28,5 26,86 0,00 0,00 0,0 0,0 0,0
27-04-1998 3,34 0,80 0,79 2,11 0,00 60 0,35 28,5 28,53 3,79 5,78 57,8 0,6 4,8
28-04-1998 4,81 0,80 0,79 3,04 0,00 60 0,35 28,5 25,50 0,00 0,00 0,0 0,0 0,0
29-04-1998 6,14 0,80 0,79 3,88 0,00 60 0,35 28,5 28,53 6,92 10,54 105,4 1,2 8,8
30-04-1998 4,37 0,80 0,79 2,76 0,00 60 0,35 28,5 25,77 0,00 0,00 0,0 0,0 0,0
01-05-1998 4,20 0,80 0,79 2,65 0,00 60 0,35 28,5 28,53 5,41 8,25 82,5 0,9 6,9
02-05-1998 3,81 0,80 0,79 2,40 0,00 60 0,35 28,5 26,13 0,00 0,00 0,0 0,0 0,0
03-05-1998 3,25 0,80 0,79 2,05 0,00 60 0,35 28,5 28,53 4,46 6,79 67,9 0,8 5,7
04-05-1998 3,84 0,80 0,79 2,43 0,16 60 0,35 28,5 26,27 0,00 0,00 0,0 0,0 0,0
05-05-1998 4,88 0,80 0,79 3,08 0,00 60 0,35 28,5 28,53 5,35 8,15 81,5 0,9 6,8
06-05-1998 6,98 0,80 0,79 4,41 0,00 60 0,35 28,5 24,12 0,00 0,00 0,0 0,0 0,0
07-05-1998 3,02 0,80 0,79 1,91 0,62 60 0,35 28,5 28,53 5,70 8,68 86,8 1,0 7,2
08-05-1998 4,02 0,80 0,79 2,54 0,00 60 0,35 28,5 25,99 0,00 0,00 0,0 0,0 0,0
09-05-1998 4,08 0,80 0,79 2,58 0,00 60 0,35 28,5 28,53 5,12 7,80 78,0 0,9 6,5
10-05-1998 3,04 0,80 0,79 1,92 0,00 60 0,35 28,5 26,61 0,00 0,00 0,0 0,0 0,0
11-05-1998 2,56 0,80 0,79 1,62 0,00 60 0,35 28,5 28,53 3,54 5,39 53,9 0,6 4,5
12-05-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,0
13-05-1998 3,27 0,80 0,79 2,06 0,00 60 0,35 28,5 28,53 3,56 5,42 54,2 0,6 4,5
14-05-1998 3,75 0,80 0,79 2,37 0,31 60 0,35 28,5 26,48 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
147
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
15-05-1998 1,76 0,80 0,79 1,11 0,93 60 0,35 28,5 28,53 2,24 3,41 34,1 0,4 2,8
16-05-1998 3,65 0,80 0,79 2,31 0,00 60 0,35 28,5 26,23 0,00 0,00 0,0 0,0 0,0
17-05-1998 3,87 0,80 0,79 2,45 1,24 60 0,35 28,5 28,53 3,51 5,35 53,5 0,6 4,5
18-05-1998 3,69 0,80 0,79 2,33 0,00 60 0,35 28,5 26,20 0,00 0,00 0,0 0,0 0,0
19-05-1998 3,12 0,80 0,79 1,97 0,00 60 0,35 28,5 28,53 4,30 6,56 65,6 0,7 5,5
20-05-1998 5,84 0,80 0,79 3,69 0,00 60 0,35 28,5 24,84 0,00 0,00 0,0 0,0 0,0
21-05-1998 3,91 0,80 0,79 2,47 1,87 60 0,35 28,5 28,53 4,29 6,54 65,4 0,7 5,4
22-05-1998 4,12 0,80 0,79 2,60 0,00 60 0,35 28,5 25,93 0,00 0,00 0,0 0,0 0,0
23-05-1998 4,33 0,80 0,79 2,74 0,00 60 0,35 28,5 28,53 5,34 8,14 81,4 0,9 6,8
24-05-1998 1,69 0,80 0,79 1,07 0,16 60 0,35 28,5 27,63 0,00 0,00 0,0 0,0 0,0
25-05-1998 5,21 0,80 0,79 3,29 6,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
26-05-1998 6,20 0,80 0,79 3,92 0,00 60 0,35 28,5 24,62 0,00 0,00 0,0 0,0 0,0
27-05-1998 5,18 0,80 0,79 3,28 0,00 60 0,35 28,5 28,53 7,19 10,95 109,6 1,2 9,1
28-05-1998 5,01 0,80 0,79 3,16 0,00 60 0,35 28,5 25,37 0,00 0,00 0,0 0,0 0,0
29-05-1998 5,35 0,80 0,79 3,38 0,00 60 0,35 28,5 28,53 6,54 9,97 99,7 1,1 8,3
30-05-1998 3,07 0,80 0,79 1,94 0,00 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,0
31-05-1998 2,23 0,80 0,79 1,41 5,93 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
01-06-1998 2,34 0,85 0,79 1,57 1,40 60 0,35 28,5 28,36 0,00 0,00 0,0 0,0 0,0
02-06-1998 3,78 0,85 0,79 2,54 0,00 60 0,35 28,5 28,53 2,71 4,13 41,3 0,5 3,4
03-06-1998 5,04 0,85 0,79 3,38 0,00 60 0,35 28,5 25,15 0,00 0,00 0,0 0,0 0,0
04-06-1998 2,00 0,85 0,79 1,34 3,75 60 0,35 28,5 28,53 0,98 1,49 14,9 0,2 1,2
05-06-1998 5,07 0,85 0,79 3,40 0,00 60 0,35 28,5 25,13 0,00 0,00 0,0 0,0 0,0
06-06-1998 5,56 0,85 0,79 3,73 0,00 60 0,35 28,5 28,53 7,13 10,86 108,7 1,2 9,1
07-06-1998 2,32 0,85 0,79 1,55 0,93 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,0
08-06-1998 5,34 0,85 0,79 3,58 0,00 60 0,35 28,5 28,53 4,21 6,41 64,1 0,7 5,3
09-06-1998 5,21 0,85 0,79 3,50 0,00 60 0,35 28,5 25,04 0,00 0,00 0,0 0,0 0,0
10-06-1998 4,61 0,85 0,79 3,09 0,00 60 0,35 28,5 28,53 6,59 10,04 100,4 1,1 8,4
11-06-1998 5,32 0,85 0,79 3,57 0,00 60 0,35 28,5 24,96 0,00 0,00 0,0 0,0 0,0
12-06-1998 4,66 0,85 0,79 3,13 0,00 60 0,35 28,5 28,53 6,70 10,20 102,1 1,1 8,5
13-06-1998 4,82 0,85 0,79 3,23 0,00 60 0,35 28,5 25,30 0,00 0,00 0,0 0,0 0,0
14-06-1998 6,51 0,85 0,79 4,37 0,00 60 0,35 28,5 28,53 7,60 11,58 115,8 1,3 9,7
15-06-1998 5,30 0,85 0,79 3,56 0,00 60 0,35 28,5 24,98 0,00 0,00 0,0 0,0 0,0
16-06-1998 3,17 0,85 0,79 2,13 0,00 60 0,35 28,5 28,53 5,69 8,67 86,7 1,0 7,2
17-06-1998 2,81 0,85 0,79 1,88 0,00 60 0,35 28,5 26,65 0,00 0,00 0,0 0,0 0,0
18-06-1998 3,56 0,85 0,79 2,39 0,62 60 0,35 28,5 28,53 3,65 5,56 55,6 0,6 4,6
19-06-1998 4,30 0,85 0,79 2,88 0,00 60 0,35 28,5 25,65 0,00 0,00 0,0 0,0 0,0
20-06-1998 5,16 0,85 0,79 3,46 0,00 60 0,35 28,5 28,53 6,35 9,67 96,7 1,1 8,1
21-06-1998 4,83 0,85 0,79 3,24 0,00 60 0,35 28,5 25,29 0,00 0,00 0,0 0,0 0,0
22-06-1998 3,85 0,85 0,79 2,58 0,00 60 0,35 28,5 28,53 5,82 8,87 88,7 1,0 7,4
23-06-1998 6,17 0,85 0,79 4,14 0,00 60 0,35 28,5 24,39 0,00 0,00 0,0 0,0 0,0
24-06-1998 5,37 0,85 0,79 3,61 0,00 60 0,35 28,5 28,53 7,75 11,80 118,0 1,3 9,8
25-06-1998 4,24 0,85 0,79 2,84 0,00 60 0,35 28,5 25,69 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
148
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
26-06-1998 4,68 0,85 0,79 3,14 0,78 60 0,35 28,5 28,53 5,20 7,93 79,3 0,9 6,6
27-06-1998 2,77 0,85 0,79 1,86 0,00 60 0,35 28,5 26,68 0,00 0,00 0,0 0,0 0,0
28-06-1998 1,60 0,85 0,79 1,07 28,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
29-06-1998 3,74 0,85 0,79 2,51 0,00 60 0,35 28,5 26,02 0,00 0,00 0,0 0,0 0,0
30-06-1998 4,44 0,85 0,79 2,98 0,00 60 0,35 28,5 28,53 5,49 8,37 83,7 0,9 7,0
01-07-1998 4,49 0,85 0,79 3,02 0,00 60 0,35 28,5 25,52 0,00 0,00 0,0 0,0 0,0
02-07-1998 4,29 0,85 0,79 2,88 0,16 60 0,35 28,5 28,53 5,74 8,74 87,4 1,0 7,3
03-07-1998 4,67 0,85 0,79 3,13 0,16 60 0,35 28,5 25,56 0,00 0,00 0,0 0,0 0,0
04-07-1998 2,45 0,85 0,79 1,64 6,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
05-07-1998 6,20 0,85 0,79 4,16 0,00 60 0,35 28,5 24,37 0,00 0,00 0,0 0,0 0,0
06-07-1998 5,27 0,85 0,79 3,54 0,00 60 0,35 28,5 28,53 7,71 11,74 117,4 1,3 9,8
07-07-1998 5,59 0,85 0,79 3,75 0,00 60 0,35 28,5 24,78 0,00 0,00 0,0 0,0 0,0
08-07-1998 6,03 0,85 0,79 4,05 0,00 60 0,35 28,5 28,53 7,80 11,88 118,8 1,3 9,9
09-07-1998 3,46 0,85 0,79 2,32 1,40 60 0,35 28,5 27,61 0,00 0,00 0,0 0,0 0,0
10-07-1998 3,97 0,85 0,79 2,67 0,31 60 0,35 28,5 28,53 3,28 4,99 49,9 0,6 4,2
11-07-1998 5,41 0,85 0,79 3,63 0,00 60 0,35 28,5 24,90 0,00 0,00 0,0 0,0 0,0
12-07-1998 4,70 0,85 0,79 3,16 0,00 60 0,35 28,5 28,53 6,79 10,34 103,5 1,2 8,6
13-07-1998 4,94 0,85 0,79 3,31 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,0
14-07-1998 4,33 0,85 0,79 2,91 0,00 60 0,35 28,5 28,53 6,22 9,48 94,8 1,1 7,9
15-07-1998 5,80 0,85 0,79 3,90 0,00 60 0,35 28,5 24,64 0,00 0,00 0,0 0,0 0,0
16-07-1998 5,02 0,85 0,79 3,37 0,00 60 0,35 28,5 28,53 7,26 11,06 110,7 1,2 9,2
17-07-1998 5,90 0,85 0,79 3,96 0,00 60 0,35 28,5 24,58 0,00 0,00 0,0 0,0 0,0
18-07-1998 5,42 0,85 0,79 3,64 0,00 60 0,35 28,5 28,53 7,60 11,57 115,7 1,3 9,6
19-07-1998 5,58 0,85 0,79 3,74 0,00 60 0,35 28,5 24,79 0,00 0,00 0,0 0,0 0,0
20-07-1998 3,71 0,85 0,79 2,49 0,00 60 0,35 28,5 28,53 6,23 9,50 95,0 1,1 7,9
21-07-1998 4,63 0,85 0,79 3,11 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
22-07-1998 5,39 0,85 0,79 3,62 0,00 60 0,35 28,5 28,53 6,73 10,24 102,5 1,2 8,5
23-07-1998 4,18 0,85 0,79 2,81 0,16 60 0,35 28,5 25,89 0,00 0,00 0,0 0,0 0,0
24-07-1998 5,26 0,85 0,79 3,53 0,00 60 0,35 28,5 28,53 6,18 9,41 94,1 1,1 7,8
25-07-1998 5,74 0,85 0,79 3,85 0,00 60 0,35 28,5 24,68 0,00 0,00 0,0 0,0 0,0
26-07-1998 5,44 0,85 0,79 3,65 0,00 60 0,35 28,5 28,53 7,51 11,44 114,4 1,3 9,5
27-07-1998 4,40 0,85 0,79 2,96 0,00 60 0,35 28,5 25,58 0,00 0,00 0,0 0,0 0,0
28-07-1998 4,62 0,85 0,79 3,11 0,00 60 0,35 28,5 28,53 6,06 9,24 92,4 1,0 7,7
29-07-1998 4,67 0,85 0,79 3,13 0,00 60 0,35 28,5 25,40 0,00 0,00 0,0 0,0 0,0
30-07-1998 4,89 0,85 0,79 3,28 0,00 60 0,35 28,5 28,53 6,42 9,78 97,8 1,1 8,1
31-07-1998 5,78 0,85 0,79 3,88 0,00 60 0,35 28,5 24,65 0,00 0,00 0,0 0,0 0,0
01-08-1998 4,79 0,85 0,79 3,22 0,00 60 0,35 28,5 28,53 7,10 10,81 108,2 1,2 9,0
02-08-1998 4,81 0,85 0,79 3,23 0,00 60 0,35 28,5 25,30 0,00 0,00 0,0 0,0 0,0
03-08-1998 4,84 0,85 0,79 3,25 0,00 60 0,35 28,5 28,53 6,48 9,88 98,8 1,1 8,2
04-08-1998 3,86 0,85 0,79 2,59 0,93 60 0,35 28,5 26,87 0,00 0,00 0,0 0,0 0,0
05-08-1998 3,14 0,85 0,79 2,11 1,87 60 0,35 28,5 28,53 1,90 2,89 28,9 0,3 2,4
06-08-1998 3,60 0,85 0,79 2,42 0,31 60 0,35 28,5 26,43 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
149
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
07-08-1998 4,43 0,85 0,79 2,97 0,78 60 0,35 28,5 28,53 4,30 6,55 65,5 0,7 5,5
08-08-1998 4,56 0,85 0,79 3,06 0,00 60 0,35 28,5 25,48 0,00 0,00 0,0 0,0 0,0
09-08-1998 4,88 0,85 0,79 3,28 0,00 60 0,35 28,5 28,53 6,34 9,65 96,5 1,1 8,0
10-08-1998 3,15 0,85 0,79 2,12 18,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
11-08-1998 4,95 0,85 0,79 3,32 0,16 60 0,35 28,5 28,53 3,16 4,82 48,2 0,5 4,0
12-08-1998 4,94 0,85 0,79 3,32 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,0
13-08-1998 4,74 0,85 0,79 3,18 0,00 60 0,35 28,5 28,53 6,50 9,90 99,0 1,1 8,3
14-08-1998 4,69 0,85 0,79 3,15 0,00 60 0,35 28,5 25,39 0,00 0,00 0,0 0,0 0,0
15-08-1998 4,86 0,85 0,79 3,26 0,00 60 0,35 28,5 28,53 6,41 9,77 97,7 1,1 8,1
16-08-1998 3,71 0,85 0,79 2,49 0,16 60 0,35 28,5 26,20 0,00 0,00 0,0 0,0 0,0
17-08-1998 4,19 0,85 0,79 2,81 0,00 60 0,35 28,5 28,53 5,14 7,83 78,3 0,9 6,5
18-08-1998 3,27 0,85 0,79 2,19 0,00 60 0,35 28,5 26,34 0,00 0,00 0,0 0,0 0,0
19-08-1998 4,40 0,85 0,79 2,96 0,00 60 0,35 28,5 28,53 5,15 7,85 78,5 0,9 6,5
20-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
21-08-1998 4,65 0,85 0,79 3,12 0,00 60 0,35 28,5 28,53 6,22 9,48 94,8 1,1 7,9
22-08-1998 4,94 0,85 0,79 3,32 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,0
23-08-1998 4,76 0,85 0,79 3,20 0,00 60 0,35 28,5 28,53 6,52 9,93 99,3 1,1 8,3
24-08-1998 4,76 0,85 0,79 3,20 0,00 60 0,35 28,5 25,34 0,00 0,00 0,0 0,0 0,0
25-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,30 9,60 96,0 1,1 8,0
26-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
27-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
28-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
29-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
30-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
31-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
01-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
02-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
03-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
04-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
05-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
06-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
07-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
08-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
09-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
10-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
11-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
12-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
13-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
14-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
15-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
16-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,9
17-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
150
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
18-09-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 4,84 7,37 73,7 0,8 6,1
19-09-1998 3,32 0,85 0,79 2,23 0,00 60 0,35 28,5 26,31 0,00 0,00 0,0 0,0 0,0
20-09-1998 3,10 0,85 0,79 2,08 0,00 60 0,35 28,5 28,53 4,30 6,56 65,6 0,7 5,5
21-09-1998 3,23 0,85 0,79 2,17 0,00 60 0,35 28,5 26,37 0,00 0,00 0,0 0,0 0,0
22-09-1998 3,15 0,85 0,79 2,11 0,93 60 0,35 28,5 28,53 3,35 5,10 51,0 0,6 4,3
23-09-1998 3,07 0,85 0,79 2,06 0,00 60 0,35 28,5 26,47 0,00 0,00 0,0 0,0 0,0
24-09-1998 1,91 0,85 0,79 1,28 0,47 60 0,35 28,5 28,53 2,87 4,37 43,7 0,5 3,6
25-09-1998 0,56 0,85 0,79 0,38 13,00 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
26-09-1998 3,15 0,85 0,79 2,12 0,00 60 0,35 28,5 28,53 2,12 3,22 32,2 0,4 2,7
27-09-1998 3,10 0,85 0,79 2,08 0,00 60 0,35 28,5 26,45 0,00 0,00 0,0 0,0 0,0
28-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 2,80 4,26 42,6 0,5 3,6
29-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
30-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
01-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
02-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
03-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
04-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
05-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
06-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
07-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
08-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
09-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
10-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
11-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
12-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
13-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
14-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,8
15-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,0
16-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 2,46 3,74 37,4 0,4 3,1
17-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,0
18-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,4
19-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,0
20-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,4
21-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,0
22-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,4
23-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,0
24-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,4
25-10-1998 2,43 0,85 0,79 1,63 0,00 60 0,35 28,5 26,91 0,00 0,00 0,0 0,0 0,0
26-10-1998 1,64 0,85 0,79 1,10 0,00 60 0,35 28,5 28,53 2,73 4,16 41,6 0,5 3,5
27-10-1998 1,61 0,85 0,79 1,08 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
28-10-1998 0,34 0,85 0,79 0,23 42,30 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
29-10-1998 1,67 0,85 0,79 1,12 0,00 60 0,35 28,5 27,41 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
151
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
30-10-1998 1,69 0,85 0,79 1,13 0,00 60 0,35 28,5 28,53 2,25 3,43 34,3 0,4 2,9
31-10-1998 1,76 0,85 0,79 1,18 0,00 60 0,35 28,5 27,36 0,00 0,00 0,0 0,0 0,0
01-11-1998 1,57 0,80 0,79 0,99 0,00 60 0,35 28,5 28,53 2,17 3,31 33,1 0,4 2,8
02-11-1998 0,92 0,80 0,79 0,58 2,34 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
03-11-1998 0,25 0,80 0,79 0,16 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
04-11-1998 1,35 0,80 0,79 0,85 0,16 60 0,35 28,5 27,84 0,00 0,00 0,0 0,0 0,0
05-11-1998 0,87 0,80 0,79 0,55 0,00 60 0,35 28,5 28,53 1,24 1,89 18,9 0,2 1,6
06-11-1998 2,31 0,80 0,79 1,46 0,47 60 0,35 28,5 27,55 0,00 0,00 0,0 0,0 0,0
07-11-1998 1,97 0,80 0,79 1,25 0,00 60 0,35 28,5 28,53 2,23 3,40 34,0 0,4 2,8
08-11-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,0
09-11-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 28,53 2,98 4,54 45,4 0,5 3,8
10-11-1998 1,98 0,80 0,79 1,25 0,00 60 0,35 28,5 27,29 0,00 0,00 0,0 0,0 0,0
11-11-1998 1,85 0,80 0,79 1,17 0,93 60 0,35 28,5 28,53 1,48 2,26 22,6 0,3 1,9
12-11-1998 1,86 0,80 0,79 1,18 0,00 60 0,35 28,5 27,36 0,00 0,00 0,0 0,0 0,0
13-11-1998 0,77 0,80 0,79 0,49 0,00 60 0,35 28,5 28,53 1,66 2,54 25,4 0,3 2,1
14-11-1998 1,25 0,80 0,79 0,79 0,00 60 0,35 28,5 27,74 0,00 0,00 0,0 0,0 0,0
15-11-1998 1,20 0,80 0,79 0,76 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,8
16-11-1998 1,19 0,80 0,79 0,75 0,00 60 0,35 28,5 27,78 0,00 0,00 0,0 0,0 0,0
17-11-1998 1,06 0,80 0,79 0,67 0,00 60 0,35 28,5 28,53 1,42 2,17 21,7 0,2 1,8
18-11-1998 0,51 0,80 0,79 0,32 0,16 60 0,35 28,5 28,37 0,00 0,00 0,0 0,0 0,0
19-11-1998 1,99 0,80 0,79 1,26 0,00 60 0,35 28,5 28,53 1,42 2,16 21,6 0,2 1,8
20-11-1998 1,77 0,80 0,79 1,12 0,00 60 0,35 28,5 27,41 0,00 0,00 0,0 0,0 0,0
21-11-1998 0,37 0,80 0,79 0,23 3,90 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
22-11-1998 2,02 0,80 0,79 1,28 0,16 60 0,35 28,5 27,42 0,00 0,00 0,0 0,0 0,0
23-11-1998 1,62 0,80 0,79 1,02 0,00 60 0,35 28,5 28,53 2,14 3,26 32,6 0,4 2,7
24-11-1998 1,02 0,80 0,79 0,64 0,00 60 0,35 28,5 27,89 0,00 0,00 0,0 0,0 0,0
25-11-1998 0,76 0,80 0,79 0,48 6,24 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
26-11-1998 0,72 0,80 0,79 0,45 13,60 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
27-11-1998 1,25 0,80 0,79 0,79 0,78 60 0,35 28,5 28,53 1,00 1,52 0,2 1,7 1,3
28-11-1998 0,71 0,80 0,79 0,45 0,16 60 0,35 28,5 28,24 0,00 0,00 0,0 0,0 0,0
29-11-1998 2,15 0,80 0,79 1,36 0,31 60 0,35 28,5 28,53 1,34 2,04 20,4 0,2 1,7
30-11-1998 4,04 0,80 0,79 2,55 0,62 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,0
01-12-1998 1,17 0,80 0,79 0,74 0,00 60 0,35 28,5 28,53 2,67 4,07 40,7 0,5 3,4
02-12-1998 2,15 0,80 0,79 1,36 0,00 60 0,35 28,5 27,18 0,00 0,00 0,0 0,0 0,0
03-12-1998 1,58 0,80 0,79 1,00 0,00 60 0,35 28,5 28,53 2,36 3,59 35,9 0,4 3,0
04-12-1998 0,81 0,80 0,79 0,51 7,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
05-12-1998 1,81 0,80 0,79 1,14 12,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
06-12-1998 1,18 0,80 0,79 0,74 0,00 60 0,35 28,5 27,79 0,00 0,00 0,0 0,0 0,0
07-12-1998 0,72 0,80 0,79 0,45 0,00 60 0,35 28,5 28,53 1,20 1,82 18,2 0,2 1,5
08-12-1998 0,88 0,80 0,79 0,56 0,00 60 0,35 28,5 27,98 0,00 0,00 0,0 0,0 0,0
09-12-1998 0,89 0,80 0,79 0,56 0,00 60 0,35 28,5 28,53 1,12 1,70 17,0 0,2 1,4
10-12-1998 0,72 0,80 0,79 0,46 0,00 60 0,35 28,5 28,08 0,00 0,00 0,0 0,0 0,0
7. Anejo 3
152
Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC
[mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]
---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------
11-12-1998 0,58 0,80 0,79 0,36 0,00 60 0,35 28,5 28,53 0,82 1,25 12,5 0,1 1,0
12-12-1998 0,63 0,80 0,79 0,40 3,90 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
13-12-1998 1,22 0,80 0,79 0,77 0,00 60 0,35 28,5 28,53 0,77 1,18 11,8 0,1 1,0
14-12-1998 0,61 0,80 0,79 0,39 0,00 60 0,35 28,5 28,15 0,00 0,00 0,0 0,0 0,0
15-12-1998 1,15 0,80 0,79 0,73 0,00 60 0,35 28,5 28,53 1,11 1,70 17,0 0,2 1,4
16-12-1998 0,20 0,80 0,79 0,13 9,84 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
17-12-1998 5,10 0,80 0,79 3,22 6,24 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
18-12-1998 0,17 0,80 0,79 0,10 2,65 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
19-12-1998 0,45 0,80 0,79 0,28 0,00 60 0,35 28,5 28,53 0,28 0,43 4,3 4,8 0,4
20-12-1998 1,41 0,80 0,79 0,89 0,31 60 0,35 28,5 27,96 0,00 0,00 0,0 0,0 0,0
21-12-1998 0,99 0,80 0,79 0,63 0,00 60 0,35 28,5 28,53 1,20 1,83 18,3 0,2 1,5
22-12-1998 0,69 0,80 0,79 0,44 0,00 60 0,35 28,5 28,10 0,00 0,00 0,0 0,0 0,0
23-12-1998 2,41 0,80 0,79 1,53 0,16 60 0,35 28,5 28,53 1,80 2,75 27,5 0,3 2,3
24-12-1998 0,65 0,80 0,79 0,41 0,00 60 0,35 28,5 28,12 0,00 0,00 0,0 0,0 0,0
25-12-1998 0,89 0,80 0,79 0,56 0,00 60 0,35 28,5 28,53 0,97 1,48 14,8 0,2 1,2
26-12-1998 1,12 0,80 0,79 0,71 0,62 60 0,35 28,5 28,45 0,00 0,00 0,0 0,0 0,0
27-12-1998 2,31 0,80 0,79 1,46 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,8
28-12-1998 1,49 0,80 0,79 0,94 0,00 60 0,35 28,5 27,60 0,00 0,00 0,0 0,0 0,0
29-12-1998 0,70 0,80 0,79 0,44 0,00 60 0,35 28,5 28,53 1,38 2,10 21,0 0,2 1,8
30-12-1998 0,38 0,80 0,79 0,24 0,31 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
31-12-1998 0,52 0,80 0,79 0,33 9,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0
Total ETcKl [mm]..................: 671
Total P.E. [mm]....................: 384
Nmero de Riegos...................: 162
Total dosis neta [mm]..............: 594
Total dosis bruta [mm].............: 905
Total dosis bruta [m3/parcela].....: 9038
7. Anejo 3
153
----------------------------------------------------------------------------------
NOTAS:
- Cuando el intervalo de riego est en blanco, no se tiene en cuenta.
- ETo [mm] = Evapotranspiracin de referencia.
- Kc = Constante de cultivo.
- Kl = Coeficiente de localizacin. Slo en riego localizado.
- ETcKl [mm]= Evapotranspiracin de cultivo por coeficiente de localizacin
- P.E. [cm]= Lluvia efectiva (vase mtodo aplicado)
- Races [cm] = Profundidad efectiva de las races
- R.F.U. [mm] = Volumen de agua mximo de la Reserva Fcilmente Utilizable (RFU)
- Reserva [mm] = Volumen de agua existente en la RFU al final del da
- d.n. [mm] = Dosis neta de riego
- d.b. [mm] = Dosis bruta de riego
- D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela
- tiempoI [horas] = Tiempo mnimo previsto de riego debido a la infiltracin
- tiempoC [horas] = Tiempo mnimo previsto de riego debido al Caudal
- De las dos cifras anteriores, la mayor de ellas ser el tiempo mnimo de riego
----------------------------------------------------------------------------------
7. Anejo 3
154
7. ANEJO 3. PROGRAMA REALIZADO.
Figura 21. Resultados. Listado de riegos a efectuar.
RIEGOS A EFECTUAR 28/11/98 19:28:13
Programacin........................................: MAIZ (LLEIDA,MENSUAL)
Finca...............................................: El maizal
Poblacin...........................................: Lleida
Provincia...........................................: Lleida
Latitud [g,m,s].....................................: 41 37' 49'' N
Longitud [g,m,s]....................................: 0 35' 50'' E
Altitud [m].........................................: 190
Superficie [m2].....................................: 10000
Cultivo.............................................: MAIZ (GRANO)
Fraccin agua disponible en el suelo................: 0,4
Clase textural......................................: FRANCO
Densidad aparente [g/cm3]...........................: 1,51
Capacidad de Campo [% peso].........................: 19
Punto de Marchitamiento [%peso].....................: 10
Sistema Riego.......................................: ASPERSION (CLIMA SECO)
Eficiencia en la aplicacin [%].....................: 67
Caudal instalacin riego [m3/parcela]...............: 100
Conductividad agua de riego [dS/m]..................: 3
Eficiencia en el lavado de sales [%]................: 70
Rendimiento mnimo deseado debido a salinidad [%]...: 100
Fecha Plantacin/Inicio.............................: 01-04-1998
Momento de Riego. Agotamiento de la RFU [%].........: 100
Intervalo de riego [das]...........................:
Dosis de riego. Recarga de la RFU [%]...............: 100
Nivel de agua de la RFU al inicio [%]...............: 0
Fecha d.n. d.b. D.B. tiempoI tiempoF Notas
[mm] [mm] [m3/par] [horas] [hora]
---------- ----- ----- -------- ------- ------- ---------------------------
01-04-1998 5,67 17,80 178,1 1,2 1,8 Se aplica lavado de sales.
25-04-1998 5,52 17,34 173,5 1,2 1,7 Se aplica lavado de sales.
04-05-1998 6,60 20,72 207,3 1,4 2,1 Se aplica lavado de sales.
08-05-1998 6,62 20,81 208,1 1,4 2,1 Se aplica lavado de sales.
12-05-1998 7,80 24,50 245,1 1,6 2,5 Se aplica lavado de sales.
16-05-1998 8,93 28,06 280,6 1,9 2,8 Se aplica lavado de sales.
20-05-1998 10,10 31,75 317,5 2,1 3,2 Se aplica lavado de sales.
24-05-1998 11,27 35,45 354,5 2,4 3,5 Se aplica lavado de sales.
7. Anejo 3
155
Fecha d.n. d.b. D.B. tiempoI tiempoF Notas
[mm] [mm] [m3/par] [horas] [hora]
---------- ----- ----- -------- ------- ------- ---------------------------
27-05-1998 8,81 27,68 276,8 1,8 2,8 Se aplica lavado de sales.
30-05-1998 10,02 31,49 315,0 2,1 3,1 Se aplica lavado de sales.
02-06-1998 11,74 36,91 369,1 2,5 3,7 Se aplica lavado de sales.
05-06-1998 12,97 40,77 407,7 2,7 4,1 Se aplica lavado de sales.
08-06-1998 13,32 41,87 418,8 2,8 4,2 Se aplica lavado de sales.
11-06-1998 14,46 45,46 454,7 3,0 4,5 Se aplica lavado de sales.
14-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
17-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
20-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
23-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
26-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
29-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.
01-07-1998 11,17 35,10 351,1 2,3 3,5 Se aplica lavado de sales.
03-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
05-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
07-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
09-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
11-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
13-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
15-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
17-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
19-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
21-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
23-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
25-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
27-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
29-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.
31-07-1998 13,81 43,40 434,0 2,9 4,3 Se aplica lavado de sales.
03-08-1998 15,52 48,79 487,9 3,3 4,9 Se aplica lavado de sales.
07-08-1998 19,37 60,90 609,1 4,1 6,1 Se aplica lavado de sales.
12-08-1998 22,10 69,46 694,7 4,6 6,9 Se aplica lavado de sales.
18-08-1998 23,41 73,57 735,8 4,9 7,4 Se aplica lavado de sales.
27-08-1998 28,74 90,35 903,5 6,0 9,0 Se aplica lavado de sales.
Nmero de Riegos...................: 41
Total dosis neta [mm]..............: 534
Total dosis bruta [mm].............: 1679
Total dosis bruta [m3/parcela].....: 16793
----------------------------------------------------------------------------------
7. Anejo 3
156
NOTAS:
- Cuando el intervalo de riego est en blanco, no se tiene en cuenta.
- d.n. [mm] = Dosis neta de riego
- d.b. [mm] = Dosis bruta de riego
- D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela
- tiempoI [horas] = Tiempo mnimo previsto de riego debido a la infiltracin
- tiempoC [horas] = Tiempo mnimo previsto de riego debido al Caudal
- De las dos cifras anteriores, la mayor de ellas ser el tiempo mnimo de riego
----------------------------------------------------------------------------------
7. Anejo 4
157
7. ANEJO 4.
1. CLCULO DEL Kc INICIAL
Para calcular el Kc inicial en los cultivos extensivos y de huerta se dispone de 5
curvas que relacionan la ETo y la frecuencia re riegos (o lluvias) con el KC.
Se ha extrado los valores de Kc a partir de datos de ETo de 0,5 en 0,5 mm para
las cinco curva. En la tabla 1, se puede ver los valores de Kc.
Tabla 1. Valores de Kc para distintas frecuencias de riegos/lluvias y ETo.
Frecuencia de riegos lluvias
ETo [mm] (2 das) (4 das) (7 das) (10 das) (20 das)
0,50 1,08 0,98 0,81 0,65 0,49
1,00 1,05 0,95 0,76 0,61 0,44
1,50 1,03 0,91 0,71 0,56 0,41
2,00 1,00 0,86 0,66 0,51 0,37
2,50 0,97 0,83 0,62 0,46 0,34
3,00 0,95 0,79 0,57 0,43 0,31
3,50 0,93 0,76 0,54 0,40 0,27
4,00 0,91 0,72 0,51 0,36 0,26
4,50 0,90 0,70 0,48 0,34 0,24
5,00 0,88 0,66 0,46 0,32 0,23
5,50 0,86 0,63 0,43 0,30 0,21
6,00 0,84 0,61 0,42 0,28 0,20
6,50 0,83 0,58 0,40 0,26 0,18
7,00 0,82 0,57 0,38 0,25 0,18
7,50 0,81 0,56 0,37 0,24 0,17
8,00 0,80 0,54 0,36 0,23 0,16
8,50 0,79 0,53 0,34 0,22 0,16
9,00 0,78 0,52 0,34 0,22 0,16
9,50 0,77 0,51 0,33 0,21 0,15
10,00 0,77 0,50 0,32 0,20 0,15
7. Anejo 4
158
Se ha calculado las regresiones polinomiales en grado 2 de las cinco frecuencias
de riego o de lluvia y se ha obtenidos las siguientes regresiones:
Kc(2) = (0,0025*ETo*ETo ) - (0,0588*ETo) + 1,1068 R2 = 0,9988
Kc(4) = (0,0043*ETo*ETo ) - (0,097*ETo) + 1,0403 R2 = 0,9989
Kc(7) = (0,0053*ETo*ETo ) - (0,1049*ETo) + 0,8502 R2 = 0,9985
Kc(10)= (0,0053*ETo*ETo ) - (0,1009*ETo) + 0,6915 R2 = 0,9972
Kc(20)= (0,0046*ETo*ETo ) - (0,0824*ETo) + 0,52 R2 = 0,9958
Kc es la constante de cultivo en la fase inicial para cultivos A (FAO 24).
ETo es la evapotranspiracin de referencia [mm].
R2 valor R cuadrado.
Para calcular el Kc entre 2 y 20 das de riego se realizar la siguiente operacin:
La frecuencia de riego corresponde a una de las 5 curvas?
-SI: Utilizamos la tabla.
-NO: Se seleccionar las dos ecuaciones que la abarcan (por ejemplo,
para 6 das de frecuencia de riego se coger las ecuaciones Kc(4) y
Kc(7).
A continuacin, se calcula los Kc correspondientes para la Eto que
se dispone.
Posteriormente se realiza una interpolacin lineal entre los dos
valores con la siguiente frmula:
( )
1
1
]
1

,
_

+
MENOR MAYOR
MENOR MAYOR
MENOR MAYOR
DiasKc DiasKc
Kc Kc
DiasKc DiasRiego Kc Kc
siendo:
Kc : Kc que se busca.
Kc
MAYOR
: Kc de la frecuencia de riego superior.
Kc
MENOR
: Kc de la frecuencia de riego inferior.
DiasKc
MAYOR
:

das de la frecuencia de riego superior.
DiasKc
MENOR
: das de la frecuencia de riego inferior.
DiasRiego : das de riego.
7. Anejo 4
159
A continuacin, se pone un ejemplo para clarificar el clculo.
Ej empl o:
Fr ecuenci a de r i ego = 6 d as
Et o = 5 mm/ d a
Hal l ar Kc
[ 0, 67 - 0, 46]
Kc = 0, 46 + [ [ 6 - 4] * [ - - - - - - - - - - - - - ] ] = 0, 60
[ 7 - 4]
7. Anejo 4
160
2. DETERMINACIN INDIRECTA DE LA CAPACIDAD DE CAMPO DEL
PUNTO DE MARCHITAMIENTO.
Yage (1996), cita dos frmulas que relacionan el porcentaje de humedad
gravimtrica de las texturas con el contenido de humedad en la capacidad de
campo y el punto de marchitamiento. Aconseja su utilizacin cuando no se
disponga de anlisis.
La frmula de la capacidad de campo (CC) la denomina frmula de Peele y a la
frmula de capacidad de campo la denomina frmula de Briggs.
Las frmulas son las siguientes:
CC=0,48Ac + 0,162Li + 0,023 Ar + 2,62
PM = 0,302Ac + 0,102Li + 0,0147 Ar
Siendo:
CC : Humedad gravimtrica en la capacidad de campo [%].
PM : Humedad gravimtrica en el punto de marchitamiento [%].
Ac : Contenido en arcilla expresado como humedad gravimtrica [%].
Li : Contenido en limo expresado como humedad gravimtrica [%].
Ac : Contenido en arena expresado como humedad gravimtrica [%].
7. Anejo 4
161
3. TRINGULO DE TEXTURA DE LA U.S.D.A.
Figura 1. Tringulo de texturas y clases texturales.
7. Anejo 5
162
7. ANEJO 5. LISTADO DEL PROGRAMA.
RIEGOS.VBP
' Vctor Yusta. Dicembre-1998
Type=Exe
Reference=DAO350 ' para gobernar Access
Object=TABCTL32.OCX
Object=THREED32.OCX
Object=DBLIST32.OCX
Form=Riegos.frm
Module=Riegos1; Riegos1.bas
Module=Riegos2; Riegos2.bas
Form=Riegos12.frm
Form=Riegos21.frm
Form=Riegos25.frm
Form=Riegos22.frm
Form=Riegos23.frm
Form=Riegos31.frm
Form=Riegos27.frm
Form=Riegos26.frm
Form=Riegos24.frm
Object=DBGRID32.OCX
Form=Riegos00.frm
Form=Riegos11.frm
IconForm="Riegos"
Startup="Riegos"
HelpFile=""
Title="RIEGOS"
ExeName32="Riegos.exe"
Command32=""
Name="Riego"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
ThreadPerObject=0
MaxNumberOfThreads=1
7. Anejo 5
163
RIEGOS1.BAS
' Vctor Yusta. Dicembre-1998
Attribute VB_Name = "Riegos1"
Option Explicit
Global gsDatabase As String
Global gsConnect As String
Global gsRecordsource As String
Global NombreProgramacion As String * 50
Public MenuInicial As String
Public ValorControl As Control
Public ValorTabla As String
Public BaseDeDatos As Database
Public fMenu As Recordset
Public fProgramacion As Recordset
Public fProgramacionClima As Recordset
Public fCultivos As Recordset
Public fCultivosKc As Recordset
Public fCultivosRaices As Recordset
Public fCultivosSal As Recordset
Public fCultivosFraccion As Recordset
Public fCultivosDias As Recordset
Public fBalanceHidrico As Recordset
Public fTexturas As Recordset
Public Const NBaseDeDatos As String = "C:\Riegos\Riegos.mdb"
Public Const NProgramacion As String = "Programacion"
Public Const NProgramacionClima As String = "ProgramacionClima"
Public Const NMenu As String = "Menu"
Public Const NCultivosKc As String = "CultivosKc"
Public Const NCultivosRaices As String = "CultivosRaices"
Public Const NCultivosSal As String = "CultivosSal"
Public Const NCultivosFraccion As String = "CultivosFraccion"
Public Const NCultivosDias As String = "CultivosDias"
Public Const NCultivosNombre As String = "CultivosNombre"
Public Const NBalanceHidrico As String = "BalanceHidrico"
Public Const NTexturas As String = "Texturas"
Public Sub BaseDatos()
Set BaseDeDatos = OpenDatabase(NBaseDeDatos)
Set fMenu = BaseDeDatos.OpenRecordset(NMenu, dbOpenTable)
Set fProgramacion = BaseDeDatos.OpenRecordset(NProgramacion, dbOpenTable)
Set fProgramacionClima = BaseDeDatos.OpenRecordset(NProgramacionClima, dbOpenTable)
Set fCultivosKc = BaseDeDatos.OpenRecordset(NCultivosKc, dbOpenTable)
Set fCultivosRaices = BaseDeDatos.OpenRecordset(NCultivosRaices, dbOpenTable)
Set fCultivosSal = BaseDeDatos.OpenRecordset(NCultivosSal, dbOpenTable)
Set fCultivosFraccion = BaseDeDatos.OpenRecordset(NCultivosFraccion, dbOpenTable)
Set fCultivosDias = BaseDeDatos.OpenRecordset(NCultivosDias, dbOpenTable)
Set fBalanceHidrico = BaseDeDatos.OpenRecordset(NBalanceHidrico, dbOpenTable)
Set fTexturas = BaseDeDatos.OpenRecordset(NTexturas, dbOpenTable)
End Sub
Public Function LeerFichero(nTabla As String, nIndice As String, nBusca As String, nCampo As String) As String
' Esta funcion lee ficheros de una base de datos indexada
' Pide: Nombre de la tabla, Nombre del indice,Valor buscado y Nombre del campo del cual devolver su valor
Dim BaseTablas As Database
Dim Tabla As Recordset
Set BaseTablas = OpenDatabase(NBaseDeDatos)
Set Tabla = BaseTablas.OpenRecordset(nTabla, dbOpenTable)
Tabla.Index = nIndice
Tabla.MoveFirst
Tabla.Seek "=", nBusca
If Tabla.NoMatch = False Then 'Registro encontrado
LeerFichero = IIf(IsNull(Tabla(nCampo)), "", Tabla(nCampo))
'LeerFichero = Tabla(nCampo)
Else
LeerFichero = "?"
End If
End Function
Public Function NoNulo(Dato)
' Sustituye el dato Null por Cadena Vacia
NoNulo = IIf(IsNull(Dato), "", Dato)
End Function
Public Function LeerMSJ(Valor As String)
' Lee mensajes en la tabla (TablaMensajes)
If Idioma = "CS" Then
LeerMSJ = LeerFichero("TablaMensajes", "Orden", Valor, "TextoMensaje")
7. Anejo 5
164
Else
LeerMSJ = LeerFichero("TablaMensajes", "Orden", Valor, "TexteMissatge")
End If
End Function
Public Function CargaPantalla(NombreForm As Form)
NombreForm.Top = 0
NombreForm.Left = 0
NombreForm.Height = 8600
NombreForm.Width = 12000
End Function
Public Function Numeros(tp As Integer) As Integer
If (tp < 48 Or tp > 57) And tp <> 8 Then
Numeros = 0
Else
Numeros = tp
End If
End Function
Public Function Numerico(Valor As String) As Integer
Numerico = Val(Trim(Valor))
End Function
Public Sub DibujaMensaje(NomForm)
NomForm.Mensaje.Height = 330
NomForm.Mensaje.Left = 105
NomForm.Mensaje.Top = 7980
NomForm.Mensaje.Width = 11775
End Sub
Public Sub DibujaPanelComandos(NomForm)
NomForm.PanelComandos.Height = 960
NomForm.PanelComandos.Left = 0
NomForm.PanelComandos.Top = 0
NomForm.PanelComandos.Width = 11985
End Sub
Public Function CursorOcupado(NombreForm As Form)
NombreForm.MousePointer = 11
End Function
Public Function CursorLibre(NombreForm As Form)
NombreForm.MousePointer = 0
End Function
Function CarNum(Variable As String) As Double
' entrada "4,21323" y sale 4.21323
Dim Frase
Frase = ""
Dim num
For num = 1 To Len(Trim(Variable))
Dim a
a = Mid$(Variable, num, 1)
If a = "," Then a = "."
Frase = Frase + a
Next num
CarNum = Val(Frase)
End Function
Function NumCar(Variable As Double) As String
Dim Inter
Inter = Trim(Str(Variable))
If (Variable > 0 And Variable < 1) Then
Inter = "0" + Trim(Str(Variable))
End If
If (Variable > -1 And Variable < 0) Then
Variable = Variable * -1
Inter = "-0" + Trim(Str(Variable))
End If
Dim Frase
Frase = ""
Dim num
For num = 1 To Len(Trim(Inter))
Dim a
a = Mid$(Inter, num, 1)
If a = "." Then a = ","
Frase = Frase + a
Next num
NumCar = Frase
End Function
7. Anejo 5
165
RIEGOS2.BAS
' Vctor Yusta. Dicembre-1998
Attribute VB_Name = "Riegos2"
Option Explicit
Public Const Pi As Double = 3.14159265358979
Public Function CalculaNumeroDias(DesdeFecha As Date, HastaFecha As Date) As Double
''DiaAno = DateDiff("d", Fecha1, Fecha2) + 1
CalculaNumeroDias = DateSerial(Year(HastaFecha), Month(HastaFecha), Day(HastaFecha)) -
DateSerial(Year(DesdeFecha), Month(DesdeFecha), Day(DesdeFecha))
'+ 1
End Function
Public Function GraRad() As Double
GraRad = Pi / 180
End Function
Public Function RadGra() As Double
RadGra = 180 / Pi
End Function
Public Function Seno(Valor As Double) As Double
Seno = Sin(Valor * GraRad())
End Function
Public Function Coseno(Valor As Double) As Double
Coseno = Cos(Valor * GraRad())
End Function
Public Function Tangente(Valor As Double) As Double
Tangente = Tan(Valor * GraRad())
End Function
Public Function ArcoSeno(Valor As Double) As Double
If (-Valor * Valor + 1) = 0 Then
ArcoSeno = Int(Atn(1E+99) * RadGra())
Else
ArcoSeno = Atn(Valor / Sqr(-Valor * Valor + 1)) * RadGra()
End If
End Function
Public Function ArcoCoseno(Valor As Double) As Double
If (-Valor * Valor + 1) = 0 Then
ArcoCoseno = 0
Else
ArcoCoseno = Atn(-Valor / Sqr(-Valor * Valor + 1)) * RadGra() + 2 * Atn(1) * RadGra()
End If
If Valor = 0 Then
ArcoCoseno = 90
End If
End Function
Public Function ArcoCosenoRad(Valor As Double) As Double
If Valor = 1 Then
ArcoCosenoRad = 0
Else
ArcoCosenoRad = Atn(-Valor / Sqr(-Valor * Valor + 1)) + 2 * Atn(1)
End If
End Function
Public Function ArcCosRad(Valor As Double) As Double
ArcCosRad = Atn(-Valor / Sqr(-Valor * Valor + 1)) + 2 * Atn(1)
End Function
Public Function SexCen(Valor As String) As Double
SexCen = Val(Mid(Valor, 1, 2)) + (Val(Mid(Valor, 4, 2)) / 60)
End Function
Public Function CenSex(Valor As Double) As String
CenSex = Str(Int(Valor)) & "" + Str((Valor - Int(Valor)) * 60) & "'"
End Function
Public Function LOG10(Valor As Double) As Double
LOG10 = Log(Valor) / Log(10#)
End Function
7. Anejo 5
166
RIEGOS.FRM
' Vctor Yusta. Dicembre-1998
Option Explicit
Private Sub Form_Load()
Call CargaPantalla(Me)
BaseDatos
Call CargaMenu
Show
DoEvents
End Sub
Private Sub Form_Terminate()
SalirProyecto
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cancel = SalirProyecto
End Sub
Function SalirProyecto()
Dim Pregunta
Pregunta = MsgBox(" Quieres salir del programa? ", vbYesNo, "Salida")
If Pregunta = vbYes Then
Cls
End
End If
SalirProyecto = 1
End Function
Private Function CargaMenu()
Dim MenuCaption(9)
Dim FormaCaption(99)
Dim Num1
Dim Num2
fMenu.MoveFirst
Do While Not fMenu.EOF()
If fMenu("Numero") < 10 Then
MenuCaption(fMenu("Numero")) = fMenu("Menu")
Else
FormaCaption(fMenu("Numero")) = fMenu("Menu")
End If
fMenu.MoveNext
Loop
For Num1 = 1 To 9
If Trim(MenuCaption(Num1)) = "" Then
Me.Menu(Num1).Visible = False
Else
Me.Menu(Num1).Caption = MenuCaption(Num1)
For Num2 = 1 To 9
If Trim(FormaCaption((Num1 * 10) + Num2)) = "" Then
Me.Forma((Num1 * 10) + Num2).Visible = False
Else
Me.Forma((Num1 * 10) + Num2).Caption = FormaCaption((Num1 * 10) + Num2) + " " + NombreProgramacion
If LeerFichero("Menu", "Orden", ((Num1 * 10) + Num2), "Existe") <> "SI" Then Me.Forma((Num1 * 10) +
Num2).Enabled = False
If ((Num1 * 10) + Num2) > 20 And ((Num1 * 10) + Num2) < 39 Then
Me.Forma((Num1 * 10) + Num2).Enabled = False
End If
End If
Next Num2
End If
Next Num1
End Function
Private Sub Forma_Click(Index As Integer)
fMenu.Index = "Orden"
fMenu.MoveFirst
fMenu.Seek "=", Index
If fMenu.NoMatch = True Then 'Registro NO encontrado
MsgBox ("Este programa no existe")
Else
If NoNulo(fMenu("Existe")) <> "SI" Then
MsgBox ("Este programa no existe")
Else
CargarPrograma (Index)
Index = 0
End If
End If
7. Anejo 5
167
End Sub
Private Sub CargarPrograma(Numero)
On Error Resume Next
If Numero = 11 Then Load Riegos11
If Numero = 12 Then Load Riegos12
If Numero = 19 Then SalirProyecto
If Numero = 21 Then Load Riegos21
If Numero = 22 Then Load Riegos22
If Numero = 23 Then Load Riegos23
If Numero = 24 Then Load Riegos24
If Numero = 25 Then Load Riegos25
If Numero = 26 Then Load Riegos26
If Numero = 27 Then Load Riegos27
If Numero = 31 Then Load Riegos31
End Sub
7. Anejo 5
168
RIEGOS00.FRM
' Vctor Yusta. Dicembre-1998
VERSION 5.00
Object = "DBGRID32.OCX"
Option Explicit
Dim msSortCol As String
Dim mbCtrlKey As Integer
Private Sub Form_Load()
Dim bParmQry As Integer
Dim qdfTmp As QueryDef
On Error GoTo LoadErr
'Para hacer
'gsDatabase es una cadena global que necesita
'establecerse en el procedimiento startup de la aplicacin
Data1.DatabaseName = gsDatabase
'gsRecordSource es una cadena global que necesita
'en el procedimiento que carga este formulario
Data1.RecordSource = gsRecordsource
Data1.Connect = gsConnect
Data1.RecordsetType = 1 'dynaset
Data1.Options = 0
Data1.Refresh
If Len(Data1.RecordSource) > 50 Then
Me.Caption = "SQL Statement"
Else
Me.Caption = Data1.RecordSource
End If
Exit Sub
LoadErr:
MsgBox "Error:" & Err & " " & Err.Description
Unload Me
End Sub
Sub cmdClose_Click()
Unload Me
End Sub
Private Sub cmdFilter_Click()
On Error GoTo FilterErr
Dim recRecordset1 As Recordset, recRecordset2 As Recordset
Dim sFilterStr As String
If Data1.RecordsetType = vbRSTypeTable Then
Beep
MsgBox "Imposible filtrar un recordset de tipo Table", 48
Exit Sub
End If
Set recRecordset1 = Data1.Recordset 'Copia el conjunto de resultados
sFilterStr = InputBox("Escriba la expresin de filtro:")
If Len(sFilterStr) = 0 Then Exit Sub
Screen.MousePointer = vbHourglass
recRecordset1.Filter = sFilterStr
Set recRecordset2 = recRecordset1.OpenRecordset(recRecordset1.Type) 'Establece el filtro
Set Data1.Recordset = recRecordset2 'Asigna de nuevo al objeto Recordset original
Screen.MousePointer = vbDefault
Exit Sub
FilterErr:
Screen.MousePointer = vbDefault
MsgBox "Error:" & Err & " " & Err.Description
Exit Sub
End Sub
Private Sub cmdRefresh_Click()
On Error GoTo RefErr
Data1.Recordset.Requery
Exit Sub
RefErr:
MsgBox "Error:" & Err & " " & Err.Description
Exit Sub
End Sub
Private Sub cmdSort_Click()
On Error GoTo SortErr
Dim recRecordset1 As Recordset, recRecordset2 As Recordset
Dim SortStr As String
If Data1.RecordsetType = vbRSTypeTable Then
Beep
MsgBox "Imposible ordenar un recordset de tipo Table", 48
7. Anejo 5
169
Exit Sub
End If
Set recRecordset1 = Data1.Recordset 'Copia el recordset
If Len(msSortCol) = 0 Then
SortStr = InputBox("Escriba la cadena de orden:")
If Len(SortStr) = 0 Then Exit Sub
Else
SortStr = msSortCol
End If
Screen.MousePointer = vbHourglass
recRecordset1.Sort = SortStr
'Establece el orden
Set recRecordset2 = recRecordset1.OpenRecordset(recRecordset1.Type)
Set Data1.Recordset = recRecordset2
Screen.MousePointer = vbDefault
Exit Sub
SortErr:
Screen.MousePointer = vbDefault
MsgBox "Error:" & Err & " " & Err.Description
Exit Sub
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.WindowState <> 1 Then
grdDataGrid.Height = Me.Height - (425 + picButtons.Height)
End If
End Sub
Private Sub grdDataGrid_BeforeDelete(Cancel As Integer)
If MsgBox("Desea eliminar la fila actual?", vbYesNo + vbQuestion) <> vbYes Then
Cancel = True
End If
End Sub
Private Sub grdDataGrid_BeforeUpdate(Cancel As Integer)
If MsgBox("Desea realizar los cambios?", vbYesNo + vbQuestion) <> vbYes Then
Cancel = True
End If
End Sub
Private Sub grdDataGrid_HeadClick(ByVal ColIndex As Integer)
'Ahora se ordena por esta columna
If Data1.RecordsetType = vbRSTypeTable Then Exit Sub
'Comprueba el uso de la tecla Ctrl para sentido descendente
If mbCtrlKey Then
msSortCol = "[" & Data1.Recordset(ColIndex).Name & "] desc"
mbCtrlKey = 0 'reset it
Else
msSortCol = "[" & Data1.Recordset(ColIndex).Name & "]"
End If
cmdSort_Click
msSortCol = vbNullString 'Lo restablece
End Sub
Private Sub grdDataGrid_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)
mbCtrlKey = Shift
End Sub
7. Anejo 5
170
RIEGOS11.FRM
' Vctor Yusta. Dicembre-1998
Object ="TABCTL32.OCX"
Object ="THREED32.OCX"
Object ="DBLIST32.OCX"
Option Explicit
Dim num
Private Sub Form_Load()
'Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 11, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Tabla.Tab = 0
Posiciona (0)
Mensaje.Caption = "Escoge una de las tres opciones"
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0
SalirForm
Case 2
AnalizaTabla
Case 4
Dim Pregunta
Pregunta = MsgBox("Quieres borrar la programacin: " + RTrim(NombreProgramacion), 1, "BORRANDO
PROGRAMACIN")
If Pregunta = vbOK Then
BorrarProgramacion (NombreProgramacion)
End If
Comando(2).Visible = False
Comando(4).Visible = False
End Select
End Sub
Function BorrarProgramacion(vNombre As String)
BaseDeDatos.Execute "DELETE * FROM BalanceHidrico WHERE NombreProgramacion = '" & vNombre & "' ;"
BaseDeDatos.Execute "DELETE * FROM ProgramacionClima WHERE NombreProgramacion = '" & vNombre & "' ;"
BaseDeDatos.Execute "DELETE * FROM Programacion WHERE NombreProgramacion = '" & vNombre & "' ;"
Call MostrarInformacion
Data1.Refresh
DBList1.Refresh
DBList1.SetFocus
End Function
Private Sub AnalizaTabla()
Select Case Tabla.Tab
Case 0
If Trim(UCase(Entrada(0).Text)) = "" Then
Posiciona (0)
MsgBox ("Has de entrar algn nombre de diseo agronmico")
Else
If Trim(LeerFichero("Programacion", "Programacion", Trim(UCase(Entrada(0).Text)), "NombreProgramacion")) =
UCase(Entrada(0).Text) Then
Posiciona (0)
MsgBox ("Este diseo ya existe")
Else
NombreProgramacion = UCase(Entrada(0).Text)
fProgramacion.AddNew
fProgramacion("NombreProgramacion") = NombreProgramacion
fProgramacion.Update
Riegos.Caption = "Programacin de riegos" + " " + NombreProgramacion
For num = 21 To 29
Riegos.Forma(num).Enabled = True
Next num
Riegos.Forma(31).Enabled = True
Riegos.Forma(32).Enabled = True
SalirForm
End If
End If
Case 1
NombreProgramacion = DBList1.Text
Riegos.Caption = "Programacin de riegos" + " " + NombreProgramacion
For num = 21 To 29
7. Anejo 5
171
Riegos.Forma(num).Enabled = True
Next num
Riegos.Forma(31).Enabled = True
Riegos.Forma(32).Enabled = True
SalirForm
End Select
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 0
If Len(Trim(Entrada(Index))) > 0 Then
Comando(2).Visible = True
End If
Case 1
If Len(Trim(Entrada(Index))) > 0 Then
Comando(2).Visible = True
End If
Case 2
Print "Aqui ponemos la rutina de guardar como"
End Select
End Sub
Private Sub SalirForm()
Unload Me
Load Riegos
End Sub
Private Sub DBList1_Click()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", DBList1.Text
NombreProgramacion = DBList1.Text
Mensaje.Caption = "Cliquea en las opciones de arriba"
If fProgramacion.NoMatch = False Then 'Registro encontrado
Muestra1.Caption = NoNulo(fProgramacion("Descripcion"))
Muestra2.Caption = NoNulo(fProgramacion("NombreFinca"))
Muestra3.Caption = NoNulo(fProgramacion("Poblacion"))
Muestra4.Caption = NoNulo(fProgramacion("Provincia"))
Muestra5.Caption = NoNulo(fProgramacion("Clima"))
Muestra6.Caption = NoNulo(fProgramacion("SuperficieFinca"))
End If
If RTrim(NombreProgramacion) <> "." Then
Comando(2).Visible = True
Comando(4).Visible = True
End If
End Sub
Private Sub DBList1_DblClick()
NombreProgramacion = DBList1.Text
Riegos.Caption = Riegos.Caption
Dim num
For num = 21 To 29
Riegos.Forma(num).Enabled = True
Next num
Riegos.Forma(31).Enabled = True
Riegos.Forma(32).Enabled = True
Riegos.Caption = "Programacin de riegos" + " " + NombreProgramacion
SalirForm
End Sub
Private Sub Tabla_Click(PreviousTab As Integer)
If Tabla.Tab = 0 Then
Comando(2).Visible = False
Comando(4).Visible = False
Mensaje.Caption = "Entra un nombre nuevo"
End If
Posiciona (0)
If Tabla.Tab = 1 Then
Call MostrarInformacion
Mensaje.Caption = "Escoge algn diseo, cliqueando con el ratn"
DBList1.SetFocus
End If
'If Tabla.Tab = 2 Then Entrada(1).SetFocus
End Sub
Private Sub MostrarInformacion()
Dim Busca
Busca = ""
7. Anejo 5
172
Busca = Busca + "SELECT * "
Busca = Busca + "FROM Programacion "
Busca = Busca + "WHERE "
Busca = Busca + "NombreProgramacion <> '.' "
Busca = Busca + "ORDER BY "
Busca = Busca + "NombreProgramacion ;"
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset(Busca)
If Consulta.RecordCount <> 0 Then
Data1.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos
Data1.RecordsetType = 1
Data1.RecordSource = Busca
Data1.Refresh
Else
MsgBox ("No hay informacin")
SalirForm
End If
End Sub
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
173
RIEGOS12.FRM
' Vctor Yusta. Dicembre-1998
Object = "THREED32.OCX"
Option Explicit
Dim num
Dim Tablas(20) As String
Private Sub Form_Load()
Tablas(0) = "CultivosNombre"
Tablas(1) = "CultivosKc"
Tablas(2) = "CultivosDias"
Tablas(3) = "CultivosRaices"
Tablas(4) = "CultivosFraccion"
Tablas(5) = "Sal"
Tablas(6) = "Meteorologia"
Tablas(7) = "Texturas"
Tablas(8) = "SistemasRiego"
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 12, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Frame1.Visible = True
Show
Mensaje.Caption = "Pulsa sobre cualquier tabla"
End Sub
Private Sub Ficheros_Click(Index As Integer)
Dim NombreTabla: NombreTabla = Tablas(Index)
' Select Case Index
' Case 0
' NombreTabla = "CultivosNombre"
' Case 1
' NombreTabla = "CultivosSal"
' Case 2
' NombreTabla = "CultivosSal"
' Case 3
' NombreTabla = "CultivosSal"
' Case 4
' NombreTabla = "CultivosSal"
' Case 5
' NombreTabla = "CultivosSal"
' Case 6
' NombreTabla = "CultivosSal"
' Case 7
' NombreTabla = "CultivosSal"
' End Select
Dim Busca: Busca = ""
Dim Consulta As Recordset
Busca = Busca + "SELECT * "
Busca = Busca + "FROM " & NombreTabla & " "
Busca = Busca + " ;"
Set Consulta = BaseDeDatos.OpenRecordset(Busca)
If Consulta.RecordCount <> 0 Then
Data2.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos
Data2.RecordsetType = 1
Data2.RecordSource = Busca
Data2.Refresh
Dim F As New Riegos00
Set F.Data1.Recordset = Data2.Recordset
F.Caption = Me.Caption & " Grid"
F.Show
End If
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0
SalirForm
End Select
End Sub
Private Sub SalirForm()
Unload Me
Load Riegos
End Sub
Private Sub MostrarInformacion()
Dim Busca
7. Anejo 5
174
Busca = ""
Busca = Busca + "SELECT * "
Busca = Busca + "FROM Programacion "
Busca = Busca + "WHERE "
Busca = Busca + "NombreProgramacion <> '.' "
Busca = Busca + "ORDER BY "
Busca = Busca + "NombreProgramacion ;"
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset(Busca)
If Consulta.RecordCount <> 0 Then
Data1.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos
Data1.RecordsetType = 1
Data1.RecordSource = Busca
Data1.Refresh
Else
MsgBox ("No hay informacin")
SalirForm
End If
End Sub
7. Anejo 5
175
RIEGOS21.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Option Explicit
Dim Atras
Dim Mensajes(20) As String
Dim Alertas(20) As String
Dim Campos(20) As String
Dim ExisteFichero As String
Private Sub Form_Load()
Campos(0) = "A030"
Mensajes(1) = "Entra una pequea descripcin de la finca"
Mensajes(2) = "Entra el nombre de la finca"
Mensajes(3) = "Entra el nombre de la poblacin"
Mensajes(4) = "Entra el nombre de la provincia"
Mensajes(5) = "Entra los grados de latitud del lugar"
Mensajes(6) = "Entra los minutos de latitud del lugar"
Mensajes(7) = "Entra los segundos de latitud del lugar"
Mensajes(8) = "Entra la latitud del lugar"
Mensajes(9) = "Entra los grados de longitud del lugar"
Mensajes(10) = "Entra los minutos de longitud del lugar"
Mensajes(11) = "Entra los segundos de longitud del lugar"
Mensajes(12) = "Entra la longitud del lugar"
Mensajes(13) = "Entra la altitud"
Mensajes(14) = "Clima: (M)ensual estimado (D)iario real"
Mensajes(15) = "Entra la superficie de la finca en m2"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Alertas(2) = "Entra el nombre"
Alertas(3) = "Entra la poblacin"
Alertas(4) = "Entra la provincia"
Alertas(5) = "El valor de los grados de latitud van de 0 a 180"
Alertas(6) = "El valor de los minutos de latitud van de 0 a 59"
Alertas(7) = "El valor de los segundos de latitud van de 0 a 59"
Alertas(8) = "El valor de la latitud es N o S"
Alertas(9) = "El valor de los grados de longitud van de 0 a 180"
Alertas(10) = "El valor de los minutos de longitud van de 0 a 59"
Alertas(11) = "El valor de los segundos de longitud van de 0 a 59"
Alertas(12) = "El valor de la longitud es E u O"
Alertas(13) = "La altitud va de 0 a 3000 metros"
Alertas(14) = "Ha de ser M o D"
Alertas(15) = "Entra la superficie de la finca"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", Val(Right(Me.Name, 2)), "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Comando(0).Visible = True
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
'Print KeyAscii
Dim Pregunta
Dim Tecla
Dim tp As Integer
Dim Cadena As String
tp = KeyAscii
If KeyAscii = 13 Or KeyAscii = 9 And Atras = 0 Then Tecla = 1
Atras = 0
Cadena = Trim(Entrada(Index).Text)
Select Case Index
Case 1 ' Nombre de la Finca
7. Anejo 5
176
If Tecla = 1 Then
If Cadena = "" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 2 ' Nombre de la Finca
If Tecla = 1 Then
If Cadena = "" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1):
Posiciona (Index + 1)
End If
End If
Case 3 ' Nombre de la Finca
If Tecla = 1 Then
If Cadena = "" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 4 ' Nombre de la Finca
If Tecla = 1 Then
If Cadena = "" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 5 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 180 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 6 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 7 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 8 ' grados latitud
7. Anejo 5
177
Cadena = UCase(Cadena)
Entrada(Index).Text = Cadena
If Tecla = 1 Then
If Cadena <> "N" And Cadena <> "S" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 9 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 180 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 10 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 11 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 12 ' grados latitud
Cadena = UCase(Cadena)
Entrada(Index).Text = Cadena
If Tecla = 1 Then
If Cadena <> "E" And Cadena <> "O" Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 13 ' grados latitud
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Numerico(Cadena) > 3000 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 14 ' datos climaticos
Cadena = UCase(Cadena)
Entrada(Index).Text = Cadena
If Tecla = 1 Then
If Cadena <> "M" And Cadena <> "D" Then
Pregunta = MsgBox(Alertas(Index))
7. Anejo 5
178
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(Index + 1)
Posiciona (Index + 1)
End If
End If
Case 15 ' superficie de la finca
KeyAscii = Numeros(tp)
If Tecla = 1 Then
If Numerico(Cadena) < 0 Or Len(Cadena) = 0 Then
Pregunta = MsgBox(Alertas(Index))
Posiciona (Index)
Else
Mensaje.Caption = Mensajes(0)
Comando(5).Visible = True
Posiciona (1)
End If
End If
End Select
End Sub
Private Sub Entrada_DblClick(Index As Integer)
Select Case Index
'Case 8
End Select
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
'Print KeyCode, Shift
If Index > 1 And KeyCode = 38 Then
Posiciona (Index - 1)
End If
If Index > 0 And KeyCode = 9 And Shift = 1 Then
If Index - 1 < 1 Then Index = 16
Posiciona (Index - 1)
Atras = 1
End If
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("Descripcion", Entrada(1))
Call MoverFP("NombreFinca", Entrada(2))
Call MoverFP("Poblacion", Entrada(3))
Call MoverFP("Provincia", Entrada(4))
Call MoverFP("LatitudGrados", Entrada(5))
Call MoverFP("LatitudMinutos", Entrada(6))
Call MoverFP("LatitudSegundos", Entrada(7))
Call MoverFP("Latitud", Entrada(8))
Call MoverFP("LongitudGrados", Entrada(9))
Call MoverFP("LongitudMinutos", Entrada(10))
Call MoverFP("LongitudSegundos", Entrada(11))
Call MoverFP("Longitud", Entrada(12))
Call MoverFP("Altitud", Entrada(13))
Call MoverFP("Clima", Entrada(14))
Call MoverFP("SuperficieFinca", Entrada(15))
ExisteFichero = "SI"
Else
ExisteFichero = "NO"
End If
End Sub
Private Sub GrabarDatos()
If ExisteFichero = "NO" Then
7. Anejo 5
179
fProgramacion.AddNew
Else
fProgramacion.Edit
End If
Call MoverPF("NombreProgramacion", Entrada(0))
Call MoverPF("Descripcion", Entrada(1))
Call MoverPF("NombreFinca", Entrada(2))
Call MoverPF("Poblacion", Entrada(3))
Call MoverPF("Provincia", Entrada(4))
Call MoverPF("LatitudGrados", Entrada(5))
Call MoverPF("LatitudMinutos", Entrada(6))
Call MoverPF("LatitudSegundos", Entrada(7))
Call MoverPF("Latitud", Entrada(8))
Call MoverPF("LongitudGrados", Entrada(9))
Call MoverPF("LongitudMinutos", Entrada(10))
Call MoverPF("LongitudSegundos", Entrada(11))
Call MoverPF("Longitud", Entrada(12))
Call MoverPF("Altitud", Entrada(13))
Call MoverPF("Clima", Entrada(14))
Call MoverPF("SuperficieFinca", Entrada(15))
fProgramacion("Pantalla21") = "T"
fProgramacion.Update
End Sub
Private Sub Entrada_GotFocus(Index As Integer)
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Private Sub MoverPF(Campo As String, Pantalla)
fProgramacion(Campo) = Pantalla.Text
End Sub
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
180
RIEGOS22.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Object ="DBLIST32.OCX"
Option Explicit
'Dim Atras
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Tierra(20)
Private Sub Form_Load()
Indice = 1
Mensajes(1) = "Entra el nombre de cultivio, o cliquea en opciones de cultivo"
Mensajes(2) = "Entra la cantidad de Arcilla (%)"
Mensajes(3) = "Entra la cantidad de Limo (%)"
Mensajes(4) = "Cliquea a la derecha, si quieres escoger textura"
Mensajes(5) = "Entra la capacidad de campo (% suelo seco)"
Mensajes(6) = "Entra el punto de marchitez(% suelo seco)"
Mensajes(7) = "Entra los segundos de latitud del lugar"
Mensajes(8) = "Entra la Kc de la fase Inicial []"
Mensajes(9) = "Entra la Kc de la fase de media []"
Mensajes(10) = "Entra la Kc de la fase Final []"
Mensajes(11) = "Entra el nmero de das de ste intrvalo [das]"
Mensajes(12) = "Entra el nmero de das de ste intrvalo [das]"
Mensajes(13) = "Entra el nmero de das de ste intrvalo [das]"
Mensajes(14) = "Entra el nmero de das de ste intrvalo [das]"
Mensajes(15) = "Entra la profundidad efectiva de las races [cm]"
Mensajes(16) = "Entra la profundidad efectiva de las races [cm]"
Mensajes(17) = "Entra la profundidad efectiva de las races [cm]"
Mensajes(18) = "Entra el Kc del mes de Enero []"
Mensajes(19) = "Entra el Kc del mes de Febrero []"
Mensajes(20) = "Entra el Kc del mes de Marzo []"
Mensajes(21) = "Entra el Kc del mes de Abril []"
Mensajes(22) = "Entra el Kc del mes de Mayo []"
Mensajes(23) = "Entra el Kc del mes de Junio []"
Mensajes(24) = "Entra el Kc del mes de Julio []"
Mensajes(25) = "Entra el Kc del mes de Agosto []"
Mensajes(26) = "Entra el Kc del mes de Septiembre []"
Mensajes(27) = "Entra el Kc del mes de Octubre []"
Mensajes(28) = "Entra el Kc del mes de Noviembre []"
Mensajes(29) = "Entra el Kc del mes de Diciembre []"
Mensajes(30) = "Entra la profundidad efectiva de las races [cm]"
Mensajes(31) = "Entra la fraccin de agua disponible en el suelo []"
Mensajes(32) = "Entra la toleracia a sales del suelo para una produccin del 100% [dS/cm]"
Mensajes(33) = "Entra la toleracia a sales del agua para una produccin del 100% [dS/cm]"
Mensajes(34) = "Entra la toleracia a sales del suelo para una produccin del 90% [dS/cm]"
Mensajes(35) = "Entra la toleracia a sales del agua para una produccin del 90% [dS/cm]"
Mensajes(36) = "Entra la toleracia a sales del suelo para una produccin del 75% [dS/cm]"
Mensajes(37) = "Entra la toleracia a sales del agua para una produccin del 75% [dS/cm]"
Mensajes(38) = "Entra la toleracia a sales del suelo para una produccin del 50% [dS/cm]"
Mensajes(39) = "Entra la toleracia a sales del agua para una produccin del 50% [dS/cm]"
Mensajes(40) = "Entra la mxima toleracia a sales del suelo [dS/cm]"
Mensajes(41) = "Entra la fecha de plantacin o siembra (anuales). En prurianuales 01-01-ao [dd-mm-aaaa]"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Alertas(2) = "Entra el nombre"
Alertas(3) = "Entra la poblacin"
Alertas(4) = "Entra la provincia"
Alertas(5) = "El valor de los grados de latitud van de 0 a 180"
Alertas(6) = "El valor de los minutos de latitud van de 0 a 59"
Alertas(7) = "El valor de los segundos de latitud van de 0 a 59"
Alertas(8) = "El valor de la latitud es N o S"
Alertas(9) = "El valor de los grados de longitud van de 0 a 180"
Alertas(10) = "El valor de los minutos de longitud van de 0 a 59"
Alertas(11) = "El valor de los segundos de longitud van de 0 a 59"
Alertas(12) = "El valor de la longitud es E u O"
7. Anejo 5
181
Alertas(13) = "La altitud va de 0 a 3000 metros"
Alertas(14) = "El nmero de cultivos va de 1 5"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 22, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("Cultivo", Entrada(1))
Call MoverFP("Tipo", Entrada(2))
Call MoverFP("Hierba", Entrada(3))
Call MoverFP("Heladas", Entrada(4))
Call MoverFP("Humedad", Entrada(5))
Call MoverFP("Vientos", Entrada(6))
Call MoverFP("Edad", Entrada(7))
Call MoverFP("KcI", Entrada(8))
Call MoverFP("KcM", Entrada(9))
Call MoverFP("KcF", Entrada(10))
Call MoverFP("DiasI", Entrada(11))
Call MoverFP("DiasD", Entrada(12))
Call MoverFP("DiasM", Entrada(13))
Call MoverFP("DiasF", Entrada(14))
Call MoverFP("RaicesI", Entrada(15))
Call MoverFP("RaicesM", Entrada(16))
Call MoverFP("RaicesF", Entrada(17))
Call MoverFP("Kc01", Entrada(18))
Call MoverFP("Kc02", Entrada(19))
Call MoverFP("Kc03", Entrada(20))
Call MoverFP("Kc04", Entrada(21))
Call MoverFP("Kc05", Entrada(22))
Call MoverFP("Kc06", Entrada(23))
Call MoverFP("Kc07", Entrada(24))
Call MoverFP("Kc08", Entrada(25))
Call MoverFP("Kc09", Entrada(26))
Call MoverFP("Kc10", Entrada(27))
Call MoverFP("Kc11", Entrada(28))
Call MoverFP("Kc12", Entrada(29))
Call MoverFP("Raices", Entrada(30))
Call MoverFP("Fraccion", Entrada(31))
Call MoverFP("ECe100", Entrada(32))
Call MoverFP("ECw100", Entrada(33))
Call MoverFP("ECe90", Entrada(34))
Call MoverFP("ECw90", Entrada(35))
Call MoverFP("ECe75", Entrada(36))
Call MoverFP("ECw75", Entrada(37))
Call MoverFP("ECe50", Entrada(38))
7. Anejo 5
182
Call MoverFP("ECw50", Entrada(39))
Call MoverFP("MaxECe", Entrada(40))
Call MoverFP("FechaPlantacion", Entrada(41))
If fProgramacion("Tipo") = "A" Then
Frame1.Visible = True
Frame2.Visible = False
End If
If fProgramacion("Tipo") = "B" Then
Frame1.Visible = True
Frame2.Visible = False
End If
If fProgramacion("Tipo") = "D" Then
Frame1.Visible = True
Frame2.Visible = False
End If
If fProgramacion("Tipo") = "E" Then
Frame1.Visible = False
Frame2.Visible = True
End If
If fProgramacion("Tipo") = "F" Then
Frame1.Visible = False
Frame2.Visible = True
End If
If fProgramacion("Tipo") = "G" Then
Frame1.Visible = False
Frame2.Visible = True
End If
If fProgramacion("Tipo") = "H" Then
Frame1.Visible = False
Frame2.Visible = True
End If
If fProgramacion("Tipo") = "O" Then
Frame1.Visible = False
Frame2.Visible = True
End If
End If
End Sub
Private Sub GrabarDatos()
fProgramacion.Edit
fProgramacion("Cultivo") = Entrada(1).Text
fProgramacion("Tipo") = Entrada(2).Text
fProgramacion("Hierba") = Entrada(3).Text
fProgramacion("Heladas") = Entrada(4).Text
fProgramacion("Humedad") = Entrada(5).Text
fProgramacion("Vientos") = Entrada(6).Text
fProgramacion("Edad") = Entrada(7).Text
fProgramacion("KcI") = Entrada(8).Text
fProgramacion("KcM") = Entrada(9).Text
fProgramacion("KcF") = Entrada(10).Text
fProgramacion("DiasI") = Entrada(11).Text
fProgramacion("DiasD") = Entrada(12).Text
fProgramacion("DiasM") = Entrada(13).Text
fProgramacion("DiasF") = Entrada(14).Text
fProgramacion("RaicesI") = Entrada(15).Text
fProgramacion("RaicesM") = Entrada(16).Text
fProgramacion("RaicesF") = Entrada(17).Text
fProgramacion("Kc01") = Entrada(18).Text
fProgramacion("Kc02") = Entrada(19).Text
fProgramacion("Kc03") = Entrada(20).Text
fProgramacion("Kc04") = Entrada(21).Text
fProgramacion("Kc05") = Entrada(22).Text
fProgramacion("Kc06") = Entrada(23).Text
fProgramacion("Kc07") = Entrada(24).Text
fProgramacion("Kc08") = Entrada(25).Text
fProgramacion("Kc09") = Entrada(26).Text
fProgramacion("Kc10") = Entrada(27).Text
fProgramacion("Kc11") = Entrada(28).Text
fProgramacion("Kc12") = Entrada(29).Text
fProgramacion("Raices") = Entrada(30).Text
fProgramacion("Fraccion") = Entrada(31).Text
fProgramacion("ECe100") = Entrada(32).Text
fProgramacion("ECw100") = Entrada(33).Text
fProgramacion("ECe90") = Entrada(34).Text
7. Anejo 5
183
fProgramacion("ECw90") = Entrada(35).Text
fProgramacion("ECe75") = Entrada(36).Text
fProgramacion("ECw75") = Entrada(37).Text
fProgramacion("ECe50") = Entrada(38).Text
fProgramacion("ECw50") = Entrada(39).Text
fProgramacion("MaxECe") = Entrada(40).Text
fProgramacion("FechaPlantacion") = Entrada(41).Text
fProgramacion("Pantalla22") = "T"
fProgramacion.Update
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
'*****************************************************************************************
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 50, 0, "N")
Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N")
Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 13: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 14: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 15: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 16: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 17: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 18: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 19: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 20: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 21: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 22: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 23: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 24: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 25: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 26: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 27: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 28: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 29: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 30: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 31: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 31: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 32: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 33: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 34: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 35: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 36: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 37: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 38: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 39: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 40: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S")
Case 41: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "F", "N", 10, 1, "N")
Comando(5).Visible = True
End Select
End Sub
Function TrataCampo(FormaMe, Index, Campo As String, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
7. Anejo 5
184
Else
TrataCampo = Tecla
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
7. Anejo 5
185
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 41 Then
Indice = 0
End If
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 42
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function Comprobacion(FormaMe, Indice, Campo As String, tipo)
Dim ValorN As Double
Comprobacion = "OK"
If tipo = "N" And Indice <> 8 Then
ValorN = CarNum(Campo)
End If
Select Case Indice
Case 1 '
If Campo = "" Then
MsgBox ("Entra el nombre del cultivo o esoge uno en opcioens")
Comprobacion = ""
End If
Case 31 '
If Trim(Entrada(2)) = "" Then
MsgBox ("Escoge un grupo de cultivo")
Comprobacion = ""
Else
'If Campo = "" Then
' MsgBox ("Entra algn valor")
' Comprobacion = ""
'End If
If ValorN = 0 Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
If ValorN > 1 Then
7. Anejo 5
186
MsgBox ("Entra algn valor menor de 1 ")
Comprobacion = ""
End If
End If
End Select
End Function
Private Sub ComandoLista_Click(Index As Integer)
Select Case Index
Case 1
Set ValorControl = Entrada(Index)
ValorTabla = "CultivosNombre"
Call CargaDBLista(ValorControl, ValorTabla, "Cultivo")
Case 2
Set ValorControl = Entrada(Index)
ValorTabla = "2"
Call CargaLista(ValorControl, Index)
Case 3
Set ValorControl = Entrada(Index)
ValorTabla = "3"
Call CargaLista(ValorControl, Index)
Case 4
Set ValorControl = Entrada(Index)
ValorTabla = "4"
Call CargaLista(ValorControl, Index)
Case 5
Set ValorControl = Entrada(Index)
ValorTabla = "5"
Call CargaLista(ValorControl, Index)
Case 6
Set ValorControl = Entrada(Index)
ValorTabla = "6"
Call CargaLista(ValorControl, Index)
Case 7
Set ValorControl = Entrada(Index)
ValorTabla = "7"
Call CargaLista(ValorControl, Index)
End Select
Posiciona (1)
Indice = 1
DoEvents
End Sub
Private Sub CargaDBLista(Control, Fichero, Campo)
BorraDatos
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM CultivosNombre ORDER BY Cultivo ;")
'Datos.DatabaseName = NBaseDeDatos
'Datos.RecordSource = NCultivosNombre
Set Datos.Recordset = Consulta
Datos.Refresh
DBLista.ZOrder 0
DBLista.Left = Entrada(1).Left 'Control.Left
DBLista.Top = Entrada(1).Top 'Control.Top
DBLista.Width = Entrada(1).Width 'Control.Width
DBLista.Height = 4000
DBLista.ListField = "Cultivo"
DBLista.Refresh
DBLista.Visible = True
End Sub
Private Sub DBLista_DblClick()
ValorControl.Text = DBLista.Text
DBLista.Visible = False
Posiciona (1)
End Sub
Private Sub CargaLista(Control, Index)
'ComandoLista(INDEX).Visible = False
Lista.ZOrder 0
Lista.Left = Control.Left
Lista.Top = Control.Top
'Lista.Width = Control.Width
Lista.Visible = True
Select Case Index
Case 2
Lista.Clear
7. Anejo 5
187
Lista.Width = 4000
Lista.Height = 5 * 400
Lista.AddItem "Cultivos extensivos y hortalizas"
Lista.AddItem "Arroz"
Lista.AddItem "Alfalfa"
Lista.AddItem "Arboles caducifolios y de nuez"
Lista.AddItem "Ctricos"
Lista.AddItem "Uva"
Lista.AddItem "Pltano"
'Lista.AddItem "Otros"
Case 3
Lista.Clear
Lista.AddItem "SI"
Lista.AddItem "NO"
Lista.Height = 2 * 400
Case 4
Lista.Clear
Lista.AddItem "HELADAS FUERTES"
Lista.AddItem "HELADAS DEBILES"
Lista.AddItem "SIN HELADAS"
Lista.Height = 2 * 400
Case 5
Lista.Clear
Lista.AddItem "ALTA"
Lista.AddItem "BAJA"
Lista.Height = 2 * 400
Case 6
Lista.Clear
Lista.AddItem "FUERTES"
Lista.AddItem "DEBILES"
Lista.Height = 2 * 400
Case 7
Lista.Clear
Lista.AddItem "JOVEN"
Lista.AddItem "MEDIO"
Lista.AddItem "ADULTO"
Lista.Height = 2 * 400
End Select
End Sub
Private Sub Lista_DblClick()
If ValorTabla = "2" Then
BorraKc
If Lista.Text = "Cultivos extensivos y hortalizas" Then ValorControl.Text = "A"
If Lista.Text = "Arroz" Then ValorControl.Text = "B"
If Lista.Text = "Alfalfa" Then ValorControl.Text = "D"
If Lista.Text = "Arboles caducifolios y de nuez" Then ValorControl.Text = "E"
If Lista.Text = "Ctricos" Then ValorControl.Text = "F"
If Lista.Text = "Uva" Then ValorControl.Text = "G"
If Lista.Text = "Pltano" Then ValorControl.Text = "H"
'If Lista.Text = "Otros" Then ValorControl.Text = "O"
DESACTIVATODO
If ValorControl = "A" Then
ACTIVA (5)
ACTIVA (6)
Frame1.Visible = True
Frame2.Visible = False
End If
If ValorControl = "B" Then
ACTIVA (5)
ACTIVA (6)
Frame1.Visible = True
Frame2.Visible = False
End If
If ValorControl = "D" Then
ACTIVA (5)
ACTIVA (6)
Frame1.Visible = True
Frame2.Visible = False
End If
If ValorControl = "E" Then
ACTIVA (3)
ACTIVA (4)
ACTIVA (5)
7. Anejo 5
188
ACTIVA (6)
ACTIVA (7)
Frame1.Visible = False
Frame2.Visible = True
End If
If ValorControl = "F" Then
ACTIVA (3)
ACTIVA (7)
Frame1.Visible = False
Frame2.Visible = True
End If
If ValorControl = "G" Then
ACTIVA (4)
ACTIVA (5)
ACTIVA (6)
Frame1.Visible = False
Frame2.Visible = True
End If
If ValorControl = "H" Then
ACTIVA (6)
ACTIVA (7)
Frame1.Visible = False
Frame2.Visible = True
End If
If ValorControl = "O" Then
Frame1.Visible = False
Frame2.Visible = True
End If
Posiciona (1)
End If
If ValorTabla = "3" Then
If Lista.Text = "SI" Then ValorControl.Text = "S"
If Lista.Text = "NO" Then ValorControl.Text = "N"
Posiciona (1)
End If
If ValorTabla = "4" Then
If Lista.Text = "HELADAS DEBILES" Then ValorControl.Text = "D"
If Lista.Text = "HELADAS FUERTES" Then ValorControl.Text = "F"
If Lista.Text = "SIN HELADAS" Then ValorControl.Text = "S"
Posiciona (1)
End If
If ValorTabla = "5" Then
If Lista.Text = "ALTA" Then ValorControl.Text = "A"
If Lista.Text = "BAJA" Then ValorControl.Text = "B"
Posiciona (1)
End If
If ValorTabla = "6" Then
If Lista.Text = "DEBILES" Then ValorControl.Text = "D"
If Lista.Text = "FUERTES" Then ValorControl.Text = "F"
Posiciona (1)
End If
If ValorTabla = "7" Then
If Lista.Text = "JOVEN" Then ValorControl.Text = "J"
If Lista.Text = "MEDIO" Then ValorControl.Text = "M"
If Lista.Text = "ADULTO" Then ValorControl.Text = "A"
Posiciona (1)
End If
Lista.Visible = False
' Proceso de recogida de datos
If (Entrada(2) = "A" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _
(Entrada(2) = "B" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _
(Entrada(2) = "D" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _
(Entrada(2) = "E" And Entrada(3) <> "-" And Entrada(4) <> "-" And Entrada(5) <> "-" And Entrada(6) <> "-" And
Entrada(7) <> "-") Or _
(Entrada(2) = "F" And Entrada(3) <> "-" And Entrada(7) <> "-") Or _
(Entrada(2) = "G" And Entrada(4) <> "-" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _
(Entrada(2) = "H" And Entrada(6) <> "-") Or _
(Entrada(2) = "O") Then
CargaKc
CargaDias
CargaRaices
CargaSal
CargaFraccion
7. Anejo 5
189
Comando(5).Visible = True
End If
End Sub
Function CargaKc()
fCultivosKc.Index = "ORDEN"
fCultivosKc.MoveFirst
fCultivosKc.Seek "=", Entrada(1).Text, Entrada(2).Text, Entrada(3).Text, Entrada(4).Text, Entrada(5).Text,
Entrada(6).Text, Entrada(7).Text
If fCultivosKc.NoMatch = False Then 'Registro encontrado
If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then
Entrada(8) = fCultivosKc("KcI")
Entrada(9) = fCultivosKc("KcM")
Entrada(10) = fCultivosKc("KcF")
Else
Entrada(18) = NoNulo(fCultivosKc("Kc01"))
Entrada(19) = NoNulo(fCultivosKc("Kc02"))
Entrada(20) = NoNulo(fCultivosKc("Kc03"))
Entrada(21) = NoNulo(fCultivosKc("Kc04"))
Entrada(22) = NoNulo(fCultivosKc("Kc05"))
Entrada(23) = NoNulo(fCultivosKc("Kc06"))
Entrada(24) = NoNulo(fCultivosKc("Kc07"))
Entrada(25) = NoNulo(fCultivosKc("Kc08"))
Entrada(26) = NoNulo(fCultivosKc("Kc09"))
Entrada(27) = NoNulo(fCultivosKc("Kc10"))
Entrada(28) = NoNulo(fCultivosKc("Kc11"))
Entrada(29) = NoNulo(fCultivosKc("Kc12"))
End If
Else
BorraKc
End If
End Function
Function BorraDatos()
BorraKc
Dim num
For num = 31 To 41
Entrada(num) = ""
Next num
End Function
Function BorraKc()
Dim num
For num = 8 To 17
Entrada(num) = ""
Next num
For num = 18 To 30
Entrada(num) = ""
Next num
End Function
Function CargaRaices()
fCultivosRaices.Index = "ORDEN"
fCultivosRaices.MoveFirst
fCultivosRaices.Seek "=", Entrada(1).Text
If fCultivosRaices.NoMatch = False Then 'Registro encontrado
If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then
Entrada(15) = fCultivosRaices("Raices")
Entrada(16) = fCultivosRaices("Raices")
Entrada(17) = fCultivosRaices("Raices")
Else
Entrada(30) = fCultivosRaices("Raices")
End If
End If
End Function
Function CargaDias()
fCultivosDias.Index = "ORDEN"
fCultivosDias.MoveFirst
fCultivosDias.Seek "=", Entrada(1).Text
If fCultivosDias.NoMatch = False Then 'Registro encontrado
If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then
Entrada(11) = fCultivosDias("DiasI")
Entrada(12) = fCultivosDias("DiasD")
Entrada(13) = fCultivosDias("DiasM")
Entrada(14) = fCultivosDias("DiasF")
End If
End If
7. Anejo 5
190
End Function
Function CargaFraccion()
fCultivosFraccion.Index = "ORDEN"
fCultivosFraccion.MoveFirst
fCultivosFraccion.Seek "=", Entrada(1).Text
If fCultivosFraccion.NoMatch = False Then 'Registro encontrado
Entrada(31) = fCultivosFraccion("Fraccion")
End If
End Function
Function CargaSal()
fCultivosSal.Index = "ORDEN"
fCultivosSal.MoveFirst
fCultivosSal.Seek "=", Entrada(1).Text
If fCultivosSal.NoMatch = False Then 'Registro encontrado
Entrada(32) = fCultivosSal("ECe100")
Entrada(33) = fCultivosSal("ECw100")
Entrada(34) = fCultivosSal("ECe90")
Entrada(35) = fCultivosSal("ECw90")
Entrada(36) = fCultivosSal("ECe75")
Entrada(37) = fCultivosSal("ECw75")
Entrada(38) = fCultivosSal("ECe50")
Entrada(39) = fCultivosSal("ECw50")
Entrada(40) = fCultivosSal("MaxECe")
End If
End Function
Function DESACTIVATODO()
Dim num
For num = 3 To 7
Label(num).Visible = False
Entrada(num).Visible = False
ComandoLista(num).Visible = False
Entrada(num).Text = "-"
Next num
End Function
Function ACTIVA(Numero)
Label(Numero).Visible = True
Entrada(Numero).Visible = True
ComandoLista(Numero).Visible = True
End Function
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
191
RIEGOS23.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Object ="DBLIST32.OCX"
Option Explicit
Dim Indice As Integer
Dim Atras As Integer
Dim Mensajes(20) As String
Dim Alertas(20) As String
Dim Campos(20) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Mes
Dim Ano
Dim Dia
Dim TipoDatos
Dim NomMes(12)
Dim NumeroPicado
Private Sub Form_Load()
Mensajes(1) = "Entra la temperatura mxima"
Mensajes(2) = "Entra la temperatura mnima"
Mensajes(3) = "Entra la humedad mxima"
Mensajes(4) = "Entra la humedad mnima"
Mensajes(5) = "Entra la humedad media"
Mensajes(6) = "Entra el viento diario"
Mensajes(7) = "Entra la radiacin solar diaria"
Mensajes(8) = "Entra el nmero de horas de sol diarias"
Mensajes(9) = "Entra la precipitacin"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", Val(Right(Me.Name, 2)), "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Comando(0).Visible = True
Atras = 0
Indice = 1
Mensaje.Caption = "Escoje una opcin"
CargarDatos
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload Me
Load Riegos
'Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
TipoDatos = fProgramacion("Clima")
Entrada(0).Text = fProgramacion("NombreProgramacion")
Else
TipoDatos = "M"
End If
End Sub
Private Sub GrabarDatos()
If ExisteFichero = "NO" Then
fProgramacion.AddNew
7. Anejo 5
192
Else
fProgramacion.Edit
End If
Call MoverPF("NombreProgramacion", Entrada(0))
Call MoverPF("Descripcion", Entrada(1))
Call MoverPF("NombreFinca", Entrada(2))
Call MoverPF("Poblacion", Entrada(3))
Call MoverPF("Provincia", Entrada(4))
Call MoverPF("LatitudGrados", Entrada(5))
Call MoverPF("LatitudMinutos", Entrada(6))
Call MoverPF("LatitudSegundos", Entrada(7))
Call MoverPF("Latitud", Entrada(8))
Call MoverPF("LongitudGrados", Entrada(9))
Call MoverPF("LongitudMinutos", Entrada(10))
Call MoverPF("LongitudSegundos", Entrada(11))
Call MoverPF("Longitud", Entrada(12))
Call MoverPF("Altitud", Entrada(13))
fProgramacion("Pantalla23") = "T"
fProgramacion.Update
If Right(Riegos.Forma(Val(Right(Me.Name, 2))).Caption, 1) <> ">" Then
Riegos.Forma(Val(Right(Me.Name, 2))).Caption = Riegos.Forma(Val(Right(Me.Name, 2))).Caption + " >"
End If
End Sub
'Private Sub Entrada_GotFocus(Index As Integer)
'End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Private Sub MoverPF(Campo As String, Pantalla)
fProgramacion(Campo) = Pantalla.Text
End Sub
Private Sub Command1_Click()
Command1.Visible = False
Command2.Visible = False
If TipoDatos = "M" Or TipoDatos = "D" Then
Command1.Visible = False
Call EmpiezaPrograma
Else
MsgBox ("Ves al men de datos de la finca y entra el tipo de datos climticos")
End If
End Sub
Private Sub Command2_Click()
Command1.Visible = False
Command2.Visible = False
If TipoDatos = "M" Or TipoDatos = "D" Then
SSPanel1.Visible = True
ValorTabla = "ClimaMaestro"
Call CargaDBLista(ValorTabla, "Estacion")
Mensaje.Caption = "Cliquea en los datos de una estacin meteorolgica"
Else
MsgBox ("Ves al men de datos de la finca y entra el tipo de datos climticos")
End If
End Sub
Private Sub CargaDBLista(Fichero, Campo)
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ClimaMaestro WHERE Clima = '" & TipoDatos & "'
ORDER BY Estacion ;")
Set Datos.Recordset = Consulta
Datos.Refresh
DBLista.ZOrder 0
DBLista.ListField = "Estacion"
DBLista.Refresh
DBLista.Visible = True
End Sub
Private Sub DBLista_DblClick()
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ClimaDetalle WHERE Clima = '" & TipoDatos & "' and
Estacion = '" & DBLista.Text & "' ORDER BY Fecha ;")
If Consulta.RecordCount <> 0 Then
Consulta.MoveFirst
While Not Consulta.EOF
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.Seek "=", NombreProgramacion, Consulta("Fecha"), Consulta("Clima")
7. Anejo 5
193
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
fProgramacionClima.Edit
Else
fProgramacionClima.AddNew
fProgramacionClima("NombreProgramacion") = NombreProgramacion
fProgramacionClima("Fecha") = Consulta("Fecha")
fProgramacionClima("Clima") = TipoDatos
fProgramacionClima("Color") = "V"
fProgramacionClima("TemperaturaMaxima") = Consulta("TemperaturaMaxima")
fProgramacionClima("TemperaturaMinima") = Consulta("TemperaturaMinima")
fProgramacionClima("Psicrometro") = Consulta("Psicrometro")
fProgramacionClima("HumedadMaxima") = Consulta("HumedadMaxima")
fProgramacionClima("HumedadMinima") = Consulta("HumedadMinima")
fProgramacionClima("HumedadMedia") = Consulta("HumedadMedia")
fProgramacionClima("Radiacion") = Consulta("Radiacion")
fProgramacionClima("RadiacionNeta") = Consulta("RadiacionNeta")
fProgramacionClima("HorasSol") = Consulta("HorasSol")
fProgramacionClima("Viento") = Consulta("Viento")
fProgramacionClima("Lluvia") = Consulta("Lluvia")
fProgramacionClima.Update
End If
Consulta.MoveNext
Wend
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
fProgramacion.Edit
fProgramacion("Pantalla23") = "T"
fProgramacion.Update
End If
End If
SSPanel1.Visible = False
Command1.Visible = True
Command2.Visible = True
End Sub
Private Sub EmpiezaPrograma()
Dim contador
Dim leecolor
Mes = Month(Date)
Ano = Year(Date)
CargaInicial
If TipoDatos = "D" Then
Mensaje.Caption = "Cliquea en un da y entra los datos meteorolgicos"
SSDiario.Visible = True
CalculaDias
For contador = 0 To 41
If SSPANEL2(contador).Visible = True Then
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
Dim fechar
fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(SSPANEL2(contador).Caption) + 100), 2)))
fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
leecolor = fProgramacionClima("Color")
Else
leecolor = "G"
End If
If leecolor = "G" Then SSPANEL2(contador).BackColor = &HC0C0C0
If leecolor = "V" Then SSPANEL2(contador).BackColor = &H80FF80
If leecolor = "R" Then SSPANEL2(contador).BackColor = &HFF&
End If
Next contador
End If
If TipoDatos = "M" Then
Mensaje.Caption = "Cliquea en un mes y entra los datos meteorolgicos"
SSMesario.Visible = True
TituloMes.Caption = "Entrada mensual" ' NomMes(Mes) + "-" + Str(Ano)
For contador = 1 To 12
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(contador + 100), 2), "M"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
7. Anejo 5
194
leecolor = fProgramacionClima("Color")
Else
leecolor = "G"
End If
If leecolor = "G" Then SSMES(contador - 1).BackColor = &HC0C0C0
If leecolor = "V" Then SSMES(contador - 1).BackColor = &H80FF80
If leecolor = "R" Then SSMES(contador - 1).BackColor = &HFF&
Next contador
End If
End Sub
Private Sub Boton_Click(Index As Integer)
Select Case Index
Case 0
Mes = Mes - 1
If Mes = 0 Then
Mes = 12
Ano = Ano - 1
End If
Case 1
Ano = Ano - 1
Case 2
Ano = Ano + 1
Case 3
Mes = Mes + 1
If Mes = 13 Then
Mes = 1
Ano = Ano + 1
End If
End Select
CalculaDias
Dim contador
Dim leecolor
For contador = 0 To 41
If SSPANEL2(contador).Visible = True Then
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
Dim fechar
fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(SSPANEL2(contador).Caption) + 100), 2)))
fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
leecolor = fProgramacionClima("Color")
Else
leecolor = "G"
End If
If leecolor = "G" Then SSPANEL2(contador).BackColor = &HC0C0C0
If leecolor = "V" Then SSPANEL2(contador).BackColor = &H80FF80
If leecolor = "R" Then SSPANEL2(contador).BackColor = &HFF&
End If
Next contador
Titulo.Caption = Right(Str(Dia + 100), 2) + "-" + Right(Str(Mes + 100), 2) + "-" + Str(Ano)
End Sub
Private Sub ComandoAceptar_Click()
Comando(0).Visible = True
SSEntradaDatos.Visible = False
Titulo.Visible = False
'>> poner codigo de color segun datos
Dim QueColor
QueColor = Preguntacolor
If TipoDatos = "M" Then
SSMesario.Visible = True
SSMesario.Enabled = True
SSMES(NumeroPicado).BackColor = QueColor
GrabarDatosMes
End If
If TipoDatos = "D" Then
SSDiario.Visible = True
SSDiario.Enabled = True
SSPANEL2(NumeroPicado).BackColor = &H80FF80
GrabarDatosdia
End If
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
7. Anejo 5
195
If fProgramacion.NoMatch = False Then 'Registro encontrado
fProgramacion.Edit
fProgramacion("Pantalla23") = "T"
fProgramacion.Update
End If
'>> poner codigo de grabacion de datos
End Sub
Private Sub ComandoSalir_Click()
Comando(0).Visible = True
SSEntradaDatos.Visible = False
Titulo.Visible = False
If TipoDatos = "M" Then
SSMesario.Visible = True
SSMesario.Enabled = True
End If
If TipoDatos = "D" Then
SSDiario.Visible = True
SSDiario.Enabled = True
End If
End Sub
Private Sub CargaInicial()
NomMes(1) = "ENERO"
NomMes(2) = "FEBRERO"
NomMes(3) = "MARZO"
NomMes(4) = "ABRIL"
NomMes(5) = "MAYO"
NomMes(6) = "JUNIO"
NomMes(7) = "JULIO"
NomMes(8) = "AGOSTO"
NomMes(9) = "SEPTIEMBRE"
NomMes(10) = "OCTUBRE"
NomMes(11) = "NOVIEMBRE"
NomMes(12) = "DICIEMBRE"
End Sub
Private Sub CalculaDias()
Dim num
For num = 0 To 41
SSPANEL2(num).Caption = ""
SSPANEL2(num).Visible = False
'EntradaDato(Num).Text = ""
'EntradaDato(Num).Visible = False
Next num
Dim NumDias
Dim CadenaDias
SSPanel13.Caption = NomMes(Mes) + " - " + Str(Ano)
If (Ano = 4 * Int(Ano / 4) And Ano <> 100 * Int(Ano / 100)) Then
CadenaDias = "312931303130313130313031"
Else
CadenaDias = "312831303130313130313031"
End If
Dim MesCal
Dim AnoCal
Dim NumFil: NumFil = 0
Dim NumCol: NumCol = 0
Dim Numero: Numero = 0
Dim DiaMes: DiaMes = 0
NumDias = Val(Mid$(CadenaDias, (2 * Mes) - 1, 2))
For DiaMes = 1 To NumDias
MesCal = Mes
AnoCal = Ano
If Mes <= 2 Then
MesCal = MesCal + 12
AnoCal = AnoCal - 1
End If
Numero = DiaMes + 2 * MesCal + Int(0.6 * (MesCal + 1)) + AnoCal + Int(AnoCal / 4) - Int(AnoCal / 100) + Int(AnoCal /
400) + 2
Numero = (Int((Numero / 7 - Int(Numero / 7)) * 7 + 0.5)) + 1
If Numero < 3 Then
NumCol = Numero + 5
Else
NumCol = Numero - 2
End If
Dim Pos
7. Anejo 5
196
Pos = (NumFil * 7) + (NumCol - 1)
SSPANEL2(Pos).Visible = True
SSPANEL2(Pos).Caption = DiaMes
If NumCol = 7 Then
NumFil = NumFil + 1
End If
DoEvents
Next DiaMes
DoEvents
'>>leer los que estan cargados
End Sub
Private Sub SSMES_Click(Index As Integer)
Comando(0).Visible = False
SSDiario.Enabled = False
SSEntradaDatos.Visible = True
Call Apaga(3)
Call Apaga(4)
Call Enciende(5)
Posiciona (1)
QueMes = Index + 1
Titulo.Caption = NomMes(QueMes)
Titulo.Visible = True
NumeroPicado = Index
Check1_Click
Check2_Click
Posiciona (1)
Me.Mensaje.Caption = Mensajes(1)
'leedatos
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(Index + 101), 2), "M"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
Entrada(1) = NoNulo(fProgramacionClima("TemperaturaMaxima"))
Entrada(2) = NoNulo(fProgramacionClima("TemperaturaMinima"))
Entrada(3) = NoNulo(fProgramacionClima("HumedadMaxima"))
Entrada(4) = NoNulo(fProgramacionClima("HumedadMinima"))
Entrada(5) = NoNulo(fProgramacionClima("HumedadMedia"))
Entrada(6) = NoNulo(fProgramacionClima("Viento"))
Entrada(7) = NoNulo(fProgramacionClima("RadiacionNeta"))
Entrada(8) = NoNulo(fProgramacionClima("HorasSol"))
Entrada(9) = NoNulo(fProgramacionClima("Lluvia"))
Check1.Value = 0: If fProgramacionClima("Psicrometro") = "S" Then Check1.Value = 1
Check2.Value = 0: If fProgramacionClima("Radiacion") = "S" Then Check2.Value = 1
Else
Dim contador
For contador = 1 To 9
Entrada(contador).Text = ""
Next contador
End If '--
End Sub
Private Sub SSPANEL2_Click(Index As Integer)
Dia = SSPANEL2(Index).Caption
Dim Corte1 As String
Dim Corte2 As String
Corte1 = Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Dia + 100), 2)
Corte2 = Mid(Date$, 7, 4) + Mid(Date$, 1, 2) + Mid(Date$, 4, 2)
If Val(Corte1) >= Val(Corte2) Then
MsgBox ("No se puede escoger una fecha mayor que la de ayer")
Else
SSDiario.Enabled = False
SSEntradaDatos.Visible = True
Titulo.Caption = Right(Str(Dia + 100), 2) + "-" + Right(Str(Mes + 100), 2) + "-" + Str(Ano)
Titulo.Visible = True
Posiciona (1)
NumeroPicado = Index
Check1_Click
Check2_Click
Me.Mensaje.Caption = Mensajes(1)
'lee datos
Dim contador
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
Dim fechar
7. Anejo 5
197
fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(Dia) + 100), 2)))
fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
Entrada(1) = NoNulo(fProgramacionClima("TemperaturaMaxima"))
Entrada(2) = NoNulo(fProgramacionClima("TemperaturaMinima"))
Entrada(3) = NoNulo(fProgramacionClima("HumedadMaxima"))
Entrada(4) = NoNulo(fProgramacionClima("HumedadMinima"))
Entrada(5) = NoNulo(fProgramacionClima("HumedadMedia"))
Entrada(6) = NoNulo(fProgramacionClima("Viento"))
Entrada(7) = NoNulo(fProgramacionClima("RadiacionNeta"))
Entrada(8) = NoNulo(fProgramacionClima("HorasSol"))
Entrada(9) = NoNulo(fProgramacionClima("Lluvia"))
Check1.Value = 0: If fProgramacionClima("Psicrometro") = "S" Then Check1.Value = 1
Check2.Value = 0: If fProgramacionClima("Radiacion") = "S" Then Check2.Value = 1
Else
For contador = 1 To 9
Entrada(contador).Text = ""
Next contador
End If '--
End If
End Sub
'***********************************************************************
Private Sub Check1_Click()
If Check1.Value = 1 Then
Call Enciende(3)
Call Enciende(4)
Call Apaga(5)
End If
If Check1.Value = 0 Then
Call Apaga(3)
Call Apaga(4)
Call Enciende(5)
End If
Posiciona (1)
End Sub
Private Sub Check2_Click()
If Check2.Value = 1 Then
Call Enciende(7)
Call Apaga(8)
End If
If Check2.Value = 0 Then
Call Apaga(7)
Call Enciende(8)
End If
Posiciona (1)
End Sub
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 1
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "S", 5, 1)
Case 2
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "S", 5, 1)
Case 3
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0)
Case 4
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0)
Case 5
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0)
Case 6
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 0)
Case 7
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0)
Case 8
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 1)
Case 9
KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 6, 0)
End Select
End Sub
7. Anejo 5
198
Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
7. Anejo 5
199
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Function Apaga(Index)
Entrada(Index).Enabled = False
Entrada(Index).BackColor = &H8000000B
DoEvents
End Function
Function Enciende(Index)
Entrada(Index).Enabled = True
Entrada(Index).BackColor = &H80000005
DoEvents
End Function
Function Comprobacion(FormaMe, Indice, Campo, tipo)
Dim ValorN
Comprobacion = "OK"
If tipo = "N" Then
ValorN = Val(Campo)
End If
Select Case Indice
Case 1 'temperatura
If ValorN < -50 Or ValorN > 70 Then
MsgBox ("Que se puede cultivar con esta temperatura?")
Comprobacion = ""
End If
Case 2 'temperatura
If ValorN < -50 Or ValorN > 70 Then
MsgBox ("Que se puede cultivar con esta temperatura?")
Comprobacion = ""
End If
If ValorN > Val(FormaMe.Entrada(1)) Then
MsgBox ("La temperatura mnima no puede ser mayor que la mnima")
Comprobacion = ""
End If
Case 3 'humedad
If ValorN < 0 Or ValorN > 100 Then
MsgBox ("Entra correctamente la humedad")
Comprobacion = ""
End If
Case 4 'humedad
If ValorN < 0 Or ValorN > 100 Then
MsgBox ("Entra correctamente la humedad")
Comprobacion = ""
End If
If ValorN > Val(FormaMe.Entrada(3)) Then
7. Anejo 5
200
MsgBox ("La humedad mnima no puede ser mayor que la mnima")
Comprobacion = ""
End If
Case 5 'humedad
If ValorN < 0 Or ValorN > 100 Then
MsgBox ("Entra correctamente la humedad")
Comprobacion = ""
End If
Case 6 'viento
If ValorN < 0 Or ValorN > 3600 Then
MsgBox ("Entra correctamente el viento. Km/da")
Comprobacion = ""
End If
Case 7 'radiacion
If ValorN < 0 Then
MsgBox ("Entra correctamente la radiacin solar en MJ/m2perodo")
Comprobacion = ""
End If
Case 8 'Horas de sol
If ValorN < 0 Or ValorN > 24 Then
MsgBox ("Entra correctamente las horas de sol al da")
Comprobacion = ""
End If
Case 9 'Lluvia
If ValorN < 0 Or ValorN > 400 Then
MsgBox ("Entra correctamente la cantidad de lluvia en litros/m2periodo")
Comprobacion = ""
End If
End Select
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 9 Then 'antes 14
Indice = 0
End If
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 10
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function MoverFoco(Numero)
Posiciona (Numero)
End Function
Function Preguntacolor()
'Gris = &HC0C0C0
'Verde = &H80FF80
'Rojo = &HFF&
Preguntacolor = &HFF&
If Check1.Value = 1 And Check2.Value = 1 And _
Trim(Entrada(1)) = "" And _
Trim(Entrada(2)) = "" And _
Trim(Entrada(3)) = "" And _
Trim(Entrada(4)) = "" And _
Trim(Entrada(6)) = "" And _
Trim(Entrada(7)) = "" Then
Preguntacolor = &HC0C0C0
End If
If Check1.Value = 1 And Check2.Value = 1 And _
Trim(Entrada(1)) <> "" And _
Trim(Entrada(2)) <> "" And _
7. Anejo 5
201
Trim(Entrada(3)) <> "" And _
Trim(Entrada(4)) <> "" And _
Trim(Entrada(6)) <> "" And _
Trim(Entrada(7)) <> "" Then
Preguntacolor = &H80FF80
End If
If Check1.Value = 1 And Check2.Value = 0 And _
Trim(Entrada(1)) = "" And _
Trim(Entrada(2)) = "" And _
Trim(Entrada(3)) = "" And _
Trim(Entrada(4)) = "" And _
Trim(Entrada(6)) = "" And _
Trim(Entrada(8)) = "" Then
Preguntacolor = &HC0C0C0
End If
If Check1.Value = 1 And Check2.Value = 0 And _
Trim(Entrada(1)) <> "" And _
Trim(Entrada(2)) <> "" And _
Trim(Entrada(3)) <> "" And _
Trim(Entrada(4)) <> "" And _
Trim(Entrada(6)) <> "" And _
Trim(Entrada(8)) <> "" Then
Preguntacolor = &H80FF80
End If
If Check1.Value = 0 And Check2.Value = 1 And _
Trim(Entrada(1)) = "" And _
Trim(Entrada(2)) = "" And _
Trim(Entrada(5)) = "" And _
Trim(Entrada(6)) = "" And _
Trim(Entrada(7)) = "" Then
Preguntacolor = &HC0C0C0
End If
If Check1.Value = 0 And Check2.Value = 1 And _
Trim(Entrada(1)) <> "" And _
Trim(Entrada(2)) <> "" And _
Trim(Entrada(5)) <> "" And _
Trim(Entrada(6)) <> "" And _
Trim(Entrada(7)) <> "" Then
Preguntacolor = &H80FF80
End If
If Check1.Value = 0 And Check2.Value = 0 And _
Trim(Entrada(1)) = "" And _
Trim(Entrada(2)) = "" And _
Trim(Entrada(5)) = "" And _
Trim(Entrada(6)) = "" And _
Trim(Entrada(8)) = "" Then
Preguntacolor = &HC0C0C0
End If
If Check1.Value = 0 And Check2.Value = 0 And _
Trim(Entrada(1)) <> "" And _
Trim(Entrada(2)) <> "" And _
Trim(Entrada(5)) <> "" And _
Trim(Entrada(6)) <> "" And _
Trim(Entrada(8)) <> "" Then
Preguntacolor = &H80FF80
End If
If Preguntacolor = &HC0C0C0 Then vColor = "G"
If Preguntacolor = &H80FF80 Then vColor = "V"
If Preguntacolor = &HFF& Then vColor = "R"
End Function
Function GrabarDatosMes()
Dim ExisteFichero
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(QueMes + 100), 2), TipoDatos
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
ExisteFichero = "SI"
Else
ExisteFichero = "NO"
End If
If ExisteFichero = "NO" Then
fProgramacionClima.AddNew
Else
7. Anejo 5
202
fProgramacionClima.Edit
End If
fProgramacionClima("NombreProgramacion") = NombreProgramacion
fProgramacionClima("Fecha") = Right(Str(QueMes + 100), 2)
fProgramacionClima("Clima") = TipoDatos
fProgramacionClima("Color") = vColor
fProgramacionClima("TemperaturaMaxima") = Entrada(1)
fProgramacionClima("TemperaturaMinima") = Entrada(2)
If Check1.Value = 1 Then
fProgramacionClima("HumedadMaxima") = Entrada(3)
fProgramacionClima("HumedadMinima") = Entrada(4)
Else
fProgramacionClima("HumedadMedia") = Entrada(5)
End If
fProgramacionClima("Viento") = Entrada(6)
If Check2.Value = 1 Then
fProgramacionClima("RadiacionNeta") = Entrada(7)
Else
fProgramacionClima("HorasSol") = Entrada(8)
End If
fProgramacionClima("Lluvia") = Entrada(9)
fProgramacionClima("Psicrometro") = "N"
If Check1.Value = 1 Then
fProgramacionClima("Psicrometro") = "S"
End If
fProgramacionClima("Radiacion") = "N"
If Check2.Value = 1 Then
fProgramacionClima("Radiacion") = "S"
End If
fProgramacionClima.Update
End Function
Function GrabarDatosdia()
Dim ExisteFichero
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
Dim fechar
fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(Dia) + 100), 2)))
fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
ExisteFichero = "SI"
Else
ExisteFichero = "NO"
End If
If ExisteFichero = "NO" Then
fProgramacionClima.AddNew
Else
fProgramacionClima.Edit
End If
fProgramacionClima("NombreProgramacion") = NombreProgramacion
fProgramacionClima("Fecha") = fechar
fProgramacionClima("Clima") = TipoDatos
fProgramacionClima("Color") = vColor
fProgramacionClima("TemperaturaMaxima") = Entrada(1)
fProgramacionClima("TemperaturaMinima") = Entrada(2)
If Check1.Value = 1 Then
fProgramacionClima("HumedadMaxima") = Entrada(3)
fProgramacionClima("HumedadMinima") = Entrada(4)
Else
fProgramacionClima("HumedadMedia") = Entrada(5)
End If
fProgramacionClima("Viento") = Entrada(6)
If Check2.Value = 1 Then
fProgramacionClima("RadiacionNeta") = Entrada(7)
Else
fProgramacionClima("HorasSol") = Entrada(8)
End If
fProgramacionClima("Lluvia") = Entrada(9)
fProgramacionClima("Psicrometro") = "N"
If Check1.Value = 1 Then
fProgramacionClima("Psicrometro") = "S"
End If
fProgramacionClima("Radiacion") = "N"
If Check2.Value = 1 Then
7. Anejo 5
203
fProgramacionClima("Radiacion") = "S"
End If
fProgramacionClima.Update
End Function
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
204
RIEGOS24.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Object ="DBLIST32.OCX"
Option Explicit
'Dim Atras
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Tierra(20)
Private Sub Form_Load()
Indice = 1
Mensajes(1) = "Entra la cantidad de Arena (%)"
Mensajes(2) = "Entra la cantidad de Arcilla (%)"
Mensajes(3) = "Entra la cantidad de Limo (%)"
Mensajes(4) = "Cliquea a la derecha, si quieres escoger textura"
Mensajes(5) = "Entra la capacidad de campo (% suelo seco)"
Mensajes(6) = "Entra el punto de marchitez(% suelo seco)"
Mensajes(7) = "Entra los segundos de latitud del lugar"
Mensajes(8) = "Entra la latitud del lugar"
Mensajes(9) = "Entra los grados de longitud del lugar"
Mensajes(10) = "Entra los minutos de longitud del lugar"
Mensajes(11) = "Entra la densidad aparente"
Mensajes(13) = "Entra el porcentaje de pendiente"
Mensajes(14) = "Entra la infiltracin"
Mensajes(15) = "Entra el porcentaje de eficiencia en el lavado de sales"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Alertas(2) = "Entra el nombre"
Alertas(3) = "Entra la poblacin"
Alertas(4) = "Entra la provincia"
Alertas(5) = "El valor de los grados de latitud van de 0 a 180"
Alertas(6) = "El valor de los minutos de latitud van de 0 a 59"
Alertas(7) = "El valor de los segundos de latitud van de 0 a 59"
Alertas(8) = "El valor de la latitud es N o S"
Alertas(9) = "El valor de los grados de longitud van de 0 a 180"
Alertas(10) = "El valor de los minutos de longitud van de 0 a 59"
Alertas(11) = "El valor de los segundos de longitud van de 0 a 59"
Alertas(12) = "El valor de la longitud es E u O"
Alertas(13) = "La altitud va de 0 a 3000 metros"
Alertas(14) = "El nmero de cultivos va de 1 5"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 24, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
7. Anejo 5
205
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("Arena", Entrada(1))
Call MoverFP("Arcilla", Entrada(2))
Call MoverFP("Limo", Entrada(3))
Call MoverFP("TipoSuelo", Entrada(4))
Call MoverFP("CapacidadCampo", Entrada(5))
Call MoverFP("PuntoMarchitamiento", Entrada(6))
Call MoverFP("AguaDisponible", Entrada(7))
Call MoverFP("PesoSueloSeco", Entrada(8))
Call MoverFP("VolumenSueloSeco", Entrada(9))
Call MoverFP("DensidadReal", Entrada(10))
Call MoverFP("DensidadAparente", Entrada(11))
Call MoverFP("Porosidad", Entrada(12))
Call MoverFP("PendienteTerreno", Entrada(13))
Call MoverFP("TasaInfiltracion", Entrada(14))
Call MoverFP("EficienciaLavado", Entrada(15))
End If
End Sub
Private Sub GrabarDatos()
fProgramacion.Edit
fProgramacion("Arena") = Entrada(1).Text
fProgramacion("Arcilla") = Entrada(2).Text
fProgramacion("Limo") = Entrada(3).Text
fProgramacion("TipoSuelo") = Entrada(4).Text
fProgramacion("CapacidadCampo") = Entrada(5).Text
fProgramacion("PuntoMarchitamiento") = Entrada(6).Text
fProgramacion("AguaDisponible") = Entrada(7).Text
fProgramacion("PesoSueloSeco") = Entrada(8).Text
fProgramacion("VolumenSueloSeco") = Entrada(9).Text
fProgramacion("DensidadReal") = Entrada(10).Text
fProgramacion("DensidadAparente") = Entrada(11).Text
fProgramacion("Porosidad") = Entrada(12).Text
fProgramacion("PendienteTerreno") = Entrada(13).Text
fProgramacion("TasaInfiltracion") = Entrada(14).Text
fProgramacion("EficienciaLavado") = Entrada(15).Text
fProgramacion("Pantalla24") = "T"
fProgramacion.Update
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Private Sub ComandoLista_Click(Index As Integer)
Select Case Index
Case 1
ValorTabla = "Texturas"
Call CargaDBLista ' (ValorTabla, "Cultivo")
End Select
Posiciona (1)
Indice = 1
End Sub
Private Sub CargaDBLista() '(Fichero, Campo)
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM Texturas ORDER BY Textura ;")
Set Datos.Recordset = Consulta
Datos.Refresh
DBLista.ZOrder 0
DBLista.Left = Entrada(4).Left 'Control.Left
DBLista.Top = Entrada(4).Top 'Control.Top
DBLista.Width = Entrada(4).Width 'Control.Width
DBLista.Height = 4000
DBLista.ListField = "Textura"
DBLista.Refresh
DBLista.Visible = True
End Sub
Private Sub DBLista_DblClick()
Entrada(4).Text = DBLista.Text
7. Anejo 5
206
Entrada(1) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Arena")
Entrada(2) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Arcilla")
Entrada(3) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Limo")
Entrada(8) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "PesoSueloSeco")
Entrada(9) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "VolumenSueloSeco")
Entrada(11) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "DensidadAparente")
Entrada(10) = "2,65"
Entrada(15) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "EficienciaLavado")
DBLista.Visible = False
Posiciona (1)
End Sub
'*****************************************************************************************
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 50, 0, "S")
Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S")
Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S")
Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S")
Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0, "S")
Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 13: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 14: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 15: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Comando(5).Visible = True
End Select
End Sub
Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
7. Anejo 5
207
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 15 Then
Indice = 0
End If
7. Anejo 5
208
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 16
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function Comprobacion(FormaMe, Indice, Campo, tipo)
Dim ValorN
Comprobacion = "OK"
If tipo = "N" Then
ValorN = Val(Campo)
End If
Select Case Indice
Case 1 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN > 100 Then
MsgBox ("La cifra no puede exceder de 100")
Comprobacion = ""
End If
Case 2 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN > 100 Then
MsgBox ("La cifra no puede exceder de 100")
Comprobacion = ""
End If
Case 3 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN > 100 Then
MsgBox ("La cifra no puede exceder de 100")
Comprobacion = ""
End If
If Val(Entrada(1)) + Val(Entrada(2)) + Val(Entrada(3)) = 100 Then
If Entrada(1) <> "" And Entrada(2) <> "" And Entrada(3) <> "" Then
'ReDim Tierra(7)
Tierra(1) = Entrada(1)
Tierra(2) = Entrada(2)
Tierra(3) = Entrada(3)
CalculaTextura
Entrada(4) = Tierra(4)
Entrada(5) = Tierra(5)
Entrada(6) = Tierra(6)
Entrada(7) = Tierra(7)
Entrada(14).Text = LeerFichero("Texturas", "ORDEN", Entrada(4), "Infiltracion")
End If
Else
MsgBox ("Los 3 porcentajes han de sumar 100")
Comprobacion = ""
End If
Case 5 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
7. Anejo 5
209
End If
Case 6 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
End If
Case 10 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
End If
If ValorN > 0 Then
Tierra(8) = Entrada(8)
Tierra(9) = Entrada(9)
Tierra(10) = Entrada(10)
'CalculaDensidadPorosidad
Entrada(11) = Tierra(11)
Entrada(12) = Tierra(12)
End If
Case 11 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
End If
Case 13 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
Else
'Tierra(13) = Entrada(13)
'CalculaDisminucionInfiltracion
'Entrada(14) = Tierra(14)
End If
Case 14 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
End If
Case 15 '
If Campo = "" Then
MsgBox ("Has de entrar algn valor")
Comprobacion = ""
End If
End Select
End Function
Private Sub CalculaTextura()
Dim Are: Are = Val(Tierra(1))
Dim Arc: Arc = Val(Tierra(2))
Dim Lim: Lim = Val(Tierra(3))
Dim Textura
If Lim >= 80 And Are <= 12 Then Textura = "LIMOSO"
If (Lim >= 50 And Lim <= 80 And Are <= 50 And Arc <= 28) Or (Lim >= 80 And Lim <= 92 And Are <= 8 And Arc <= 20 And
Arc >= 12) Then Textura = "FRANCO-LIMOSO"
If Are >= 22 And Are <= 52 And Arc >= 8 And Arc <= 28 And Lim >= 28 And Lim <= 50 Then Textura = "FRANCO"
If Are <= 20 And Arc >= 28 And Arc <= 40 Then Textura = "FRANCO-ARCILLOSO-LIMOSO"
If Are >= 20 And Are <= 45 And Arc <= 40 And Arc >= 28 Then Textura = "FRANCO-ARCILLOSO"
If Arc >= 40 And Are <= 45 And Lim <= 40 Then Textura = "ARCILLOSO"
If Arc >= 45 And Are >= 45 Then Textura = "ARCILLOSO-ARENOSO"
If Arc >= 40 And Lim >= 40 Then Textura = "ARCILLOSO-LIMOSO"
If Arc >= 20 And Arc <= 35 And Are >= 45 And Lim <= 28 Then Textura = "FRANCO-ARCILLOSO-ARENOSO"
If (Are >= 52 And Are <= 85 And Arc <= 20 And Lim >= (-2 * Arc + 30)) Or (Are >= 42 And Are < 52 And Arc <= 8 And Lim
<= 50) Then Textura = "FRANCO-ARENOSO"
If Are >= 70 And Are <= 90 And Arc <= 15 And Lim >= (-1.5 * Arc + 15) And Lim <= (-2 * Arc + 30) Then Textura =
"ARENOSO-FRANCO"
If Are >= 85 And Arc <= 10 And Lim <= (-1.5 * Arc + 15) Then Textura = "ARENOSO"
Tierra(4) = Textura
Tierra(5) = Int((0.48 * Arc) + (0.162 * Lim) + (0.023 * Are) + 2.62)
Tierra(6) = Int((0.302 * Arc) + (0.102 * Lim) + (0.0147 * Are))
Tierra(7) = Int(Tierra(5) - Tierra(6))
End Sub
Private Sub CalculaDensidadPorosidad()
Dim PSS: PSS = Tierra(8)
Dim VSS: VSS = Tierra(9)
7. Anejo 5
210
Dim dr As Double: dr = CDbl(Tierra(10))
Dim Da As Double
Tierra(11) = Format((CDbl(PSS) / CDbl(VSS)), "####0.00")
Da = CDbl(Tierra(11))
Tierra(12) = Format(((dr - Da) / dr) * 100, "##0")
End Sub
Private Sub CalculaDisminucionInfiltracion()
Dim Pendiente: Pendiente = Tierra(13)
Dim Disminucion
If Val(Pendiente) >= 0 And Val(Pendiente) <= 5 Then Disminucion = 0
If Val(Pendiente) > 5 And Val(Pendiente) <= 8 Then Disminucion = 20
If Val(Pendiente) > 8 And Val(Pendiente) <= 12 Then Disminucion = 40
If Val(Pendiente) > 12 And Val(Pendiente) <= 20 Then Disminucion = 60
If Val(Pendiente) > 20 And Val(Pendiente) <= 100 Then Disminucion = 75
'Tierra(14) = Tierra(1) - (Tierra(14) * (Format(Disminucion, "##0") / 100))
End Sub
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
211
RIEGOS25.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Option Explicit
'Dim Atras
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Matriz(20)
Private Sub Form_Load()
Indice = 1
Mensajes(0) = ""
Mensajes(1) = "Entra la conductividad del agua de riego"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 25, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("ConductividadElectrica", Entrada(1))
End If
End Sub
Private Sub GrabarDatos()
fProgramacion.Edit
fProgramacion("ConductividadElectrica") = Entrada(1).Text
fProgramacion("Pantalla25") = "T"
fProgramacion.Update
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Function BorraDatos()
'Dim num
'For num = 31 To 41
' Entrada(num) = ""
'Next num
End Function
7. Anejo 5
212
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 1, "S")
Comando(5).Visible = True
End Select
End Sub
Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
7. Anejo 5
213
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 1 Then
Indice = 0
End If
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 1
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function Comprobacion(FormaMe, Indice, Campo, tipo)
Dim ValorN
Comprobacion = "OK"
If tipo = "N" Then
ValorN = Val(Campo)
End If
Select Case Indice
Case 1 '
7. Anejo 5
214
If Campo = "" Then
MsgBox ("Entra alguna cifra")
Comprobacion = ""
End If
End Select
End Function
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
215
RIEGOS26.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Object ="DBLIST32.OCX"
Option Explicit
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Matriz(20)
Private Sub Form_Load()
Indice = 1
Mensajes(1) = "Entra el sistema de riego cliquea en opciones ..."
Mensajes(2) = "Entra el tipo de riego (L para localizadd S para supericie)"
Mensajes(3) = "Entra la eficiencia de la aplicacin (%)"
Mensajes(4) = "Entra el caudal de la instalacin"
Mensajes(5) = "Entra el porcentaje de rea sombreada por el cultivo"
Mensajes(6) = "Entra los minutos de latitud del lugar"
Mensajes(7) = "Entra los segundos de latitud del lugar"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Alertas(2) = "Entra el nombre"
Alertas(3) = "Entra la poblacin"
Alertas(4) = "Entra la provincia"
Alertas(5) = "El valor de los grados de latitud van de 0 a 180"
Alertas(6) = "El valor de los minutos de latitud van de 0 a 59"
Alertas(7) = "El valor de los segundos de latitud van de 0 a 59"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 26, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("SistemaRiego", Entrada(1))
Call MoverFP("TipoRiego", Entrada(2))
Call MoverFP("EficienciaAplicacion", Entrada(3))
Call MoverFP("CaudalInstalacion", Entrada(4))
Call MoverFP("FraccionAreaSombreada", Entrada(5))
Call MoverFP("NumeroEmisores", Entrada(6))
Call MoverFP("CaudalEmisor", Entrada(7))
7. Anejo 5
216
Call MoverFP("CoeficienteUniformidad", Entrada(8))
End If
If Entrada(2) = "S" Then Entrada(5).Visible = False
End Sub
Private Sub GrabarDatos()
fProgramacion.Edit
fProgramacion("SistemaRiego") = UCase(Entrada(1).Text)
fProgramacion("TipoRiego") = UCase(Entrada(2).Text)
fProgramacion("EficienciaAplicacion") = Entrada(3).Text
fProgramacion("CaudalInstalacion") = Entrada(4).Text
fProgramacion("FraccionAreaSombreada") = Entrada(5).Text
fProgramacion("NumeroEmisores") = Entrada(6).Text
fProgramacion("CaudalEmisor") = Entrada(7).Text
fProgramacion("CoeficienteUniformidad") = Entrada(8).Text
fProgramacion("Pantalla26") = "T"
fProgramacion.Update
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Private Sub ComandoLista_Click(Index As Integer)
Select Case Index
Case 1
ValorTabla = "SistemasRiego"
Call CargaDBLista ' (ValorTabla, "Cultivo")
End Select
Indice = 1
Posiciona (Indice)
End Sub
Private Sub CargaDBLista() '(Fichero, Campo)
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM SistemasRiego ORDER BY SistemaRiego ;")
Set Datos.Recordset = Consulta
Datos.Refresh
DBLista.ZOrder 0
DBLista.Left = Entrada(1).Left 'Control.Left
DBLista.Top = Entrada(1).Top 'Control.Top
DBLista.Width = Entrada(1).Width 'Control.Width
DBLista.Height = 4000
DBLista.ListField = "SistemaRiego"
DBLista.Refresh
DBLista.Visible = True
End Sub
Private Sub DBLista_DblClick()
Entrada(1).Text = DBLista.Text
Entrada(1) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "SistemaRiego")
Entrada(2) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "TipoRiego")
Entrada(3) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "EficienciaAplicacion")
DBLista.Visible = False
Posiciona (1)
End Sub
Private Sub dblista_click()
Entrada(1).Text = DBLista.Text
Entrada(1) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "SistemaRiego")
Entrada(2) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "TipoRiego")
Entrada(3) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "EficienciaAplicacion")
DBLista.Visible = False
Posiciona (1)
End Sub
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Entrada(2) = UCase(Entrada(2))
If UCase(Entrada(2)) = "S" Then
Entrada(5).Visible = False
Else
Entrada(5).Visible = True
End If
If Index = 4 And Entrada(5).Visible = False Then
Comando(5).Visible = True
7. Anejo 5
217
End If
If Index = 5 And Entrada(5).Visible = True Then
Comando(5).Visible = True
End If
Select Case Index
Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "N", 50, 0, "S")
Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "N", 1, 0, "S")
Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 0, "S")
Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0, "S")
Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 7, 1, "S")
Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
End Select
End Sub
Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
7. Anejo 5
218
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 8 Then
Indice = 0
End If
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
If Indice > 8 Then
Indice = 1
End If
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 9
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function Comprobacion(FormaMe, Indice, Campo, tipo)
7. Anejo 5
219
Dim ValorN
Comprobacion = "OK"
If tipo = "N" Then
ValorN = Val(Campo)
End If
Select Case Indice
Case 1 '
If Campo = "" Then
MsgBox ("Entra algn el sistema de riego")
Comprobacion = ""
End If
Case 2 '
If Campo = "" Then
MsgBox ("Entra el tipo de riego (L=goteo,aspersion,infiltracin S=resto")
Comprobacion = ""
End If
If UCase(Campo) <> "L" And UCase(Campo) <> "S" Then
MsgBox ("Entra el tipo de riego (L=goteo,aspersion,infiltracin S=resto")
Comprobacion = ""
End If
Case 3 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN < 0 Then
MsgBox ("Entra un valor superior a 0")
Comprobacion = ""
End If
If ValorN > 100 Then
MsgBox ("La cifra no puede exceder de 100")
Comprobacion = ""
End If
Case 4 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN < 0 Then
MsgBox ("Entra un valor superior a 0")
Comprobacion = ""
End If
Case 5 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
If ValorN < 0 Then
MsgBox ("Entra un valor superior a 0")
Comprobacion = ""
End If
If ValorN > 100 Then
MsgBox ("La cifra no puede exceder de 100")
Comprobacion = ""
End If
End Select
End Function
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
7. Anejo 5
220
RIEGOS27.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
Option Explicit
'Dim Atras
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim Matriz(20)
Private Sub Form_Load()
Indice = 1
Mensajes(0) = ""
Mensajes(1) = "Entra el porcentaje de RFU agotada para emepezar el riego"
Mensajes(2) = "Entra el intrvalo de riego Si quires fijarlo. En caso contrario, deja el campo en blanco"
Mensajes(3) = "Entra el porcentaje de recarga de la RFU en el riego"
Mensajes(5) = "Entra el porcentaje de RFU lleno de agua, al inicio de la programacin"
Mensajes(6) = "Entra el porcentaje de lluvia efectiva"
Mensajes(7) = "Entra la constante de la ecuacin"
Mensajes(8) = "Entra la constante de la ecuacin"
Mensajes(9) = "Entra el valor de corte de la lluvia"
Mensajes(10) = "Entra la constante de la ecuacin"
Mensajes(11) = "Entra la constante de la ecuacin"
Mensajes(12) = "Entra el porcentaje de disminucin deseado debido a la conductividad del agua"
Alertas(0) = ""
Alertas(1) = "Entra la descripcin"
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 27, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = Mensajes(1)
CargarDatos
Posiciona (1)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
Case 5 ' Salida del formulario
Call GrabarDatos
Unload Me
End Select
End Sub
Private Sub CargarDatos()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Call MoverFP("NombreProgramacion", Entrada(0))
Call MoverFP("AgotamientoRFU", Entrada(1))
Call MoverFP("IntervaloRiego", Entrada(2))
Call MoverFP("RecargaRFU", Entrada(3))
Call MoverFP("DosisFija", Entrada(4))
Call MoverFP("ReservaInicial", Entrada(5))
Option1 = fProgramacion("Lluvia1")
Option2 = fProgramacion("Lluvia2")
Option3 = fProgramacion("Lluvia3")
7. Anejo 5
221
Option4 = fProgramacion("Lluvia4")
If Option1 = False And Option2 = False And Option3 = False And Option4 = False Then
Option1 = True
Option1_Click
End If
If Option1 = True Then
Option1 = True
Option1_Click
End If
Call MoverFP("LluviaP", Entrada(6))
Call MoverFP("LluviaA1", Entrada(7))
Call MoverFP("LluviaB1", Entrada(8))
Call MoverFP("LluviaC1", Entrada(9))
Call MoverFP("LluviaA2", Entrada(10))
Call MoverFP("LluviaB2", Entrada(11))
Call MoverFP("RendimientoSal", Entrada(12))
End If
End Sub
Private Sub GrabarDatos()
fProgramacion.Edit
fProgramacion("AgotamientoRFU") = Entrada(1).Text
fProgramacion("IntervaloRiego") = Entrada(2).Text
fProgramacion("RecargaRFU") = Entrada(3).Text
fProgramacion("DosisFija") = Entrada(4).Text
fProgramacion("ReservaInicial") = Entrada(5).Text
fProgramacion("Pantalla27") = "T"
fProgramacion("Lluvia1") = Option1.Value
fProgramacion("Lluvia2") = Option2.Value
fProgramacion("Lluvia3") = Option3.Value
fProgramacion("Lluvia4") = Option4.Value
fProgramacion("LluviaP") = Entrada(6).Text
fProgramacion("LluviaA1") = Entrada(7).Text
fProgramacion("LluviaB1") = Entrada(8).Text
fProgramacion("LluviaC1") = Entrada(9).Text
fProgramacion("LluviaA2") = Entrada(10).Text
fProgramacion("LluviaB2") = Entrada(11).Text
fProgramacion("RendimientoSal") = Entrada(12).Text
fProgramacion.Update
End Sub
Private Sub MoverFP(Campo As String, Pantalla)
Pantalla.Text = NoNulo(fProgramacion(Campo))
End Sub
Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 9 Then
Atras = 1
End If
End Sub
Private Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "N")
Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S")
Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S")
Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "N")
Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S")
Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S")
Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S")
Comando(5).Visible = True
End Select
End Sub
Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer
Dim EstaMal
Dim EstaMal1
Select Case tipo
Case "N" 'Comprobacin de Campo Numerico
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
7. Anejo 5
222
End If
If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 46 Then Tecla = 44
If Tecla = 44 Then TrataCampo = Tecla
Dim num
For num = 1 To Len(Campo)
If Mid(Campo, num, 1) = "," And Tecla = 44 Then
TrataCampo = 0
End If
Next num
If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then
TrataCampo = 0
End If
If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then
TrataCampo = 0
End If
If Decimales = 0 And TrataCampo = 46 Then
TrataCampo = 0
End If
If Decimales > 0 Then
Dim Flag
Dim CuentaDecimales
CuentaDecimales = 0
Flag = False
For num = 1 To Len(Campo)
If Flag = True Then CuentaDecimales = CuentaDecimales + 1
If Mid(Campo, num, 1) = "." Then
Flag = True
End If
Next num
If CuentaDecimales = Decimales Then
TrataCampo = 0
End If
End If
If Len(Campo) = Longitud And TrataCampo <> 8 Then
TrataCampo = 0
End If
Case "A" 'Tipo Alfanumerico
TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then
TrataCampo = 0
End If
Case "F" 'Tipo Fecha
If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then
Tecla = 0
End If
If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then
TrataCampo = 0
Else
TrataCampo = Tecla
End If
If Tecla = 8 Then TrataCampo = Tecla
If Tecla = 45 Then TrataCampo = Tecla
If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0
If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then
EstaMal = "S"
If Tecla = 13 Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = "S"
End If
Else
Dim estamal2
EstaMal = "N"
End If
If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then
EstaMal = "S"
If EstaMal1 <> "S" Then
MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa")
EstaMal1 = ""
7. Anejo 5
223
End If
End If
End Select
If Tecla = 13 Then
If EstaMal = "S" Then
Posiciona (Indice)
Else
If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then
Call MoverCampo(FormaMe, "AD")
Else
Posiciona (Indice)
End If
End If
End If
If Tecla = 9 Then 'hacia atras
If Atras = 1 Then
Call MoverCampo(FormaMe, "AT")
Else
Call MoverCampo(FormaMe, "AD")
End If
End If
End Function
Private Sub MoverCampo(FormaMe, Como)
If Como = "AD" Then ' adelante
If Indice + 1 > 12 Then
Indice = 0
End If
Indice = Indice + 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice + 1
If Indice > 12 Then
Indice = 0
End If
Loop
End If
If Como = "AT" Then 'atras
If Indice - 1 < 1 Then
Indice = 13
End If
Indice = Indice - 1
Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False
Indice = Indice - 1
Loop
End If
Posiciona (Indice)
Me.Mensaje.Caption = Mensajes(Indice)
DoEvents
End Sub
Function Comprobacion(FormaMe, Indice, Campo, tipo)
Dim ValorN
Comprobacion = "OK"
If tipo = "N" Then
ValorN = Val(Campo)
End If
Select Case Indice
Case 1 '
If Campo = "" Then
MsgBox ("Entra alguna cifra")
Comprobacion = ""
End If
If ValorN > 200 Then
MsgBox ("La cifra no puede exceder de 200")
Comprobacion = ""
End If
Case 2 '
'If Campo = "" Then
' MsgBox ("Entra algn porcentaje")
' Comprobacion = ""
'End If
Case 3 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
7. Anejo 5
224
End If
Case 5 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
Case 6 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
Case 7 '
If Campo = "" Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
Case 8 '
If Campo = "" Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
Case 9 '
If Campo = "" Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
Case 10 '
If Campo = "" Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
Case 11 '
If Campo = "" Then
MsgBox ("Entra algn valor")
Comprobacion = ""
End If
Case 12 '
If Campo = "" Then
MsgBox ("Entra algn porcentaje")
Comprobacion = ""
End If
End Select
End Function
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
Private Sub Option1_Click()
apagaP
Label(6).Visible = True
Entrada(6).Visible = True
Posiciona (1)
End Sub
Private Sub Option2_Click()
apagaP
Label(7).Visible = True
Label(8).Visible = True
Posiciona (1)
End Sub
Private Sub Option3_Click()
apagaP
Label(9).Visible = True
Label(10).Visible = True
Posiciona (1)
End Sub
Private Sub Option4_Click()
apagaP
Label(11).Visible = True
Label(12).Visible = True
Label(13).Visible = True
Label(15).Visible = True
Entrada(7).Visible = True
7. Anejo 5
225
Entrada(8).Visible = True
Entrada(9).Visible = True
Entrada(10).Visible = True
Entrada(11).Visible = True
Posiciona (1)
End Sub
Function apagaP()
Label(6).Visible = False
Entrada(6).Visible = False
Label(7).Visible = False
Label(8).Visible = False
Label(9).Visible = False
Label(10).Visible = False
Label(11).Visible = False
Label(12).Visible = False
Label(13).Visible = False
Label(15).Visible = False
Entrada(7).Visible = False
Entrada(8).Visible = False
Entrada(9).Visible = False
Entrada(10).Visible = False
Entrada(11).Visible = False
Posiciona (1)
End Function
7. Anejo 5
226
RIEGOS31.FRM
' Vctor Yusta. Dicembre-1998
Object ="THREED32.OCX"
'Option Explicit
Dim Mensajes(41) As String
Dim Alertas(41) As String
Dim ValorControl As Control
Dim ValorTabla As String
Dim DiasMes(12) As Integer
Dim DiaPeso(12) As Integer
Dim Datos(12) As Double
Dim Indice As Integer
Dim Atras As Integer
Dim Campos(41) As String
Dim ExisteFichero As String
Dim QueMes
Dim vColor
Dim FechaPlantacion As String * 8
Dim MatrizCalculo(40) As String ' del 1 al 20 datos, del 21 al 40 resultados
Dim ReservaInicial As Double
Dim InicioRiego As String
Dim Cuenta
Dim Primero As String
Dim Tabu
Private Sub Form_Load()
Tabu = vbTab
Cuenta = 0
ReservaInicial = 0
InicioRiego = "00" 'CC a capacidad de campo, 00 con las reservas a 0
Primero = "SI"
Call CargaDiasMes
Call CargaPantalla(Me)
BaseDatos
Me.Caption = LeerFichero("Menu", "Orden", 31, "Titulo") + " " + NombreProgramacion
Call DibujaMensaje(Me)
Call DibujaPanelComandos(Me)
Show
Entrada(0).Text = NombreProgramacion
Mensaje.Caption = "Escoge una opcin" 'Pulsa la tecla de Clculo"
Call AnalizaDatos
End Sub
Private Sub AnalizaDatos()
Dim Falta As String
Dim Sortir: Sortir = "NO"
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
If Trim(NoNulo(fProgramacion("Pantalla21"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos de la finca "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla22"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos del cultivo "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla23"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos climticos "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla24"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos del suelo "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla25"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos del agua de riego "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla26"))) = "" And Sortir = "NO" Then
Falta = " Faltan datos del tipo de riego "
GoSub SalidaFalta
End If
If Trim(NoNulo(fProgramacion("Pantalla27"))) = "" And Sortir = "NO" Then
7. Anejo 5
227
Falta = " Faltan datos de rpogramacin del riego"
GoSub SalidaFalta
End If
If Sortir = "NO" Then
If fProgramacion("Pantalla21") = "C" And _
fProgramacion("Pantalla22") = "C" And _
fProgramacion("Pantalla23") = "C" And _
fProgramacion("Pantalla24") = "C" And _
fProgramacion("Pantalla25") = "C" And _
fProgramacion("Pantalla26") = "C" And _
fProgramacion("Pantalla27") = "C" Then
Call MostrarInformacion1
Call MostrarInformacion2
Else
EmpiezaACalcular
Call CursorLibre(Me)
End If
Else
Salir
End If
End If
Exit Sub
SalidaFalta:
MsgBox (Falta)
Sortir = "SI"
Return
End Sub
Private Sub Comando_Click(Index As Integer)
Select Case Index
Case 0 ' Salida del formulario
Salir
End Select
End Sub
Function CargaDiasMes()
' Se ha puesto un ao no bisiesto
DiasMes(1) = 31
DiasMes(2) = 28
DiasMes(3) = 31
DiasMes(4) = 30
DiasMes(5) = 31
DiasMes(6) = 30
DiasMes(7) = 31
DiasMes(8) = 31
DiasMes(9) = 30
DiasMes(10) = 31
DiasMes(11) = 30
DiasMes(12) = 31
DiaPeso(1) = 15
DiaPeso(2) = 46
DiaPeso(3) = 74
DiaPeso(4) = 105
DiaPeso(5) = 135
DiaPeso(6) = 166
DiaPeso(7) = 196
DiaPeso(8) = 227
DiaPeso(9) = 258
DiaPeso(10) = 288
DiaPeso(11) = 319
DiaPeso(12) = 349
End Function
Private Sub Form_Unload(Cancel As Integer)
Salir
End Sub
Private Sub Salir()
Unload Me
Load Riegos
End Sub
Private Sub EmpiezaACalcular()
Call CursorOcupado(Me)
DoEvents
Mensaje.Caption = "ESPERA un momento"
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
7. Anejo 5
228
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim vTipo
Dim vClima
vTipo = fProgramacion("Tipo")
vClima = fProgramacion("Clima")
Dim nnn
nnn = fProgramacion("FechaPlantacion")
FechaPlantacion = Mid(nnn, 7, 4) + Mid(nnn, 4, 2) + Mid(nnn, 1, 2)
If vClima = "M" Then
CalculaMensual
End If
If vClima = "D" Then
CalculaDiario
End If
End If
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
fProgramacion.Edit
fProgramacion("Pantalla21") = "C"
fProgramacion("Pantalla22") = "C"
fProgramacion("Pantalla23") = "C"
fProgramacion("Pantalla24") = "C"
fProgramacion("Pantalla25") = "C"
fProgramacion("Pantalla26") = "C"
fProgramacion("Pantalla27") = "C"
fProgramacion.Update
End If
DoEvents
Call MostrarInformacion1
Call MostrarInformacion2
Mensaje.Caption = "YA EST"
'Parrilla.Visible = True
End Sub
Private Function CalculaDiario()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim vTipo As String
Dim vClima As String
Dim vLatitud As Double
Dim vAltitud As Double
Dim cFechaPlantacion
Dim cFechaFinal
vTipo = fProgramacion("Tipo")
vClima = fProgramacion("Clima")
vLatitud = fProgramacion("LatitudGrados") + (fProgramacion("LatitudGrados") / 60) + (fProgramacion("LatitudGrados") /
3600)
vAltitud = fProgramacion("Altitud")
cFechaPlantacion = Mid(fProgramacion("FechaPlantacion"), 7, 4) + Mid(fProgramacion("FechaPlantacion"), 4, 2) +
Mid(fProgramacion("FechaPlantacion"), 1, 2)
'cFechaFinal = Consulta
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ProgramacionClima WHERE NombreProgramacion =
'" & NombreProgramacion & "' and Clima = '" & "D" & "' ORDER BY Fecha ;")
If Consulta.RecordCount <> 0 Then
Consulta.MoveFirst
While Not Consulta.EOF
Call GrabarDatosDiarios(Consulta("Fecha"), "TemperaturaMaxima", Consulta("TemperaturaMaxima"), 4)
Call GrabarDatosDiarios(Consulta("Fecha"), "TemperaturaMinima", Consulta("TemperaturaMinima"), 4)
Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMaxima", Consulta("HumedadMaxima"), 3)
Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMinima", Consulta("HumedadMinima"), 3)
Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMedia", Consulta("HumedadMedia"), 3)
Call GrabarDatosDiarios(Consulta("Fecha"), "Viento", Consulta("Viento"), 3)
Call GrabarDatosDiarios(Consulta("Fecha"), "RadiacionNeta", Consulta("RadiacionNeta"), 5)
Call GrabarDatosDiarios(Consulta("Fecha"), "HorasSol", Consulta("HorasSol"), 4)
Call GrabarDatosDiarios(Consulta("Fecha"), "Lluvia", Consulta("Lluvia"), 6)
Call GrabarDatosDiarios(Consulta("Fecha"), "Radiacion", Consulta("Radiacion"), 1)
Call GrabarDatosDiarios(Consulta("Fecha"), "Psicrometro", Consulta("Psicrometro"), 1)
Consulta.MoveNext
7. Anejo 5
229
Wend
End If
Call CalculoBalanceHidrico(vTipo, vClima, vLatitud, vAltitud)
End If
End Function
Function GrabarDatosDiarios(Fecha, Campo, Valor, Longitud)
fBalanceHidrico.Index = "PROGRAMACION"
fBalanceHidrico.MoveFirst
fBalanceHidrico.Seek "=", NombreProgramacion, Fecha, "D"
If fBalanceHidrico.NoMatch = False Then 'Registro encontrado
fBalanceHidrico.Edit
Else
fBalanceHidrico.AddNew
End If
fBalanceHidrico("NombreProgramacion") = NombreProgramacion
fBalanceHidrico("Fecha") = Fecha
fBalanceHidrico("Clima") = "D"
fBalanceHidrico(Campo) = Valor
fBalanceHidrico.Update
End Function
Private Function CalculaMensual()
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim vTipo As String
Dim vClima As String
Dim vLatitud As Double
Dim vAltitud As Double
vTipo = fProgramacion("Tipo")
vClima = fProgramacion("Clima")
vLatitud = fProgramacion("LatitudGrados") + (fProgramacion("LatitudGrados") / 60) + (fProgramacion("LatitudGrados") /
3600)
vAltitud = fProgramacion("Altitud")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "TemperaturaMaxima", 4, "N", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "TemperaturaMinima", 4, "N", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMedia", 3, "S", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMaxima", 3, "S", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMinima", 3, "S", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "Viento", 3, "S", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "RadiacionNeta", 5, "N", "M")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "HorasSol", 4, "N", "D")
Call CargaDatosEstimacion(NombreProgramacion, vClima, "Lluvia", 6, "N", "M")
Call CalculoBalanceHidrico(vTipo, vClima, vLatitud, vAltitud)
End If
End Function
Function CargaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, Entero, Mensual)
Dim num
Dim NumAlfa
For num = 1 To 12
NumAlfa = Right(Str(num + 100), 2)
fProgramacionClima.Index = "PROGRAMACION"
fProgramacionClima.MoveFirst
fProgramacionClima.Seek "=", NombreProgramacion, NumAlfa, "M"
If fProgramacionClima.NoMatch = False Then 'Registro encontrado
Dim vPsicrometro
Dim vRadiacion
vPsicrometro = fProgramacionClima("Psicrometro")
vRadiacion = fProgramacionClima("Radiacion")
If Mensual = "M" Then
Datos(num) = CarNum(Trim(fProgramacionClima(Campo))) / DiasMes(num)
Else
Datos(num) = (CarNum(NoNulo(Trim(fProgramacionClima(Campo)))))
End If
If Entero = "S" Then Datos(num) = Int(Datos(num))
End If
Next num
Call CalculaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, vPsicrometro, vRadiacion)
End Function
Function CalculaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, vPsicrometro, vRadiacion)
Dim DesdeDia
Dim HastaDia
Dim DesdeValor
7. Anejo 5
230
Dim HastaValor
Dim Valor As Double: Valor = 0
Dim num As Double
For num = 1 To 365
'ESTO SIRVE PARA EL CASO QUE SE QUIERA IGUALAR LOS DATOS DEL MES A LOS DIAS DEL MES
'Dim num1
'For num1 = 1 To 12
'If Val(Left(MesDia(num), 2)) = num1 Then
Valor = Datos(Val(Left(MesDia(num), 2)))
'End If
'Next num1
'ESTO SIRVE EN EL CASO QUE SE QUIERA BALANCEAR LOS DATOS
'If num >= 1 And num <= DiaPeso(1) Then
' DesdeDia = -16 ' DiaPeso(12)
' HastaDia = DiaPeso(1)
' DesdeValor = Datos(12)
' HastaValor = Datos(1)
' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /
(HastaDia - DesdeDia)) * DesdeDia))
'End If
'Dim Num1
'For Num1 = 1 To 11
' If num > DiaPeso(Num1) And num <= DiaPeso(Num1 + 1) Then
' DesdeDia = DiaPeso(Num1)
' HastaDia = DiaPeso(Num1 + 1)
' DesdeValor = Datos(Num1)
' HastaValor = Datos(Num1 + 1)
' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /
(HastaDia - DesdeDia)) * DesdeDia))
' End If
'Next Num1
'If num > DiaPeso(12) And num <= 365 Then
' DesdeDia = DiaPeso(12)
' HastaDia = 380
' DesdeValor = Datos(1)
' HastaValor = Datos(12)
' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /
(HastaDia - DesdeDia)) * DesdeDia))
'End If
'GRABACION DE DATOS
fBalanceHidrico.Index = "PROGRAMACION"
fBalanceHidrico.MoveFirst
Dim NumAlfa As String
NumAlfa = NumCar(num)
fBalanceHidrico.Seek "=", NombreProgramacion, "1998" + MesDia(num), "M"
If fBalanceHidrico.NoMatch = False Then 'Registro encontrado
fBalanceHidrico.Edit
Else
fBalanceHidrico.AddNew
End If
fBalanceHidrico("NombreProgramacion") = NombreProgramacion
fBalanceHidrico("Fecha") = "1998" + MesDia(num)
fBalanceHidrico("Clima") = "M"
fBalanceHidrico("Psicrometro") = vPsicrometro
fBalanceHidrico("Radiacion") = vRadiacion
fBalanceHidrico(Campo) = Left(NumCar(Valor), Longitud)
fBalanceHidrico.Update
Next num
End Function
Private Sub CalculoBalanceHidrico(vTipo As String, vClima As String, vLatitud As Double, vAltitud As Double)
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM BalanceHidrico WHERE NombreProgramacion= '" &
NombreProgramacion & "' and Clima= '" & vClima & "' ORDER BY Fecha ;")
Consulta.MoveFirst
If Consulta.RecordCount <> 0 Then
Consulta.MoveFirst
While Not Consulta.EOF
Dim vFecha As String
vFecha = Right(Trim(Consulta("Fecha")), 4)
Dim vNumDia As Integer
vNumDia = DiaDelAno(vFecha)
Dim vTMax As Double
vTMax = CarNum(Trim(Consulta("TemperaturaMaxima")))
7. Anejo 5
231
Dim vTmin As Double
vTmin = CarNum(Trim(Consulta("TemperaturaMinima")))
Dim vHRMaxima As Double
vHRMaxima = CarNum(Trim(NoNulo(Consulta("HumedadMaxima"))))
Dim vHRMinima As Double
vHRMinima = CarNum(Trim(NoNulo(Consulta("HumedadMinima"))))
Dim vHRMedia As Double
vHRMedia = CarNum(Trim(NoNulo(Consulta("HumedadMedia"))))
Dim vVientoDia As Double
vVientoDia = CarNum(Trim(Consulta("Viento")))
Dim vHorasSol As Double
vHorasSol = CarNum(Trim(NoNulo(Consulta("HorasSol"))))
Dim vPsicrometro As String
vPsicrometro = Consulta("Psicrometro")
Dim vRadiacion As String
vRadiacion = Consulta("Radiacion")
Dim vRadiacionNeta As Double
vRadiacionNeta = CarNum(Trim(NoNulo(Consulta("RadiacionNeta"))))
Consulta.Edit
Dim nETo As Double
nETo = NumCar(CalculavETo(vLatitud, vAltitud, vNumDia, vTMax, vTmin, vHRMaxima, vHRMinima, vHRMedia,
vVientoDia, vRadiacionNeta, vHorasSol, vRadiacion, vPsicrometro))
Consulta("ETo") = Left(nETo, 5)
' meter condicional de Kc4
If (vTipo = "A" Or vTipo = "B" Or vTipo = "D") Then
Consulta("DiasCultivo") = DiferenciaFechas(FechaPlantacion, Consulta("Fecha"))
Consulta("Kc") = Left(NumCar(CalculaKc4(nETo, Consulta("DiasCultivo"))), 4)
Consulta("Raices") = Left(NumCar(CalculaRaices4(Consulta("DiasCultivo"))), 3)
Else
Consulta("DiasCultivo") = DiferenciaFechas(FechaPlantacion, Consulta("Fecha"))
Consulta("Kc") = Left(NumCar(CalculaKc12(vFecha)), 4)
Consulta("Raices") = Left(NumCar(CalculaRaices12), 3)
End If
Dim nKl As Double
nKl = NumCar(CalculaKl())
Consulta("Kl") = Left(nKl, 4)
Consulta("ETc") = Left(NumCar(CarNum(Consulta("ETo")) * CarNum(Consulta("Kc")) * CarNum(Consulta("Kl"))), 5)
Consulta("Fraccion") = Left(NumCar(CalculaFraccion(Consulta("ETc"))), 4)
Consulta("LluviaEfectiva") = Left(NumCar(CalculaLluviaEfectiva(Consulta("Lluvia"))), 4)
MatrizCalculo(1) = Consulta("Etc")
MatrizCalculo(2) = NoNulo(Consulta("LluviaEfectiva"))
MatrizCalculo(3) = NoNulo(Consulta("AporteCapilar"))
MatrizCalculo(4) = NoNulo(Consulta("Escorrentia"))
MatrizCalculo(5) = NoNulo(Consulta("Raices"))
MatrizCalculo(6) = NoNulo(Consulta("Fraccion"))
MatrizCalculo(7) = NoNulo(Consulta("Reserva"))
MatrizCalculo(8) = Consulta("Fecha")
CalculaMatrizCalculo
Consulta("RfuMaxima") = MatrizCalculo(21)
Consulta("RfuMinima") = MatrizCalculo(22)
Consulta("Reserva") = MatrizCalculo(23)
Consulta("DosisNeta") = MatrizCalculo(24)
Consulta("TipoRiego") = MatrizCalculo(25)
Consulta("EficienciaAplicacion") = MatrizCalculo(26)
Consulta("Lavado") = MatrizCalculo(27)
Consulta("EficienciaLavado") = MatrizCalculo(28)
Consulta("DosisBruta") = MatrizCalculo(29)
Consulta("CC") = MatrizCalculo(31)
Consulta("PM") = MatrizCalculo(32)
Consulta("DensidadAparente") = MatrizCalculo(33)
Consulta("AguaUtil") = MatrizCalculo(34)
Consulta("DosisBrutaTotal") = MatrizCalculo(35)
Consulta("Tiempo1") = MatrizCalculo(36)
Consulta("Tiempo2") = MatrizCalculo(37)
Consulta("Notas") = MatrizCalculo(38)
Consulta.Update
Consulta.MoveNext
Wend
End If
End Sub
Private Function CalculaKl() As Double
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
7. Anejo 5
232
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim nArea As Double
If CarNum(fProgramacion("FraccionAreaSombreada")) <> 0 Then
nArea = CarNum(fProgramacion("FraccionAreaSombreada")) / 100
Else
nArea = 1
End If
If fProgramacion("TipoRiego") <> "L" Then
nArea = 1
End If
Dim Suma As Double: Suma = 0
Dim Mayor As Double: Mayor = 0
Dim Menor As Double: Menor = 9999
Dim Fml1 As Double: Fml1 = 1.34 * nArea
Dim Fml2 As Double: Fml2 = 0.1 * nArea
Dim Fml3 As Double: Fml3 = (0.5 * nArea) + 0.5
Dim Fml4 As Double: Fml4 = (0.85 * nArea) + 0.15
If Fml1 > Mayor Then Mayor = Fml1
If Fml2 > Mayor Then Mayor = Fml2
If Fml3 > Mayor Then Mayor = Fml3
If Fml4 > Mayor Then Mayor = Fml4
If Fml1 < Menor Then Menor = Fml1
If Fml2 < Menor Then Menor = Fml2
If Fml3 < Menor Then Menor = Fml3
If Fml4 < Menor Then Menor = Fml4
If Fml1 <> Mayor And Fml1 <> Menor Then
Suma = Suma + Fml1
End If
If Fml2 <> Mayor And Fml2 <> Menor Then
Suma = Suma + Fml2
End If
If Fml3 <> Mayor And Fml3 <> Menor Then
Suma = Suma + Fml3
End If
If Fml4 <> Mayor And Fml4 <> Menor Then
Suma = Suma + Fml4
End If
CalculaKl = Suma / 2
End If
End Function
Private Function CalculavETo(Latitud As Double, Altitud As Double, NumDia As Integer, TMax As Double, TMin As Double,
HRMax As Double, HRMin As Double, HRMedia As Double, VientoDia As Double, ERadN As Double, vHorasSol As
Double, vRadiacion As String, vPsicrometro As String) As Double
' definicion variables
Dim WST As Double
Dim Emisividad As Double
Dim G As Double
Dim sigma As Double
Dim Rads As Double
Dim fnN As Double
Dim nN As Double
Dim n As Double
Dim AngHor As Double
Dim YY As Double
Dim XX As Double
Dim LatRad As Double
Dim Decli As Double
Dim dr As Double
Dim Albedo
'Dim Altitud As Double
'Dim TMin As Double
'Dim TMax As Double
Dim ETaero As Double
Dim gamma As Double
Dim gammaast As Double
Dim delta As Double
Dim t As Double
Dim U2 As Double
Dim eaMin As Double
Dim eaMax As Double
Dim ea As Double
Dim edTmin As Double
7. Anejo 5
233
Dim edTmax As Double
Dim ed As Double
Dim Presion As Double
Dim landa As Double
' Dim Vientodia As Double
Dim VientoSeg As Double
' Dim HrMedia As Double
' Dim HRMin As Double
' Dim HrMax As Double
Dim rc As Double
Dim LAI As Double
Dim AlturaCultivo As Double
Dim ra As Double
Dim d As Double
Dim Zom As Double
Dim HorasSol As Double
Dim Rada As Double
Dim Radn As Double
Dim Radns As Double
Dim Radnl As Double
'Dim NumDia As Double
'Dim Latitud As Double
Dim ETrad As Double
Dim vETo As Double
'Dim ERadN As Double: ERadN = 0
'Entradas
'Altitud = 35
'Latitud = 40.558
'TMax = 26.5
'TMin = 23.1
'HrMax = 69.7
'HrMin = 69.7
'HRMedia = 69.7
'VientoDia = 181
HorasSol = 8.4
'ERadN = 2.8
' NumDia = 213 '15-7-1998
Albedo = 0.23
AlturaCultivo = 0.12
'Calculos
t = (TMax + TMin) / 2
U2 = VientoDia / 86.4
Presion = (101.3) * ((293 - (0.0065 * Altitud)) / (293)) ^ 5.253
eaMin = 0.6108 * Exp((17.27 * TMin) / (TMin + 237.3))
eaMax = 0.6108 * Exp((17.27 * TMax) / (TMax + 237.3))
ea = (eaMin + eaMax) / 2
'ea = 0.6108 * Exp((17.27 * T) / (T + 237.3)) '(eaMin + eaMax) / 2
If vPsicrometro = "N" Then
'con Humedad Relativa Media
ed = (HRMedia) / ((50 / eaMin) + (50 / eaMax))
HRMin = (ed / eaMax) * 100
Else
''Con humedades relativas maximas y minimas
ed = (eaMin * HRMax) / 200 + (eaMax * HRMin) / 200
End If
landa = 2.501 - (0.002361 * (t))
LAI = 24 * AlturaCultivo
rc = 200 / LAI
d = (2 * AlturaCultivo) / 3
Zom = 0.123 * AlturaCultivo
If U2 = 0 Then U2 = 1
ra = (Log((2 - d) / (Zom)) * Log((1.9 - d) / (0.1 * Zom)) / (0.41 * 0.41 * U2))
gamma = 0.0016286 * (Presion / landa)
gammaast = gamma * (1 + (rc / ra))
delta = (4098 * ea) / (t + 237.3) ^ 2
WST = (gamma / (delta + gammaast))
ETaero = (gamma / (delta + gammaast)) * (900 / (t + 273)) * U2 * (ea - ed)
dr = (1 + 0.033 * Cos((2 * Pi / 365) * NumDia))
Decli = 0.4093 * Sin(((2 * Pi * NumDia) / 365) - 1.39)
LatRad = Latitud * (Pi / 180)
XX = Sin(Decli) * Sin(LatRad)
YY = Cos(Decli) * Cos(LatRad)
AngHor = ArcoCosenoRad(-1 * Tan(LatRad) * Tan(Decli))
7. Anejo 5
234
Rada = 37.586 * dr * ((AngHor * XX) + (YY * Sin(AngHor)))
n = (24 * AngHor) / Pi
nN = HorasSol / n
Rads = Rada * (0.25 + 0.5 * nN)
Radns = (1 - Albedo) * Rads
fnN = 0.1 + (0.9 * nN)
sigma = 0.00000000245 * ((TMax + 273.16) ^ 4 + (TMin + 273.16) ^ 4)
Emisividad = 0.34 + (Sqr(ed) * -0.139)
Radnl = sigma * fnN * Emisividad
If vRadiacion = "N" Then
Radn = Radns - Radnl
Else
Radn = ERadN
End If
G = 0
ETrad = (delta / (delta + gammaast)) * (Radn / landa)
vETo = ETaero + ETrad
CalculavETo = vETo
End Function
Private Function CalculaKc12(vFecha) As Double
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
CalculaKc12 = CarNum(NoNulo(fProgramacion("Kc" + (Left(vFecha, 2)))))
End If
End Function
Private Function CalculaRaices12() As Double
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
CalculaRaices12 = fProgramacion("Raices")
End If
End Function
Private Function CalculaKc4(nETo As Double, cDiaCultivo) As Double
Dim nDiaCultivo As Double: nDiaCultivo = Val(cDiaCultivo)
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim nIntervaloDeRiego As Double: nIntervaloRiego = 0
nIntervaloDeRiego = CarNum(fProgramacion("IntervaloRiego"))
Dim vKcI As String
Dim vKcM As String
Dim vKcF As String
Dim nKcI As Double
Dim nKcM As Double
Dim nKcF As Double
Dim vDiasI As String
Dim vDiasD As String
Dim vDiasM As String
Dim vDiasF As String
Dim nDiasI As Double
Dim nDiasD As Double
Dim nDiasM As Double
Dim nDiasF As Double
vKcI = fProgramacion("KcI")
vKcM = fProgramacion("KcM")
vKcF = fProgramacion("KcF")
vDiasI = fProgramacion("DiasI")
vDiasD = fProgramacion("DiasD")
vDiasM = fProgramacion("DiasM")
vDiasF = fProgramacion("DiasF")
If RTrim(vKcI) = "*" Or RTrim(vKcI) = "" Then
nKcI = KcInicial(nIntervaloDeRiego, nETo)
Else
nKcI = CarNum(vKcI)
End If
nKcM = CarNum(vKcM)
nKcF = CarNum(vKcF)
nDiasI = CarNum(vDiasI)
nDiasD = CarNum(vDiasD)
7. Anejo 5
235
nDiasM = CarNum(vDiasM)
nDiasF = CarNum(vDiasF)
CalculaKc4 = 0
Dim Valor As Double
If nDiaCultivo > 0 And nDiaCultivo <= nDiasI Then
Valor = nKcI
End If
If nDiaCultivo > nDiasI And nDiaCultivo <= nDiasI + nDiasD Then
Valor = EstimacionKc4(nKcI, nKcM, nDiasD, nDiaCultivo - nDiasI)
End If
If nDiaCultivo > nDiasI + nDiasD And nDiaCultivo <= nDiasI + nDiasD + nDiasM Then
Valor = nKcM
End If
If nDiaCultivo > nDiasI + nDiasD + nDiasM And nDiaCultivo <= nDiasI + nDiasD + nDiasM + nDiasF Then
Valor = EstimacionKc4(nKcM, nKcF, nDiasF, nDiaCultivo - (nDiasI + nDiasD + nDiasM))
End If
CalculaKc4 = Valor
End If
End Function
Function KcInicial(vFrecuenciaRiego As Double, nETo As Double) As Double
If vFrecuenciaRiego = 0 Then vFrecuenciaRiego = 7
If vFrecuenciaRiego = 1 Then vFrecuenciaRiego = 2
If vFrecuenciaRiego > 20 Then vFrecuenciaRiego = 20
Dim Kc(20)
Dim vMaxima
Dim vMinima
If vFrecuenciaRiego = 2 Then vMinima = 2: vMaxima = 2
If vFrecuenciaRiego = 3 Then vMinima = 2: vMaxima = 4
If vFrecuenciaRiego = 4 Then vMinima = 4: vMaxima = 4
If vFrecuenciaRiego = 5 Then vMinima = 4: vMaxima = 7
If vFrecuenciaRiego = 6 Then vMinima = 4: vMaxima = 7
If vFrecuenciaRiego = 7 Then vMinima = 7: vMaxima = 7
If vFrecuenciaRiego = 8 Then vMinima = 7: vMaxima = 10
If vFrecuenciaRiego = 9 Then vMinima = 7: vMaxima = 10
If vFrecuenciaRiego = 10 Then vMinima = 10: vMaxima = 10
If vFrecuenciaRiego = 11 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 12 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 13 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 14 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 15 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 16 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 17 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 18 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 19 Then vMinima = 10: vMaxima = 20
If vFrecuenciaRiego = 20 Then vMinima = 20: vMaxima = 20
Kc(2) = (0.0025 * nETo * nETo) - (0.0588 * nETo) + 1.1068
Kc(4) = (0.0043 * nETo * nETo) - (0.097 * nETo) + 1.0403
Kc(7) = (0.0053 * nETo * nETo) - (0.1049 * nETo) + 0.8502
Kc(10) = (0.0053 * nETo * nETo) - (0.1009 * nETo) + 0.6915
Kc(20) = (0.0046 * nETo * nETo) - (0.0824 * nETo) + 0.52
If vMaxima <> vMinima Then
KcInicial = Kc(vMaxima) + ((vFrecuenciaRiego - vMinima) * ((Kc(vMinima) - Kc(vMaxima)) / (vMaxima - vMinima)))
Else
KcInicial = Kc(vMaxima)
End If
End Function
Function EstimacionKc4(vKc1 As Double, vKc2 As Double, Vdias As Double, Vdia As Double) As Double
EstimacionKc4 = vKc1 + (((vKc2 - vKc1) / Vdias) * Vdia)
End Function
Private Function CalculaRaices4(cDiaCultivo) As Double
Dim nDiaCultivo As Double: nDiaCultivo = Val(cDiaCultivo)
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Dim vRaicesI As String
Dim vRaicesM As String
Dim vRaicesF As String
Dim nRaicesI As Double
Dim nRaicesM As Double
Dim nRaicesF As Double
Dim vDiasI As String
Dim vDiasD As String
7. Anejo 5
236
Dim vDiasM As String
Dim vDiasF As String
Dim nDiasI As Double
Dim nDiasD As Double
Dim nDiasM As Double
Dim nDiasF As Double
vRaicesI = fProgramacion("RaicesI")
vRaicesM = fProgramacion("RaicesM")
vRaicesF = fProgramacion("RaicesF")
vDiasI = fProgramacion("DiasI")
vDiasD = fProgramacion("DiasD")
vDiasM = fProgramacion("DiasM")
vDiasF = fProgramacion("DiasF")
nRaicesI = CarNum(vRaicesI)
nRaicesM = CarNum(vRaicesM)
nRaicesF = CarNum(vRaicesF)
nDiasI = CarNum(vDiasI)
nDiasD = CarNum(vDiasD)
nDiasM = CarNum(vDiasM)
nDiasF = CarNum(vDiasF)
CalculaRaices4 = 0
Dim Valor As Double
If nDiaCultivo > 0 And nDiaCultivo <= nDiasI Then
Valor = nRaicesI
End If
If nDiaCultivo > nDiasI And nDiaCultivo <= nDiasI + nDiasD Then
Valor = EstimacionRaices4(nRaicesI, nRaicesM, nDiasD, nDiaCultivo - nDiasI)
End If
If nDiaCultivo > nDiasI + nDiasD And nDiaCultivo <= nDiasI + nDiasD + nDiasM Then
Valor = nRaicesM
End If
If nDiaCultivo > nDiasI + nDiasD + nDiasM And nDiaCultivo <= nDiasI + nDiasD + nDiasM + nDiasF Then
Valor = EstimacionRaices4(nRaicesM, nRaicesF, nDiasF, nDiaCultivo - (nDiasI + nDiasD + nDiasM))
End If
CalculaRaices4 = Valor
End If
End Function
Function EstimacionRaices4(vRaices1 As Double, vRaices2 As Double, Vdias As Double, Vdia As Double) As Double
EstimacionRaices4 = vRaices1 + (((vRaices2 - vRaices1) / Vdias) * Vdia)
End Function
Private Function CalculaFraccion(cETc As String) As Double
Dim nETc As Double: nETc = CarNum(cETc)
Dim nFraccion As Double: nFraccion = 0
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
nFraccion = fProgramacion("Fraccion")
End If
CalculaFraccion = nFraccion
' Es una regla que pone FAO-46 pero no se aplica PARA AUMENTAR O DISMINIUIR LA FRACCION DE AGUA
DISPONIBLE EN FUNCION DE LA ETO
'If nETc < 3 Then CalculaFraccion = 1.3 * nFraccion
'If nETc > 8 Then CalculaFraccion = 0.7 * nFraccion
'If nETc = 0 Then CalculaFraccion = 0
End Function
Private Function CalculaLluviaEfectiva(cLluvia As String) As Double
Dim nTipoLluvia As Integer
Dim nLluviaP As Double
Dim nLluviaA1 As Double
Dim nLluviaB1 As Double
Dim nLluviaC1 As Double
Dim nLluviaA2 As Double
Dim nLluviaB2 As Double
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
If fProgramacion("Lluvia1") = True Then
nTipoLluvia = 1
nLluviaP = CarNum(fProgramacion("LluviaP"))
End If
If fProgramacion("Lluvia2") = True Then nTipoLluvia = 2
7. Anejo 5
237
If fProgramacion("Lluvia3") = True Then nTipoLluvia = 3
If fProgramacion("Lluvia4") = True Then
nTipoLluvia = 4
nLluviaA1 = CarNum(fProgramacion("LluviaA1"))
nLluviaB1 = CarNum(fProgramacion("LluviaB1"))
nLluviaC1 = CarNum(fProgramacion("LluviaC1"))
nLluviaA2 = CarNum(fProgramacion("LluviaA2"))
nLluviaB2 = CarNum(fProgramacion("LluviaB2"))
End If
End If
Dim nLluvia As Double: nLluvia = CarNum(cLluvia)
Dim nLluviaEfectiva As Double: nLluviaEfectiva = 0
If nTipoLluvia = 1 Then 'metodo del porcentaje
CalculaLluviaEfectiva = nLluvia * (nLluviaP / 100)
End If
If nTipoLluvia = 2 Then 'metodo FAO/AGWL
If nLluvia * 30 < 70 Then
CalculaLluviaEfectiva = ((nLluvia * 30 * 0.6) - 10) / 30
Else
CalculaLluviaEfectiva = ((nLluvia * 30 * 0.8) - 25) / 30
End If
End If
If nTipoLluvia = 3 Then 'metodo USDA
If nLluvia * 30 < 250 Then
CalculaLluviaEfectiva = ((nLluvia * 30 * (125 - (0.2 * nLluvia * 30))) / 125) / 30
Else
CalculaLluviaEfectiva = (125 + (nLluvia * 30 * 0.1)) / 30
End If
End If
If nTipoLluvia = 4 Then 'metodo emprico
If nLluvia * 30 < nLluviaC1 Then
CalculaLluviaEfectiva = (((nLluvia * 30 * nLluviaA1) - (nLluviaB1))) / 30
Else
CalculaLluviaEfectiva = (((nLluvia * 30 * nLluviaA2) - (nLluviaB2))) / 30
End If
End If
' If Metodo = "A" Then 'metodo de Martin de Santa Olalla DE LLUVIA EFECTIVA
' If nLluvia > 7 Then CalculaLluviaEfectiva = 0.98 * nLluvia
' If nLluvia <= 7 Then CalculaLluviaEfectiva = 0.9 * nLluvia
' If nLluvia <= 5 Then CalculaLluviaEfectiva = 0.76 * nLluvia
' If nLluvia <= 3 Then CalculaLluviaEfectiva = 0.65 * nLluvia
' If nLluvia <= 0 Then CalculaLluviaEfectiva = 0 * nLluvia
' End If
End Function
Function DiferenciaFechas(cFechaInicial As String, cFechaFinal As String) As Double
Dim AnoI As Integer: AnoI = Val(Mid(cFechaInicial, 1, 4))
Dim MesI As Integer: MesI = Val(Mid(cFechaInicial, 5, 2))
Dim DiaI As Integer: DiaI = Val(Mid(cFechaInicial, 7, 2))
Dim AnoF As Integer: AnoF = Val(Mid(cFechaFinal, 1, 4))
Dim MesF As Integer: MesF = Val(Mid(cFechaFinal, 5, 2))
Dim DiaF As Integer: DiaF = Val(Mid(cFechaFinal, 7, 2))
Dim FechaInicial As Date: FechaInicial = DateSerial(AnoI, MesI, DiaI)
Dim FechaFinal As Date: FechaFinal = DateSerial(AnoF, MesF, DiaF)
Dim Numerodias As Double
DiferenciaFechas = FechaFinal - FechaInicial + 1
End Function
Function MesDia(NumeroDia as integer)
'Dar en string mesdia ("mmdd")
End Function
Function DiaDelAno(MesDia as string)
Dar en integer el nmero de da
End Function
Private Sub CalculaMatrizCalculo()
'''CalculaDosisNeta = AguaDisponible * (DensidadAparente / 10) * nFraccion * PorcentajeMojado * nRaices
'Datos entrada
Dim cNotas As String: cNotas = ""
Dim nETc As Double: nETc = CarNum(MatrizCalculo(1))
Dim nLluviaEfectiva As Double: nLluviaEfectiva = CarNum(MatrizCalculo(2))
Dim nRaices As Double: nRaices = CarNum(MatrizCalculo(5))
Dim nFraccion As Double: nFraccion = CarNum(MatrizCalculo(6))
Dim nReserva As Double: nReserva = CarNum(MatrizCalculo(1))
'Datos salida
Dim nCapacidadCampo As Double: nCapacidadCampo = 0
7. Anejo 5
238
Dim nPuntoMarchitez As Double: nPuntoMarchitez = 0
Dim nDensidadAparente As Double: nDensidadAparente = 0
Dim nRfuMaxima As Double: nRfuMaxima = 0
Dim nRFUMinima As Double: nRFUMinima = 0
Dim nDosisNeta As Double: nDosisNeta = 0
Dim vTipoRiego As String: vTipoRiego = ""
Dim nEficienciaAplicacion As Double: nEficienciaAplicacion = 0
Dim nEficienciaLavado As Double: nEficienciaLavado = 0
Dim nLavado As Double: nLavado = 0
Dim nDosisBruta As Double: nDosisBruta = 0
Dim nConductividadElectrica As Double
Dim nECe100 As Double
Dim nRenEsp As Double
Dim nMaxECe As Double
Dim nAguaUtil As Double
Dim nReservaInicial As Double
'Calculos
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
nCapacidadCampo = NumCar(fProgramacion("CapacidadCampo"))
nPuntoMarchitez = NumCar(fProgramacion("PuntoMarchitamiento"))
nDensidadAparente = NumCar(fProgramacion("DensidadAparente"))
vTipoRiego = fProgramacion("TipoRiego")
nEficienciaAplicacion = NumCar(fProgramacion("EficienciaAplicacion"))
nEficienciaLavado = CarNum(fProgramacion("EficienciaLavado"))
nConductividadElectrica = CarNum(fProgramacion("ConductividadElectrica"))
nECe100 = CarNum(fProgramacion("ECe100"))
nMaxECe = CarNum(fProgramacion("MaxECe"))
nRenEsp = CarNum(fProgramacion("RendimientoSal"))
nReservaInicial = CarNum(fProgramacion("ReservaInicial"))
'Dim nRFUMinima
nRFUMinima = CarNum(fProgramacion("AgotamientoRFU")) / 100
Dim nRecargaRFU
nRecargaRFU = CarNum(fProgramacion("RecargaRFU")) / 100
Dim nIntervaloRiego
nIntervaloRiego = CarNum(fProgramacion("IntervaloRiego"))
Dim nSuperficie
nSuperficie = CarNum(fProgramacion("SuperficieFinca"))
Dim nPendiente: nPendiente = 0
nPendiente = CarNum(fProgramacion("PendienteTerreno"))
Dim nInfiltracion
nInfiltracion = CarNum(fProgramacion("TasaInfiltracion"))
Dim nCaudal
nCaudal = CarNum(fProgramacion("CaudalInstalacion"))
End If
nAguaUtil = (nCapacidadCampo - nPuntoMarchitez) * (nDensidadAparente / 10) * nRaices
nRfuMaxima = (nCapacidadCampo - nPuntoMarchitez) * (nDensidadAparente / 10) * nRaices * nFraccion
nRFUMinima = nRfuMaxima * (1 - nRFUMinima)
If Primero = "SI" And nRaices > 0 Then
Primero = "NO"
ReservaInicial = nRfuMaxima * (nReservaInicial / 100)
End If
If ReservaInicial = 0 Then
nReserva = -nETc + nLluviaEfectiva
Else
nReserva = ReservaInicial - nETc + nLluviaEfectiva
End If
ReservaInicial = nReserva
If nReserva > nRfuMaxima Then
nReserva = nRfuMaxima
ReservaInicial = nRfuMaxima
End If
nDosisNeta = 0
If nReserva < nRFUMinima And nIntervaloRiego <> 0 Then
nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva
nReserva = nReserva + nDosisNeta
ReservaInicial = nReserva
End If
If nReserva < nRFUMinima And nIntervaloRiego = 0 Then
nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva
nReserva = nReserva + nDosisNeta
7. Anejo 5
239
ReservaInicial = nReserva
End If
If nIntervaloRiego > 0 And Cuenta = nIntervaloRiego Then
Cuenta = 0
nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva
If nDosisNeta < 0 Then nDosisNeta = 0
nReserva = nReserva + nDosisNeta
ReservaInicial = nReserva
End If
If nDosisNeta > 0 Then
'Calculo de lavado al 100%
Dim FraccionLavado As Double
If vTipoRiego = "S" Then
Dim nECe As Double
nECe = ((nECe100 - nMaxECe) * nRenEsp / 100) + nMaxECe
nLavado = nConductividadElectrica / ((5 * nECe) - nConductividadElectrica)
FraccionLavado = 1 - nLavado
End If
If vTipoRiego = "L" Then
nLavado = nConductividadElectrica / (2 * nMaxECe)
FraccionLavado = 1 - nLavado
End If
If FraccionLavado < 0 Then
cNotas = "AGUA MUY SALINA."
Else
If FraccionLavado * (nEficienciaLavado / 100) < (nEficienciaAplicacion / 100) Then
'se aplica lavado de sales
nDosisBruta = nDosisNeta / (FraccionLavado * (nEficienciaLavado / 100))
cNotas = "Se aplica lavado de sales."
Else
nDosisBruta = nDosisNeta / (nEficienciaAplicacion / 100)
cNotas = "Se aplica eficiencia aplicacin."
End If
End If
Else
nEficienciaAplicacion = 0
nEficienciaLavado = 0
nDosisBruta = 0
End If
Dim nDosisBrutaTotal As Double: nDosisBrutaTotal = 0
nDosisBrutaTotal = (nDosisBruta * nSuperficie) / 1000
MatrizCalculo(21) = Left(NumCar(nRfuMaxima), 5)
MatrizCalculo(22) = Left(NumCar(nRFUMinima), 5)
MatrizCalculo(23) = Left(NumCar(nReserva), 5)
MatrizCalculo(24) = Left(NumCar(nDosisNeta), 5)
MatrizCalculo(25) = vTipoRiego
MatrizCalculo(26) = Left(NumCar(nEficienciaAplicacion), 3)
MatrizCalculo(27) = Left(NumCar(nLavado), 5)
MatrizCalculo(28) = Left(NumCar(nEficienciaLavado), 5)
MatrizCalculo(29) = Left(NumCar(nDosisBruta), 5)
MatrizCalculo(31) = Left(NumCar(nCapacidadCampo), 10)
MatrizCalculo(32) = Left(NumCar(nPuntoMarchitez), 10)
MatrizCalculo(33) = Left(NumCar(nDensidadAparente), 10)
MatrizCalculo(34) = Left(NumCar(nAguaUtil), 10)
MatrizCalculo(35) = Left(NumCar(nDosisBrutaTotal), 8)
Dim Disminucion: Disminucion = 0
' DISMINUCION EN FUNCION DE LA PENDIENTE (NO SE APLICA)
'If Val(nPendiente) >= 0 And Val(nPendiente) <= 5 Then Disminucion = 0
'If Val(nPendiente) > 5 And Val(nPendiente) <= 8 Then Disminucion = 20
'If Val(nPendiente) > 8 And Val(nPendiente) <= 12 Then Disminucion = 40
'If Val(nPendiente) > 12 And Val(nPendiente) <= 20 Then Disminucion = 60
'If Val(nPendiente) > 20 And Val(nPendiente) <= 100 Then Disminucion = 75
Dim nInfil As Double: nInfil = 0
Dim nTiempo1 As Double: nTiempo1 = 0
If nDosisBruta > 0 Then
nInfil = nInfiltracion - (nInfiltracion * (Disminucion / 100))
nTiempo1 = nDosisBruta / nInfil
End If
MatrizCalculo(36) = Left(NumCar(nTiempo1), 10)
Dim nTiempo2 As Double: nTiempo2 = 0
If nDosisBrutaTotal > 0 Then
nTiempo2 = nDosisBrutaTotal / nCaudal
End If
7. Anejo 5
240
MatrizCalculo(37) = Left(NumCar(nTiempo2), 10)
If nTiempo1 > nTiempo2 Then
cNotas = cNotas
End If
If nTiempo1 < nTiempo2 Then
cNotas = cNotas
End If
MatrizCalculo(38) = Left(cNotas, 100)
Cuenta = Cuenta + 1
End Sub
Sub Posiciona(Lugar As Integer)
Me.Entrada(Lugar).SelStart = 0
Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar))
Me.Entrada(Lugar).SetFocus
End Sub
Private Sub MostrarInformacion1()
'Detalle
Dim tETc As Double: tETc = 0
Dim tPE As Double: tPE = 0
Dim tRiegos As Double: tRiegos = 0
Dim tDN As Double: tDN = 0
Dim tDB As Double: tDB = 0
Dim tDBT As Double: tDBT = 0
Dim Numero: Numero = 0
Dim Informacion
Open "C:\Riegos\RiegosDetalle.txt" For Output As #1
Dim Busca: Busca = ""
Busca = Busca + "SELECT * "
Busca = Busca + "FROM BalanceHidrico "
Busca = Busca + "WHERE "
Busca = Busca + "NombreProgramacion = '" & NombreProgramacion & "' and Raices <> '0' "
Busca = Busca + "ORDER BY "
Busca = Busca + "Fecha ;"
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset(Busca)
If Consulta.RecordCount <> 0 Then
Consulta.MoveFirst
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Print #1, " BALANCE HDRICO ", Date, Time
Print #1, " "
Print #1, "Programacin........................................: " + Consulta("NombreProgramacion")
Print #1, "Finca...............................................: " + fProgramacion("NombreFinca")
Print #1, "Poblacin...........................................: " + fProgramacion("Poblacion")
Print #1, "Provincia...........................................: " + fProgramacion("Provincia")
Print #1, "Latitud [g,m,s].....................................: " + Str(fProgramacion("LatitudGrados")) + " " +
Str(fProgramacion("LatitudMinutos")) + "' " + Str(fProgramacion("LatitudSegundos")) + "'' " + fProgramacion("Latitud") + " "
Print #1, "Longitud [g,m,s]....................................: " + Str(fProgramacion("LongitudGrados")) + " " +
Str(fProgramacion("LongitudMinutos")) + "' " + Str(fProgramacion("LongitudSegundos")) + "'' " + fProgramacion("Longitud")
+ " "
Print #1, "Altitud [m].........................................: " + Str(fProgramacion("Altitud"))
Print #1, "Superficie [m2].....................................: " + fProgramacion("SuperficieFinca")
Print #1, "Cultivo.............................................: " + fProgramacion("Cultivo")
Print #1, "Fraccin agua disponible en el suelo................: " + fProgramacion("Fraccion")
Print #1, "Clase textural......................................: " + fProgramacion("TipoSuelo")
Print #1, "Densidad aparente [g/cm3]...........................: " + fProgramacion("DensidadAparente")
Print #1, "Capacidad de Campo [% peso].........................: " + fProgramacion("CapacidadCampo")
Print #1, "Punto de Marchitamiento [%peso].....................: " + fProgramacion("PuntoMarchitamiento")
Print #1, "Sistema Riego.......................................: " + fProgramacion("SistemaRiego")
Print #1, "Eficiencia en la aplicacin [%].....................: " + fProgramacion("EficienciaAplicacion")
Print #1, "Caudal instalacin riego [m3/parcela]...............: " + fProgramacion("CaudalInstalacion")
Print #1, "Conductividad agua de riego [dS/m)..................: " + fProgramacion("ConductividadElectrica")
Print #1, "Eficiencia en el lavado de sales [%]................: " + fProgramacion("EficienciaLavado")
Print #1, "Rendimiento mnimo deseado debido a salinidad [%]...: " + fProgramacion("RendimientoSal")
Print #1, "Fecha Plantacin/Inicio.............................: " + fProgramacion("FechaPlantacion")
Print #1, "Momento de Riego. Agotamiento de la RFU [%].........: " + fProgramacion("AgotamientoRFU")
Print #1, "Intervalo de riego [das]...........................: " + fProgramacion("IntervaloRiego")
Print #1, "Dosis de riego. Recarga de la RFU [%]...............: " + fProgramacion("RecargaRFU")
Print #1, "Nivel de agua de la RFU al inicio [%]...............: " + fProgramacion("ReservaInicial")
Print #1, " "
Print #1, " "
7. Anejo 5
241
Print #1, "Fecha " + " " + "ETo " + " " + "Kc " + " " + "Kl " + " " + "ETcKl" + " " + "P.E. " + " " + "Raices" + " " + "F.A."
+ " " + "R.F.U." + " " + "Reserva" + " " + "d.n. " + " " + "d.b. " + " " + "D.B. " + " " + "tiempoI" + " " + "tiempoC"
Print #1, " " + " " + "[mm] " + " " + "[] " + " " + "[] " + " " + "[mm] " + " " + "[mm] " + " " + "[cm] " + " " + "[] " + " " +
"[mm] " + " " + "[mm] " + " " + "[mm] " + " " + "[mm] " + " " + "[m3/par]" + " " + "[horas]" + " " + "[hora] "
Print #1, "----------" + " " + "-----" + " " + "----" + " " + "----" + " " + "-----" + " " + "------" + " " + "------" + " " + "----" + " " + "-----
-" + " " + "-------" + " " + "-----" + " " + "-----" + " " + "--------" + " " + "-------" + " " + "-------"
Primero = "NO"
End If
Dim cFecha As String
Dim cETo As String * 5
Dim cKc As String * 4
Dim cKl As String * 4
Dim cETc As String * 5
Dim cPE As String * 6
Dim cRaices As String * 6
Dim cFA As String * 4
Dim cRFU As String * 6
Dim cReserva As String * 7
Dim cDN As String * 5
Dim cDB As String * 5
Dim cDBT As String * 8
Dim cTiempo1 As String * 6
Dim cTiempo2 As String * 6
While Not Consulta.EOF
Numero = Numero + 1
cFecha = Mid(Consulta("Fecha"), 7, 2) + "-" + Mid(Consulta("Fecha"), 5, 2) + "-" + Mid(Consulta("Fecha"), 1, 4)
Dim nETo: nETo = CarNum(Consulta("ETo")): RSet cETo = Format(nETo, "#0.00")
Dim nKc: nKc = CarNum(Consulta("Kc")): RSet cKc = Format(nKc, "0.00")
Dim nKl: nKl = CarNum(Consulta("Kl")): RSet cKl = Format(nKl, "0.00")
Dim nETc: nETc = CarNum(Consulta("ETc")): RSet cETc = Format(nETc, "#0.00")
Dim nPE: nPE = CarNum(Consulta("LluviaEfectiva")): RSet cPE = Format(nPE, "##0.00")
Dim nRaices: nRaices = CarNum(Consulta("Raices")): RSet cRaices = Format(nRaices, "##0")
Dim nFA: nFA = CarNum(Consulta("Fraccion")): RSet cFA = Format(nFA, "0.00")
Dim nRFU: nRFU = CarNum(Consulta("RFUMaxima")): RSet cRFU = Format(nRFU, "##0.0")
Dim nReserva: nReserva = CarNum(Consulta("Reserva")): RSet cReserva = Format(nReserva, "##0.00")
Dim nDN: nDN = CarNum(Consulta("DosisNeta")): RSet cDN = Format(nDN, "##0.00")
Dim nDB: nDB = CarNum(Consulta("DosisBruta")): RSet cDB = Format(nDB, "##0.00")
Dim nDBT: nDBT = CarNum(Consulta("DosisBrutaTotal")): RSet cDBT = Format(nDBT, "#####0.0")
Dim nTiempo1: nTiempo1 = CarNum(Consulta("Tiempo1")): RSet cTiempo1 = Format(nTiempo1, "###0.0")
Dim nTiempo2: nTiempo2 = CarNum(Consulta("Tiempo2")): RSet cTiempo2 = Format(nTiempo2, "###0.0")
tETc = tETc + nETc
tPE = tPE + nPE
If nDN > 0 Then
tRiegos = tRiegos + 1
tDN = tDN + nDN
tDB = tDB + nDB
tDBT = tDBT + nDBT
End If
Informacion = ""
Informacion = Informacion + cFecha + " "
Informacion = Informacion + cETo + " "
Informacion = Informacion + cKc + " "
Informacion = Informacion + cKl + " "
Informacion = Informacion + cETc + " "
Informacion = Informacion + cPE + " "
Informacion = Informacion + cRaices + " "
Informacion = Informacion + cFA + " "
Informacion = Informacion + cRFU + " "
Informacion = Informacion + cReserva + " "
Informacion = Informacion + cDN + " "
Informacion = Informacion + cDB + " "
Informacion = Informacion + cDBT + " "
Informacion = Informacion + cTiempo1 + " "
Informacion = Informacion + cTiempo2 + " "
Print #1, Informacion
DoEvents
Consulta.MoveNext
Wend
Print #1, " "
Print #1, "Total ETcKl [mm]..................: " + Str(Int(tETc))
Print #1, "Total P.E. [mm]....................: " + Str(Int(tPE))
Print #1, "Nmero de Riegos...................: " + Str(Int(tRiegos))
Print #1, "Total dosis neta [mm]..............: " + Str(Int(tDN))
7. Anejo 5
242
Print #1, "Total dosis bruta [mm].............: " + Str(Int(tDB))
Print #1, "Total dosis bruta [m3/parcela].....: " + Str(Int(tDBT))
Print #1, " "
Print #1, "----------------------------------------------------------------------------------"
Print #1, "NOTAS:"
Print #1, " - Cuando el intervalo de riego est en blanco, no se tiene en cuenta. "
Print #1, " - ETo [mm] = Evapotranspiracin de referencia."
Print #1, " - Kc [] = Constante de cultivo."
Print #1, " - Kl [] = Coeficiente de localizacin. Slo en riego localizado."
Print #1, " - ETcKl [mm]= Evapotranspiracin de cultivo por coeficiente de localizacin"
Print #1, " - P.E. [cm]= Lluvia efectiva (vase mtodo aplicado)"
Print #1, " - Races [cm] = Profundidad efectiva de las races "
Print #1, " - R.F.U. [mm] = Volumen de agua mximo de la Reserva Fcilmente Utilizable (RFU)"
Print #1, " - Reserva [mm] = Volumen de agua existente en la RFU al final del da"
Print #1, " - d.n. [mm] = Dosis neta de riego"
Print #1, " - d.b. [mm] = Dosis bruta de riego"
Print #1, " - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela"
Print #1, " - tiempoI [horas] = Tiempo mnimo previsto de riego debido a la infiltracin"
Print #1, " - tiempoC [horas] = Tiempo mnimo previsto de riego debido al Caudal"
Print #1, " - De las dos cifras anteriores, la mayor de ellas ser el tiempo mnimo de riego"
Print #1, "----------------------------------------------------------------------------------"
End If
Close #1
Command3.Visible = True
End Sub
'***********************************************************************************
Private Sub MostrarInformacion2()
' riegos
Dim tRiegos As Double: tRiegos = 0
Dim tDN As Double: tDN = 0
Dim tDB As Double: tDB = 0
Dim tDBT As Double: tDBT = 0
Dim Numero: Numero = 0
Dim Informacion
Open "C:\Riegos\RiegosResumen.txt" For Output As #1
Dim Busca: Busca = ""
Busca = Busca + "SELECT * "
Busca = Busca + "FROM BalanceHidrico "
Busca = Busca + "WHERE "
Busca = Busca + "NombreProgramacion = '" & NombreProgramacion & "' and Raices <> '0' and DosisBruta <> '0' "
Busca = Busca + "ORDER BY "
Busca = Busca + "Fecha ;"
Dim Consulta As Recordset
Set Consulta = BaseDeDatos.OpenRecordset(Busca)
If Consulta.RecordCount <> 0 Then
Consulta.MoveFirst
fProgramacion.Index = "Programacion"
fProgramacion.MoveFirst
fProgramacion.Seek "=", NombreProgramacion
If fProgramacion.NoMatch = False Then 'Registro encontrado
Print #1, " RIEGOS A EFECTUAR ", Date, Time
Print #1, " "
Print #1, "Programacin........................................: " + Consulta("NombreProgramacion")
Print #1, "Finca...............................................: " + fProgramacion("NombreFinca")
Print #1, "Poblacin...........................................: " + fProgramacion("Poblacion")
Print #1, "Provincia...........................................: " + fProgramacion("Provincia")
Print #1, "Latitud [g,m,s].....................................: " + Str(fProgramacion("LatitudGrados")) + " " +
Str(fProgramacion("LatitudMinutos")) + "' " + Str(fProgramacion("LatitudSegundos")) + "'' " + fProgramacion("Latitud") + " "
Print #1, "Longitud [g,m,s]....................................: " + Str(fProgramacion("LongitudGrados")) + " " +
Str(fProgramacion("LongitudMinutos")) + "' " + Str(fProgramacion("LongitudSegundos")) + "'' " + fProgramacion("Longitud")
+ " "
Print #1, "Altitud [m].........................................: " + Str(fProgramacion("Altitud"))
Print #1, "Superficie [m2].....................................: " + fProgramacion("SuperficieFinca")
Print #1, "Cultivo.............................................: " + fProgramacion("Cultivo")
Print #1, "Fraccin agua disponible en el suelo................: " + fProgramacion("Fraccion")
Print #1, "Clase textural......................................: " + fProgramacion("TipoSuelo")
Print #1, "Densidad aparente [g/cm3]...........................: " + fProgramacion("DensidadAparente")
Print #1, "Capacidad de Campo [% peso].........................: " + fProgramacion("CapacidadCampo")
Print #1, "Punto de Marchitamiento [%peso].....................: " + fProgramacion("PuntoMarchitamiento")
Print #1, "Sistema Riego.......................................: " + fProgramacion("SistemaRiego")
Print #1, "Eficiencia en la aplicacin [%].....................: " + fProgramacion("EficienciaAplicacion")
Print #1, "Caudal instalacin riego [m3/parcela]...............: " + fProgramacion("CaudalInstalacion")
Print #1, "Conductividad agua de riego [dS/m]..................: " + fProgramacion("ConductividadElectrica")
7. Anejo 5
243
Print #1, "Eficiencia en el lavado de sales [%]................: " + fProgramacion("EficienciaLavado")
Print #1, "Rendimiento mnimo deseado debido a salinidad [%]...: " + fProgramacion("RendimientoSal")
Print #1, "Fecha Plantacin/Inicio.............................: " + fProgramacion("FechaPlantacion")
Print #1, "Momento de Riego. Agotamiento de la RFU [%].........: " + fProgramacion("AgotamientoRFU")
Print #1, "Intervalo de riego [das]...........................: " + fProgramacion("IntervaloRiego")
Print #1, "Dosis de riego. Recarga de la RFU [%]...............: " + fProgramacion("RecargaRFU")
Print #1, "Nivel de agua de la RFU al inicio [%]...............: " + fProgramacion("ReservaInicial")
Print #1, " "
Print #1, " "
Print #1, "Fecha " + " " + "d.n. " + " " + "d.b. " + " " + "D.B. " + " " + "tiempoI" + " " + "tiempoF" + " " + " Notas
"
Print #1, " " + " " + "[mm] " + " " + "[mm] " + " " + "[m3/par]" + " " + "[horas]" + " " + "[hora] " + " " + "
"
Print #1, "----------" + " " + "-----" + " " + "-----" + " " + "--------" + " " + "-------" + " " + "-------" + " " + "-------------------------------
------------"
Primero = "NO"
End If
Dim cFecha As String
Dim cETo As String * 5
Dim cKc As String * 4
Dim cKl As String * 4
Dim cETc As String * 5
Dim cPE As String * 6
Dim cRaices As String * 6
Dim cFA As String * 4
Dim cRFU As String * 6
Dim cReserva As String * 7
Dim cDN As String * 5
Dim cDB As String * 5
Dim cDBT As String * 8
Dim cTiempo1 As String * 6
Dim cTiempo2 As String * 6
While Not Consulta.EOF
Numero = Numero + 1
cFecha = Mid(Consulta("Fecha"), 7, 2) + "-" + Mid(Consulta("Fecha"), 5, 2) + "-" + Mid(Consulta("Fecha"), 1, 4)
Dim nETo: nETo = CarNum(Consulta("ETo")): RSet cETo = Format(nETo, "#0.00")
Dim nKc: nKc = CarNum(Consulta("Kc")): RSet cKc = Format(nKc, "0.00")
Dim nKl: nKl = CarNum(Consulta("Kl")): RSet cKl = Format(nKl, "0.00")
Dim nETc: nETc = CarNum(Consulta("ETc")): RSet cETc = Format(nETc, "#0.00")
Dim nPE: nPE = CarNum(Consulta("LluviaEfectiva")): RSet cPE = Format(nPE, "##0.00")
Dim nRaices: nRaices = CarNum(Consulta("Raices")): RSet cRaices = Format(nRaices, "##0")
Dim nFA: nFA = CarNum(Consulta("Fraccion")): RSet cFA = Format(nFA, "0.00")
Dim nRFU: nRFU = CarNum(Consulta("RFUMaxima")): RSet cRFU = Format(nRFU, "##0.0")
Dim nReserva: nReserva = CarNum(Consulta("Reserva")): RSet cReserva = Format(nReserva, "##0.00")
Dim nDN: nDN = CarNum(Consulta("DosisNeta")): RSet cDN = Format(nDN, "##0.00")
Dim nDB: nDB = CarNum(Consulta("DosisBruta")): RSet cDB = Format(nDB, "##0.00")
Dim nDBT: nDBT = CarNum(Consulta("DosisBrutaTotal")): RSet cDBT = Format(nDBT, "#####0.0")
Dim nTiempo1: nTiempo1 = CarNum(Consulta("Tiempo1")): RSet cTiempo1 = Format(nTiempo1, "###0.0")
Dim nTiempo2: nTiempo2 = CarNum(Consulta("Tiempo2")): RSet cTiempo2 = Format(nTiempo2, "###0.0")
Dim cNotas: cNotas = Consulta("Notas")
If nDN > 0 Then
tRiegos = tRiegos + 1
tDN = tDN + nDN
tDB = tDB + nDB
tDBT = tDBT + nDBT
End If
Informacion = ""
Informacion = Informacion + cFecha + " "
Informacion = Informacion + cDN + " "
Informacion = Informacion + cDB + " "
Informacion = Informacion + cDBT + " "
Informacion = Informacion + cTiempo1 + " "
Informacion = Informacion + cTiempo2 + " "
Informacion = Informacion + cNotas + " "
Print #1, Informacion
DoEvents
Consulta.MoveNext
Wend
Print #1, " "
Print #1, "Nmero de Riegos...................: " + Str(Int(tRiegos))
Print #1, "Total dosis neta [mm]..............: " + Str(Int(tDN))
Print #1, "Total dosis bruta [mm].............: " + Str(Int(tDB))
Print #1, "Total dosis bruta [m3/parcela].....: " + Str(Int(tDBT))
7. Anejo 5
244
Print #1, " "
Print #1, "----------------------------------------------------------------------------------"
Print #1, "NOTAS:"
Print #1, " - Cuando el intervalo de riego est en blanco, no se tiene en cuenta. "
Print #1, " - d.n. [mm] = Dosis neta de riego"
Print #1, " - d.b. [mm] = Dosis bruta de riego"
Print #1, " - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela"
Print #1, " - tiempoI [horas] = Tiempo mnimo previsto de riego debido a la infiltracin"
Print #1, " - tiempoC [horas] = Tiempo mnimo previsto de riego debido al Caudal"
Print #1, " - De las dos cifras anteriores, la mayor de ellas ser el tiempo mnimo de riego"
Print #1, "----------------------------------------------------------------------------------"
Else
Print #1, " NO HAY RIEGOS"
End If
Close #1
Command4.Visible = True
Comando(0).Visible = True
Label1.Visible = False
End Sub
Private Sub Command3_Click()
Dim ReturnValue
ReturnValue = Shell("c:\Archivos de Programa\Accesorios\Wordpad.exe c:\Riegos\RiegosDetalle.txt", 1)
AppActivate ReturnValue
End Sub
Private Sub Command4_Click()
Dim ReturnValue
ReturnValue = Shell("c:\Archivos de Programa\Accesorios\Wordpad.exe c:\Riegos\RiegosResumen.txt", 1)
AppActivate ReturnValue
End Sub

Das könnte Ihnen auch gefallen