Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285...

166
DESARROLLO E iMPLEMENTAdÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR Resultados En la tabla 5.50 se muestran los resultados del experimento 21: nitrógeno no eliminado y porcentajes de eliminación en diferentes unidades. Suma integrada de nitrógeno en la salida (g/d) N-NH 4 + 1.188 N-NCV 0.255 N-N0 2 - 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) % eliminación de N % N-NH 4 + del N total salida % N-NCV del N total salida % N-NO 2 " del N total salida mg N eliminado / g SSV d mg N-NH 4 + salida / g SSV d mgN-NCVsalida/gSSVd mgN-NO/salida/gSSVd 11.294 86.7 68.7 14.8 16.5 26.01 2.74 0.59 0.66 Tabla 5.50. Resultados experimento 21 Comentarios Variables "in-line" Caudales de recirculación. La relación de recirculación externa utilizada es 0.5 en condiciones normales y 1 en condiciones de alta carga. En la relación de recirculación interna se observan unos valores de 1,2 y 4, aunque aparece mayoritariamente este último. Temperatura. Se obtienen valores de 19.5 a 23 °C. pH. Hay variación de pH en el reactor 3 debido al problema con el electrodo. En el reactor 2 aparecen valores en el margen entre 7.25 y 8.00. En el primer reactor, se observan las variaciones provocadas por el cambio de condiciones óxicas. Aparecen incrementos de pH relacionados con las condiciones aeróbicas, y disminuciones de pH por las condiciones anóxicas. En este reactor se obtienen valores entre 7.10 y 7.90. Las perturbaciones en el pH producidas por el cambio de condiciones en el primer reactor pueden observarse también en los reactores 2 y 3, aunque bastante reducidas. Redox. En el reactor 1 existen oscilaciones entre O y -150 mV en condiciones óxicas alternantes, mientras que en condiciones anóxicas se obtiene valores alrededor de -200 mV. En el reactor 2 puede observarse el comportamiento relacionado con las diferentes consignas de oxígeno. Con consignas de 3 mg/1 se obtiene valores de redox alrededor de 100 mV. En condiciones anóxicas de 10:00 a 12:00 horas, baja a valores alrededor de O mV. Durante el último periodo con consigna O mg/1, el redox no baja porque todavía existe oxígeno presente en el medio. Oxígeno. Se puede apreciar en general el adecuado control, con cierta oscilación por las estimaciones de OUR. En este caso se observa la relación entre las estrategias de control de secuencia anóxica/aeróbica del primer reactor y el aumento de recirculación unido al cambio de consigna del oxígeno en el tercer reactor. Al aumentar la concentración de nitrógeno amoniacal en la salida, el sistema experto inicia las secuencias anóxicas/aeróbicas en el primer reactor. Esto se traduce en un aumento de nitratos en el periodo aeróbico, unido a una menor desnitrificación. Esto provoca un aumento de nitratos en la salida del sistema detectada por el analizador. El sistema experto comprueba que el valor de N-NO X en la salida del sistema es alto, por lo que aumenta la recirculación interna a una relación 4 y disminuye la consigna de oxígeno del tercer reactor a 1 mg/1. Cuando finaliza el periodo aeróbico en el reactor 1, el sistema empieza a desnitrificar, por lo que poco después baja la concentración de N-NO X . Al detectar medidas bajas, el sistema experto devuelve las condiciones de recirculación y oxígeno en el reactor 3 a sus valores iniciales. La aparición de otro ciclo óxico en el primer reactor hace repetir de nuevo el cambio de condiciones. Aireación. Se observa un consumo de aire elevado en el reactor 1 durante los periodos aeróbicos. En el reactor 2 el consumo es bastante bajo, aunque oscila bastante en función de las condiciones del reactor 1. En el 3 el consumo es más elevado que en anteriores experimentos, sobre todo en condiciones en que el reactor 2 la consigna de oxígeno es O mg/1. Variables analíticas NH 4 + salida. Se obtienen valores máximos algo elevados, 7.1 mg/1 sobre las 20:00 horas. NO 3 " salida. El máximo es reducido, 1.4 mg/1 a las 1:00 horas. Se observa la oscilación de las medidas provocada por los ciclos de anóxicos/aeróbicos del primer reactor. NO 2 " salida. Los valores máximos (1.4 mg/1) se presentan sobre las 17:30. También se observa el comportamiento oscilante. OUR. El consumo es elevado en el reactor 1, ligeramente bajo en el 2 y el 3. El máximo es 0.023 mg O 2 /1 s y aparece sobre las 19:30 horas en el reactor 1. Valoración global La eliminación de nitrógeno es de 86.7 %, valor elevado. La eliminación por unidad de biomasa es de 26.01 mg N / g SSV d, rendimiento de eliminación elevado. Las concentraciones de nitrógeno amoniacal a la salida son ligeramente altas, pero las de N-NO X son reducidas, por lo que globalmente la eliminación es correcta. 248 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Transcript of Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285...

Page 1: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E iMPLEMENTAdÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Resultados

En la tabla 5.50 se muestran los resultados delexperimento 21: nitrógeno no eliminado yporcentajes de eliminación en diferentes unidades.

Suma integrada de nitrógeno en la salida (g/d)N-NH4

+ 1.188N-NCV 0.255N-N02- 0.285N total 1.728

Eliminación de nitrógenoEliminación de N (g/d)

% eliminación de N% N-NH4

+ del N total salida% N-NCV del N total salida% N-NO2" del N total salidamg N eliminado / g SSV d

mg N-NH4+ salida / g SSV d

mgN-NCVsalida/gSSVdmgN-NO/salida/gSSVd

11.29486.768.714.816.5

26.012.740.590.66

Tabla 5.50. Resultados experimento 21

Comentarios

Variables "in-line"

Caudales de recirculación. La relación derecirculación externa utilizada es 0.5 encondiciones normales y 1 en condiciones de altacarga. En la relación de recirculación interna seobservan unos valores de 1,2 y 4, aunque aparecemayoritariamente este último.

Temperatura. Se obtienen valores de 19.5 a 23 °C.pH. Hay variación de pH en el reactor 3 debido al

problema con el electrodo. En el reactor 2aparecen valores en el margen entre 7.25 y 8.00.En el primer reactor, se observan las variacionesprovocadas por el cambio de condiciones óxicas.Aparecen incrementos de pH relacionados conlas condiciones aeróbicas, y disminuciones depH por las condiciones anóxicas. En este reactorse obtienen valores entre 7.10 y 7.90. Lasperturbaciones en el pH producidas por elcambio de condiciones en el primer reactorpueden observarse también en los reactores 2 y3, aunque bastante reducidas.

Redox. En el reactor 1 existen oscilaciones entre O y-150 mV en condiciones óxicas alternantes,mientras que en condiciones anóxicas se obtienevalores alrededor de -200 mV. En el reactor 2puede observarse el comportamiento relacionadocon las diferentes consignas de oxígeno. Conconsignas de 3 mg/1 se obtiene valores de redoxalrededor de 100 mV. En condiciones anóxicasde 10:00 a 12:00 horas, baja a valores alrededorde O mV. Durante el último periodo con consignaO mg/1, el redox no baja porque todavía existeoxígeno presente en el medio.

Oxígeno. Se puede apreciar en general el adecuadocontrol, con cierta oscilación por lasestimaciones de OUR. En este caso se observa larelación entre las estrategias de control desecuencia anóxica/aeróbica del primer reactor yel aumento de recirculación unido al cambio deconsigna del oxígeno en el tercer reactor. Alaumentar la concentración de nitrógenoamoniacal en la salida, el sistema experto inicialas secuencias anóxicas/aeróbicas en el primerreactor. Esto se traduce en un aumento denitratos en el periodo aeróbico, unido a unamenor desnitrificación. Esto provoca un aumentode nitratos en la salida del sistema detectada porel analizador. El sistema experto comprueba queel valor de N-NOX en la salida del sistema esalto, por lo que aumenta la recirculación internaa una relación 4 y disminuye la consigna deoxígeno del tercer reactor a 1 mg/1. Cuandofinaliza el periodo aeróbico en el reactor 1, elsistema empieza a desnitrificar, por lo que pocodespués baja la concentración de N-NOX. Aldetectar medidas bajas, el sistema expertodevuelve las condiciones de recirculación yoxígeno en el reactor 3 a sus valores iniciales. Laaparición de otro ciclo óxico en el primer reactorhace repetir de nuevo el cambio de condiciones.

Aireación. Se observa un consumo de aire elevadoen el reactor 1 durante los periodos aeróbicos. Enel reactor 2 el consumo es bastante bajo, aunqueoscila bastante en función de las condiciones delreactor 1. En el 3 el consumo es más elevado queen anteriores experimentos, sobre todo encondiciones en que el reactor 2 la consigna deoxígeno es O mg/1.

Variables analíticas

NH4+ salida. Se obtienen valores máximos algo

elevados, 7.1 mg/1 sobre las 20:00 horas.NO3" salida. El máximo es reducido, 1.4 mg/1 a las

1:00 horas. Se observa la oscilación de lasmedidas provocada por los ciclos deanóxicos/aeróbicos del primer reactor.

NO2" salida. Los valores máximos (1.4 mg/1) sepresentan sobre las 17:30. También se observa elcomportamiento oscilante.

OUR. El consumo es elevado en el reactor 1,ligeramente bajo en el 2 y el 3. El máximo es0.023 mg O 2 /1 s y aparece sobre las 19:30 horasen el reactor 1.

Valoración global

La eliminación de nitrógeno es de 86.7 %, valorelevado. La eliminación por unidad de biomasa es de26.01 mg N / g SSV d, rendimiento de eliminaciónelevado. Las concentraciones de nitrógenoamoniacal a la salida son ligeramente altas, pero lasde N-NOX son reducidas, por lo que globalmente laeliminación es correcta.

248 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 2: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

EXPERIMENTO 22. Perturbación de caudal

Objetivos

En este experimento, se mantienen todas lasestrategias de control, pero se modifica la entrada ala planta. Se introducen dos caudales diferentesdurante dos períodos, pero la cantidad de nitrógenoadicionado mediante las bombas dosifícadoras semantiene constante. De este modo se producen dosperiodos de diferente caudal pero con igual carga.Los caudales y la dosificación se han calculado detal modo que el caudal total y el nitrógeno totalintroducido durante el experimento es igual al de losexperimentos anteriores.

Condiciones experimentales

En la tabla 5.51 se muestran las condicionesexperimentales de oxígeno, recirculación y entradatotal de la planta piloto.

Estado óxicoReactor

0123

EstadoAnaeróbico

AnóxicoAeróbicoAeróbico

Consigna ODOmg/1

0 mg/1 / 3 mg/10 mg/1 / 3 mg/11 mg/1 / 3 mg/1

RecirculaciónR. Interna Caudal RI / Caudal Entrada = 1 / 2 / 4R. Externa Caudal RE / Caudal Entrada = 0.5/1

Suma integrada de nitrógeno en la entrada (g/d)N-NH4

+ 7.264N-Norg 5.049N-NCV ' 0.709N total 13.022

Sólidos en suspensión (09:00 horas)Reactor

O123

SSV(mg/l)4450445045404520

Total sistema 418.3 gramosDSVI 275 mi

Tabla 5.51. Condiciones experimento 22

Incidencias de operación

Planta piloto

Parada por escape de agua 11:44 a 12:44 horas.

El control de oxígeno en los tres reactoresfunciona adecuadamente durante todo elexperimento. Se mantienen correctamente lasconsignas fijadas en cada reactor. Durante elexperimento se mantiene las condiciones decarga constantes, por lo que no se observanperiodos de baja carga donde el control deoxígeno no está tan optimizado.

No se disponen de medida de redox del reactor3, por mal funcionamiento del electrodo.

El control de pH funciona correctamente,excepto una pequeña perturbación sobre las13:00 horas provocada por un exceso de adiciónde bicarbonato.

Analizadores

No se disponen datos de nitrato, nitrito niamonio de 8:00 a 9:15 horas por recalibraciónde los analizadores.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 249

Page 3: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

1800

1600-

1400-

1000-

800 •

600

400-

200-

Q entradaQ Rec IniQ Rec Ext

2S.

26

25-

24 •

23-

22 -

21 •

20 •

19 •

18

T1T2T3

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(a) Caudales de entrada, recirculación interna y recirculación externa

8.50

8.25-

8.00-

7.75-

Í. 7.50

7.25-

7.00-

6.75

6.50

- pH1...... pH2-- pH3

300

200 •

100 -

I °x| -100-

-200-

-300-

08:00 12:00 16:00 20:00 00:00 04:00

Tiempo (horas)

(c) Evolución del pH en los reactores 1, 2 y 3

08:00-400

08:00 12:00 16:00 20:00 00:00 04:00 08:00

Tiempo (horas)

(b) Temperatura en los reactores 1, 2 y 3

Redox 1Redox2

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(d) Evolución del potencial redox en los reactores 1 y 2

20

18

16-

? 14 •

S 12-B

A

08:00

- mA1...... mA2-- mA3

16:00 20:00 00:00

Tiempo (horas)

04:000-^

08:00 08:00 12:00 16:00 20:00 00:00 04:00 08:00!

Tiempo (horas)i

(e) Actuación sobre las válvulas de aireación de los reactores 1, 2 y 3 (f) Evolución del oxigeno disuelto en los reactores 1, 2 y 3

Fig. 5.42. Evolución de los parámetros del proceso. Experimento 22

250 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 4: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁUSIS DE DIFERENTES ESTRATEGIAS DE CONTROL

14

12-

10 •

Í ,E. 8-

+

ï* 6 -

• N-NH,*

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

08:00

(g) Análisis del nitrógeno amoniacal "on-line" (CFA) de la salida

o

Z

08:00

N-N03' FIA

16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(h) Análisis de nitrato "on-line" (FIA) de la salida

2 •

• N-NO; FIA

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00

(i) Análisis de nitrito "on-line" (FIA) de la salida

0.030

0.025 -

08:000.000

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(j) Velocidad de consumo de oxígeno (OUR) en los reactores aeróbicos

25 ¡

20-

Í (É 1S"Z

10-

5 -

n -

oN-NH/ entrada

• N-NH/ análisis

o N-N,,,

600-

500-

oí 400-

8 300-

200-

100-

n -

DQO entrada

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(k) Evolución de diferentes formas de nitrógeno en la entrada (I) Evolución de la DQO de entrada de la planta

Fig. 5.42. Evolución de los parámetros del proceso. Experimento 22

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 251

Page 5: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Resultados

En la tabla 5.52 se muestran los resultados delexperimento 22: nitrógeno no eliminado yporcentajes de eliminación en diferentes unidades.

Suma integrada de nitrógeno en la salida (g/d)N-NH4

+ 0.270N-NO3' 0.351N-NO2" 0.240N total 0.861

Eliminación de nitrógenoEliminación de N (g/d)

% eliminación de N% N-NH4

+ del N total salida% N-NCV del N total salida% N-NO2" del N total salidamg N eliminado / g SSV d

mgN-NH4+salida/gSSVd

mg N-NO3" salida / g SSV dmgN-NO2 'salida/gSSVd

12.16193.431.440.827.8

29.070.650.840.57

Tabla 5.52. Resultados experimento 22

Comentarios

Variables "in-line "

Caudales de recirculación. La relación derecirculación externa utilizada generalmente es0.5, pero en condiciones de alta carga se utilizauna relación de 1. En la relación de recirculacióninterna se observan diferentes periodos conrelación 1,2 y 4.

Temperatura. Se observan valores de 20 a 23.5 °C.pH. En el reactor se mantiene en torno a la consigna

con oscilaciones mayores que en anterioresexperimentos. Esto es debido a la utilización deuna solución de carbonato en vez de bicarbonato.En el reactor 2 aparecen valores en el margenentre 7.00 y 7.40. En el primer reactor, seobservan las variaciones provocadas por elcambio de condiciones óxicas. Se obtienenvalores de pH entre 6.75 y 7.40.

Redox. En el reactor 1 existen oscilaciones entre 25y -100 mV en condiciones óxicas alternantes,mientras que en condiciones anóxicas, lasmayoritarias, se obtiene valores alrededor de -150 mV. En el reactor 2 se observan valoresentre 50 y 125 mV, dependiendo de lasdiferentes consignas de oxígeno. Con consignas

de 3 mg/1 se obtiene valores de redox alrededor de125 mV. En condiciones anóxicas baja a valoresalrededor de 50 mV.

Oxígeno. Se puede apreciar en general el adecuadocontrol, con la oscilación provocada por lasestimaciones de OUR.

Aireación. Se observa un consumo de aire elevadoen el reactor 1 durante los periodos aeróbicos. Enlos reactores 2 y 3 el consumo es bastantereducido, incluso con condiciones aeróbicas de 3mg/1.

Variables analíticas

salida. Se obtienen valores máximos muypequeños, 2.45 mg/1 sobre las 13:00 horas. Laparada de la planta sobre las 1 1 :45 horas provocaque la concentración de salida no se incremente eincluso disminuya ligeramente. Cuando la plantase vuelve a encender, se recuperan los valores desalida esperados.

salida. El máximo es limitado, 2.2 mg/1 a las13:30 horas. Esta perturbación también estáproducida por la parada, durante la cual se hapodido incrementar la nitrificación ligeramente.

N02" salida. Los valores máximos (1.0 mg/1) sepresentan sobre las 8:00 horas. Se puedenobservar unas pequeñas oscilaciones asociadas ala secuencia anóxica/óxica del primer reactor.

OUR. El consumo no es demasiado elevado en elreactor 1 y existen pocos periodos aeróbicos.Tiene valores máximos de 0.024 mg O2 / 1 ssobre las 2:00 horas. En el reactor 2 se observaun consumo mayor durante el periodo con menorcaudal. En el reactor 3 se mantiene bastanteconstante y con valores reducidos.

Valoración global

La eliminación de nitrógeno es de 93.4 %, valor muyelevado. La eliminación por unidad de biomasa es de29.07 mg N / g SSV d, el mayor rendimiento deeliminación obtenido. Las concentraciones denitrógeno a la salida son muy reducidas. Teniendoen cuenta que la carga total es igual a la deanteriores experimentos, los resultados demuestranla importancia de la adecuada distribución durantetodo el periodo para obtener eliminaciones casitotales. Aunque disponer de un depósito dehomogeneización es posible para caudalesreducidos, no es una opción demasiado económicapara una planta de tratamiento de aguas residualesurbanas de tamaño medio.

252 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 6: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁUSIS DE DIFERENTES ESTRATEGIAS DE CONTROL

EXPERIMENTO 23. Baja carga

Objetivos

En este experimento, también se mantienen todas lasestrategias de control, pero se modifica la entrada ala planta. Se simula una condición de baja carga denitrógeno y de DQO. Se introducen dos caudalesdiferentes durante dos periodos, pero la cantidad denitrógeno adicionado mediante las bombasdosifícadoras se mantiene constante. De este modose producen dos periodos de diferente caudal perocon igual carga.

Condiciones experimentales

En la tabla 5.53 se muestran las condicionesexperimentales de oxígeno, recirculación y entradatotal de la planta piloto.

Estado óxicoReactor

0123

EstadoAnaeróbico

AnóxicoAeróbicoAeróbico

Consigna ODOmg/1

0 mg/1 / 3 mg/10 mg/1 / 3 mg/11 mg/1 / 3 mg/1

RecirculaciónR. Interna Caudal RI / Caudal Entrada = 1 / 2 / 4R. Externa Caudal RE / Caudal Entrada = 0.5/1

Suma integrada de nitrógeno en la entrada (g/d)N-NH4

+ 3.822N-Norg 2.656N-NO3- 0.562N total 7.040

Sólidos en suspensión (10:30 horas)Reactor

O123

SSV(mg/l)3640457047204790

Total sistema 427.0 gramosDSVI 300 mi

Tabla 5.53. Condiciones experimento 23

Incidencias de operación

Parada por escape de agua 18:06 a 18:07 horas.

El control de oxígeno en los tres reactoresfunciona adecuadamente durante todo elexperimento. Se mantienen correctamente lasconsignas fijadas en cada reactor, excepto algúnperiodo de muy baja carga en el reactor 3.

No se disponen de medida de redox del reactor3, por mal funcionamiento del electrodo.

El control de pH funciona correctamente,excepto una perturbación sobre las 18:00 horas.Se adiciona un exceso de carbonato, lo queafecta al pH de los tres reactores.

Analizadores

No se disponen datos de nitrato, nitrito ni amonio de9:45 a 11:00 horas por calibración de losanalizadores.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 253

Page 7: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

1600-

1400-

1200-

1000-

600-

400 •

n -

I

Q entrada• • • • • • • QRecInt

Q Rec Ext

26

25-

24 -

23 •

22 -

21 •

20 -

19 -

1808:00 16:00 20:00 00:00

Tiempo (horas)

04:00

(a) Caudales de entrada, recirculación interna y recirculación externa

08:00 12:00 16:00 20:00 00:00 04:00 08:00

Tiempo (horas)

(b) Temperatura en los reactores 1, 2 y 3

8.50

8.25-

8.00-

7.75-

Í. 7.50 •

7.25-

7.00 •

6.75-

6.50

pH1pH2pH3

300

200 -

100 -

0 -

-100-

-200 -

-300 -

-400

• Redox1Redox2

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

04:00 08:00 08:00 12:00 16:00 20:00 00:00

. Tiempo (horas)

04:00 08:00

(c) Evolución del pH en los reactores 1, 2 y 3 (d) Evolución del potencial redox en los reactores 1 y 2

Icsu

1

18 •

16-

14-

12 •

10-

8

6 -

í .

I•: •&í i

ÉKL J'l:.rv ¡Ife

1- ,1

- .4 íf;tflifií.íi^ll/ï'V·'ll*: !:

mA1mA2mA3

•% ^

MO^:-

" 'l'/(ll\to#^A^V/J^l''/V/! W i i" ' v08:00 12:00 16:00 20:00 00:00 04:00 08:00

Tiempo (horas)

(e) Actuación sobre las válvulas de aireación de los reactores 1, 2 y 3

08:00 12:00 16:00 20:00 00:00 04:00 08:00I

Tiempo (horas)

(f) Evolución del oxigeno disuelto en los reactores 1, 2 y 3

Fig. 5.43. Evolución de los parámetros del proceso. Experimento 23

254 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 8: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO, ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

14

12-

10-

3Z

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

• N-NH,*

04:00 08:00

(g) Análisis del nitrógeno amoniacal "on-line" (CFA) de la salida

7

6

Ç 5

i" A

ÍZ 3

2

1

08:00 12:00 16:00 20:00 00:00

Tiempo (horas)

• N-NOj" FIA

04:00 08:00

(h) Análisis de nitrato "on-line" (FIA) de la salida

4 -

3 -

2 -

• N-NCV FIA

08:00 12:00 16:00 20:00 00:00 04:00

Tiempo (horas)

(i) Análisis de nitrito "on-line" (FIA) de la salida

0.030

08:000.000

08:00 12:00 16:00 20:00 00:00 04:00 08:00

Tiempo (horas)

(j) Velocidad de consumo de oxígeno (OUR) en los reactores aeróbicos

30

25

20-

15-

10-

08:00 12:00

N-NH/ entrada

• N-NH/ análisis

o N-NO

16:00 20:00 00:00

Tiempo (horas)

700

600

500

O) 400 -

§ 300-

200-

100-

04:00 08:00

(k) Evolución de diferentes formas de nitrógeno en la entrada

08:00 12:00

• DQO entrada

16:00 20:00 00:00

Tiempo (horas)

04:00 08:00

(I) Evolución de la DQO de entrada de la planta

Fig. 5.43. Evolución de los parámetros del proceso. Experimento 23

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 255

Page 9: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Resultados

En la tabla 5.54 se muestran los resultados delexperimento 23: nitrógeno no eliminado yporcentajes de eliminación en diferentes unidades.

Suma integrada de nitrógeno en la salida (g/d)N-NH4

+ 0.210N-NCV 0.397N-NO2" 0.144N total 0.751

Eliminación de nitrógenoEliminación de N (g/d)

% eliminación de N% N-NH4

+ del N total salida% N-NCV del N total salida% N-NCV del N total salidamg N eliminado / g SSV d

mgN-NH/salida/gSSVdmg N-NCV salida/g SSV dmgN-NO2'salida/gSSVd

6.28989.327.952.919.214.730.490.930.34

Tabla 5.54. Resultados experimento 23

Comentarios

Variables "in-line "

Caudales de recirculación. La relación derecirculación externa utilizada es 0.5, ya que nose detectan condiciones de alta carga. En larelación de recirculación interna se observandiferentes periodos con relación 2 y 4.

Temperatura. Se observan valores de 20.5 a 25 °C.pH. En el reactor se mantiene en torno a la consigna

con oscilaciones mayores que en anterioresexperimentos, por la utilización de carbonato. Enel reactor 2 aparecen valores en el margen entre7.00 y 7.60. En el primer reactor, se observanvalores de pH entre 6.80 y 7.50.

Redox. En el reactor 1 se observan valores entre 25y -300 mV, lo que refleja las diferentescondiciones óxicas en el reactor. En el reactor 2se observan valores entre -25 y 100 mV,dependiendo de las diferentes consignas deoxígeno. Con consignas de 3 mg/1 se obtiene

valores de redox alrededor de 100 mV, mientrasque en condiciones anóxicas se llegan a valoresnegativos.

Oxígeno. Las medidas son correctas, aunquegráficamente no aparecen muy claras porque haymuchos cambios de consigna desde el sistemaexperto. También se aprecian las oscilacionesprovocadas por la estimación de OUR.

Aireación. Se observa un consumo de aire muyreducido. Sólo aparece un consumo elevado enlos dos periodos en los que se airea el primerreactor.

Variables analíticas

4+ salida. Se obtienen valores máximos muypequeños, 1 .5 mg/1 sobre las 1 1 :30 horas.

NO3" salida. El máximo aparece al principio delexperimento, y es provocado por el amoniomirificado en el anterior experimento, que no seha eliminado por la falta de materia orgánica. Elmáximo es 2.2 mg/1 sobre las 8:00 horas.

NO2" salida. Los valores máximos (1.2 mg/1) sepresentan sobre las 9:30 horas. Tambiénprovienen del anterior experimento.

OUR. El consumo no es elevado en el reactor 1durante los pocos periodos aeróbicos. En elreactor 2 se observa un consumo en función de lacarga de entrada. Sobre las 10:00 horas comienzaa bajar al recibir una carga menor. Después de uncambio de anóxico a aeróbico, se incrementamucho, alcanzando valores máximos de 0.026mg O2 / 1 s sobre las 19:00 horas. En el reactor 3también se observan variaciones provocadas porlos cambios de condiciones de consigna deoxígeno.

Valoración global

La eliminación de nitrógeno es de 89.3 %, valorelevado. La eliminación por unidad de biomasa es de14.73 mg N / g SSV d, muy reducida porque la cargaes muy pequeña. Las concentraciones de nitrógeno ala salida también son mínimas. Este experimentodemuestra prácticamente que es posible obtenerbuenos resultados de eliminación utilizando losrecursos necesarios, sin desperdiciar energía deaireación o recirculación cuando la eliminacióndeseada no lo requiere.

256 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 10: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

EXPERIMENTO 24. Efecto del sedimentador

Objetivos

Para este experimento se repiten las condiciones deentrada y de control de los experimentos 19, 20 y 21.La diferencia se encuentra en el tamaño delsedimentador, ya que se prueba la respuesta delsistema con un nuevo sedimentador de volumen 25litros, en contraste con los 60 litros del anterior.

Condiciones experimentales

En la tabla 5.55 se muestran las condicionesexperimentales de oxígeno, recirculación y entradatotal de la planta piloto.

Estado óxicoReactor

0123

EstadoAnaeróbico

AnóxicoAeróbicoAeróbico

Consigna ODOmg/1

0 mg/1 / 3 mg/10 mg/1 / 3 mg/11 mg/1 / 3 mg/1

RecirculaciónR. Interna Caudal RI / Caudal Entrada = 1 / 2 / 4R. Externa Caudal RE / Caudal Entrada = 0.5/1

Suma integrada de nitrógeno en la entrada (g/d)N-NH/ 7.264N-Norg

N-NCVN total

5.0490.70913.022

Sólidos en suspensión (8:30 horas)Reactor

O123

SSV(mg/l)2670299030603110

Total sistema 280.5 gramosDSVI 410 mi

Tabla 5.55. Condiciones experimento 24

Incidencias de operación

Parada por alarma de funcionamiento de lasbombas de 14:05 a 14:07 horas.

La instalación del nuevo sedimentador provocaque la concentración de sólidos en la planta seamenor y más variable. Puede observarse comola concentración de sólidos en los reactores,sufre una disminución de 280 a 165 gramos deeste experimento al del día siguiente. Estavariabilidad está producida por el peorrendimiento de sedimentación, unida a la menorcapacidad de acumulación de lodos.

La baja concentración de microorganismo en losreactores, provoca que el consumo de oxígenosea muy reducido. Esto desfavorece al controlde oxígeno, que sólo es correcto para el primerreactor. En los reactores 2 y 3 el consumo deaire es mínimo, por lo que el oxígeno está casisiempre por encima de la consigna, incluso conlas válvulas de aireación cerradas.

El control de pH funciona correctamente.

Analizadores

No aparecen problemas con los analizadoresdurante el experimento.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 257

Page 11: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

"c"

1

1(0O

1600-

1400-

1200-

1000-

800-

600-

400-

n .

I : ; ''• Q entrada ::i i : : QRecInt j i

: • • • • ! : : Q Rec Ext ::

^ •— L_l_^ ; i..;!; ;;

r~n ^ i¡— u-, _^_^ pX , L IL

26

25 -

24 -

23 -

Ü 2 2 -

Ie 2o ¿

20 -

19-

18

T1T2T3

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00

(a) Caudales de entrada, recirculación interna y recirculación externa

14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(b) Temperatura en los reactores 1, 2 y 3

8.25-

8.00-

7.75-

ï 7.50 -

7.25-

7.00 -

6.75-

10

pH1pH2pH3

^^A/vA/V/Wvf^^,;

:00 14:00 18:00 22:00 02:00 06:00 10

300

200-

100 -

-100 -

-200-

-300 -

100

- Redox 1...... Redox2-- Redox 3

Tiempo (horas)

(c) Evolución del pH en los reactores 1, 2 y 3

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

Í

(d) Evolución del potencial redox en los reactores 1, 2 y 3

S 12- go>

O

10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(e) Actuación sobre las válvulas de aireación de los reactores 1, 2 y 3

10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(f) Evolución del oxígeno disuelto en los reactores 1, 2 y 3

Fig. 5.44. Evolución de los parámetros del proceso. Experimento 24

258 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 12: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

O

• N-NO,' FIA

10:00 14:00 18:00 22:00 02:00 06:00

Tiempo (horas)

10:00 10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(g) Análisis del nitrógeno amoniacal "on-line" (CFA) de la salida (h) Análisis de nitrato "on-line" (FIA) de la salida

3 -

2

• N-NO; FIA

0.030

0.025 -

ÚT 0.020 -

oo, 0.015

.o 0.010 -

0.005 -

0.000

• OUR1

• OUR 2• OUR 3

10:00 14:00 18:00 22:00 02:00 06:00

Tiempo (horas)

10:00 10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(i) Análisis de nitrito "on-line" (FIA) de la salida (j) Velocidad de consumo de oxígeno (OUR) en los reactores aeróbicos

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00 10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(k) Evolución del nitrógeno amoniacal en la entrada (I) Evolución de la DQO de entrada de la planta

Fig. 5.44. Evolución de los parámetros del proceso. Experimento 24

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 259

Page 13: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Resultados

En la tabla 5.56 se muestran los resultados delexperimento 24: nitrógeno no eliminado yporcentajes de eliminación en diferentes unidades.

Suma integrada de nitrógeno en la salida (g/d)N-NH4

+ 3.713N-NO3' 0.420N-NCY 0.290N total 4.423

Eliminación de nitrógenoEliminación de N (g/d)

% eliminación de N% N-NH4

+ del N total salida% N-N03- del N total salida% N-NO2' del N total salidamg N eliminado / g SSV d

mg N-NH4+ salida / g SSV d

mg N-NO3" salida / g SSV dmgN-NO2 'salida/gSSVd

8.59866.083.99.56.6

30.6513.241.501.03

Tabla 5.56. Resultados experimento 24

Comentarios

Variables "in-line "

Caudales de recirculación. Las relaciones internasutilizadas son 0.5 y 1. En la relación derecirculación interna se observan diferentesperiodos con relación 2 y 4.

Temperatura. Se observan valores de 20.5 a 23.5 °C.pH. En el reactor se mantiene en torno a la consigna

sin oscilaciones. En el reactor 2 aparecen valoresen un estrecho margen entre 7.00 y 7.25. En elprimer reactor, se observan valores de pH entre7.00 y 7.25, con oscilaciones por las diferentescondiciones aeróbicas.

Redox. En el reactor 1 se observan valores entre 50y -150 mV, con oscilaciones por el cambio de

condiciones. En el reactor 2 se observan valoresentre 50 y 150 mV. En el reactor 3 se midenvalores entre 100 y 150 mV.

Oxígeno. Las medidas son mayores que lasconsignas en los reactores 2 y 3, ya que elcontrol trabaja en la zona donde las válvulas nocierran totalmente. En el reactor 1 los valores sonmás aceptables.

Aireación. Se observa un consumo de aire muyreducido, incluso en los periodos en los que seairea el reactor 1.

Variables analíticas

NH4+ salida. Se obtienen valores máximos muy

elevados, 16.6 mg/1 sobre las 21:00 horas. Sontan elevados por la escasa nitrificación debido alos bajos sólidos en los reactores.

N03" salida. El máximo es 2.2 mg/1 sobre las 10:00horas. No son muy elevados porque lanitrificación es bastante baja.

N02' salida. Los valores máximos (1.2 mg/1) sepresentan sobre las 15:30 horas.

OUR. El consumo es muy reducido en los tresreactores. El máximo de 0.011 mg O2 / 1 s sealcanza sobre las 13:00 horas en el reactor 1. Enlos reactores 2 y 3 se mantiene valores sobre 0.05mg O2 / 1 s durante todo el periodo. Estosconsumos están producidos por la bajaconcentración de microorganismos en losreactores.

Valoración global

La eliminación de nitrógeno es de 66.0 %, valor muyreducido. La eliminación por unidad de biomasa esde 30.65 mg N / g SSV d, muy elevado porque laconcentración de microorganismos es escasa.También debe considerarse la alta concentración deamonio a la salida, que supera los límites legales. Enconclusión, puede admitirse que la nueva situaciónde la planta no favorece al porcentaje de eliminaciónde nitrógeno, aunque proporcionalmente losresultados sean buenos.

260 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 14: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VAUDACION EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

EXPERIMENTO 25. Validación del efecto delsedimentador

Objetivos

Este experimento es una repetición del anterior, conlas mismas condiciones de entrada y de control.

Condiciones experimentales

En la tabla 5.57 se muestran las condicionesexperimentales de oxígeno, recirculación y entradatotal dé la planta piloto.

Estado óxicoReactor

0123

EstadoAnaeróbico

AnóxicoAeróbicoAeróbico

Consigna ODOmg/1

0 mg/1 / 3 mg/10 mg/1 / 3 mg/11 mg/1 / 3 mg/1

RecirculaciónR. Interna Caudal RI / Caudal Entrada = 1 / 2 / 4R. Externa Caudal RE / Caudal Entrada = 0.5/1

Suma integrada de nitrógeno en la entrada (g/d)N-NH4

+ 7.264N-Norg 5.049N-NCV 0.709N total 13.022

Sólidos en suspensión (8:30 horas)Reactor

O123

SSV(mg/l)1790178017901750

Total sistema 165.1 gramosDSVI 365 mi

Tabla 5.57. Condiciones experimento 25

Incidencias de operación

• Parada por alarma de funcionamiento de lasbombas de 14:05 a 14:22 horas.

• La concentración de microorganismos en losreactores es bastante reducida y tiene uncomportamiento inestable.

• La baja concentración de microorganismo en losreactores, provoca que el consumo de oxígenosea muy reducido, lo que desfavorececontrol.

• El control de pH funciona correctamente.

Analizadores

No aparecen problemas con los analizadoresdurante el experimento.

su

VAUDACION EXPERIMENTAL EN PLANTA PILOTO 261

Page 15: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

i

Cau

dal

1600-

1400-

1200 -

1000 -

800-

600-

400 -

200-

fl-IC

Q entrada; QRecInt

: - •• Q Rec Ext

: Í.... i ; - : • • • : !

i—1 — ' ' ' — ' — ' "" : • • : :

J ^ r ~*— i ^1—^-r~— r~~ L·~' — L~L, — ' — ' i T" ,—

:00 14:00 18:00 22:00 02:00 06:00 10

26

25

24

g 23

ira 22

&1 2 120

19

18

T1T2T3

10:00

Tiempo (horas)

(a) Caudales de entrada, recirculación interna y recirculación externa

14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10: O

(b) Temperatura en los reactores 1, 2 y 3

8.50

8.25-

8.00-

7.75

Í. 7.50 •

7.25 -

7.00-

6.75-

6.50

pH 1• • • • p H 2-— pH3

300

f

200 -

100-

-100-

-200 -

-300 -

-400

Redox 1Redox2Redox3

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(c) Evolución del pH en los reactores 1 , 2 y 3 (d) Evolución del potencial redox en los reactores 1 , 2 y 3

10:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

5 -

4 -

3 -

2 -

1 -

OD1OD2OD3

í Iv-v í II

f :

? N*$y•• • n*-' '

iiiifÀ VMSfe;

piI***'n :

Kífi 41I

lNl

k C-lLj/;:: \iJ 1 / '• *

! r ^"\

10:00 14:00 18:00 22:00 02:00 06:00 10:0

Tiempo (horas)

(e) Actuación sobre las válvulas de aireación de los reactores 1, 2 y 3 (f) Evolución del oxígeno disuelto en los reactores 1, 2 y 3

Fig. 5.45. Evolución de los parámetros del proceso. Experimento 25

262 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 16: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(g) Análisis del nitrógeno amoniacal "on-line" (CFA) de la salida

2 -

• N-NO," FIA

10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(i) Análisis de nitrito "on-line" (FIA) de la salida

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(k) Evolución del nitrógeno amoniacal en la entrada

Fig. 5.45. Evolución de los parárr

Ir* Ao

. N-NCV FIA

10:00 14:00 18:00 22:00 02:00

Tiempo (horas)

06:00 10:00

(h) Análisis de nitrato "on-line" (FIA) de la salida

0.025 -

0.015 -

0.010 -

0.000

• OUR1• OUR 2• OUR 3

" *

10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

Ü) Velocidad de consumo de oxígeno (OUR) en los reactores aeróbicos

10:00 14:00 18:00 22:00 02:00 06:00 10:00

Tiempo (horas)

(I) Evolución de la DQO de entrada de la planta

etros del proceso. Experimento 25

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 263

Page 17: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Resultados

En la tabla 5.58 se muestran los resultados delexperimento 25: nitrógeno no eliminado yporcentajes de eliminación en diferentes unidades.

Suma integrada de nitrógeno en la salida (g/d)N-NH4

+ 2.915N-NO3' 0.331N-NO2' 0.182N total 3.428

Eliminación de nitrógenoEliminación de N (g/d)

% eliminación de N% N-NH4

+ del N total salida% N-NO3- del N total salida% N-NO2" del N total salidamg N eliminado / g SSV d

mg N-NH/ salida / g SSV dmg N-NCV salida / g SSV dmg N-NO2" salida / g SSV d

9.594273.785.09.75.3

58.1217.662.011.10

Tabla 5.58. Resultados experimento 25

Comentarios

Variables "in-line "

Caudales de recirculación. Las relaciones internasutilizadas son 0.5 y 1. En la relación derecirculación interna se observan diferentesperiodos con relación 2 y 4.

Temperatura. Se observan valores de 20.5 a 23.5 °C.pH. En el reactor se mantiene en torno a la consigna

sin oscilaciones. En el reactor 2 aparecen valoresen un margen entre 7.10 y 7.25. En el primerreactor, se observan valores de pH entre 7.00 y7.25, con oscilaciones por las diferentescondiciones aeróbicas.

Redox. En el reactor 1 se observan valores entre 50y -150 mV, con oscilaciones por el cambio decondiciones. En el reactor 2 se observan valoresalrededor de 100 mV. En el reactor 3 se registran

valores alrededor de 150 mV.Oxígeno. Se mantiene por encima de la consigna en

los reactores 2 y 3 durante algunos periodos debaja carga. En el reactor 1 se mantienecorrectamente.

Aireación. Se observa un consumo de aire muyreducido, aunque ligeramente superior al delanterior experimento. El consumo en el primerreactor también es superior al anterior.

Variables analíticas

NH4+ salida. Se obtienen valores máximos muy

elevados, 14.4 mg/1 sobre las 21:00 horas. Sontan elevados por la escasa nitrificación.

NO3" salida. El máximo es 1.7 mg/1 sobre las 8:00horas

NCV salida. Los valores máximos (0.8 mg/1) sepresentan sobre las 12:00 horas.

OUR. El consumo es muy reducido en los tresreactores, aunque ligeramente superior al delanterior experimento. El máximo de 0.015 mg O2

/ 1 s se alcanza sobre las 20:30 horas en el reactor1. En los reactores 2 y 3 se mantiene valoressobre 0.05 mg O2 /1 s durante todo el periodo.

Valoración global

La eliminación de nitrógeno es de 73.7 %, valorreducido pero mejor al anterior. La eliminación porunidad de biomasa es de 58.12 mg N / g SSV d,demasiado elevado y, por tanto, algo sospechosa. Laconcentración de microorganismos varía a lo largodel experimento, debido al mal funcionamiento delsedimentador. Una posible explicación es laacumulación de biomasa en el sedimentador paracaudales bajos de recirculación externa(correspondientes al inicio del experimento) y suposterior recirculación al aumentar la recirculaciónexterna cuando se detecta el aumento de carga en elsistema. También es posible que el nitrógenoorgánico, que normalmente desaparece porcompleto, no se haya hidrolizado totalmente, lo queno estaríamos considerando cuando calculamos elrendimiento.

264 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 18: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

5.2.7 ANÁLISIS DE RESULTADOS

En primer lugar se representan los resultados deeliminación de nitrógeno obtenidos para losexperimentos 1 a 23, realizados con la planta pilotoen las mismas condiciones. Los experimentos 24 y25 son los efectuados con el nuevo sedimentador demenor volumen y se desvían mucho delcomportamiento de los anteriores, por lo que sontratados aparte.

La figura 5.46 muestra los resultados de porcentajede eliminación en los experimentos 1 a 23. Estosvalores permiten la comparación entre losexperimentos, pero no se está considerando lasdiferentes concentraciones de sólidos en losreactores. Esta es una variación importante, que sedebe tener en cuenta para obtener resultadoscoherentes.

En la figura 5.47 se muestran los valores analizadosde sólidos volátiles en los reactores, utilizados para

c•o° R«;cE

^ nI

li

-

'<

r-l

*

-i ',

-

1

r-l

s

i-| r-j

'

|-,

-

"

_- -

p.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

calcular la eliminación de nitrógeno por unidad debiomasa. En la representación de estos datos no hayuna evolución de los sólidos en el tiempo, sino quesólo es indicativo de la variación entre cadaexperimento. Durante el periodo experimental con elsedimentador inicial, se obtienen valores entre 400 y650 gramos de biomasa, pero después del cambio desedimentador (experimentos 24 y 25) la biomasadisminuye en gran medida, provocado por la menorcapacidad de separación del nuevo sedimentador.

En la figura 5.48 se representa la eliminación denitrógeno en miligramos por gramo de SSV en losreactores y día. Este parámetro sí permite lacomparación entre experimentos con diferentescondiciones de sólidos en los reactores.

Por último, se representa en la figura 5.49 los mg denitrógeno en forma de amonio, nitrato o nitrito queaparece en la salida por gramo de SSV y día. Conestos parámetros se obtiene un valor comparativo,entre experimentos con diferente concentración demicroorganismos, de la fracción de cada especie delnitrógeno que no se elimina.

'Yfxí l , l l , l l ,

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3

Experimento

Fig.5.46. Porcentaje de eliminación de nitrógeno

O 5 10 15

Experimento

Fig.5.47. Sólidos volátiles totales en el sistema

30

25

ç/ÍAJ ^Lh- I M ij M l;i M i;i 171 i-i i J i,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 192021 2223

Experimento

Fig.5.48. mg N eliminados / g SSV d

/

•s•z.OÍ

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Experimento

Fig.5.49. mg N en el efluente / g SSV d

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 265

Page 19: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

5.2.7.1 EFECTO DE LA RELACIÓN DERECIRCULACIÓN EXTERNA

En los experimentos 1 y 2 se estudia la respuesta dela planta piloto a la entrada variable en composicióny caudal, comparando la eliminación obtenidautilizando una recirculación extema de caudalconstante Q = 150 ml / min (experimento 1) con laobtenida a una relación de recirculación constanteQRE/QE = 0-5 (experimento 2). El mantenimiento dela relación de recirculación constante debe permitirla recirculación de lodos adecuada para tratar elcaudal de entrada de la planta, lo que favorece elmantenimiento de una adecuada relaciónalimento/microorganismos.

LU

g?

80 -

?n/

r í" '

*- U!

yw-H [

Experimento

Fig. 5.50. Porcentaje de eliminación de nitrógeno

En el primer experimento se observa que, a pesar deser las condiciones con menor control, laeliminación de nitrógeno es cercana al 78 % (figura5.50). Si la entrada fuera constante la eliminaciónhubiera sido superior, pero el aumento de caudal yconcentración del perfil de entrada, provoca que elsistema no sea capaz de transformar todo elnitrógeno de entrada durante el periodo de máxima

carga. Vista en porcentaje, la eliminación essatisfactoria, pero como concentración de nitrógenoa la salida, la eliminación no es adecuada, ya que seobtienen niveles mayores de 12mg/l, lo que nocumple los límites legislados.

I01z

22 -

20-

19 -

18 •

16-

i>í/

' 7 i

^j i:

1 2

Experimento

Fig. 5.51. mg N eliminados / g SSV d

TJ

tn

Experimento

Fig. 5.52. mg N en el efluente / g SSV d

ExperimentoEstado óxico (consigna mg Oa /1)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

1 Anóxico

2 Anóxico

Aeróbico 3

Aeróbico 3

Aeróbico 3

Aeróbico 3

Q=150(ml/min)

0.5

22

Experi ssv ,mento

1 445.22 454.3

N-NH4%(g)

2.1861.532

N-NCVs

(g)

0.5030.410

N-NCVs(g)

0.2040.307

N o/

TOTAL s e]¡mjna Elimina

do (g) ción

2.893 10.129 77.782.249 10.773 82.73

%N-NH4%

75.5768.12

%N-NCVS

17.3918.21

%N-N02-S

7.0413.67

mg N /gSSV d

22.7523.71

N-NH4+

S

4.913.37

mgN-N03-S

/g SSV d

1.130.90

mgN-N02-S

/ jg SSV d

0.460.68

266

Tabla 5.59. Condiciones experimentales y resultados de los experimentos 1 y 2

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 20: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS oe. DIFERENTES ESTRATEGIAS DE CONTROL

En el segundo experimento se introduce la estrategiade control de la relación de recirculación constante,lo que supone una ligera mejora en la eliminación denitrógeno, que se acerca en este caso al 83 %.También se presenta una mejora en los niveles devertido, que disminuyen a 10 mg/1 de nitrógenoamoniacal.

Si se calcula la mejora de eliminación en ñmción delos mg N eliminados por gramo SSV y día (figura5.51), se obtiene una mejora del 4.2 %.

El nitrógeno a la salida, calculado en forma de mgde N que quedan por unidad de biomasa y día(figura 5.52), disminuye en torno al 24 %. Lacomposición del nitrógeno de salida también varía,aumentando el nitrito en detrimento del amonio, loque significa que la nitrificación se ve ligeramentemejorada.

5.2.7.2 EFECTO DE LOS CICLOS ANÓXICOS- AERÓBICOS EN EL REACTOR 1

En los experimentos 3, 4, 5, 6 y 7 se estudia larespuesta del sistema a un cambio cíclico decondiciones aeróbicas y anóxicas en el reactor 1,para comprobar si se puede aprovechar su exceso decapacidad desnitrificadora para nitrificar. En losexperimentos se utiliza diferente relación de tiempoanóxico/aeróbico y diferente duración del ciclo total.En todos ellos se mantiene una consigna de oxígenoen los reactores 2 y 3 de 3 mg/1, una relación derecirculación interna de 2 y una relación derecirculación externa de 0.5.

En la figura 5.53 se representa para estosexperimentos el porcentaje de eliminación de

nitrógeno. En las figuras 5.54 y 5.55 se representa elnitrógeno eliminado y el nitrógeno en el efluente,calculados por unidad de biomasa en el sistema.

1 76LLI

SS 7"

4 5 6

Experimento

Fig. 5.53. Porcentaje de eliminación de nitrógeno

M 21 .01

0 ¿¿

13c oi ,:i(D ->n

z 2(H

O)

n/

/

f

'í;> *•w·"<»! *"

1 "V Ï i

' "5 ,V 1

f**, , '

' -7?;

í ?*< '

V '"v ' 5

f

. ' 'f

'\^

ï-

*j

'•', :

• * '

Kr »:•

Xx

4 5 6

Experimento

Fig. 5.54. mg N eliminados / g SSV d

Experimento

34567

Estado óxicoeactor 1 R

(consigna neactor 2

Anóxico Aeróbico 320'aer-40'anox Aeróbico 330'aer-30'anox Aeróbico 330'aer-60'anox Aeróbico 31 0'aer-20'anox Aeróbico 3

EXpetrÍ SSVT(g)mento °

3 405.74 450.95 502.66 457.07 433.1

N-NH/s(g)

1.7271.1870.6840.8371.261

N-N03-S

(g)

0.7110.5991.1720.9660.998

N-NOjs(g)

0.3860.4960.6340.4680.478

N TOTAL S

(g)

2.8242.2822.4902.2712.737

Neliminado (g)

10.19910.74110.53210.75110.285

g0 2 / l )Reactor 3

Relación de recirculaciónExterna Interna

Aeróbico 3Aeróbico 3Aeróbico 3Aeróbico 3Aeróbico 3

0.50.50.50.50.5

22222

Eliminación

78.3282.4880.8882.5678.98

N-NH/s

61.1752.0327.4536.8746.07

N-N03S

25.1626.2447.0742.5236.46

N-NOis

13.6721.7325.4820.6117.48

mg N /gSSV d

25.1423.8220.9623.5323.75

mgN-NH/s/ g SSV d

4.262.631.361.832.91

mgN-NOjs

g SSV d

1.751.332.332.112.30

mgN-NO2S

g SSV d

0.951.101.261.021.10

Tabla 5.60. Condiciones experimentales y resultados de los experimentos 3 a 7

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 267

Page 21: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Fig. 5.55. mg N en el efluente / g SS V d

El experimento 3 es una repetición de lascondiciones del número 2, pero se realiza para teneruna referencia actualizada para el resto deexperimentos de la serie. En él se observa unaeliminación de nitrógeno del 78.3 %, pero teniendoen cuenta la biomasa del sistema, la eliminaciónsube a 25.1 mg N/ g SSV d. El nivel de vertidomáximo de amonio se mantiene sobre los 10 mg/1.

En el número 4 la eliminación de nitrógeno es del82.5 %, y, considerando eliminación por unidad debiomasa, es de 23.8 mg N/ g SSV d. Es unaeliminación inferior, pero debe considerarse que labiomasa medida en el experimento 3 era inferior a lanormal, por lo que puede producir resultadosdiferentes. Se observa una mejora en los niveles devertido por unidad de biomasa, además de variar sucomposición, ya que la presencia de amonio en lasalida es un 10% inferior. También se observa unadisminución a 8 mg/1 de la concentración máxima deamonio en el efluente. Los resultados de esteexperimento deben considerarse cuidadosamente, yaque durante las últimas horas la planta estuvoparada, y las concentraciones utilizadas durante eseperiodo fueron estimadas siguiendo las tendenciasde otros experimentos.

En el número 5, la eliminación de nitrógeno baja al80.9 %. Considerando eliminación por unidad debiomasa es de 21 mg N/ g SSV d, valor inferior alanterior. Si se observa la composición del nitrógenoen el efluente, se aprecia la disminución del amonio,pero también el aumento del nitrato y del nitrito. Enlas condiciones de este experimento, la nitrifícaciónmejora mucho, pero en detrimento de ladesnitrificación. Como balance global, elrendimiento no es tan satisfactorio. Existe otro factorque también afecta negativamente a la valoración deeste experimento, los problemas de "rising" en elsedimentador. La pobre desnitrificación, debida alexcesivo porcentaje de condiciones aeróbicas en elreactor 1, provoca altos niveles de nitrato en lasalida, lo que induce procesos de desnitrificación en

el sedimentador secundario, con la consiguientepérdida de lodos en el efluente. Este problemadesaconseja la utilización de esta duración de ciclos,por lo que en experimentos posteriores se utiliza unarelación de condiciones anóxicas y aeróbicas 2 a 1.

En el experimento 6 la eliminación de nitrógenoaumenta al 82.6 %, la máxima de esta serie deexperimentos. Considerando eliminación por unidadde biomasa es de 23.5 mg N/ g SSV d, valor superioral anterior. Con esta secuencia, la nitrifícaciónmejora, sin que afecte tanto a la desnitrificación, porlo que el balance global es mejor al anterior. En lafigura 5.55, puede observarse como el nitrógenototal de salida por unidad de biomasa es casi igual aldel número 5, pero la composición varía. En el n° 6el porcentaje de amonio es mayor, porque lanitrifícación no está tan favorecida, pero esto tieneefectos positivos, porque la desnitrificación se vemejorada. Si se compara al experimento 4, se puedeobservar que la eliminación por unidad de biomasatiene un valor muy parecido, y que el nitrógeno totalen el efluente es también muy similar. La diferenciaentre los dos experimentos es la diferente fracciónde cada una de las especies. Puede observarse comoen el n° 6 aparecen 0.8 mg/1 menos de nitrógenoamoniacal, transformados en nitrato. Los niveles denitrato en este experimento no produjeron losproblemas de "rising" que aparecieron en el n° 5, porlo que las condiciones utilizadas parecen las másfavorables de las estudiadas.

Por último, en el experimento 7 la eliminación denitrógeno es del 79.0 %. Considerando eliminaciónpor unidad de biomasa es de 23.75 mg N / g SSV d.Los niveles de nitrógeno en el efluente son losmayores obtenidos aplicando los ciclos de aireación.La duración de los ciclos aeróbicos, 10 minutos, noproporciona tiempo suficiente para que losmicroorganismos mirificantes se adapten a lasnuevas condiciones, pero si tiene un efectoinhibitorio de la desnitrificación, por lo que losresultados no se ven excesivamente mejoradosrespecto al experimento de referencia 3.

En resumen global de esta serie de experimentos, sepuede observar como la secuencia más positiva delas probadas es la que utiliza un ciclo aeróbico de 30minutos seguido de uno anóxico de 60 minutos,correspondiente al experimento 6. Con ella seobtiene una eliminación del 82.6 %, consumiendo25.6 mg N/ g SSV d, y vertiendo alrededor de 5 mgN / g SSV d con una composición del 37 % denitrógeno amoniacal.

Al aplicar esta estrategia de operación, se observacomo aparecen algunos problemas que deben serevitados al implementaria como estrategia decontrol. En primer lugar, debe prevenirse laaparición de cantidades de nitrato excesivas en el

268 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 22: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

efluente, lo que produce problemas de "rising" en elsedimentador, y en consecuencia, pérdidas desólidos e incumplimiento de la legislación en estesentido.

Otro problema es la poca rentabilidad económica demantener los ciclos de aireación las 24 horas. Enhorario de baja carga, es suficiente la configuraciónnormal para tratar la carga introducida, por lo que seestá malgastando energía innecesariamente.

La aireación del primer reactor también provoca unadisminución del consumo de oxígeno en losreactores 2 y 3, lo que produce un funcionamientoincorrecto de su control de oxígeno, aunque éste esun problema resoluble con una mejora del sistemade aireación.

Considerando los hechos anteriores y los resultadosexperimentales, se propone la utilización de estaestrategia de operación, con ciclos de 30 minutosaeróbico y 60 anóxico, cuando aparezcancondiciones de alta carga en el influente.

Variación de pH y redox

Para este conjunto de experimentos se puedeestudiar la diferente respuesta del potencial redox ydel pH durante los ciclos aeróbicos / anóxicos. En lafigura 5.56 se representan los valores que toma elpotencial redox para el periodo de 12:00 a 15:00horas para los 5 experimentos.

100

En la figura puede observarse la disminución delpotencial redox desde que empieza un periodoanóxico. Esta disminución tiene una pendienteinicial aproximadamente igual en los cuatroexperimentos cíclicos. La disminución esinicialmente muy rápida, pero la velocidad devariación va disminuyendo progresivamente. Puedeobservarse que se requiere un tiempo elevado paraalcanzar las condiciones correspondientes a unsistema anóxico como en el experimento sinaireación cíclica. La duración del periodo anóxico enlos experimentos cíclicos es la variable clave paraobtener condiciones anóxicas, con potencial redoxbajo, lo que corresponde a un sistema desnitrificantefuncionando adecuadamente. En este sentido, losexperimentos más adecuados son el n° 4 y el n° 6,correspondientes a secuencias 20'ae-40'an y 30'ae-60'an. En el experimento 5 (30'ae-30'an) se observaque el redox no baja de -75 mV, por lo que no seestá eliminado el nitrato acumulado en el proceso denitrificación. Esto también ocurre en el experimento7, a pesar que la relación anóxico/aeróbico es 2 a 1,el sistema no tiene tiempo suficiente para eliminar eloxígeno aportado en el periodo aeróbico y consumirel nitrato producido, lo que se refleja finalmente enlos resultados de eliminación de nitrógeno.

En la figura 5.57 se representa la variación de redox,pH y oxígeno disuelto durante dos horas para loscuatro experimentos cíclicos.

-30012:00 13:00

Anóxico• Aeróbico 20' - Anóxico 40'• Aeróbico 30' - Anóxico 30'• Aeróbico 30' - Anóxico 60'

Aeróbico 10' -Anóxico 20'

Fig.5.56. Variacióndel potencial redoxpara diferentesciclos de aireación

14:00 15:00

Tiempo (horas)

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 269

Page 23: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

20' aeróbico - 40' anóxico- 10

-61,

10:00 10:20 10:40 11:00 11:20

Tiempo (horas)

30' aeróbico - 60' anóxico

10:20 10:40 11:00 11:20

Tiempo (horas)

12:00

0:00 10:20 10:40 11:00 11:20

Tiempo (horas)

10' aeróbico - 20' anóxico

6

10:40 11:00 11:20

Tiempo (horas)

Fig. 5.57. Variación de pH, redox y oxígeno disuelto durante los ciclos de aireación

En la figura 5.57 puede observarse la relación entrelas medidas de redox y pH con el oxígeno disueltopresente en el reactor en el diferente periodo delciclo. El cambio de condiciones anóxicas a aeróbicassiempre induce un aumento del potencial redox y unaumento del pH. El aumento del redox vieneprovocado por la capacidad oxidante del oxígeno,pero el cambio de pH está provocado por laacumulación y arrastre de CO2 en el medio. Si elcambio de pH fuera provocado mayoritariamentepor la nitrifícación y la desnitrificación, losresultados deberían ser los contrarios. Lanitrifícación en condiciones aeróbicas va.acompañada de una disminución del pH y ladesnitrificación provoca un incremento del pH. Laexplicación a estos cambios puede estar en eldesplazamiento del CO2 presente en el medio. Encondiciones anóxicas, los microorganismos tambiénpueden consumir la materia orgánica hasta laformación de CO2. La acumulación de este CO2

produce la bajada de pH, porque se encuentra enforma de ácido carbónico, H2CO3. Cuando serecuperan las condiciones aeróbicas, el aire

introducido en el sistema produce el arrastre del C02

acumulado, lo que tiene como consecuencia lasubida del pH.Todos los cambios en las medidas de pH están muyinfluenciados por la alcalinidad disponible. Estaalcalinidad proviene del influente de la planta y delcontrol de pH en el tercer reactor, en el que se utilizabicarbonato. Si la alcalinidad es suficiente, loscambios en el pH se ven amortiguados. En los casosestudiados, la variación máxima producida es dealrededor de 0.4 unidades de pH. Estos cambiosmayores se producen cuando la duración del periodoanóxico es más elevada. También se observa que enlas condiciones de los experimentos, los valores depH tienden hacia un valor estable para periodosanóxicos de larga duración.

La variación observada de pH también tieneinfluencia sobre los valores de redox, aunque lamayor variación de este parámetro está provocadapor la concentración de oxígeno presente en elmedio.

270 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 24: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

5.2.7.3 REPRODUCIBILIDAD DE LARESPUESTA

En esta sección se estudia la reproducibilidad de larespuesta de la planta piloto frente a una mismaentrada. En los experimentos 2, 3, 8 y 9 se hanutilizado las mismas estrategias de operación (vertabla 5.61), por lo que teóricamente la respuestadebería ser muy similar. La diferencia en losexperimentos se encuentra en la concentración yestado de los microorganismos en el sistema. Debeconsiderarse que desde la realización delexperimento 2 al 9 transcurre un mes y medio, por loque la población de microorganismos puede habervariado en cantidad y proporción de mirificantes.

En las figuras 5.58, 5.59 y 5.60 se representa elporcentaje de eliminación de nitrógeno, el nitrógenoeliminado y el nitrógeno que queda en el efluentepor unidad de biomasa en el sistema.

"° 23 -

CO 22 •CO ¿¿

-o 20CO

•c 19-.i

Z 17.0,

16 -

I i5/i

; n/i

/

/

' j

' fe

\\*

2

'','

3

V ^

.

8

,

,_ ^

9

Ü

C 7fl

se

/n/I

/

/

\ '

: . <

_.

,,"'

-,

• ' f'. • ' '• * %. • '

_. /,/

Experimento

Fig. 5.58. Porcentaje de eliminación de nitrógeno

"sz

Experimento

Fig. 5.59. mg N eliminados / g SSV d

Experimento

Fig. 5.60. mg N en el efluente / g SSV d

Estado óxico (consigna mg O2 / 1)Experimento n t , n . T i „ . ,r Reactor 1 Reactor 2 | Reactor 3

Experimentó

2389

SSVT(g)

454.3405.7519.8574.0

2389

N-NH/s(g)

1.5321.7270.7021.283

Anóxico

Anóxico

Anóxico

Anóxico

N-N(Vs(g)

0.4100.7110.5880.779

N-NCVs(g)

0.3070.3860.4990.480

Aeróbico 3

Aeróbico 3

Aeróbico 3

Aeróbico 3

NTOTAL s

2.2492.8241.7892.542

Neliminado (g)

10.77310.19911.23310.480

82788680

Relación de recirculaciónExterna Interna

Aeróbico 3

Aeróbico 3

Aeróbico 3

Aeróbico 3

lina

73322648

«Î.-.

68.1261.1739.2250.49

N-N03S

18.2125.1632.8930.63

0.50.50.50.5

N-N02's

13.6713.6727.8918.88

m g N / gSSV d

23.7125.1421.6118.26

2222

mgN-NH/s/ g SSV d

3.374.261.352.24

mgN-N<Vs

g SSV d

0.901.751.131.36

mgN-N02S

g SSV d

0.680.950.960.84

Tabla 5.61. Condiciones experimentales y resultados de los experimentos 2, 3, 8 y 9

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 271

Page 25: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Puede observarse la variabilidad de la respuesta dela planta piloto, independientemente de las unidadesutilizadas en la comparación.

Los resultados del experimento 8 son los que más sedesvían. En este caso, se produjo un problema con elcontrol de pH del reactor 3. Se dosificó un exceso debicarbonato por el funcionamiento incorrecto de lasonda de pH del tercer reactor, lo que provocó unosvalores de pH bastante superiores a los habituales enel resto de reactores. Este hecho puede haberfavorecido a la nitrifícación, lo que explicaría elporcentaje de eliminación del 86, bastante mayor alresto de experimentos. En los resultados por unidadde biomasa, también se observa éste es el mejorexperimento.

En la comparación del resto de experimentos, sedebe tener en cuenta que aparece una importantevariación en la concentración inicial demicroorganismos en los reactores para cadaexperimento, que produce variaciones de 405 a 574gramos totales. Esta importante variación muestralos diferentes estados en los que se encuentra elsedimentador, un parámetro muy importante en elcomportamiento de la planta piloto. Es difícil valorarla concentración de sólidos en el sedimentador sinperturbar el sistema, por lo que no se contabiliza sucontribución en el cómputo de los sólidos volátilesen el sistema. Esto induce un error en los resultadosexperimentales, por lo que la comparación deexperimentos, aún con las mismas condiciones, peroseparados en el tiempo, proporciona resultados nomuy repetitivos.

Otro factor que afecta a la eliminación es latemperatura en los reactores. En los experimentos 2y 8 se mantiene alrededor de 22 °C, mientras que enel 3 y 9 está en torno a 20 °C. Puede observarse queel porcentaje de eliminación se relaciona con los

valores de temperatura: los experimentos 2 y 8 sonlos que muestran una mayor eliminación.

Para evitar la influencia de estos problemas serealiza como primer experimento de cada serie unode referencia con el que comparar correctamente losresultados del resto de experimentos de la serie.

5.2.7.4 EFECTO DE LA CONSIGNA DEOXÍGENO EN LOS REACTORES 2 Y 3

En los experimentos 9, 10 y 11 se estudia lainfluencia de la consigna de oxígeno disuelto en losreactores aeróbicos en la nitrifícación y, enconsecuencia, en la eliminación de nitrógeno. En elexperimento 9 se utilizan 3 mg/1, en el n° 10, 5 mg/1y en el n° 11, 1 mg/1. El resto de condicionesexperimentales se mantiene constante (tabla 5.62).

Para estos experimentos se representa en las figuras5.61, 5.62 y 5.63 el porcentaje de eliminación denitrógeno, el nitrógeno eliminado y el nitrógeno delefluente por unidad de biomasa en el sistema.

82 -

78 -

76-

72 •

?n/

>t '"..»". ..

'

I"

10

Experimento

Fig. 5.61. Porcentaje de eliminación de nitrógeno

ExperimentoEstado óxico (consigna mg O211)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

/

91011

AnóxicoAnóxicoAnóxico

Aeróbico 3Aeróbico 5Aeróbico 1

Aeróbico 3Aeróbico 5Aeróbico 1

0.50.50.5

222

ExperiExpen „. IN-INHmento SSVT(g) (g)

N-NH4+s N-N03-S N-NOj's NTOTALS

N

(g) (g) (g)

o/ mg mg,. . P,. . % % % mg N / g ... ™J + N-N<Vs N-NO/s

e h m m a E h m m a + |v/N-Na,s ; ,do(g) C1Ón / g S S V d gSSVd gSSVd

91011

574.0519.8499.4

1.2831.2261.598

0.7790.9060.394

0.4800.4780.284

2.542 10:480 80.48 50.492.609 10.413 79.96 46.972.277 10.745 82.51 70.20

30.6334.7117.31

18.8818.3212.49

18.2620.0321.52

2.242.363.20

1.361.740.79

0.840.920.57

272

Tabla 5.62. Condiciones experimentales y resultados de los experimentos 9 a 11

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 26: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

•o

ço

I0)z

15/

_/

9 10 11

Experimento

Fig. 5.62. mg N eliminados / g SSV d

Fig. 5.63. mg N en el efluente / g SSV d

En la figura 5.61 se observa un porcentaje deeliminación prácticamente igual para consignas de 3y 5 mg/1 de oxígeno en los reactores aeróbicos. En elexperimento con consigna de 1 mg/1, la eliminaciónes inesperadamente superior. Estos resultados delexperimento 11, son debidos a que la nitrificación nose ve muy favorecida, pero si que se mejora muchola desnitrificación. Estos resultados se observan enla figura 5.63, donde aparece una importantecontribución del amonio al nitrógeno que no seelimina, unido al menor valor de nitrato y nitrito. Enlos perfiles de salida de nitrato y nitrito en elexperimento 11 (figura 5.31) se aprecianconcentraciones muy reducidas de salida, lo quefavorece el porcentaje de eliminación. A pesar de losvalores obtenidos, la nitrificación no es destacable,ya que se obtienen valores máximos de salida deamonio de 8.5 mg/1.

En la figura 5.63 se observa que los niveles denitrógeno en la salida son mejores utilizando laconcentración de oxígeno disuelto de 3 mg/1. Encomparación con el experimento de 5 mg/1, lacantidad de amonio en el efluente es prácticamentela misma, pero la de nitrato y nitrito es menor para 3

mg/1, lo que demuestra los problemasdesnitrificación para el experimento de 5 mg/1.

de

Estos problemas están provocados por entrada deoxígeno en el reactor 1 mediante la recirculacióninterna. Esto se detecta especialmente paraconcentraciones de 5 mg/1 de oxígeno en el reactor3. Este hecho debe tenerse en cuenta al introduciresquemas de operación que aumenten larecirculación interna teniendo concentraciones deoxígeno elevadas en el reactor 3.

En cuanto a la eliminación por unidad de biomasa(figura 5.62), se observa un aumento en cada uno delos experimentos. Esto puede ser debido a losproblemas de acumulación de biomasa en elsedimentador, ya que la biomasa medida en losreactores disminuye un 15 % del experimento 9 al11.

Como resultado global de estos experimentos, seobserva que la nitrificación mejora para un aumentode la consigna de oxígeno en los reactores aeróbicos,aunque a partir de 3 mg/1 no se obtienen mejorasrepresentativas. Por otro lado, la desnitrificación seve favorecida en condiciones de baja concentraciónde oxígeno en los reactores aeróbicos. Con unaconsigna de 1 mg/1, se obtienen resultadosespecialmente favorables, lo que puede estarprovocado por la menor recirculación de oxígenodesde el reactor 3 al reactor 1, así como por laposible nitrifícación y desnitrificación simultánea enlos reactores aeróbicos.

5.2.7.5 EFECTO DE LA RECIRCULACIÓNINTERNA

En los experimentos 12, 13 y 14 se estudia el efectode la recirculación interna en la desnitrificación y, enconsecuencia, en la eliminación global de nitrógeno.El experimento 12 se utiliza como referencia y enlos experimentos 13 y 14 se introduce la estrategiade control que varia la relación de recirculacióninterna en función de la concentración de nitrato másnitrito a la salida. Las condiciones de cadaexperimento se muestran en la tabla 5.63.

En las figuras 5.64, 5.65 y 5.66 se representa elporcentaje de eliminación, la eliminación y elnitrógeno en el efluente por unidad de biomasa enlos reactores.

En los tres experimentos se observa una altavariabilidad en los sólidos totales del sistema, ya queaparecen valores de 530 a 655 gramos de biomasatotal en los reactores. Esto provoca resultados pocoreproducibles en la planta piloto. A pesar de lavariabilidad, puede observarse como el porcentaje deeliminación aumenta del experimento 12 al 13.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 273

Page 27: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO e IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

88 -

86 •

84 •

78 -

76 •

7f\/

^ f

t V 'y v"

12 13

Experimento

Fig. 5.64. Porcentaje de eliminación de nitrógeno

20-

17 •

/

H ,. •

1

Î

,

_/12 13 14

Experimento

Fig. 5.65. mg N eliminados / g. SSV d

Este aumento de eliminación no se observa si secalcula la eliminación por unidad de biomasa (figura5.65), pero el nitrógeno que aparece en el efluente esmenor (figura 5.66), tanto en forma de amonio comonitrato y nitrito.

coD)

S

SI2

ExperimentoFig. 5.66. mg N en el efluente / g SSV d

Para el experimento 14, repetición de lascondiciones del anterior, no se obtienen los mismosresultados. La eliminación de nitrógeno es elevada(84.7 %), aunque inferior a las anteriores. Por unidadde biomasa, la eliminación es de 20.8 mgN/g SSV d,bastante superior a las anteriores. La bajaconcentración de sólidos en los reactores provocaese valor de eliminación por unidad de biomasa.

Los resultados de eliminación obtenidos muestran lavariabilidad de la respuesta de la planta piloto,debido al comportamiento no ideal delsedimentador.

En los perfiles de nitrato y nitrito del efluente(figuras 5.33 y 5.34) si se observa la correctaactuación del control de la recirculación interna enfunción de la concentración de N-NOX en el efluente.Puede observarse como cuando la concentraciónsupera los 2 mg/1, la relación de recirculación internavaría, con lo que se consigue mantener laconcentración de salida de N-NOX en el efluente, alcontrario que en el experimento 12, donde laconcentración de nitrato y nitrito continúa

ExperimentoEstado óxico (consigna mg Ü2 /1)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

121314

AnóxicoAnóxicoAnóxico

Aeróbico 3Aeróbico 3Aeróbico 3

Aeróbico 3Aeróbico 3 ó 1Aeróbico 3 ó 1

0.50.50.5

21 Ó 2 Ó 41 Ó 2 Ó 4

EXP!rÍmentó SSVT (g) (g) (g) (g) (g) ell!.

do (g)Elimina +N-NH, . N-NO3 s N-NO2 s

mgmg mg

N-N03 s N-NO/s

121314

598.2655.7530.3

0.9070.7621.115

0.5940.4790.564

0.3340.3030.312

1.8351.5441.991

11.187 85.9111.478 88.1411.031 84.71

49.4249.3356.00

32.3531.0528.33

18.2319.6115.67

18.7017.5120.80

1.521.162.10

0.990.731.06

0.560.460.59

274

Tabla 5.63. Condiciones experimentales y resultados de los experimentos 12 a 14

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 28: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

aumentando. También se observa como durantealgunos períodos de los experimentos 13 y 14, larelación de recirculación interna toma un valor de 1,ya que la concentración de N-NOX en el efluentedisminuye por debajo del valor límite. Esta relaciónde recirculación permite un ahorro energético enperiodos donde no es necesaria tanta recirculacióninterna.

5.2.7.6 EFECTO DE LA RELACIÓN DERECIRCULACIÓN EXTERNA VARIABLE

En los experimentos 15, 16 y 17 se estudia el efectode la relación de recirculación externa variable en laeliminación de nitrógeno en la planta piloto. En losexperimentos 16 y 17 se incluye un aumento de larecirculación externa en determinados periodos parahacer frente al aumento de carga en la planta.

Este incremento se determina en función de losvalores de OUR en el reactor 2 y de la salida denitrógeno amoniacal. En el n° 17 también semodifica la consigna de oxígeno disuelto en elreactor 3 cuando la relación de recirculación internaes 4. De este modo se evita el aporte excesivo de

experimentales. Una parada de dos horas permite elconsumo casi total del amonio (ver figura 5.36),pero no así de nitrato ni nitrito. Esto puede deberse ala falta de DQO para que los microorganismosheterótrofos puedan desnitrificar, pero globalmentelos resultados son de eliminación casi total.

1JLU

92 •

yn/l

/

%

'" > * ' ^

' '*• ' ' * í

' i

+ i iT1 ,V *• ¿> ,s? * *

' \, »*»W»-rçïw«*| -- | j-**.™ -*»«** «| | -**»*»«,*—** | A

15

Experimento

Fig. 5.67. Porcentaje de eliminación de nitrógeno

oxígeno al reactor anóxico, ya que este es un factorinhibitorio de la desnitrificación.

En las figuras 5.67, 5.68 y 5.69 se representan losvalores de eliminación para los tres experimentos.

Se muestran los resultados del experimento 16,aunque debe considerarse que no son comparables alresto de experimentos, ya que han sido calculadosconsiderando la misma entrada que el resto. Durantedos horas la planta estuvo parada debido a unproblema de operación, por lo que no ha habidoentrada a la planta durante ese periodo. Losresultados de este experimento demuestran que laeliminación obtenible en la planta puede ser casitotal dependiendo de las condiciones

22 -•o

W 2 1 -Wo> 20-o™ 19

'•v

P

/

. »'-«**' "•%>

" , *>K

f f % "i,

' ï -X tCA , WSi*

'v'

f x,

»

» ' ', , r<~. .

*t fl<* " '

' C* ' ' * >>

»• *1'wvr.i'.'::• *•'•

, - - -

"iK"'^

íK^iíV*

; // /^/ !„„...,,., ,, I,»-— w«w»| h-www-"! A

15 16 17

Experimento

Fig. 5.68. mg N eliminados / g SSV d

ExperimentoEstado óxico (consigna mg O2 /1)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

151617

Anóxico

Anóxico

Anóxico

Aeróbico 3

Aeróbico 3

Aeróbico 3

Aeróbico 3 ó 1

Aeróbico 3 ó 1

Aeróbico 3 Ó 1

0.50.5 ó 10.5 ó 1

1 Ó 2 Ó 41 Ó 2 Ó 41 Ó 2 Ó 4

Experimento

151617

SSVT(g)

508.9532.2480.4

N-NH/s(g)

0.6520.1640.902

N-NO3S

(g)

0.6810.6971.065

N-NO2S

(g)

0.2980.2170.401

NTOTAL s(g)

1.6321.0782.368

Neliminado (g)

11.39111.94410.654

%Elimina

ción

87Í791.p281.81

%N-NH/s

39.9715.1838.09

%N-NOjs

41.7664.6544.96

%N-N02S

18.2720.1716.94

mg mgmg N / g ™Jf + N-NO,-S N-N02-S

SSV d , ,"*' / // B S S V d gSSVd gSSVd

22.38 1.28 1.34 0.5922.45 0.31 1.31 0.4122.18 1.88 2.22 0.84

Tabla 5.64. Condiciones exoerimentales v resultados de los experimentos 15 a 17

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 275

Page 29: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

esas condiciones la eliminación ha mejorado.También se obtienen rendimientos de eliminaciónpor unidad de biomasa bastante mejores en losexperimentos 19 y 20.

En cuanto al nitrógeno en el efluente, se observa unacantidad total igual, pero con diferente composición.En los experimentos 19 y 20 la proporción de nitratoy nitrito es superior, lo que indica que lanitrificación está más favorecida, asi como que ladesnitrificación no se ve excesivamente perjudicadacomo consecuencia de los ciclos de aireación en elreactor 1.

En los perfiles de salida (figuras 5.38, 5.39 y 5.40)se puede observar la menor concentración de amonioen el efluente en los experimentos 19 y 20, perounido a un ligero aumento en las concentraciones denitrato y nitrito que se producen oscilatoriamente,coincidiendo con los ciclos de aireación en los que ladesnitrificación no se produce.

Como valoración global, se observa que laeliminación mejora, lo que unido a la optimizaciónde los costes de depuración, puede considerarse unresultado muy positivo.

5.2.7.8 COMPORTAMIENTO DEL SISTEMAANTE DIFERENTES ENTRADAS

En los experimentos 21, 22 y 23 se utilizan todas lasestrategias de control implementadas. En el n° 21 serepite la entrada, pero en el n° 22 y el n° 23 se utilizaotro tipo de entrada, constante. En el n° 22 seintroducen dos caudales diferentes durante dosperiodos, pero la cantidad de nitrógeno adicionadomediante las bombas dosificadoras se mantieneconstante. De este modo se producen dos periodosde diferente caudal pero con igual carga. Loscaudales y la dosificación se han calculado de tal

modo que el caudal total y el nitrógeno totalintroducido durante el experimento es igual al de losexperimentos anteriores. En el n° 23 se simula unacondición de baja carga de nitrógeno y de DQO. Seintroducen dos caudales diferentes durante dosperiodos, pero la cantidad de nitrógeno adicionadomediante las bombas dosificadoras se mantieneconstante. De este modo se producen dos periodosde diferente caudal pero con igual carga.

Los resultados de eliminación se muestran en lasfiguras 5.74, 5.75 y 5.76.

22

Experimento

23

Fig. 5.74. Porcentaje de eliminación de nitrógeno

En el experimento 21 se repite la buena eliminaciónde los experimentos 19 y 20, considerando laconcentración de biomasa. La eliminación denitrógeno es de 86.7 % y por unidad de biomasa esde 26.01 mg N /g SSV d, rendimiento deeliminación elevado. Las concentraciones denitrógeno amoniacal a la salida son ligeramentealtas, pero las de nitrato y nitrito son reducidas, porlo que globalmente la eliminación es correcta.

90 •

84'ü 82 .

* 76-

7n ./

•*

' 1

^ ^

» j•;

1' 1

1

i

ï

1!11(

ExperimentoEstado óxico (consigna mg Ü2 /1)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

212223

Anox Ó 30"aer-60'anox

Anox ó 30'aer-60'anox

Anox ó 30'aer-60'anox

Aer 3 ó Anox 0Aer 3 ó Anox 0Aer 3 ó Anox 0

Aeróbico 3 ó 1Aeróbico 3 ó 1Aeróbico 3 ó 1

0.5 ó 10.5 ó 10.5 01

1 Ó 2 Ó 41 Ó 2 Ó 41 Ó 2 Ó 4

Experimentó

212223

SSVT(g)

434.2418.3427.0

N-NH/s(g)

1.1880.2700.209

N-NO/s(g)

0.2550.3510.397

N-N(Vs(g)

0.2850.2390.144

NTOTAL s(g)

1.7280.8610.751

Neliminado (g)

11.29412.1616.289

%Elimina

ción

86.7393.3989.33

%N-NH/s

68.7431.3927.88

%N-N03-S

14.7540.8052.91

%N-N02-S

16.5127.8119.21

m g N / gSSV d

26.0129.0714.73

mgN-NH4

+S

/ g SSV d

2.740.650.49

mgN-NO/s

/g SSV d

0.590.840.93

mgN-NO2-.

/g SSV d

0.660.570.34

Tabla 5.66. Condiciones experimentales y resultados de los experimentos 21 a 23

278 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 30: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

^ 24

W 22 •O)

o ¿u

•o

•E 16-<u lb

2 14O)E 1?-

/

, * ,

• , *- ,

• ' \*->A.

"

^ _/21 2322

Experimento

Fig. 5.75. mg N eliminados / g SSV d

22 23

Experimento

Fig. 5.76. mg N en el efluente / g SSV d

En el experimento 22 se obtienen los mejoresvalores de eliminación de nitrogeno de todos losexperimentos. El porcentaje de eliminación es del93.4 %, un valor muy elevado. La eliminación porunidad de biomasa es de 29.07 mg N /g SSV d, elmayor rendimiento de eliminación obtenido. Lasconcentraciones de nitrógeno a la salida también sonmuy reducidas (ver figura 5.42), por lo que la cargavertida por el efluente es también mínima (figura5.76). Teniendo en cuenta que la carga total es iguala la de anteriores experimentos, los resultadosdemuestran la importancia de la adecuadadistribución durante todo el periodo para obtenereliminaciones casi totales. Estos resultados hacenpensar que la disponibilidad de un depósito dehomogeneización sería una mejora muy importantepara el proceso. Esta es una opción posible paracaudales reducidos, pero no es una opcióndemasiado económica para una planta de tratamientode aguas residuales urbanas de tamaño medio.

También debe considerarse que la eliminaciónpodría haber sido aún superior, manteniendo durantelas 24 horas condiciones aeróbicas en los reactores 2y 3, y una relación de recirculación máxima. Estas

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

condiciones hubieran proporcionado unaeliminación superior, pero el coste económicohubiera sido mucho mayor.

Otra consideración que debe realizarse es que lasestrategias de control desarrolladas para un tipo deentrada como la de los experimentos anteriorespuede no ser adecuada para otro tipo de condicionesde entrada. Por ejemplo, en el experimento 22 sepasa de mantener condiciones anóxicas en el reactor2 a una hora después tener que establecercondiciones aeróbicas para ese reactor y realizarsecuencias de aireación en el reactor 1. En este caso,se deberían haber mantenido condiciones aeróbicasen el reactor 2, con lo que no se habría producido elaumento de la concentración de amonio en elefluente. Estos problemas también son consecuenciade las medidas disponibles de amonio, nitrato ynitrito son únicamente en el efluente. Si se hubieradispuesto de la medida de la entrada podría haberseimplementado alguna estrategia de controlcomplementaria.

En el último experimentos la eliminación denitrógeno es del 89.3 %. Se podría obtener unaeliminación superior, pero los cambios de modo deoperación están regulados por los mismos niveles enel efluente que en anteriores experimentos.Cambiando esos valores en el sistema experto, elporcentaje de eliminación podría ser muy mejorado.La eliminación por unidad de biomasa es de 14.73mg N /g SSV d, muy reducida porque la carga esmuy pequeña. Las concentraciones de nitrógeno a lasalida también son mínimas (ver figura 5.43). Eneste experimento se demuestra prácticamente que esposible obtener buenos resultados de eliminaciónutilizando los recursos necesarios, sin desperdiciarenergía de aireación o recirculación cuando laeliminación deseada no lo requiere.

5.2.7.9 EFECTO DEL SEDIMENTADOR

En los experimentos 24 y 25 se prueba la respuestadel sistema con el nuevo sedimentador de 25 litrosde volumen, en contraste con los 60 litros delanterior. La entrada es el mismo perfil dealimentación utilizado en casi todos losexperimentos, mientras que las condicionesutilizadas son las de máximo control (tabla 5.67). Larespuesta se modifica notablemente, comoconsecuencia del diferente comportamiento desedimentador.

En las figuras 5.77, 5.78 y 5.79 se representa elporcentaje de eliminación, la eliminación y elnitrógeno en el efluente por unidad de biomasa enlos reactores.

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO 279

Page 31: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACTON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

85 -

% E

limin

aci

ón

50)

--J

~-

J (

in

o

en

c

/

,

>

24 25

Experimento

Fig. 5.74. Porcentaje de eliminación de nitrógeno

55-

50-

40-

35-

30-

25 •

in / •\,.f

%. r

/„» „, -X

24

Experimento

25

Fig. 5.75. mg N eliminados / g SSV d

En el experimento 24 la eliminación de nitrógeno esde 66.0 %, valor muy reducido. La eliminación porunidad de biomasa es de 30.65 mg N /g SSV d, muyelevada porque la concentración demicroorganismos es escasa. También debeconsiderarse la alta concentración de amonio a la

salida, que supera los límites legales (figura 5.64).En conclusión, puede admitirse que la nuevasituación de la planta no favorece al porcentaje deeliminación de nitrógeno, aunque proporcionalmentelos resultados sean buenos.

Fig. 5.76. mg N en el efluente / g SSV d

En el experimento 25 la eliminación de nitrógeno esde 73.7 %, valor reducido pero mejor al anterior. Laeliminación por unidad de biomasa es de 58.12 mgN /g SSV d, demasiado elevado comparado con elresto de experimentos. La concentración demicroorganismos puede haber variado a lo largo delexperimento, debido al mal funcionamiento delsedimentador. Una posible explicación es laacumulación de biomasa en el sedimentador paracaudales bajos de recirculación externa(correspondientes al inicio del experimento) y suposterior recirculación al aumentar la recirculaciónexterna cuando se detecta el aumento de carga en elsistema. También es posible que el nitrógenoorgánico, que normalmente desaparece porcompleto, no se haya hidrolizado totalmente, lo queno estaríamos considerando cuando calculamos elrendimiento.

ExperimentoEstado óxico (consigna mg 02 /1)

Reactor 1 Reactor 2 Reactor 3Relación de recirculación

Externa Interna

21 Anox Ó 30'aer-60'anox Aer 3 Ó Anox O Aeróbico 3 ó 1 0.5 01 1 Ó 2 Ó 4

24

25

Anox ó 30'aer-6G"anox

Anox ó 30'aer-60'anox

Aer 3 ó Anox 0

Aer 3 ó Anox 0

Aeróbico 3 Ó 1

Aeróbico 3 ó 1

0.5 ó 1

0.5 0 1

1 Ó 2 Ó 4

1 Ó 2 Ó 4

Experimentó

N-NOj's N-NO:'s NTOTAL s(g) (g) (g)

N % ma°/ °/ *y mo N / o **

ÏST Ecía "W. N-NÔ3-S N-N02-S Slvd8™^

mg

1

mgN-N02S

g SSV d g SSV d

212425

434.2280.5165.1

1.1883.7132.915

0.2550.4200.331

0.2850.2900.182

1.728 11.294 86.734.424 8.598 66.033.428 9.594 73.68

68.7483.9485.04

14.759.509.66

16.516.565.30

26.0130.6558.12

2.7413.2417.66

0.591.502.01

0.661.031.10

280

Tabla 5.67. Condiciones experimentales y resultados de los experimentos 21, 24 y 25

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 32: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO. ANÁLISIS DE DIFERENTES ESTRATEGIAS DE CONTROL

JLU

5.2.7.10 MEJORA GLOBAL OBTENIDAMEDIANTE EL SISTEMA DE CONTROL

En esta1 sección se compara el efecto global que tienela implementación de todas las estrategias de controlestudiadas. Para ello se comparan los resultados delos experimentos 1 y 20 (tabla 5.68), ambos con elmismo influente pero con diferente grado de control.En el primero se utiliza el mínimo número deestrategias probadas y en el experimento 20 seutilizan todas las estrategias estudiadas.

En la figura 5.77 se observa el porcentaje deeliminación global de nitrógeno. Se obtiene unamejora en la eliminación del 10.5 %.

100

95

90 •

85-

80

75-

¿- _1_ /

1 20

Experimento

Fig. 5.77. Porcentaje de eliminación de nitrógeno

En la figura 5.78 se representa la eliminación denitrógeno por unidad de biomasa y día, que en estecaso supone una mejora de 3.7 mg N / g SSV d, loque representa un porcentaje del 16.3 %.

Por último se representa el nitrogeno, en las diversasformas en que aparece en el efluente (figura 5.79).En este caso, 'se reduce un 46 % la salida denitrógeno.

D)

o 20 J

S> IR _

0) 1B

z 14O)E 12

m/

, ' ">-.!

'

, , ,„

•ffi•z.

1 20

Experimento

Fig. 5.78. mg N eliminados / g SSV d

Experimento

Fig. 5.79. mg N en el efluente / g SSV d

„ . Estado óxico (consigna rExperimento „ . . n , 0r Reactor 1 Reactor 2

1 Anóxico20 Anox ó 30'aer-60'anox

Aeróbico 3Aer 3 ó Anox 0

igOz/1)Reactor 3

Aeróbico 3Aeróbico 3 ó 1

Relación de recirculaciónExterna Interna

Q=150(ml/min)0.5 ó 1

21 Ó 2 Ó 4

(g) (g) (g) (g) do (g) N-NH4 , N-NO, , N-NO, s SSV d+ N-N03-SN-N02-S

1 445.2 2.186 0.503 0.204 2.893 10.129 77.78 75.57 17.39 7.04 22.75 4.91 1.13 0.4620 434.6 0.893 0.321 0.310 1.524 11.499 88.30 58.61 21.07 20.32 26.46 2.05 0.74 0.71

Tabla 5.68. Condiciones experimentales y resultados de los experimentos 1 y 20

VAÜDACIÓN EXPERIMENTAL EN PLANTA PILOTO 281

Page 33: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Como puede observarse en los resultados deeliminación, las estrategias de control tienen unefecto global muy positivo. Aparte de esta lecturasuperficial, debe considerarse que la mejora obtenidase ha realizado con el mínimo coste energéticoposible, optimizando el funcionamiento de la plantamediante las reglas de operación implementadas entiempo real. Además de esta mejora global, si seobservan los perfiles de las diferentes formas denitrógeno a la salida de la planta (figuras 5.21 y5.40), se observa la menor concentración denitrógeno amoniacal en el experimento 20 (menor a6 mg/1) respecto al experimento 1 (superior a 12mg/1), lo que puede ser un factor de vitalimportancia para cumplir los límites legislados(apartado 1.1).

5.2.7.11 ELIMINACIÓN DE FÓSFORO

Respecto a la eliminación de fósforo por la plantapiloto, ésta ha sido bastante constante, se ha vistopoco influenciada por las distintas estrategias decontrol utilizadas.

En general, los valores de P-PO43" de la entrada en

forma de perfil (con una concentración variableentre 3 y 8 mg/1), han sido eliminados, obteniéndoseresultados inferiores a 2 mg/1.

El único proceso que puede afectar a la eliminaciónde fósforo, con la configuración de operación de laplanta piloto, sería la entrada de nitrato en el reactoranaeróbico. Este problema de operación sólo puedeocurrir cuando no se está desnitrificandocorrectamente, como en el problema de falta deDQO del experimento 17, pero sólo afectaría si elproblema es de larga duración.

En los experimentos realizados, sólo se producenconcentraciones de fosfato elevadas cuando existenproblemas con los lodos del sedimentador. Los lodospueden retener fosfato adherido a los floculo, que encaso de ser removidos se desprende, produciendovalores elevados de fosfato en el efluente de laplanta, tal como se puede observar en algunosexperimentos.

282 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 34: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg
Page 35: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

iMPLEMENTAaÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS

6 IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL.EDAR GRANOLLERS

Además de la implementation del SE en la plantapiloto del "Departament d 'Enginyeria Química de laUniversitat Autònoma de Barcelona" se estàimplementando otro prototipo, en colaboración conel "Laboratori d'Enginyeria Química i Ambiental dela Universitat de Girona". En este prototipo seutilizan las mismas técnicas descritas en eldesarrollo del SE de la planta piloto, pero eldesarrollo se realiza utilizado la versión 5.0 de G2[Gensym 1997].

Este prototipo se ha implementado en una plantareal, la EDAR de Granollers, que vierte en el caucedel río Besos. Esta planta dispone de pretratamiento,

tratamiento primario y tratamiento secundario,utilizando un proceso de lodos activos para eliminarmateria orgánica y sólidos en suspensión en el aguaresidual producida por cerca de 130.000 habitantesequivalentes. Actualmente se está empezando aimplementar la eliminación de nitrógeno. Elesquema del tratamiento de aguas residuales semuestra en la figura 6.1.

En la planta se realiza una exhaustivacaracterización del influente, proveniente de vertidosurbanos e industriales, incluyendo datos cualitativosy cuantitativos. Los datos cuantitativos sonproporcionados por sensores "on-line"

Data Plant Diagrams Graphics Tools Workspaces

Sludgeanaerobic L,-Jdigestion f" Ei

Fig. 6.1. Esquema de tratamiento de la EDAR de Granollers

IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS 283

Page 36: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

<f- Data Plant Diagrams Graphics Tools Workspaces Help

Besos

Fig. 6.2. Variables analíticas del proceso

(principalmente caudales, pH, conductividad yoxígeno disuelto) y por determinaciones analíticasde muestras tomadas diariamente en la planta (DQO,nutrientes, aceites y biomasa). También se calculanparámetros globales como el tiempo de residenciacelular, SVI o F/M. Los datos cualitativos, medidoscon una frecuencia inferior, incluyen observacionesmicroscópicas de la biomasa (características delfloculo, identificación y contaje de microfauna ybacterias filamentosas) y observaciones del procesopor los operadores, como la presencia y color deespuma y lodo, o la apariencia del sobrenadante delsedimentador y del efluente. En la figura 6.2 sepueden observar las tablas de atributos del reactor ydel sedimentador, con las variables analíticasanteriormente comentadas.

En este caso, el sistema desarrollado se utiliza, enuna primera fase, para la monitorización, ladetección de problemas de funcionamiento y paradar sugerencias de operación a los operadores. Sesugieren acciones de control pero no se realizanautomáticamente. El esquema de supervisiónimplementado se muestra en la figura 6.3.

Fig. 6.3. Esquema supervisor implementado

284 IMPLEMENTACIÓN Y VAUDACIÓN EN PLANTA REAL. EDAR GRANOLLERS

Page 37: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

IMPLEMENTAQÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS. SISTEMA DE ADQUISICIÓN DE DATOS

6.1 SISTEMA DE ADQUISICIÓNDE DATOS

Se ha desarrollado un sistema de adquisición dedatos para el SE. La información generada por lossensores y el estado de todos los equiposdistribuidos en la EDAR es monitorizado por unared de PLCs. Estos PLCs están conectados a un PLCprincipal mediante un bus de comunicaciones decampo. El PLC principal está a su vez conectado alordenador del SE mediante una interfaz RS-232-C(figura 6.4). En el ordenador un programa servidorde datos está a cargo de la comunicación con el PLCprincipal vía RS-232 utilizando un conjunto demensajes predefinidos.

El servidor de datos (figura 6.5) está construidoutilizando G2-GATEWAY, una herramienta paradesarrollar sistemas de adquisición externos para G2[Gensym 1997]. Éste es el nombre de la herramientaequivalente a GSI que se utiliza en la versión 5.0 deG2.

Inicio programa

Inicialización de variables

Inicialización COM2

Creación de tarea pararecepción de datos COM2

EDAR GRANOLLERS

Fig. 6.4. Sistema de adquisición de datos de la

Espera de datos COM2

Inicialización sistema GSI Recepción de datos COM2

Espera inicio conexiónTCP/IP con G2 Tratamiento de

recibidosdatos

Registro variables G2

Espera petición dedatos de G2

Respuesta a petición dedatos de G2

Escritura de datos enmemoria común

Fig. 6.5. Esquema defuncionamiento delservidor de datos

IMPLEMENT/•ACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS 285

Page 38: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

EDAR de Granollers El servidor, desarrollado enMicrosoft Visual C++, es capaz de recibir unapetición de datos desde G2 en cualquier momento yresponder inmediatamente. Esta comunicación seestablece vía TCP/IP. Esta arquitectura permite tenerdiferentes servidores de datos en cualquierordenador conectado vía TCP/IP con el ordenadorque ejecuta G2. En nuestro caso el servidor de datosy G2 se ejecutan en el mismo ordenador.

El funcionamiento del servidor se esquematiza en lafigura 6.5. En primer lugar, el programa inicializalas variables del programa y el puerto decomunicaciones. Después de la inicialización, elprograma crea una subproceso ("thread") que seencarga de la recepción de datos desde el PLCprincipal. Este PLC está configurado para adquirirlas señales de todos los PLCs distribuidos, yposteriormente codificar esta información y enviarlamediante la salida RS-232 de que dispone.

La información enviada por el PLC es recibida en elpuerto serie del PC. En la configuración utilizada esel PLC quien inicia la comunicación cada ciertotiempo prefijado. El PC siempre está a la espera delos datos enviados por el PLC, de aquí la necesidadde disponer de un proceso dedicado únicamente a

ello. Una vez recibidos los datos, éstos sondescodifícados y posteriormente introducidos en lamemoria común del programa, lo que los hacedisponibles al servidor que trata las peticiones deG2. El subproceso, una vez realizado el tratamientode datos, vuelve a situarse en espera de nuevosdatos, repitiendo el procedimiento cada vez que sereciben datos.

El proceso principal inicializa el sistema GSI y sesitúa en espera de una petición de conexión por partede G2. Cuando esto sucede, G2 envía las órdenesnecesarias para el registro de las variables utilizadasen la base de conocimiento. Una vez registradas, G2puede realizar una petición de datos en cualquiermomento. El programa se mantiene siempre en elpunto de espera de petición de datos, hasta lapetición de desconexión desde G2.

En cuanto a las variables "off-line" analíticas, éstaspueden ser introducidas manualmente desde el SE oleídas a partir de ficheros de datos generados por elservicio de análisis de la EDAR.

En la figura 6.6 se muestra una pantalla de ejemplode la monitorización gráfica de los valores "on-line"adquiridos.

'i? Data Plant Diagrams Graphics Tools Workspaces

18977 7:21:45 p.m. El valor mitjà del tempsde residència hidràulic de les dues darrereshores (6.589 d) és menor que el valor dedisseny (7.1 d). Això pot portar problemes desobrecàrrega hidràulica

TñACTMENt •feíOLOGIÒ Entrep Bològic- sortida'BilgicPERFIL Vtíon InttanteniB (codais eegont)

Fig. 6.6. Pantalla de monitorización de valores "on-line" de la EDAR de Granollers

286 IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS

Page 39: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

6.2 SISTEMA EXPERTO

Para la construcción de SE, se ha extraídoconocimiento general y específico de la EDAR apartir de una exhaustiva búsqueda bibliográfica,entrevistas con los responsables y los operadores dela planta y de una clasificación automática de la basede datos histórica. Esta información ha sido reunida,estructurada y sintetizada en un conjunto de árbolesde decisión lógica para la diagnosis y la actuación.

Una vez validado por los expertos del proceso, ennuestro caso el director de la planta, estos árboleslógicos fueron codificados mediante un conjunto dereglas heurísticas que conforman la base deconocimiento del SE en tiempo real.

IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS. SISTEMA EXPERTO

Utilizando como base los módulos desarrollados enla aplicación de la planta piloto, se ha implementadoun nuevo sistema que contiene las característicasespecíficas (proceso y conocimiento) de la EDAR deGranollers.

La base de conocimiento cubre los problemas deoperación para la sedimentación primaria y para eltratamiento secundario, incluyendo problemas nobiológicos (días de lluvia, tormentas, problemasmecánicos y eléctricos, sobrecarga, baja carga,problemas de aireación y caudales no compensados)y problemas con origen biológico ("bulking","foaming", "rising", "pinpoint", "bulking" viscoso ycrecimiento disperso).

En la figura 6.7 se presenta una pantalla donde sepueden observar los módulos principalesdesarrollados en el sistema supervisor.

Data Plant Diagrams Graphics Tools Workspaces Help

KNOWLEDGE BASE T'OP LEVEL MODULE |

1 DSS ON-LINE I 2 DSS,SUPERVISORY CYCLE OFF-LINE

1 Sistema supervisor on-line Monlloratge, diagnosi del prooés on-^line I detecció fallés d'equipament (alarmes I aotuaolons ràpides) *f

- Regles amb 00. Cabals, nivells, pH I senyals digitals (alarmesI aotuaolons rapides)- Totes funolonaran en temps real perd amb valors mitjans de30"- Historio d'una setmana per guardar les mitjanes diàries I 'gradear tendènoles horàries, diàries I setmanals <- Amb l'OD I les seves velocitats, sistema de control avanoat("fuzzy") de l'OD que ens permetrà saber a oada Instant f

s

quina seria l'aotuaoló a realitzar per mantenir el setpolnt ï(tenim un registre d'hores de,funcionament de les soplants ?)Llavors, mitjançant simulació amb un model de l'OD, es podria

* comparar amb el comportament real < y * '

2 Clde*supervisor de l'cperaoló (off-line) Diagnosi de l'estat de la'planta (tendència del procès) mltjanjartt SE I SBC I propostes >d'altuaoli 'V "*>f^ ¿

• S'activarà un cop al día o a petiole de l'usuaíl' , "- Històric d'una setmana per guardar lés mitjanes diàries (nouCAS) I graflcar tendències horàries, diàries i setmanals

Treballarà amb variables de tendència per Identificar unproblema abans que no s'en doni "un episodi greu

aDSS-SUPBWISOR.CYO.E

1. DSS ONLINE

[v], DISSOLVED OXYGEN RULES

> LOADING RATES RULES ;

H j FAULT"DETECTION RULE£ ¡

H PoN LINE REGISTER !

2. DSS SUPERVISOR CYCLE (Process trend diagnosis) [ (S]|

Hj SUPERVISORY CYCLE START AND FINAL J

[3 | EXPERT SYSTEM (BASED ON.RULES REASONING)

U]' CASE BASED REASONING SYSTEM t

[U ' SUPERVISION MODULE '

H í ACTUATION MODULE ê

21 Sistema Expert * * , " -¿*- Regies amb dades analítiques, mloroblológiques l^valors >

mitjans dels sensors de dos dies abans- Diagnosi seqüencial de cadascun dels possibles problemes

"* d'operació ' » ( >, fc,*"<''..

3 2 Sistema Raonament Basat en Cagoçy '

JBStart| ^Shortcutto GsigraZ ' Jll·leT , -J.AnalsgX U Windows NT Task 857PM ii

Fig. 6.7. Pantalla con los módulos principales de supervisión del sistema

IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS 287

Page 40: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

6.3 APLICACIÓN

Para observar el funcionamiento del SE, acontinuación se muestra su actuación frente a uncaso especifico, cuyas características aparecen en latabla 6.1.

El SE puede inferir la situación del EDAR siguiendodiferentes caminos de los arboles de decisión lógicaque constituyen su base de conocimiento. En el casoestudiado, la diagnosis sigue los caminos basados enlos valores de algunas variables numéricasrelacionadas con el estado global del proceso (bajarelación F/M y alto 0C) y en información cualitativa(referida a la abundante presencia de espumas en lasuperfície del bioreactor, la proliferación de lasbacterias filamentosas y en unos flóculosligeramente dispersos). Tal como se muestra en lafigura 6.8, el SE activa una alarma intermediaseñalando el riesgo de la proliferación de losmicroorganismos filamentosos.

Influente 1 8532 nrVd"On-line" Conductividadlnfluente: 3150 |iS/cm_ Caudal de purga: 926 m3/d _

Analítica

Parámetrosglobales

Microscopio

e: 864 mg/1uente: 84 mg/1

DQOPrimario: 543 mg/1DQOEnUente: 128 mg/1AmonioEfiuenie: 58 mg/1NitratoEflUcnte: 1 mg/1Biomasa: 1423 mg/16C: 9.6 daysF/M: 0.22 Kg/Kg-dSVI: 117 ml/gApariencia floculo: ligeramentedispersoBiodiversidad: 6Especie predominante: ciliadosadheridosFilamentosas: abundanteFilamentosa predominante: NocardiaNocardia: abundante

Observaciones Espuma bioreactor: abundanteTurbidez sobrenadante: no

Tabla 6.1. Datos relevantes para el caso estudiado

COD, BOI). TSS at K f f l u c n t \'}(í SRTF:M ratio

MLSSFloe Outf low

appearance appearanceFilamentous Presence foam on aeration

Presence tank or clarifier

^x/High Low Slighly_dispersej l Pooi- Abundant \Cc Absenc

A L A R M FBP = FALSE ALARM FILAMENTOUS BACTERIA PROLIFERATION = TRUE ALARM_FBP = FALSE

Invoke a set of rule

V30 increasing ?

VicBiomass

¡nctvasiim?

Microbiologieobservations

Floe structure ?I

Slightly disperse

Aeration TankFoam presence

Thick, scummy, darkbrown on aeration lank

surface

Greasy, dark tan foam thatScum entering is strong and carries over toaeration tanks

\

Check trends foriomass or SRTincreasing or

F:M decreasing _., ,3 Oil and greases intoy secondary influen

Aeration tank is criticallyunderloaded (F/M too low'due io improper wasting

program

Dark brown, almostblackish sudsy foam on

aeration lank surf nee.Mixed liquor is very dark,

clarifier y almost blackI Stiff, white, I

billowing, or sudsyfoam on aeration j

tank surface X

Other problem!

FILAMENTOUS ORGANISMS PROLIFERATE(Increase Wasteflow^)

(.Filamentous type and cause identification^)

Fig. 6.8. Árbol de decisión para la prolifereación de bacterias filamentosas

288 IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS

Page 41: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

En contraste, otras posibles condiciones querequieren variables cuantitativas o cualitativasrelacionadas con la calidad del agua del influente ydel efluente no infieren en ningún camino dediagnosis (por ejemplo valores normales de otrosparámetros analíticos como SST, DQO, DBO, V30 oapariencia del efluente). Cuando esta alarmaintermedia es activada, el motor de inferencia del SEinvoca diferentes rutas de diagnosis a través de lasmetareglas para inferir la situación (caminos ennegrita en la figura 6.8), mientras que otras reglas noson invocadas (caminos en gris en la figura). Cuandola situación es identificada como proliferación deorganismos filamentosos, el SE activa un conjuntosimilar de reglas, correspondientes a laidentificación de filamentosas.

Con la información detallada en la tabla 6.1 el SEdetecta una presencia abundante de Nocardia y unanormal de Microthrix Parvicella, infiriendo lasituación de "foaming" causada por estas bacteriasfilamentosas. Entonces, el motor de inferencia de SEllama a las reglas que deben determinar las causas dela proliferación de estos microorganismos. Esimportante remarcar que el SE esta todavíautilizando la misma información recogida

IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS. APLICACIÓN

rutinariamente en la planta, con la mínimainformación adicional requerida al usuario a travésde la interfaz del SE.

Si se determina la causa correcta, se recomienda unaactuación específica. Si la causa no essatisfactoriamente determinada, se recomienda unaacción no específica.

Centrándose en el caso de estudio, el sistema escapaz de deducir las causas del "foaming" (edad dellodo elevada, o un rápido descenso en la relaciónF/M) y entonces, puede activar las reglas deactuación específicas correspondientes.

Supervisión y predicción del proceso

La integración de las diferentes informaciones ysoluciones proporcionadas por el SE se realizamediante el módulo supervisor. Este módulo estárealizado mediante un conjunto de reglas que debeprocesar la información recibida de diferentessubmódulos evaluando los posibles conflictos.Además, el módulo supervisor sugiere un plan deactuación resultado de integrar las recomendacionesde los diferentes submódulos.

Data Plant Diagrams Graphics Tools Workspaces Help

Causes and Actuations associated to Filaments BULKING ACTUATION

eULKING-ACTUATIONS

LABERIIMT-GRANOLLERS-FILAMENTOUS-KNOWN-

There is low F:M ratio (321) at the AS-REACTOR (high SRT).(p.e. gradient DB05 soluble Insuficient en RCTA).;F M Baixa (causa poo definida) S ha constatat que q Lan hf ha un gradient de oorío de substrat soluble en el reactor el rang té una

IVF Inferior Quan no h! ha graden! o la concentració de substrat és baixa els organismes filamentosos poden orébcer a velooltatsuperior ais formadors de floouls probablement perqué I estructura deis filamentosos presenten major superficie a través de la qualpoden adsorbir I difondre el susbtrat (fonament del selector) El selector pot serlque no funolonl si la capacitat d acumulado desubstrat (AC) dels organismes lormadors de floout esta saturada (donos llavors no tentent capacitat per acumular I consumirsubstrat per tant I eliminació de substrat és més baixa I per tant la seva taxa de [crelxemetn és molt menor de manera que potarribar a ser del mateix ordre que la dels filamentosos Per això per aconseguir ¡.esgotament de la AC dels org no fllamentosoos Ipromoure el seu orelxment és útil la realreacló del fang de retorn En els sistemes d eliminació en discontinu (batch) hi ha unaevident manca del fenomend el bulking és una conseqüència de que en aquests la configuració és pràcticament la d un flux pistóIdeal (P e per composició de I aigua rica en HC de baix PM La presencia de Ifplds de oadena llarga també afavoreixen el seucreixement Estressos mecànics com ara presenciado bombes centrífugues poden conduir ala ruptura de cèl·lules microbianes Ia I alliberament de Ifplds de les membranes que oden fer proliferar aquests microorganismes filamentosos)

Es recomanable una actuació de les següents; segons causa <.Us de selectors, si és possible.Canviar a oonflg. FP per millorar decantabllltat del fang, st és possible.Comparttnentaljtzar taño aireado.ReatreaoIÓ fang retorn'.Operació discontínua (batch).Augmentar F:M.Disminuir alreaoló

Usejmd design of Selectors j

RS::FILAMENTOUS-UNKOWN-

I-ACTUATIONS-ASSOCIATED-rs

SES-AND-ACTUATIONS

IT-DEFICIENCY-CAUSES-AND-

AUSES-AND-ACTUATIONS

^-CAUSES-AND-ACTUATIOM!

ES-AND-ACTUATIONS

| ÜJG2 ' .IjAnalogX " Windows NT Task

Fig. 6.9. Diagnostico de un situación de proliferación de filamentos por baja carga

IMPLEMENTACIÓN Y VALIDACIÓN EN PLANTA REAL. EDAR GRANOLLERS 289

Page 42: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

En el caso de estudiosiguiente (figura 6.9):

la situación inferida es la

• "Foaming" causado por Nocardia: laproliferación de bacterias filamentosas, comoNocardia y Microthrix Parvicella, induce laaparición de espumas de origen biológico en lasuperficie del reactor que se puede extender alsedimentador secundario y en algunas ocasionespuede provocar pérdida de biomasa nointencionada, reduciendo su concentración ycausando sobrecarga en el bioreactor.

La solución propuesta es la siguiente estrategia deactuación:

• Incrementar el caudal de purga alrededor del10 % cada día hasta que el proceso se acerca alos parámetros de control normales.

Eliminar la espuma físicamente de los reactoresy del sedimentador.

Comprobar las tendencias de la población deNocardia cada dia.

Si el "foaming" persiste considerar la utilizacióndel efecto selector y la adición de cloro en larecirculación de lodos. Mandar un mensaje a losoperadores recomendando como eliminarfísicamente espumas y como añadir cloro(dosis, localización y prueba).

290 IMPLEMENTACION Y VAUDACIÓN EN PLANTA REAL. EDAR GRANOLLERS

Page 43: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

7TOí4CLUSÍ<3ÑES

Page 44: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

CONCLUSIONES

7 CONCLUSIONES

Como resultados de esta tesis se han desarrollado yoptimizado un conjunto de metodologías que hanpermitido la construcción de un sistema de controlsupervisor para la gestión y control de EstacionesDepuradoras de Aguas Residuales.

El presente trabajo se inicia en el verano de 1993,cuando se implementa un sistema de adquisición dedatos a una planta EDAR real con toda suinstrumentación de tipo analógica distribuida por laplanta.

Al intentar realizar aplicaciones de control "experto"y prédictive en tiempo real se encontró laproblemática de las EDAR. Estas plantas tienen queverter el efluente a un cauce natural, por lo que no sepueden probar estrategias de operación o control queno garanticen el cumplimiento de la legislación.

Para poder demostrar la aplicabilidad de este tipo detécnicas, así como incrementar el conocimiento delproceso y desarrollar nuevas técnicas de control, sedecide la construcción de una planta piloto.

PLANTA PILOTO

El trabajo desarrollado en la presente tesis se iniciacon la construcción de la planta piloto. En las basesde la misma, figuran la necesidad de que estéaltamente instrumentalizada y la posibilidad de teneruna gran versatilidad que permita disponer dediferentes configuraciones implementablesautomáticamente.

El primer resultado fue la planta con tres reactoresde 18 o 28 litros, que permite disponer de tressistemas aeróbico/anóxico, con un sedimentador de60 litros totales. Posteriormente, se introduce uncuarto reactor anaerobio para permitir la eliminaciónsimultánea de carbono, nitrógeno y fósforo.También se dispone de un segundo sedimentadorcon menor volumen total.

Gracias a disponer de una planta que trabaja encontinuo (1400 días de operación sobre 1500 díastotales) y al "gran volumen" de trabajo, se planteó lanecesidad de disponer de alimento en continuo. Por

motivos de situación de la planta dentro de launiversidad y por el caudal tratado (450 litros pordía) se decidió la definición de un alimento quepudiera suministrarse en composición y caudalvariable, y tuviera la mínima intervención manual.

Gracias a la complejidad del alimento definido se hamantenido durante los cuatro años de trabajo unagran diversidad de microorganismos dentro delsistema de lodos activos.

Una de las mayores ventajas de este sistemaexperimental es el gran nivel de instrumentación deque dispone. Esta instrumentación permite elseguimiento de los parámetros normales (pH, T, OD,redox) de todos los reactores y la regulación de lasprincipales actuaciones del sistema (velocidad deagitación, caudales de bombeo, caudal de aireación).

Una vez construido el sistema experimental se iniciael desarrollo del sistema de control y adquisición dedatos distribuido (SCADA).

SCADA

El sistema de control y adquisición de datos ha sidodiseñado siguiendo un esquema distribuido. Elsistema consta de un PLC y diversos controladoresde sondas, supervisados por un ordenador deproceso, que permite la distribución de diferentestareas entre esos elementos.

El PLC se encarga de controlar el funcionamientohidráulico y del sistema de alimentación automáticode la planta piloto, siendo supervisado por elordenador de proceso. Éste puede cambiar lasconsignas de funcionamiento del PLC, con lo que seobtiene un sistema configurable automáticamente.

Los controladores de sondas se encargan de efectuarlas medidas del proceso, que son utilizadas por elordenador de control para la adquisición de datos delproceso y para su monitorización gráfica. Estoscontroladores también pueden realizar controlON/OFF de las variables, como por ejemplo del pH,característica que ha sido utilizado en algunosexperimentos.

CONCLUSIONES 291

Page 45: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAOÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

El ordenador del proceso se encarga de lasupervisión de los anteriores elementos y del controlde otros parámetros del proceso, como por ejemploel control de oxígeno en los reactores o los caudalesde recirculación.

Este sistema desarrollado e implementado en laplanta piloto, ha permitido el funcionamientoautónomo de un proceso de depuración biológicacon eliminación de nutrientes. La fíabilidad delsistema se ha demostrado durante la operación de laplanta durante más de cuatro años.

La metodología utilizada en la implementación deeste sistema, ha permitido construir con un esfuerzomuy inferior otras aplicaciones de control, como ladesarrollada para el control del sistema demonitorización analítica.

SISTEMA DE CONTROL DE LOSANALIZADORES

Para la obtención de información analítica sobre elproceso de eliminación de nitrógeno, se ha realizadoun programa que controla dos analizadores, quepermiten realizar medidas de amonio, nitrato ynitrito. Estos dos analizadores, son alimentados pormuestra libre de biomasa mediante un sistemaautomático de toma de muestras, también controladopor el mismo ordenador.

El programa desarrollado se encarga de monitorizarlas concentraciones de amonio, nitrato y nitrito delos puntos de la planta preseleccionados, obteniendola máxima frecuencia de adquisición de esosparámetros del proceso permitida por losanalizadores. Esto permite la óptima utilización delequipo disponible, con lo que se mejora lainformación sobre el proceso.

Con los datos proporcionados por el sistema demonitorización de la planta piloto y el sistema decontrol de los analizadores, es posible optimizar elfuncionamiento de la planta en tiempo real. Pararealizar esta tarea se ha desarrollado el sistema decontrol experto supervisor.

SISTEMA EXPERTO

La implementación del SE hace posible el controldel rendimiento del proceso en conjunto, mediante larelación entre diferentes parámetros.

La implementación del SE en la planta piloto hasupuesto la transformación de un sistema de controlclásico con un comportamiento fijo en un sistemaadaptable a los diferentes problemas que puedenaparecer en una EDAR. La capacidad para tratarestos problemas es útil para controlar situacionesanormales y para mantener las restricciones legales

en el efluente. Además, es capaz de evitar laaparición de algunas situaciones que puedenprovocar problemas a largo plazo y provocardificultades para mantener las restricciones en elefluente para algunos parámetros.

Las acciones correctivas del control experto no sonimplementables en un sistema de control clásico, porlo que hay una importante mejora respecto al controlclásico. Además, es posible implementar todos losalgoritmos de control numérico, por lo que hay unbeneficio neto de posibilidades para resolver losdiferentes problemas de una EDAR. .

La arquitectura distribuida multimóduloimplementada mejora previos desarrollos desistemas con bases de conocimiento monolíticas.Esta arquitectura permite el desarrollo de módulosindependientes y reutilizables, que pueden serrealizados y/o utilizados por diferentesdesarrolladores.

Una consecuencia de realizar un sistema modular ybasado en el diseño orientado a objeto es que losmódulos desarrollados pueden reutilizarse en otrossistemas expertos, adaptándose con mínimoscambios, como se puede comprobar en la aplicaciónen la EDAR de Granollers. Otra importantecaracterística es el menor esfuerzo de mantenimientorespecto a versiones previas. Las tareas realizadaspor diferentes módulos son fácilmente validablesporque son independientes, por lo que esta tarea sesimplifica. La única dificultad añadida en elesquema implementado es la integración con elmódulo supervisor, que debe ser inspeccionada endetalle para evitar errores en la coordinación.

El principal éxito de este prototipo es un marcoversátil capaz de tratar con diferentesconfiguraciones de la planta, basado en el paradigmade la programación orientada a objeto y en elrazonamiento basado en reglas. La característica"on-line" es una importante innovación de estesistema, particularmente para la monitorización dedatos y el control supervisor.

En el sistema desarrollado, se pueden implementardiferentes estrategias de control clásico y experto,así como configuraciones de planta para el sistemade lodos activos con eliminación de materiaorgánica, nitrógeno y fósforo.

El mencionado sistema se ha validado funcionandodurante un periodo ininterrumpido de 30 meses. Esdestacable el cambio del modo de operación de laplanta que ha supuesto la implementación delsistema de control, pasando de una situación degestión semiautomàtica (1996) inicial a que elsistema de gestión desarrollado sea una necesidadineludible en el funcionamiento diario de la planta.

292 VALIDACIÓN EXPERIMENTAL EN PLANTA PILOTO

Page 46: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

En este periodo, los objetivos operacionales de laplanta fiíeron cambiados periódicamente, paraoptimizar diferentes partes del proceso. El SE hamostrado un excelente rendimiento en la operaciónde la planta piloto. El sistema desarrollado detecta ycontrola todos los problemas y operacionesespeciales de la planta, como por ejemplo fallo de labomba, problemas de alimentación, funcionamientoincorrecto de las sondas, mantenimiento del equipoy control de los analizadores. Esto ha permitido unadisminución en la atención necesaria para elmantenimiento de la planta piloto en unascondiciones adecuadas de funcionamiento.

VALIDACIÓN EXPERIMENTAL

Para la validación de todo el sistema supervisor sehan realizado una serie de experimentos paraoptimizar la eliminación de nitrógeno encondiciones dinámicas.

Esta optimización se ha basado en dos objetivosprincipales, la obtención de la eliminación denitrógeno prefijada y la utilización de los mínimos

CONCLUSIONES

recursos posibles, manteniendo, a su vez, unaadecuada eliminación de materia orgánica y fósforo.

En la aplicación de las estrategias de operaciónimplementadas, se ha detectado que la validez de suaplicación depende mucho de la situación en que seencuentre la planta en ese momento. Se hademostrado que la utilización de las reglas expertaspara la aplicación de una u otra estrategia, permiteutilizarlas correctamente, con lo que se mejora elrendimiento del proceso.

Utilizando distintas estrategias de operación se haobtenido una mejora global en la eliminación denitrógeno. Esta mejora ha sido superior al 16 % encuanto a eliminación por unidad de biomasa, y se haobtenido una disminución en el vertido de nitrógenosuperior al 46 %.

Además de las mejoras de eliminación, ha mejoradola fiabilidad del proceso, ya que han sidoimplementadas las acciones correctoras posiblescuando se ha detectado algún problema deoperación.

Como conclusión final, se puede ! afirmar que el sistema de control

supervisor desarrollado es una herramienta válida para el control y

gestión en tiempo real de plantas depuradoras, que permite la mejora

de los procesos de depuración biológica, en cuanto a fiabilidad de

operación, mejora del rendimiento de eliminación y reducción del

coste energético necesario para obtener un determinado grado de

depuración. Se ha demostrado í que el sistema es fácilmente

implementable en una EDAR real, mejorando la visión general delproceso y de los problemas de operación al operador experimentado,

así como el aprendizaje a los operadores con poca preparación.

CONCLUSIONES 293

Page 47: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

NOMENCLATURA

8 NOMENCLATURA

CONTROL

BCDDCDDDC

GSIHDSE

HTMLIAD

KBKBES

KBSPERL

PIDPLCRTESSBC

SCADA

SESEBC

SSCTCP/IP

PROCESO

AGVCFACOTDBO

DQO

Base ConocimientoDigital Direct ControlDistributed Digital DirectControlGensym Standard InterfaceHerramientas de desarrollo desistemas expertosHyperText Mark-up LanguageInteligencia ArtificialDistribuidaKnowledge BaseKnowledge Base ExpertSystemKnowledge Based SystemPractical Extraction and ReportLanguageProporcional Integral DerivadoProgrammable Logic ControllerReal Time Expert SystemSistema Basado en elConocimientoSistema de Control yAdquisición de DatosSistema expertoSistema Experto Basado en elConocimientoSupervisory Setpoint ControlTransfer Control Protocol /Internet Protocol

Ácidos Grasos VolátilesAnálisis de Flujo ContinuoCarbono Orgánico TotalDemanda Bioquímica deOxígenoDemanda Química de Oxígeno

DSVI

DTOEDAR

FIAIVFD

N/DNKTNTOAF

ODORPOURPHAPHBQEQREORÍQRI/QE

QRE/QE

SBISBRSRTssvSSTSVITCA6c

EPA

IAWQ

Diluted Sludge Volume Index

Demanda Total de OxígenoEstación Depuradora de AguasResidualesAnálisis por inyección en flujoíndice Volumétrico de FangosDiluidosNitrificación/DesnitrificaciónNitrógeno Kheldal TotalNitrógeno TotalMicroorganismosAcumuladores de FósforoOxígeno DisueltoOxidation-Reduction PotentialOxygen Uptake RatePolihidroxialcanosPoli-B-hidroxibutiratoCaudal de entrada a la plantaCaudal de recirculación externaCaudal de recirculación internaRelación de recirculacióninternaRelación de recirculaciónexternaíndice biótico de fangos activosSequential Batch ReactorSludge Retention TimeSólidos en Suspensión VolátilesSólidos en Suspensión TotalsSludge Volumen IndexCiclo del Ácido TricarboxílicoTiempo de residencia celularConcentración del parámetro enla entradaEnvironmental ProtectionAgencyInternational Association onWater Quality

NOMENCLATURA 295

Page 48: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

BIBL·I

Page 49: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

BIBLIOGRAFÍA

9 BIBLIOGRAFIA

/ijidrews JF. Andrews JF, editors. Dynamics andControl of the Activated Sludge Process.Lancaster, Pennsylvania: TechnomicPublishing Company, Inc. 1992; 8,Knowledge-Based (Expert) System for theActivated Sludge Process, p. 231-43.

Andrews JF. Andrews JF, editors.Dynamics andControl of the Activated Sludge Process.Lancaster, Pennsylvania: TechnomicPublishing Company, Inc. 1992; 7, Applicationof Artificial Intelligence (AI) Techniques inActivated Sludge Process Design, Operations,and Control, pp. 207-29.

Anthonisen AC, Loehr RC, Prakasan TBS, andSrineth EG. Inhibition of nitrification byammonia and nitrous acid. J. Wat. Poll. Con.Fed. 48.pp.835-852.(1976).

Antoniou P. Effect of temperature and pH on theeffective maximum specific growth rate ofnitrifying bacteria. Wat. Res. 24. pp.97 (1990).

APHA.Standard methods. 18th ed. AmericanPublishers Health Association. 1993

Aspegren H, Andersson B, Nyberg U, and Jansen Jl.Model and sensor based optimization ofnitrogen removal at klagshamn wastewatertreatment plant. Wat. Sci. Tech. 26. 5-6.pp.!315-1323.(1992)

Astrom KJ and McAvoy TJ. Intelligent control. J.Proc. Cont. 2. 3. pp.H5-127.(1992)

Aynsley M, Hofland A, Morris AJ, Montague GA,and Di Massimo C. Blanch HW, Bungay HR,Cooney CL, et al, editors. Bioprocess Designand Control. Berlin Heildelberg: Springer-Verlag, 1993; 1, Artificial Intelligence and theSupervision of Bioprocesses. (Real-TimeKnowledge-Based Systems and NeuralNetworks), pp 1-27.

¿Jaeza J, Ferreira EC, and Lafuente J. Real-TimeExpert Control of a Pilot WWTP with Nitrogenand Phosphorus Removal.Mota, M. andFerreira, E.G. editors. Departamento deEngenharia Biológica, Universidade do Minho;1998 Jul; Braga, Portugal. 1998; 321 p.BIOTEC'98. Book of abstracts.

Baeza J. Diseño y diseño de un sistema de controlsupervisor y adquisición de datos: Aplicación auna planta piloto depuradora de aguasresiduales urbanas con criterios denitrificación/desnitrificación. Tesis deLicenciatura. Universitat Autònoma deBarcelona. Bellaterra. 1996.

Baeza J, Gabriel D, and Lafuente J. An expertsupervisory system for a pilot WWTP.Environmental Modelling & Software . 14.pp.383-390.(1999)

Balslev P, Lynggaard-Jensen A, and Nickelsen C.Nutrient sensor based real-time on-line processcontrol of a wastewater treatment plant usingrecirculation. Wat. Sci. Tech. 33. 1. pp. 183-192.(1996)

Bañares-Alcántara, R.; Ponton, J.W. ArtificialIntelligence Techniques in ChemicalEngineering Process Design. Applications ofArtificial Intelligence. VII. pp 581-607.(1992)

Barker PS and Dold PL. Denitrification behaviour inbiological excess phosphorus removal activatedsludge systems. Wat. Res. 30. 4. pp.769-780.(1996)

Barnett MW, Patry GG, and Hiraoka M. AndrewsJF, editors.Dynamics and control of theactivated sludge process. Lancaster, LosAngeles: Technomic Publ.Co.1992;Knowledge-based (expert) systems forthe activated sludge process, p. 231-43.

Beck, M.B. Identification, estimation and control ofbiological waste-water treatment processes.IEEE Proceedings. 133, 254-264.(1986)

BIBLIOGRAFÍA 297

Page 50: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E iMPLEMENTAdÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Belanche LA, Valdés JJ, Comas J, R-Roda I, andPoch M. Towards a model of input-outputbehaviour of wastewater treatment plants usingsoft computing techniques. EnvironmentalModelling & Software. 14. pp.409-419.(1999)

Benefield; Randall. Biological process design forwastewater treatment. Prentince Hall Inc.N.J.I 980.

Berk SG and Gunderson JH. Wastewaterorganisms.A color atlas. Florida: Lewis. 1993.

Béjar J, Cortés U, Sanchez M, Gimeno JM, andPoch M. Applying domain knowledge to thediscovery of operating situations in wastewatertreatment plants. H.Adeli, IEEE ComputerSociety; Los Alamitos, California,U.S.A. 1997;p 360.

Bel M de, Stokes L, Upton J, and Watts J.Applications of a respirometry based toxicitymonitor. Wat. Sci. Tech. 33. 1. pp.289-296.(1996)

Bond AH and Gasser L. A subject-indexedbibliography of distributed artificialintelligence. 1992; 1260 p.

Borer J.AnonymousInstrumentation and contol forthe process industries. London and New York:Elsevier applied science publishers, 1985; 7,Transmission of measured data, pp 123-52.

Brdjanovic D, Slamet A, Van Loosdrecht MCM,Hooijmans CM, Alaerts GJ, and Heijnen JJ.Impact of excessive aeration on biologicalphosphorus removal from wastewater. Wat.Res. 32. 1. pp.200-208.(l 998)

Brenner A. Use of computers for process designanalysis and control: sequencing batch reactorapplication. Wat. Set. Tech. 35. 1. pp.95-104.(1997)

Brett S, Guy J, Morse GK, and Lester JN. Brett S,editor.Phosphorus removal and recoverytechnologies. London, Great Britain: SelperPublications; 1997;

Brouwer H, Bloemen M, Klapwijk B, and SpanjersH. Feedforward control of nitrification bymanipulating the aerobic volume in activatedsludge plants. Wat. Sci. Tech. 38. 3. pp.245-254.(1998)

Bundgaard E, Nielsen MK, and Henze M. Processdevelopment by full-scale on-line tests anddocumentation. Wat. Sci. Tech. 33. 1. pp.281-287.(1996)

Burrell PC, Keller J, and Blackall L. Microbiology ;

of a nitrite-oxidizing bioreactor. Applied and :Environmental Microbiology. May. pp. 1878- j1883.0998)

Cabezut Boo 0 and Sanchez Aguilar A. AKnowledge Base for Wastewater TreatmentPlants: Case of an Activated-Sludge Facility.Expert Systems with Applications. 14. 1.0998)

Cabezut Boo O and Sánchez-Aguilar A. Towards anontology of waste water treatment plants: theidentification phase. Environmental Modelling& Software. 14. pp.401-408.(1999)

Campbell, J. El libro del RS232. Anaya.1988.

Campmajó Riera, C.. Desenvolupament d'un sistemaexpert pel control en temps real d'un procésbiotecnològic. Tesis de Licenciatura.Universitat Autònoma de Barcelona. Bellaterra.1991.

Cerf, V.G. Redes. Investigación y Ciencia.Noviembre, 16-26.0991).

Cao S and Rhinehart RR. A sel-tuning filter. J. Proc.. Co«/.7.2.pp.l39-148.(1997)

Capodaglio AG, Jones HV, Novotny V, and Feng X.Sludge bulking analysis and forecasting:application of system identification andartificial neural computing technologies. Wat.Res. 25. 10.pp.l217.-1224.(1991)

Carlsson H, Aspegren H, and Hilmer A. Interactionsbetween wastewater quality and phosphorusrelease in the anaerobic reactor of the EBPRprocess. Wat. Res. 30. 6. pp. 1517-1527.0 996)

Carrera J. Depuración biológica de nutrientes enaguas residuales urbanas: Estudio de losparámetros operacionales de la eliminación defósforo. Tesis de Licenciatura. UniversidadAutónoma de Barcelona. Bellaterra. 1997

Cartensen J, Harremoës P, and Strube R. Softwaresensors based on the grey-box modellingapproach. Wat. Sci. Tech. 33. 1. pp. 117-126.0996)

Chang WC, Ouyang CF, Chiang WL, and Hou CW.Sludge pre-recycle control of dynamicenhanced biological phosphorus removalsystem: an application of on-line fuzzycontroller. Wat. Res. 32. 3. pp.727-736.(1998)

Charpentier J, Martin G, Wacheux H, and Gilles P.ORP regulation and activated sludge: 15 years

298 BIBLIOGRAFÍA

Page 51: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

of experience. Wat. Sci. Tech. 38. 3. pp. 197-208.(1998)

Chuang SH, Ouyang CF, Yuang HC, and You SJ.Evaluation of phosphorus removal inanaerobic-anoxic-aerobic system - viapolyhydroxyalkanoates measurements. Wat.Sci. Tech. 38. 1. pp. 107-114.(1998)

Cohen A, Janssen G, Brewster SD et al. Applicationof computational intelligence for on-linecontrol of a sequencing batch reactor (SBR) atMorrinsville sewage treatment plant. Wat. Sci.Tech. 35. 10. pp.63-71.(1997)

Comeau Y, Hall KJ, Hancock REW, and OldhamWK. Biochemical model for enhancedbiological phosphorus removal. Wat. Res. 20.pp.1511-1521.(1986)

Connell B.AnonymousProcess instrumentationapplications manual. New York: McGraw-Hill,1996; 2, How instruments are selected, p. 17-34.

Copp JB and Dold PL. Confirming the nitrate-to-oxygen conversion factor for denitrification.Wat. Res. 32. 4. pp.!296-1304.(1998)

Çakici A and Bayramoglu M. An approach tocontrolling sludge age in the activated sludgeprocess. Wat. Res. 29. 4. pp.!093-1097.(1995)

.L/emoulin G, Goronszy MC, Wutscher K, andForsthuber ECO-current nitrification/denitrification and biological P-removal incyclic activated sludge plants by redoxcontrolled cycle operation. Wat. Sci. Tech. 35.1. pp.215-224.( 1997)

Delwiche C.C. The nitrogen cycle. Scientific Am.223.3. pp 137-146. (1970)

Dochain D and Perrier M. Control design fornonlinear wastewater treatment processes. Wat.Sci. Tech. 28. 11-12. pp.283-293.(1993)

.C/PA. Ambient water quality criteria fo ammonia-1984. Washington, DC. U.S. EPA. 1985;EPA/440/5-85/001.

EPA. Ambient water quality criteria for ammonia(saltwater) - 1989. Washington, D.C. U.S.EPA. 1989; EPA/440/5-88/004.

EPA.Manual of Nitrogen Control. EPA/625/R-93/010 ed. Washington, U.S.A. U.S.Environmental Protection Agency; 1993;

BIBLIOGRAFÍA

P olger, H.S. Elements of Chemical ReactionEngineering. Englewood Cliffs,N.J.1990

Forty TR. Nutrient control in Okanagan Valleylakes. Water Quality International.November/December, pp.51-54.( 1998)

Froment, G.F.; Bischoff, K.B. Chemical ReactorAnalysis and Design. Wiley. New York,US A. 1990.

Fu CS and Poch M. System indentiflcation and real-time pattern recognition by neural networks foran activated sludge process. Environmentinternational. 21. pp.57-69.(1995)

Fuente MJ, Vega P, Zarrop M, and Poch M. Faultdetection in a real wastewater plant usingparameter estimation techniques. Control Eng.Practice. 4. pp.!089-1098.(1996)

\Jabriel D, Baeza J, Valero F, and Lafuente J. Anovel FIA configuration for the simultaneousdetermination of nitrate and nitrite and its usefor monitoring an urban waste watertreatmment plant based on N/D criteria.Analytica Chimica Acta. 359. pp. 173-183.(1998)

Gabriel D. Disseny i automatització d'un sistema demonitorització de nitrats, nitrits i amonimitjançant tècniques d'anàlisi en flux:Aplicació a una planta pilot depuradorad'aigües residuals urbanes amb criteris deNitrificació/Desnitrificació. Tesis deLicenciatura. Universitat Autònoma deBarcelona. Bellaterra. 1996.

Gacot, R.; Smith, B. Tapping into Sockets. Byte.March, 261 -268.( 1992).

Gall RAB and Patry GG. Patry GG, Chapman D,editors.Dynamic modeling and expert systemsin wastewater engineering. Chelsea: Lewis,1989;Knowledge-based system for thediagnosis of an activated sludge plant, p. 193-240.

Gensym. G2 reference manual version 4.0. Gensymcorporation: Cambridge; 1995;

Gensym. G2-Standard Interface. User's manualversion 3.2. Cabridge, MA: Gensymcorporation; 1995;

Gensym. G2-Gateway, bridge developer's guideversion 5.0. Cabridge, MA: Gensymcorporation; 1997;

BIBLIOGRAFÍA 299

Page 52: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMEMTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Gensym. G2 reference manual versión 5.0. GensymCorporation: Cambridge; 1997;

Gernaey K, Vanrolleghem P, and Verstraete W. On-line estimation of Nitrosomonas kineticparameters in activated sludge samples usingtitration in-sensor-experiments. Wat. Res. 32. 1.pp.71-80.(1998)

Giroux ÉY, Spanjers H, Patry GG, and Takàcs I.Dynamic modelling for operational design of arespirometer. Wat. Sci. Tech. 33. 1. pp.297-309.(1996)

Givens, S.W.; Gelman, S.R.; Brown, E.V.; LeslieGrady, C.P.; Skedsvold, D.A. Biologicalprocess design and pilot testing for a carbonoxidation, nitrification, and denitrificationsystem. Environmental Progress. 10,2, 133-146.(1991)

Grijspeerdt K and Verstraete W. A sensor for thesecondary clarifier based on image analysis.Wat. Sci. Tech. 33. 1. pp.61-70.(1996)

Guang D, Wiley DE, Hlavacek M, and Fane G. On-line automatic sampling for real timemonitoring of wastewaters. Wat. Res. 30. 11.pp.2651-2654.( 1996)

rdarremoës P, Haarbo A, Winther-Nielsen M, and

Thirsing C. Six years of pilot plant studies fordesign of treatment plants for nutrient removal.Wat. Sci. Tech. 38. 1. pp.219-226.( 1998)

Harremoës P and Sinkjaer O. Kinetic interpretationof nitrogen removal in pilot scale experiments.Wat. Res. 29. 3. pp.899-905.(1995)

Hack M and Kòhne M. Estimation of wastewaterprocess parameters using neural networks. Wat.Sci. Tech. 33. I.pp.l01-115.(1996)

Hitzmann B, Lübbert A, and Schügerl K. An ExpertSystem Approach for the Control of aBioprocess. I: Knowledge Representation andProcessing. Biotechnol. Bioeng. 39. pp.33-43.(1992)

Hoen K, Schuhen M, and Kòhne M. Control ofnitrogen removal in wastewater treatmentplants with predenitrification, depending on theactual purification capacity. Wat. Sci. Tech. 33.l.pp.223-236.(1996)

Horan NJ and Eccles CR. The potential for expertsystems in the operation and control ofactivates sludge plants. Process Biochemestry.June, pp.81-85.(1986)

CLIP: Computer Logic Input Program.

User's Manual. IDEC. 1992.

Isaacs S and Temmink H. Experiences withautomatic N and P measurements of anactivated sluge process in a researchenvironment. Wat. Sci. Tech. 33. 1. pp. 165-173. (1996)

Jenkins D, Richard MG, and Daigger GT.Manual

on the causes and control of activated sludgebulking and foaming. Michigan: Lewis; 1993;

Jennings NR. Cooperation in industrial niulti-agentsystems. New Jersey, NJ. World Scientific Pub.Co. 1994; World Scientific Series in ComputerScience 43

Jennings NR and Mamdani EH. Using jointresponsibility to coordinate collaborattiveproblem solving in dynamic environments.MIT Press; San José, California. 1992; 269 p.

Johansen NH, Anderen JS, and la Cour Jansen J.Optimum operation of a small sequencingbatch reactor for BOD and nitrogen removalbased on on-line OUR calculation. Wat. Sci.Tech. 35. 6. pp.29-36.(1997)

Jones M and Stephenson T. The effects oftemperature on enhanced biological phosphateremoval. Environment Technology. 17. pp.965-976.(1996)

JVanaya T, Hirabayashi K, Fujita I, and Tsumura

K. Detection of unusual data in onlinemonitoring of wastewater processing. Wat. Sci.Tech. 33. 1. pp.71 -79.( 1996)

Kernighan B.W.; Ritchie, D.M. The C programmingLanguage. 2a ed. Prentince Hall Inc.Englewood Cliffs, N.J.1988.

Klapwijk A, Brouwer H, Vrolijk E, and Kujawa K.Control of intermittently aerated nitrogenremoval plants by detection endpoits ofnitrification and denitrification usingrespirometry only. Wat. Res. 32. 5. pp. 1 700-1703 .(1998)

Knight GC, Serviour EM, Serviour RJ et al.Development of the microbial community of afull scale biological nutrient removal activatedsludge plant during start-up. Wat. Res. 29. 9.pp.2085-2093.(1995)

300 BIBLIOGRAFÍA

Page 53: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

Kolkwitz R and Marsson M. Òkologie der tierischesaprobien. Beitràge zur Lehre von derbiologische gewasserbeurteilung. Int Revue gesHydrobiol 2. pp.!26-162.(1935)

Kong Z, Vanrolleghem P, Willems P, and VerstraeteW. Simultaneous determination of inhibitionkinetics of carbon oxidation and nitrificationwith a respirometer. Wat. Res. 30. 4. pp.825-836.(1996)

Konstantinov KB, Aarts R, and Yoshida T. BlanchHW, Bungay HR, Cooney CL, et al, editors.Bioprocess Design and Control. BerlinHeildelberg: Springer-Verlag, 1993; 6, ExpertSystems in Bioprocess Control, RequisiteFeatures, p. 169-91.

Konstantinov KB and Yoshida T. Real-TimeQualitative Analysis of the Temporal Shapes of(Bio)process Variables. AIChE Journal. 38. 11.pp. 1703-1715.(1992)

Konstantinov KB and Yoshida T. Knowledge-BasedControl of Fermentation Processes. Biotechnol.Bioeng. 39. pp.479-486.(1992)

Krichten DJ, Wilson KD, and Tracy KD. ExpertSystems Guide Biological PhosphorusRemoval. Water Environment & Technology.October. pp.60-64.( 1991)

Krowidy, S.; Wee, W.G. Wastewater TreatmentSystems from Case-Based Reasoning. MachineLearning. 10, pp 341 -346.( 1993)

Krowidy, S.; Wee, W.G.; Summer, R.S.; Coleman,J.J. An A-I aproach for wastewater treatmentsystems. Journal of Applied Intelligence. 1, pp247-261.(1991)

Kuhn, T.S. The Structure of Scientific Revolutions.University of Chicago Press. 1962

JUapointe J, Marcos B, Veillette M, Laflamme G,and Dumontier M. Bioexpert: an expert systemfor wastewater treatment process diagnosis.Computers chem. Engng. 13. 6. pp.619-630.(1989)

Leeuw EJ, Kramer JF, Bull BA, and WijchersonMH. Optimization of nutrient removal with on-line monitoring and dynamic simulation. Wat.Sci. Tech. 33. l.pp.203-209.(1996)

Leu H-G, Lee C-D, Ouyang CF, and Tseng H-T.Effects of organic matter on the conversionrates of nitrogenous compounds in a channel

BIBLIOGRAFÍA

reactor under various flow conditions. Wat.Res. 32. 3.pp.891-899.(1998)

Liebmann H. Fisher G, editor.Handbuch derFrischwasser und abwasserbiologic. Jena:1962;

Lindberg C. Control and estimation strategiesapplied to the activated sludge process UppsalaUniversity, Departament of Materials Science,Systems and Control Grup; 1997; 1 p.

Lindberg C and Carlsson B. Estimation of therespiration rate and oxygen transfer functionutilizing a slow DO sensor. Wat. Sci. Tech. 33.l.pp.325-333.(1996)

Lindberg C and Carlsson B. Adaptive control ofexternal carbon flow rate in an activated sludgeprocess. Wat. Sci. Tech. 34. 3-4. pp. 173-180.(1996)

Lo, C.K.; Yu, C.W.; Tarn, N.F.Y.; Traynor, S.Enhaced nutrient removal by oxidation-reduction potential (ORP) controlled aerationin a laboratory scale extended aerationtreatment system. Wat. Res. 28, 10, 2087-2094.(1994)

Londong J and Wachtl P. Six years of practicalexperience with the operation of on-lineanalysers. Wat. Sci. Tech. 33. 1. pp.159-164.(1996)

Luyben, W.L. Process Modeling Simulation andControl for Chemical Engineers. 2a ed.Mc.Graw Hill Publishing Co.. New York,USA. 1990

Lynggaard-Jensen A, Eisum NH, Rasmussen I,Svankjaer Jacobsen H, and Stenstrom T.Description and test of a new generation ofnutrient sensors. Wat. Sci. Tech. 33. 1. pp.25-35.(1996)

IVladoni P. A sludge biotic index (SBI) for theevaluation of the biological performance ofactivated sludge based on the microfaunaanalysis. Wat. Res. 28. pp.67-75.(1994)

Maeda, K. An Intelligent Decision Support Systemfor Activated Sludge Wastewater TreatmentProcess. Instrumentation and control of waterand wastewater treatment and transportsystems.(1985).

Maeda, K. A knowledge-based system for thewastewater treatment plant. Future GenerationComputer Systems. 5, pp 29-32. (1989)

BIBLIOGRAFÍA 301

Page 54: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

Manesis SA, Sapidis DJ, and King RE. Intelligentcontrol of wastewater treatment plants.Artificial Intelligence in Engineering. 12.pp.275-281.(1998)

Martinelle K and Hàggstrôm L. On the disociationconstant of ammonium: effect of using anincorrect pKa in calculations of the ammoniaconcentration in animal cell cultures.Biotechnol. Tech. 11. 8. pp.549-551.(1997)

McCarty PL and et al. Sources of nitrogen andphosphorus supplies. JAWWA. 59. 344.(1967)

Menzl S, Stühler M, and Benz R. A self adaptivecomputer-based pH measurement and fuzzy-control system. Wat. Res. ' 30. 4. pp.981-991.(1996)

Metcalf and Eddy. McGraw-Hill, editor.Ingenieriade aguas residuales.Tratamiento, vertido yreutilización. 3rd éd. Madrid: 1995;

Mino T, Arun V, Tsuzuki Y, and Matsuo T.Ramadori R, editors.Biological phosphateremoval from wastewaters. 1987;Effect ofphosphorus accumulation on acetatemetabolism in the biological phosphorusremoval process, p. 27-38.

Momba MNB and Cloete TE. The relationship ofbiomass to phosphate uptake by AcinetobacterJunii in activated sludge mixed liquor. Wat.Res. 30. 2. pp.364-370.(1996)

Moreno, R.. Estimación de estados y controlpredictivo del proceso de fangos activados.Bellaterra.(1994)

Moreno R, de Prada C, Lafuente J, Poch M, andMontague GA. Non-linear predictive control ofdissolved oxygen in the activated sludgeprocess. Colorado. 1992; 289 p.

Morley RE and Schelberg C. An analysis of a plant-specific dynamic scheduler. Proceedings ofNSF Workshop on Dynamic Scheduling.Cocoa Beach, FL. 1993;

Moulin B and Chaib-Draa B. Jennings NR,editors.O'Hare, G.M.P. New York: Wiley,!,1996;An overview of distributed artificialintelligence, p. 3-55.

Muller A, Marsili-Libelli S, Aivasidis A, Lloyd T,Kroner S, and Wandrey C. Fuzzy control ofdisturbances in a wastewater treatment process.Wat. Res. 31. 12. pp.3157-3167.(1997)

JNielsen MK and Ônnerth TB. Strategies forhandling of on-line information for optimisingnutrient removal. Wat. Sci. Tech. 33. 1. pp.211-222.(1996)

vJ'Neill M and Horan NJ. Achievig simultaneousnitrification and denitrification of wastewaterat reduced cost. Wat. Sci. Tech. 32. 9-10.pp.303-312.(1995)

Ozgur NH and Stenstrom MK. KBES for processcontrol of nitrification in activated sludgeprocess. Journal of EnvironmentalEngineering. 120. 1. pp.87-107.( 1994)

Ônnerth TB, Nielsen MK, and Stamer C. Advancedcomputer control based on real and softwaresensors. Wat. Sci. Tech. 33. 1. pp.237-245.(1996)

1 arunak HVD. Jennings NR,editors.O'Hare.G.M.P. New York: Wiley,J.1996;Applications of distributed artificialintelligence in industry, p. 139-64.

Parry GG and Barnett MW. Innovative computingtechniques for development of an integratedcomputer control system. Wat. Sci. Tech. 26. 5-6.pp.l365-1374.(1992)

Paul E, Plisson-Saune S, Mauret M, and Cantet J.Process state evaluation of alternating oxic-anoxic activated sludge using ORP, pH andDO. Wat. Sci. Tech. 38. 3. pp.299-306.(1998)

Pedersen, K.M.; Kümmel, M.; Soeberg, H.Monitoring and control of biological removalof phosphorus and nitrogen by flow-injectionanalysers in a municipal pilot-scale waste-water treatment plant. Analytica Chimica Acta.238, pp 191-199. (1990)

Plisson-Saune S, Capdeville B, Mauret M, DeguinA, and Baptiste P. Real-time control ofnitrogen removal using three ORP bendig-points: signification, control strategy andresults. Wat. Sci. Tech. 33. 1. pp.275-280.(1996)

Poch, M.; Lafuente, J.; Sánchez, M.; Cortés, U.;Tomás, R. Los sistemas expertos aplicados alas estaciones depuradoras de aguas residuales.Tecnología del Agua. Agosto, pp 25-32.(1995)

Poch M, Lamente J, Moreno R, and Iza J. Mejora dela calidad del agua residual en una planta detratamiento de aguas residuales con un

302 BIBLIOGRAFÍA

Page 55: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

analizador automático de demanda química deoxígeno (DQO). PROMA; 1997; V Congresode Ingeniería Ambiental.

Poch M, Lafuente J, Sánchez M, Cortés U, andTomàs R. Los sistemas expertos: Una nuevaherramienta para ayudar en la gestión de lasestaciones depuradoras de aguas residuales.Tecnología del agua.(\99$)

Potter TG, Koopman B, and Svonoros SA.Optimization of a periodic biological processfor nitrogen removal from wastewater. Wat.Res. 30. l.pp,142-152.(1996)

Pullammanappallil PC, Svonoros SA, ChynowethDP, and Lyberatos G. Expert system forcontrol of anaerobic digesters. Biotechnol.Bioeng. 58. 1. pp.!3-22.(1998)

Puñal AM. Estratexias para a posta en marcha,operación e control de dixestores anaerobiosDepartamento de Enxeñeria Química de laUniversitat de Compostela; 1999;

Xv-Roda I. Desenvolupament d'un protocol perl'aplicació de sistemes basats en el coneixementa la gestió d'estacions depuradores d'aigüesresiduals urbanes Departament d'Enginyeriaquímica Universitat de Girona; 1998; 11 p.

R-Roda I, Comas J, Sánchez M, Cortés U, LafuenteJ, and Poch M. Specific knowledge basedevelopment to build an expert system forwastewater treatment plant management.Vancouver. 1998;

R-Roda I, Sànchez-Marré M, Cortés U, Lamente J,and Poch M. Case based reasoningsystems:asuitable tool for the supervision ofclomplex processes. Chemical EngineeringProgress. 95. 6. pp.39-45.(1999)

R-Roda Layret, I. Definició d'un sistema basat en elconeixement per el control de plantesdepuradores d'aigües residuals urbanes ambcriteris de Nitrificació / Desnitrifícació. Tesi deLlicenciatura. Universitat Autònoma deBarcelona. Bellaterra. 1994.

Randall CW, Barnard JL, and Stensel HD.Eckenfelder WW, Malina JF, and PattersonJW, editors.Design and retrofit of wastewatertreatment plants for biological nutrientremoval. Lancaster,Pennsylvania U.S.A:Technomic publishing company; 1992;

Rodrigo MA, Seco A, Penya-Roja JM, and Ferrer J.Influence of sludge age on enhanced

BIBLIOGRAFÍA

phosphorus removal in biological systems.Wat. Sci. Tech. 34. 1-2. pp.41-48.( 1996)

Roffel, B.; Chin, P. Computer Control in the ProcessIndustries. Lewis Publishers Inc. 1989.

Oànchez M. DAI-DEPUR: an IntegratedSupervisory Multi-level Architechture forWastewater Treatment Plants [Tesi Doctoral].Departament de Llenguatges i SistemesInformàtics, Universitat Politècnica deCatalunya; 1996; 1 p.

Sánchez M, Cortés U, Béjar J, de Gràcia J, LafuenteJ, and Poch M. Concept formation in WWTPby means of classification techniques: Acompared study. Applied Intelligence. 1.pp.H7-165.(1997)

Sánchez M, Cortés U, Lafuente J, R-Roda I, andPoch M. DAI-DEPUR: an integrated anddistributed architecture for wastewatertreatment plants supervision. ArtificialIntelligence in Engineering. !.. pp.275-285.(1996)

Sanchez M, Cortés U, R-Roda I, Lafuente J, andPoch M. DAI-DEPUR: A distributedarchitecture for wastewater treatment plantssupervision. Artificial Intelligence inEngineering. 10. pp.275-285.(1996)

Sanchez M, Cortés U, R-Roda I, Poch M, andLafuente J. Learning and adaptation inwastewater treatment plants through case-based-reasoning. Microcomputers in CivilEngineering. 12. pp.251-266.( 1997)

Sanchez M, R-Roda I, Poch M, Cortés U, andLafuente J. DAI-DEPUR architecture:Distributed agents for real-time WWTPsupervision and control. IF AC; 1994; Valencia.1994; 147 p. Artificial Intelligence in real timecontrol.

Sánchez, M.; R-Roda Layret, I.; Lafuente, J.; Cortés,U.; Solà, C. Real Time Supervision ofWatewater Treatment Plants: a DistributedApproach. 2nd IF AC Workshop on ComputerSoftware Structures Integrating AI/KBS (CSI-AI/KBS'94). Lund (Sweden). (1994)

Sànchez-Marré M, Cortés U, R-Roda I, and Poch M.Case Learning through a similarity measure forcontinuous domains. Brighton (UK). 1998; p39

Sànchez-Marré M, Cortés U, R-Roda I, and Poch M.Sustainable case learning for continuous

BIBLIOGRAFÍA 303

Page 56: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

domains. Environmental modelling & software.14. 5. pp.349-357.(1999)

Schlegel S and Baumann P. Requeriments withrespect to on-line analyzers for N and P. Wat.Sci. Tech. 33. 1. pp.l39-146.(1996)

Seborg DE, Edgar TF, and Mellichamp DA.Processdynamics and control. New York: 1989;

Serra P, Lafuente J, Moreno R, de Prada C, andPoch M. Development of a real-time expertsystem for wastewater treatment plants control.Control Eng. Practice. 1. 2. pp.329-335.(1993)

Serra P, Sanchez M, Lafuente J, Cortés U, and PochM. DEPUR: a knowledge based tool forwastewater treatment plants. Engng. Applic.Artif. Intell. 7. 1. pp.23-30.(1994)

Serra P, Sanchez M, Lamente J, Cortés U, and PochM. ISC WAP: A knowledge-based system forsupervisig activated sludge processes.Computers chem. Engng. 21. 2. pp.211-221.(1997)

Shoham Y. Agent-oriented programming. ArtificialIntelligence. 60. 1. pp.51-92.(1993)

Smolders GIF, Klop JM, Jacobs R, Van LoosdrechtMCM, and Heijnen JJ. Metabolic model of thebiological phosphorus removal process:!!.Validation during start-up conditions.Biotechnol. Bioeng. 48. 3. pp.234-245.(1995)

Smolders GJF, Klop JM, Van Loosdrecht MCM,and Heijnen JJ. A metabolic model of thebiological phosphorus removal process: I.Effect of the sludge retention time. Biotechnol.Bioeng.48.1.pp.222-233.(l995)

Sorensen J. Optimization of a nutrient removingwastewater treatment plant using on-linemonitors. Wat. Sci. Tech. 33. 1. pp.265-273.(1996)

Stephanopoulos, G. Chemical Process Control. AnIntroduction to Theory and Practice. PrentinceHall Inc. Englewood Cliffs, N.J. 1984.

Stevens, W.R. Unix networking programming.Prentince Hall Software Series. 1990.

Surmacz-Gorska J, Gernaey K, Demuynck C,Vanrolleghem P, and Verstraete W.Nitrification monitoring in activated sludge byoxygen uptake rate (OUR) measurements. Wat.Res. 30. 5. pp.!228-1236.(1996)

Szafhicki K, Bourgois J, Graillot D, Di Benedetto D,Breuil P, and Poyet JP. Real-time supervision

of industrial waste-water treatment plantsapplied to the surface treatment industries. Wat.Res. 32. 8. pp.2480-2490.(1998)

Szafhicki K and Graillot D. Knowledge-based real-time fault detection and supervision of urbandrainage systems. Automática. 32. 7. pp. 1043-1047.(1996)

1 emmink H, Petersen B, Isaacs S, and Henze M.Recovery of biological phosphorus removalafter periods of low organic loading. Wat. Sci.Tech. 34. 1-2. pp.l-8.(1996)

Termo R and Uronen P. Stock and ConcentrationDynamics of Activated Sludge Processes.IF AC Computer Applications in Biotechnology.pp.287-291.(1998)

Thompson L and Mertz G. Real-time expert systemimplementation at Monsanto-Krummrich.Automática. 29. 5. pp.1177-1183.(1993)

Thomsen HA and Kisbye K. N and P on-line meters:requeriments, maintenance and stability. Wat.Sci. Tech. 33. 1. pp.!47-157.(1996)

Tseng CC, Potter TG, and Koopman B. Effect ofinfluent chemical oxygen demand to nitrogenratio on a partial nitrification / completedenitrification process. Wat. Res. 32. 1. pp. 165-173 .(1998)

Van Vooren L, Willems P, Ottoy JP,Vansteenkiste GC, and Verstraete W.Automatic buffer capacity based sensor foreffluent quality monitoring. Wat. Sci. Tech. 33.1. pp.81-87.0 996)

Vanrolleghem P and Coen F. Optimal design of in-sensor-experiments for on-line modelling ofnitrogen removal processes. Wat. Sci. Tech. 31.2.pp.l49-160.(1995)

Vanrolleghem P, Van der Schueren D, Krikilion G,Grijspeerdt K, Willems P, and Werstraete W.On-line quantification of settling propertieswith in-sensor-experiments in an automatedsettlometer. Wat. Sci. Tech. 33. 1. pp.37-51.(1996)

Verheijen L, Uchiakawa I, Kobayashi T, and Endo I.IMCS (Intelligent Monitoring and Controlsystem) for wastewater-treatment. Budapest.1997; 299 p.

Wacheux H, Million J-L, Guillo C, and Alves E.NH4 automatic analyser for wastewater

304 BIBLIOGRAFÍA

Page 57: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

BIBLIOGRAFÍA

treatment plant: evaluation test at laboratoryand field level. Wat. Sci. Tech. 33. 1. pp.193-201. (1996)

Wareham DG, Hall KJ, and Mavinic DS. Real-timecontrol of wastewater treatment systems usingORP. Wat. Sci. Tech. 28. 11-12. pp.273-282.(1993)

Water Environment Federation & American Societyof Civil Engineers. Desing of municipalwastewater treatment plants. Manual ofpractice No. 8. ASCE Manual and Report onEngineering Practice No. 76. WEF / ASCE.Alexandria. New York. 1992.

WPCF (The Water Pollution Control Federation).Nutrient control. Manual of practice FD-7.WPCF. Washington. 1983.

Wentzel MC and Ekama GA. Principles in thedesign of single sludge activated sludgesystems for biological removal of carbon,nitrogen and phosphorus. Valencia, Venezuela.1999; III Simposio internacional sobrepolución de aguas por procesos biológicos.

Wentzel MC, Ekama GA, Dold PL, and MaraisGVR. Biological excess phophorus removal-steady state process design. Water SA. 16.pp.29-48.(1990)

Wentzel MC, Letter LH, Loewenthal RE, andMarais GVR. Metabolic behaviour ofAcinetobacter spp. in enhanced biologicalphosphorus removal-a biochemical model.Water SA. 12.4.(1986)

Wild D, von Schulthes R, and Gujer W. Structuredmodelling of denitrifícation intermediates. Wat.Sci. Tech. 31.2. pp.45-54.(1995)

l u RF, Liaw SL, Chang CN, Lu HJ, and ChengWY. Monitoring and control using on-lineORP on the continuous-flow activated sludgebatch reactor system. Wat. Sci. Tech. 35. 1.pp.57-66.(1997)

o H, Isaacs S, Soeberg H, and Kümmel M. Ananalysis of nitrogen removal and controlstrategies in an alternating activated sludgeprocess. Wat. Res. 29. 2. pp.535-544.(1995)

Zhao H, Mavinic DS, Oldham WK, and Koch FA.Factors affecting phosphorus removal in a two-stage intermittent aeration process treatingdomestic sewage. Wat. Sci. Tech. 38. 1.pp.H5-122.(1998)

Zilio-Grandi F and Szpyrkowicz L. Seasonalphosphorus removal in a phostrip process-II.Phosphorus fractionation and sludgemicrobiology during start-up. Wat. Res. 29. 10.pp.2327-2338.(1995)

BIBLIOGRAFÍA 305

Page 58: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

U N I V E R S I T A T AUTÓNOMA DE BARCELONA

D E P A R T A M E N T D ' E N G I N Y E R I A Q U Í M I C AE S C O L A T È C N I C A S U P E R I O R D ' E N G I N Y E R I E S

DESARROLLO EIMPLEMENTACIÓN DE UN

SISTEMA SUPERVISOR PARALA GESTIÓN Y CONTROL

DE EDAR

APÉNDICES

Memoria que para optar al grado dedoctor por la Universitat Autónomade Barcelona presenta

Juan Antonio Baeza Labat

13 de Julio de 1999

Page 59: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

U N I V E R S I T A T AUTÒNOMA DE BARCELONA

D E P A R T A M E N T D ' E N G I N Y E R I A Q U Í M I C AE S C O L A T È C N I C A S U P E R I O R D ' E N G I N Y E R I E S

DESARROLLO EIMPLEMENTACIÓN DE UN

SISTEMA SUPERVISOR PARALA GESTIÓN Y CONTROL

DE EDAR

APÉNDICES

Memoria que para optar al grado dedoctor por la Universitat Autónomade Barcelona presenta

Juan Antonio Baeza Labat

13 de Julio de 1999

Page 60: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg
Page 61: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

1 Programa de monitorización y control planta piloto A-l

2 Programa de monitorización y control del sistema analítico A-99

3 Programa del PLC A-155

4 Servidor de datos A-161

5 Comunicación GSI-Servidor de datos A-191

6 Sistema experto A-217

Page 62: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

T'PROGRAMA•

***

J!',l>

Page 63: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZAO

ÓN

Y C

ONT

ROL

PLAN

TA P

ILOTO

DEPURA.C - FUNCIÓN PRINCIPAL DEL PROGRAMA DEPURA.EXE

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 11/12/98

#include "depura.h"

/*Fichero con definiciones generales*/

void main(void)

i/*Lee especificaciones de depura.dat*/

/*Lee el fichero de posible perfil de alimento*/

/*Inicializa los relojes*/

/•Entra en modo gr fico*/

/•Dibuja la pantalla gr fica*/

/'Copyright'/

/*Lectura ficheros de seguridad gr fieos*/

lectura_configuraciont);

lectura_alimentacionO ;

inicializar tiempos O;

modo_grafico();

graf Jbase(};

graf_presentacion(};

seguro_graficas(0) ;

inicializar_variables();

inicio_filtro_digital();

inicia_guardian();

guarda_mensaje( "Inicio programa\t\t\xO");

imprime("Inicio programa\v\v\n\xO");

mensaje_a_SUN("Inicio programa\t\xO");

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

/*Actualiza los gr fieos de pantalla*/

puesta_en_marcha();

planta.variable_actual=3;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

*/ do{

contador_guardian=0;

actualizar_tiempos(};

/* Actualiza tiempos y detecta tareas */

seleccionar_accion(};

/" Selecciona la acciCn a efectuar */

selectmenu();

graf_reloj();

while (fi =

/* Tratamiento de peticiones de teclado */

/'Gráfica el radar de detección de sobrecargas*/

guarda_mensaje( "Fin programa\t\t\xO");

imprime("Fin programa\v\v\n\xO");

mensaje_a_SUN("Fin programa\t\xO");

finaliza_guardian();

setvideomode( DEFAULTMODE );

/*Acaba con el modo gr fico, pasa a texto*/

/'Función para el tratamiento de peticiones de teclado*/

void selectmenu(void)

i int tecla,i;

int debug=0;

if (planta.variable_actual==20) debug=l;

teclaa_bios_keybrd(_NKEYBRD_READY)

,- /'Comprueba si se ha presionado una tecla*/

if (tecla==0) return;

if (debug)

graf_mensa je ("Tratamiento de petición de teclado"),-

_bios_keybrd(_NKEYBRD_READ); /*Vac;a el buffer, lee el Eltimo carácter*/

APÉN

DICE

S A -

1

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL D

E ED

AR

/*printf("%x\n",tecla);*/

switch(tecla){

/'Actuación en funciín de la tecla presionada*/

case Fl:

/*Cambio del menú de ayuda*/

ayuda++;

if (ayuda==l) graf ayuda_general();

el3e { graf_ayuda_graficas O ;

ayuda=O,•

}break;

case F2:

/*VariaciCn manual de una salida de la placa PCL726*/

graf_actuacion_externa_pcl?26 O ;

break;

case F3:

/'Enciende programa pie*/

plc_on();

break;

case F4:

/*Apaga programa pie*/

plc_off();

break,- graf_control_agitador(1);

break;

case F6:

/'Apaga agitador/es*/

graf_control_agitador(0);

break;

case F7:

/*Parada de emergencia agitadores*/

control_variador( 2 , O };

break;

case F8:

/*Variaci4n velocidad agitadores*/

graf_velocidad_agitadores();

break;

case F9:

/*Eneiende/apaga salida PLC*/

graf_actuacion_externa_salidas();

break;

case ALTQ: /*Salida de programa parando todo*/

pc!726( O,4.OF);

plc_off();

seguro_graficas(1);

fi = 0;

break;

case FIO:

/*Salida del programa dejando PLC encendido*/

/*

pCl726( 0,4.0F);*/

seguro_graficas(1);

fi = 0;

break;

case Fll:

/*Reinicializar todas las variables*/

inicializar_tiemposO ;

reset__control_O2 (O) ;

planta. conexion__SUN=l ;

planta.com_PLC=l;

planta.control_nivel=l;

planta.sondas=1;

alarma (-1)

,-break;

case F12:

inicializar_tiempos() ;

alarma(5);

break;

case ALTC: /*DesconexiCn toma de medidas de las sondas*/

if (planta.sondasosl)

{ planta.sondas=O ;

guarda_mensaje{"Desconexión sondas manual\t\xO");

ielse if (planta.sondas==o)

{ planta. sondas=l

,-guarda_mensaje("ConexiCn sondas manual\t\xO");

}break;

case ÀLTD: /'Salida al DOS*/

dos=l;

salir_al_dos();

dos = O ;

break;

case ALTP:

A-2

APÉNDICES

Page 64: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA re MoNrroRiZAdÓ

N Y CONTROL PLANTA PILOTO

if (debug) graf_mensaje("Toma de medidas pHrocon");

for (i=20;i<23;i++)

estado_salida(i,l); /*para leer redox*/

delay (2500);

phrocon_lecturaa();

for (i=20;i<23;i++)

estado_salida(i,0); /*dejatnos

leyendo oxigeno*/

if (debug) graf_mensaje (Tin

toma de medidas pHrocon"};

delay (1600) ;

break;

case ALTS:

if (debug) graf_mensaje("Supervisitn PLC");

supervision_plc();

if (debug) graf_menaaje("Pin supervision PLC");

break;

case ESC:

/*Gr fica copyright*/

graf_presentacion();

break;

case BACKSP:

_clearscreen(_GCLEARSCREEN);

graf base();

break;

case o:

/*Gr fica oxjgeno*/

case O:

planea.variable_actual= 3 ;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case h:

/*Gr fica pH*/

case H;

planta.variable_actual= 0 ;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case r:

/*Gr fica redox*/

case R:

planta.variable_actual= 2 ;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case t:

/*Gr fica temperatura*/

case T:

planta.varíable_actual= i;

graf_nuevo_grafico( planta,variable_actual, planta.escala_actual);

break;

case a:

/*Gr fica mA*/

case A:

planta.variable_actual= 4;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case e:

/*Cambio de escala*/

case E:

planta.escala_actual++;

if (planta.escala_actual>3) planta.escala_actual=l;

graf_nuevo_grafico( planta.variable actual, planta.escala_actual);

break

,-case NUM1:

/*Gr fica tangue I*/

case NUM1E:

planta.variable_actual= 5;

/*Tanque I*/

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case NUM2:

/*Gr fica tanque 2*/

case NUM2E:

planta.variable_actual= 6;

/*Tanque 2*/

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case NUM3:

/*Gr fica tanque 3*/

case HUM3E:

planta.variable_actual= 7;

./*Tanque 3*/

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case d:

case D:

planta.variable_actual= 20;

graf_nuevo_grafico( planta.variable_actual, planta.escala_actual);

break;

case BARRA:

/*Actualiza el gr fico actual*/

graf_valores_displayO ;

graf_actualizacion_grafico( planta.variable_actual, planta.escala_actual);

break;

case ALTO:

if (p

lan

ta.re

gistro

_O

2=

=l)

APÉNDICES

A - 3

DESARROLLO E IHPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

<if (planta.variable_actuals=20)

graf_mensaje("Registro de datos O2 inactivo");

planta.registro_02=0;

break;

iplanta. registro_02 = l ,-

if (planta.variable_actual==20)

graf__mensaje ("Registro de datos O2 activado");

break;

case ALTF1:

if (planta.PID[0) .activo==l) our_estitnacion (1,1) ;

else our_estimacion(1,0);

break;

case ALTF2:

if (planta.PID[1].activo==l) our_estimacion(2,1);

else our_estimacion(2, 0} ,-

break;

case ALTF3:

if (planta.PID[2] .activo= = l) our_estimacion(3,1);

else our_estimacion(3,0);

break;

/*

Inicializacion de tiempos

*/

void inicializar_tiempos(void)

«define ACTUALIZA(A) planta.A.tiempo=time(NULL)

t_actual=time(NULL);

ACTUALIZA(t_antic);

ACTUALIZA(t_inicio);

ACTUALIZA(t_phrocon);

ACTUALIZA(t_archivo);

ACTUALIZA(t_COntrol_O2);

ACTUALIZA(t_seguro);

ACTUALIZA(t_grafica);

ACTUALIZA(t_actualizacion_matrices);

ACTUALIZA(t_reloj);

ACTUALIZA(t_SUK);

ACTUALIZA(t_pantalla);

ACTUALIZA(t_perfil);

ACTUALIZA(t_OUR);

return ;

i/* Calcula el día actual respecto el d¡a de referencia, 132.

El d;a 1 es el viernes 17 de marzo de 1995

float dia_absoluto(void)

{float dias=0;

time_t t_referencia=3015817200L;

float

dia_referencia=132.OF;

dias= (float) (dia_referencia-t-dif f time (t_actual, t_referencia) /3600.0F/24.0F) ;

return días;

int puesta_en_marcha(void)

(int debug=0, status ;

float mA=O.OP;

char mensaje[100J ;

if (planta.variable_actua1==2O) debug=l;

A-4

APÉNDICES

Page 65: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DIC

ES.

PRO

GRA

MA

DE M

ON

ITO

RIZ

ACIÓ

N Y

CO

NTR

OL

PLAN

TA P

ILO

TO

if (debug) graf_mensaje("Inicializando PLC") ;

stiatus=inicializar_plc() ;

/*Inicializa PLC*/

it (debug)

if .(status-!) graf_menaaje ( "Error inicializando PLC")

,-else graf_mensaje ("InicializaciCn PLC OK"),-

if (debug) graf_mensa je (" Inicializando Danfoss") ;

inicializar_variador_f recuencia () ; /*lnicializa los danfoss 2100*/

if (debug) graf_mensaje ( " Inicializaciin Danfoss OK") ;

if (debug) graf_mensaje ("Variando velocidad agitadores"),-

for (i=0; i<2; i++)

í•delay (200)

,-v

ari

ar_

velo

cid

ad

(p

lan

ta. v

elo

cid

ad

[0

] ,

1) ;

de

lay(2

00

) ,-

vari

ar_

velo

cid

ad

(p

lan

ta. v

elo

cid

ad

fl]

, 2

) ;

de

lay

{20

0) ;

vari

ar_

velo

cid

ad

(p

lan

ta. v

elo

cid

ad

[2

] ,

3) ;

de

lay

(30

0)

; -

. .

.control_variador ( 1 ", 0 . ) ;

}

/«Env¡a la velocidad de los tres agitadores dos veces*/

if (debug) graf_mensaje(rlnicio activación PLC");

plc_on();

/«Enciende las salidas del pic e inicia el programa del PLC*/

if (debug)

graf _mensa je ("Programa PLC activado") ;

if (debug)

graf_mensaje ("Inicio abertura v Ivula agua"),-

status = mA_caudal ( "c: \\depura\\v_agua.dat" , planta. caudal_agua, &mA) ;

if (status==0)

í pcl726(0,mA) ;

/*Abre la v Ivula de entrada de agua*/

sprintf (mensaje, " V Ivula de agua abierta: Q * %4 . If ml/min, %4.2f mA",

planta. caudal_agua,mA)

,-if (debug) graf_mensaje (mensaje)

,-

}else if (debug) graf__mensaje { "V Ivula de agua no abierta");

if (debug) graf_mensaje ("RegulaciCn caudal dosificadora 1 (RE)"),-

status o mAjraudal ( "c:\\depura\\bombal.dat" , planta. caudal_RE, 4mA) ;

if (status==0)

{ pcl726(l,mA) ;

/'Regula el caudal*/

sprintf (mensaje, " Caudal recirculaciCn externa: Q = %4.1f ml/min, %4.2f mA" ,

planta .caudal_RE,mA)

,-if (debug) graf_mensaje (mensaje) ;

}else if (debug)

graf_mensaje ("RecirculaciCn externa no regulada");

if (debug) graf_mensaje ("Regulación caudal dosificadora 2 (RI)");

status = mA_caudal( Bc: \\depura\\bomba2 .dat" , planta. caudal_RI, &mA) ;

if (status"0)

í pc!726 (2,mA) ;

/*Regula el caudal*/

sprintf (mensaje, " Caudal recirculaciín interna: Q = %4.1f ml/min, %4.2f niA"

planta. caudal_RI,mA) ;

if (debug) graf_mensaje (mensaje) ;

}else if (debug) graf_mensaje ("Recirculaciín interna no regulada"), •

if (debug)

graf_mensaje ("Supervisiin PLC") ;

supervision_plc () ;

if (debug)

graf_mensaje("Fin supervisitn PLC") ;

if (planta. perfil==D

{ if (debug) graf_mensaje ("Variando alimentación programada1*);

cambiar_alitnentacion() ;

if (debug) graf_mensaje ("Fin variación alimentación11 ) ;

for (i=0,-i<3;i++)

/* ActuaciCn fija de aireación */

if (planta. PIDti] .activo==2)

í medidas [i] .mA=planta.mAti+3] ;

/* Guarda la actuación */

pcl726 {i+3, planta. mA[i+3J );

/* Actuaciin */

APÉN

DICE

S A

- 5

DESA

RRO

LLO

E IM

PLEM

ENTA

QO

N D

E UN

SIS

TEM

A S

UPE

RVI

SOR

PAR

A LA

GES

TIÓ

N Y

CO

NTR

OL

DE E

DA

R

if (debug)

{ sprintf (mensaje, "PID %i desactivado, actuaciín constante de %4.2f mA" ,

i+1, planta. mA[i+3] ) ;

graf_mensa je (mensaje) ;

}

if (debug)

graf_mensaje ("Inicializando sondas") ;

status«inicializar_sondas () ;

/*Inicializa los pHroconia*/

if (debug)

if (status!=3) graf _mensa je { "Error inicializando sondas") ;

else graf_mensaje ("Inicializaciín sondas OK" ) ;

delay(lOOO) ;

return 1 ;

void actualizar tiempos (void)

í «define RELOJ(A.B) if ( (int) dif f time (t_actual, planta. A. tiempo) >=B) planta. A. Cin-1;

struct tm *temps;

t_actual=time(NULL);

/«AC

ali

i empo */

RELOJ ( t_relo j , 1 ) ;

RELOJ ( t_control_O2 , planta . intervalo_control_O2 ) ;

RELOJ(t_actualizacion__tnatrices, 10) ;

RELOJ(t_antic, planta . intervalo_control_nivel) ;

RELOJ (t_phrocon, 30) ;

RELOJ <t_archivo, planta. intervalo_toma_de_datos) ;

RELOJ (t_graf i ca, planta. actual i zacion_graf i ca) ;

RELOJ(t_seguro,600) ;

RELOJ(t_SUH, planta. intervalo_SUN) ;

RELOJ (t_pantal la, 600) ;

RELOJ(t_OUR, planta. intervalo_OUR) ;

planta. t_actual=time (NULL) ;

temps = localtimeí &planta. t_actual ) ;

/*Si el minuto es O y han pasado m s de 100 segundos desde el Eltimo cambio*/

if ( planta. perfil==l &&

temps ->tm__min ==• 0 &&

( int ) dif f t irae(t_actual, planta. t_perf il. tiempo) >100)

planta . t jperf il . f in=l ;

/*,*,,....... ,.*,*.....*.,.it.. >.*......... ...,,,,.....,, ,...,.. ......*....

int seleccionar_accion(void)

í ^define ACTUALIZARÍA) planta. A. tiempo=time (NULL) ; planta . A. f in=0;

int debug=0, status;

if (planta.variable_actual==20) debug=l;

if < planta. t_control_02 . f in==±l &&

planta . sondas ==1)

{ ACTUALIZAR(t_COntrol_O2) ;

if (debug)

graf_mensaje ("Actuaciín control oxigeno"),-

control_oxigeno () ;

if (debug) graf_mensaje("Fin actuaciCn control ox¡geno");

return I ;

}

/*Activa el control de oxigeno*/

if ( planta. t_phrocon. fin==l &&

planta . sondas==l )

í ACTUALIZAR(t_phrocon) ;

if (debug)

graf_mensaje ("Toma de medidas pHrocon");

for (i=.20;i<23;i-t- + ) estado_salida (i , 1 ) ;

/*para leer redox*/

while (di f f time (time (NULL) .planta. t_phrocon. tiempo) <

=-3) selectmenuf) ;

phrocon_rav { ) ;

A-6

APÉNDICES

Page 66: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONITO

RIZACIÓN

Y COPÍTRO

L PLANTA PILOTO

estado_salida{i,0);

/*dejamo3 leyendo oxigeno*/

for (i=20;i<23,

phrocon_T();

phrocon_ph();

/*phrocon_lecturas();*/

if (debug) graf_mensaje ("Fin toma de medidas pHrocon"),-

while (di

f f time (time (HULL) .planta. t_phrocon. tiempo) <=8) selectmenuO

,-return 2;

J /«Activa la lectura de valores de los pl·lroconlS*/

if ( planta.t_antic.fin==l &&

planta.control_nivel==l)

íACTUALIZAR(t_antic);

if (debug) graf_mensaje("Supervision PLC");

supervision_plc(};

if (debug) graf_mensaje("Fin supervision PLC");

return 3 ;

}

/*Si la planta est funcionado, activa la supervision del PLC*/

if ( planta.t_actualizacion matrices.fin==l)

íplanta. t_actualizacion__matrices. tiempo+=10;

planta.t_actualizacion_matrices.fin=0;

if (debug) graf_mensaje("Actualización display y matrices"),-

actualizar_matrices_graficas ()

,-graf_valores_display();

return 4;

}

/«Actualiza las matrices gr ficas y display de valores*/

if ( planta.t_SUN.fin==l &&

planta.sondaa==l &&

planta.conexion_SUN==l )

ACTUALIZAR(t_SUN);

if (debug) graf_men3aje("Inicio comunicaci<n SUN");

statua=aockets_pasa_datos();

if (debug)

if (status!=0) graf_mensaje("Comunicación SUN incorrecta");

else

graf_mensaje ( "Comunicación SUN correcta"),-

return 5;

}

/* Transmite datos a la SUN */

if ( planta.t_archivo.fin==l)

ACTUALIZAR(t_archÍvo);

if (debug) graf_mensaje("Archivando datos medida");

archivar_datos_medida();

if (debug) graf_mensaje("Fin archivo datos medida");

return 6 ;

}

/«Almacena los valorea en un fichero*/

if ( planta.t_seguro.fin==l)

ACTUALIZAR(t_seguro);

if (debug) graf_mensaje("Archivando datos de aeguridad");

seguro_graficas(1);

if (debug) graf_mensaje ("Fin archivo datos de

seguridad")

,-return 7;

}

/«Guarda fichero de seguridad con loa valores de las gr ficas*/

if ( planta.t_grafica.fin==l)

íACTUALIZAR(t_grafica);

graf_actualizacion_grafico( planta.variable_actual, planta.escala_actual>;

return 8;

}

/«Actualiza la gr fica en pantalla*/

if ( planta.t_reloj.fin==l )

íACTUALIZAR(t_reloj);

graf_hora() ,-

return 9;

• •

}

/«Actualiza reloj gr fico*/

if ( planta.t_pantalla.£ino=l )

ACTUALIZAR(t_pantalla);

APÉNDICES A

- 7

DESARROLLO

E IMPLEM

EOTACIÓ

N DE UN

SISTEMA SUPERVISO

R PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

_clearscreen(_GCLEARSCREEN) ;

graf_base ()

;return 10;

}

/*Actualiza toda la pantalla*/

if ( planta. perfil==l &&

planta. t__perf i

l . f in= = l &&

planta.control_nivel==l)

{ACTUALIZAR(t_perfil) ;

if (debug) graf_mensaje ("Variando alimentación programada" ) ;

cambiar_alimentacion ( ) ;

if (debug) graf_mensaje ("Fin variaciín alimentaciCn" } ;

return 11;

if ( planta. conexion_SUN == O &&

di f f time (planta . t_actual, planta. t_SON. tiempo) > 3600 )

planta. conexion_SUN = 1;

if ( planta. t_OUR.fin==l &&

planta . sondas==l &&

planta. OUR == 1 )

íACTUALIZAR (t OUR) ;

if (debug) graf_mensaje("Ini

if (planta.PIDÍO].activo=

planta.PIDIÓ].s

if (planta.PIDÍ1]-a

planta.PIDÍ1].s

if (planta,PID[2].a

planta.PID[2].s

t_poin

tivo==

t_poin

tivo==

t_poin

io estimación consumo ox¡geno") ;

&&=0 . OF) our_estimacion (1,1) ;

=O.OF) our_estimacion(2, 1)

;

=O.OF) our_estimacion(3, 1) ;

delay(3000);

if (debug)

graf_mensaje("Fin inicio estimación consumo ox¡geno">;

return 12;

}

/«Activa la estimación del consumo de oxigeno*/

return O;

ivoid inicializar_variables(void)

í/*int i;

for (i=0;i<3;i++) planta.PIDEi]-activo=l;*/

sprintf (medidas[0].nom, "%s","REACTOR 1");

sprintf (medidas(1].nom, "%s","REACTOR 2");

sprintf (medidas[2].nom, "%s","REACTOR 3");

medidas[OJ.controlador=l;

medidas[1].controlador=2;

medidas[2],controlador=3;

planta.variable_actual=20; /* Gr fico de debug */

planta.escala_actual=l;

planta.control_nivel=l;

planta.sondas=l;

planta.conexion_SUN=l;

planta.com_PLC=l;

planta.intervalo_SUN=30;

planta.registro_O2=0;

planta.alarma=-3 ;

old_intervalo_o2=planta.intervalo_control_02;

iA-8

APÉNDICES

Page 67: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONT

ROL

PLAN

TA P

ILOTO

DEPURA.H - DEFINICIÓN DE VARIABLES GENERALES PARA EL PROGRAMA DEPURA

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 30/4/97

fi include

Sinclude

«include

Sinclude

«include

«include

«include

«include

«include

ft include

fi include

<stdio.h>

<do3.h>

<bios,h>

<time.h>

<process.h>

<conio.h>

«ctype. h>

<stdlib.h>

<graph.h>

••teclas.h

;;

"nombres.h"

Subrutinas externas necesarias

/* danfoss */

extern void inicializar_variador_frecuencia(void);

extern int variar_velocidad(double velocidad, int variador);

extern int control_variador(int estado, int variador);

extern void graf_control_agitador{int on_off);

extern void graf_velocidad_agitadores(void);

/* pcl?26 */

extern int pcl?26 (int canal, float miliamperios);

extern void graf_actuacion_externa_pc!726(void);

/• pic •/

extern void plc_on(void);

extern void plc_o£f(void);

extern void estado_salida{unsigned int numero, unsigned int off_on);

extern void graf_actuacion externa_salidas(void);

extern void supervision_plc(void);

extern void alarma(int motivo);

extern int inicializar_plc(void);

extern int cambiar_alimentacion(void);

/* crison */

extern int inicializar_sondas(void);

extern void phrocon_lecturas(void);

extern void phrocon_ph(void);

extern void phrocon_T(void);

extern void phrocon_mv (void)

-,

I* cont_oxi */

extern void control_oxigeno(void);

extern void reset_control_02(int reactor);

extern void inicio_filtro_digital(void);

extern void our_estimacion(int reactor, int step);

/* delay */

extern void delay( clock_t wait );

/* gráficos */

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

extern void

modo_grafico(void);

graf_colorines(int ordení;

graf_base (void)

,-graf_ayuda_general(void);

graf_ayuda_graficas(void);

graf_reloj(void);

aalir_al_dos(void);

gra

f_v

alo

res,

_d

isp

lay

(v

oid

) ;

actu

ali

zar_

jnatr

ices_

gra

£ic

as

(vo

id)

;g

raf_

ho

ra(v

oid

);g

raf_

actu

ali

zacio

n_

gra

fico

(in

t v

ari

ab

le,

int

escala

);g

raf_

_n

uev

o_

gra

fico

( in

t v

ari

ab

le,

int

esc

ala

) ;

gra

f_p

rese

nta

cio

n(v

oid

);g

raf_

men

saje

(ch

ar

*m

en

saje

);

APÉN

DICE

S A

- 9

DESA

RRO

LLO

E IM

PLEM

ENTA

QO

N D

E UN

SIS

TEM

A SU

PERV

ISO

R P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

OAR

/* ficheros */

extern void lectura_configuracion(void);

extern void lectura_alimentación(void);

extern void archivar_datos__medida (void) ;

extern void fichero_semanal(void);

extern void guarda_mensaje{ char *mensaje);

extern void seguro_graficas(int orden);

/* cliente */

ex

tern

in

t so

cJt

ets

_p

asa

_d

ato

s (v

oid

) ;

ex

tern

in

t m

ensa

je_

a_S

UN

(ch

ar

*m

en

saje

);

/* p

rin

ter

*/

extern void imprime(char "mensaje);

/* calibra */

extern int mA^caudal{ char *fichero, float caudal, float *mA);

/* guardian */

extern void inicia_guardian(void);

extern void finaliza_guardian(void);

/* depura */

void selectmenu(void);

void inicializar_tiempos(void);

float dia_absoluto(void);

int puesta_en_marcha(void);

void actualizar_tiempos(void);

int seleccionar_accion(void);

void inicializar variables(void);

/* depura.c */

time t t_actual;

int £1=1;

/'variable que controla el final del programa*/

int i=0,j=0;

int ayuda=l;

int contador_guardian=0;

int dos=0;

.int old_intervalo_o2;

estado_planta planta;

primera medidas[3];

A-1

0AP

ÉNDI

CES

Page 68: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MO

NITORIZACIÔ

N Y CONTROL PLANTA PILO

TO

NOMBRES.H - DEFINICIÓN DE ESTRUCTURAS COMUNES PARA EL PROGRAMA DEPURA

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 21/9/98

typedef struct {

int activo;

float set_point;

float Kc;

float Ti;

float Td;

}controlador ;

typedef struct{

tirae__t t iempo ;

unsigned char fin;

}temporal;

/*Par metros del controlador*/

/* Para activar o desactivar el coi

/*Set point*/

/•Ganancia*/

/•Constante de tiempo integral*/

/•Constante de tiempo derivado*/

typedef struct {

int

carbono;

int

nitrógeno,-float agua;

}alimentación;

typedef struct{

int

/•Par metros del perfil de alimentación*/

/* Intervalo dosificación carbono */

/* Intervalo dosificación nitrógeno */

/* Caudal de agua */

sondas;

/* Para'activar o desactivar la lectura */

int

variadores;

int . control_nivel;

int

conexion_SUN;

int

com_PLC;

int

alarma;

time_t

t_actual

,-temporal

t_reloj;

temporal

t__antic;temporal

t_archivo;

temporal

t_inicio;

temporal

t_control_O2;

temporal

t_actualizacion_matrice3;

temporal

t_phrocon;

temporal

t_intervalo__toma_de_datos ;

temporal

t_gra fica;

temporal

t_seguro;

témpora1

t_SUN;

temporal

t_pantalla;

temporal

t_perfil;

temporal

t_OUR;

controlador

PID[3J;

float

velocidad[3];

float

caudal_agua;

float

caudal_RE;

float

caudal_RI;

int

entradas_plc[16];/*Guarda estado de las entradas*/

int

salidas_plc[24]; /*Guarda estado de las salidas*/

float

mA[6];

/*Guarda miliamperios PCL726*/

int

variable_actual;

int

escala_actual;

int

intervalo_control_O2;

int

intervalo_dosificacion[2];

int

intervalo_limp_do3if[2] ;

int

pistonadas_limp_dosif[2] ;

int

intervalo_control_nivel;

int

intervalo_toma_de_datos;

int

tiempo_purga;

int

duracion_purga;

int

actualizacion_graCica;

int

intervalo_SUN;

int

régi s t ro_O2;

int

intervalo_flojet_on;

int

intervalo_flojet_off ;

int

perfil;

int

intervalo_OUR;

int

OUR;

alimentación alimentot24];

AP

ÉN

DIC

ES

A-1

1

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CO

NTROL DE ED

AR

} es tado__planta

;

typedef struct {

cont roladors */

char nom[10];

int controlador;

float ph;

float temperatura;

float potencial;

float oxigeno;

float mA;

float velocidad;

}primera;

/•Estructura

per

paramètres

referents

als

/•Nom del controlador*/

/•Numero del controlador */

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

A-12

APÉNDICES

Page 69: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PR

OGRAMA OE MONTTORIZACIÓN Y CO

MTROI PLANTA PILOTO

TECLAS. H - DEFINICIÓN DE CÓDIGOS DE TECLADO

PROGRAMADOR:

Juan Antonio Baezâ Labat

ULTIMA REVISIÓN: 14/5/98

«define ESC

OxOllB

«define CTRLC

OX2E03

«define CTRLQ

0x1011

«define CTRLBS OxOETF

«define CTRLRET OxICOA

«define CTRLO

OxlSOF

«define ALTO

0x1000

«define ALTP

0x1900

«define ALTS

OxlFOO

«define ALTO

0x2000

«define ALTF

0x2100

«define ALTO

0x2200

«define Al/rc

Ox2E

OO«define ALTN

0x3100

«define

AI/TU

0x3200

«define ALTO

0x1800

«define RETURN

OxlCOD

«define INTRO

OxEOOD

«define BACKSP

OxOEOS

«define TAB

OXOF09

«define BARRA

0x3920

«define AMUNT

OX48EO

«define ABAIX

OxSOEO

«define DRETA

OX4DEO

«define ESQUERRA Ox4bEO

«define INSERT

OX52EO

«define SUPR

OX53EO

«define INICIO

Ox47EO

«define FIN

OX4FEO

«define REPAG

OxSlEO

«define AVPAG

Ox49EO

«define Fl

0x3800

«define F2

OX3COO

«define F3

OX3DOO

«define F4

Ox3EOO

«define F5

0x3 FOO

«define FS

0x4000

«define F7

0x4100

«define F8

0x4200

«define F9

0x4300

«define FIO

0x4400

«define FU

0x8500

«define F12

0x8600

«define ALTF1

0x6800

«define ALTF2

0x6900

«define ALTF3

Ox6AOO

«define ALTF4

OX6BOO

«define ALTF5

OX6COO

«define ALTF6

0x6000

«define ALTF7

OxSEOO

«define ALTF8

OX6FOO

•define ALTF9

0x7000

«define ALTF10

0x7100

«define o

OX186F

«define 0

Oxl84F

«define p

0x1970

«define P

0x1950

«define m

OX326D

«define M

Ox324D

«define

c.

0x1474

«define T

0x1454

«define e

0x1265

«define E

0x1245

APÉNDICES

A - 1

3

DESARROaO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

«define a

OX1E61

«define A

OX1E41

«define r

0x1372

«define R

0x1352

«define h

0x2368

«define H

0x2348

«define d

0x2064

«define D

0x2044

«define NUM1

0x0231

«define NUM2

0x0332

«define NUM3

0x0433

«define NUM1E

OX4FOO

«define HUM2E

0x5000

«define NUM3E

0x5100

A - 14

APÉNDICES

Page 70: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZAOÓN Y CONTROL PLANTA PILOTO

CALCULO. C - FUNCIONES PARA REALIZAR CÁLCULOS

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 27/10/98

«include <stdio.h>

/•«define TEST*/

int regresion_lineal( float *x, float *y, int n,

float *a, float *b, float *r);

/*•*.**.•.******.**.**.».*«.»•*.*».*.*.,*,**.***.**..***.**»»..*.*******.***/

/* Calcula la regresión lineal con los datos de x e y.

Devuelve ordenada (a),

pendiente (b) y coeficiente correlación (r) */

int regresion_lineal( float *x, float *y, int n,

float *a, float *b, float *r)

ífloat 3umx=O.OF,

sumy=0-0F,

sumxy=0.0F,

sumx2=0.0F,

sumy2=O.OF;

float parcial;

int i ;

if (n<2) return -1;

for (i=0;i<n;i++>

sumx=sum

x+x[í];sum

y=surny+y [i];sum

xy=sum

xy+x[i]*y[i] ;

sumx2=

sumx2+

x[i]*x[i];sum

y2=sumy2+y[ij *

y[i];

parcial=(n*sumx2-sumx*sumx) ;

if (parcial !=0)

*b=(n*sumxy-sumx*suroy)/parcial;

*b=O.OF;

*a=O.OF;

*r=O.OF;

return -1;

*aa(sumy-(*b)*sumx)/n;

parcial=((n*sumx2-sumx*sumx)•(n*sumy2-sumy*sumy));

if (parcial !=0) *r=(n*sumxy-sumx*sumy)*(n*sumxy-sumx*sumy)/parcial;

else *r=0.OF;

return 1;

«ifdef TEST

void main(void)

float misx[5]={l.OF,2.0F,3.0F,4.0F,S.OFj;

float misy[5]={2.OF,4.OF,6.OF,S.OF,10.5FJ;

float a,b,r;

regresion_lineal( misx, misy, 5, &a, &b, &r)

printf("\ta: %f\tb: %f\tr: %f\nn,a,b,r);

«endif

/******

APÉNDICES A

- 15

DE

SA

RR

OaO

E iM

PLE

ME

NTA

dÓN

DE

UN

SIS

TEM

A S

UP

ER

VIS

OR

PAR

A LA

GE

STIÓ

N Y

CO

NTR

OL

DE

ED

AR

CA

LIB

RA

. C

- FU

NC

ION

ES

PAR

A

CA

LIB

RA

DO

S D

OSIFIC

AD

OR

AS

Y A

GU

A

PRO

GR

AM

AD

OR

: Ju

an A

nto

nio

B

aeza

Lab

at

UL

TIM

A

RE

VIS

ION

: 3

0/5

/97

rias a incluir

«include <stdio.h>

«include <io.h>

«include <time.h>

«include <stdlib.h>

«include <memory-h>

«include "nombres.h"

/•«define TEST*/

Subrutinas del fichero

int

mA

cau

dal (

ch

ar

*fic

hero

, flo

at

cau

dal,

float

*mA

)

/******************* variables comunes del program

extern estado_planta planta;

int

mA_caudal( char *fichero, float caudal, float *mA)

FILE *obert;

char lineal 1150);

int numero=0,

punto=0;

int i;

float cal_caudal[25] ,

cal_mA[25] ;

float xl,x2,yl,y2,x;

if ( access(fichero,0) != 0) return -1;

obert=fopen(fichero, "rt" ) ;

memset(lineal,0,sizeof(lineal));

fgets(lineal,sizeof (lineal) ,obert)

,- /* Lee

1 l;nea del

fichero */

sscanf(lineal,"%d",&numero);

for (i=0; i<numero; i+-t-)

{fgets(lineal,sizeof(lineal).obert);

sscanf (lineal,·%flf·. &cal_mMi], ical_caudal [i] ) ;

}fclose(obert);

for (i=0;i<numero;i++)

ii£

(ca

l_c

au

da

l[i]>c

au

da

l)

pu

nto

=i;

bre

ak

;

}

if (p

un

too

nO

) re

turn

-2

;

xl=

cal_

cau

dal(p

un

to-1

];x

2=

cal_

cau

dal{

pu

nto

];y

l=cal_

mA

[pu

nto

-1];

y2

=c

al_

mA

[pu

nto

];x

=cau

dal;

*m

A=

yl+

(y2

-yl)/(x

2-x

l)*(x

-xI);

A - 16

APÉNDICES

Page 71: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

********

APÉN

DICE

S. P

ROG

RAM

A DE

MO

NIT

OR

IZAC

IÔN

Y C

ONT

ROL

PLAN

TA P

ILO

TO

retu

rn

0;

t ,

Kifdef TEST

void main (void)

f float a=400'.OF,b=O.OF;

inc retorno;

int i;

a=

10

0.0

F*

i;retomos mA_caudal í "c: \\depura\\bombal .dat" , a, &b) ;

printfC'a: %f\tb: %f\t retorno: %i\n", a,b, retorno) ;

} for (i=0;i<10; Í-I-+)

{a=200.0F*i; "

retorno= mA__caudal( "c : \\depura\\bomba2 .dat" , a, &b) ;

print f ("a: %f\tb: %f\t retorno: %i\nn , a, b, retorno) ;

} for ti=0;i<10; Í++)

{a=50.0F*i;

retorno=- mA_caudal ( "c: \\depura\\v_agua .dat" , a, &b) ;

print f ("a: %f\tb: %f\t retorno: %i\n" , a,b, retorno) ;

ï Î ttendif

/+...*.****„**.*.*****.**»*..***.****+***.**.**»+.**.

APÉN

DICE

S A

-17

DESA

RRO

LLO

E IM

PLEM

ENTA

QO

N O

E UN

SIS

TEM

A S

UPER

VISO

R P

ARA

LA G

ESTI

ÓN

Y C

ON

TRO

L DE

ED

AR

CLIENTE.C - FUNCIONES PARA LA COMUNICACIÓN CON LA SUN

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISION: 24/10/98

«include <stdio.h>

# include <string.h>

«include «memory .h>

# include <process.h

«include <3tdlib.h>

if include

«include

«include

«include

io.h>

conio.h>

time.h>

nombres .h"

«include "c : \sockets\devkit\include\pctcp\types . h"

«include "c-. \sockets\devkit\include\sys\types ,h"

«include "c: \sockets\devkit\include\sys\ioctl .h"

«include "C: \socketa\devkit\include\pctcp\errno.h"

«include "c:\sockets\devkit\include\sys\gocket.h"

«include "c: \socket9\devkit\include\netinet\in.h"

«include "c : \sockets\devkit\include\netdb.h"

/'«include "c: \sockets\devkit\include\arpa\inet .h"*/

«include "c : \sockets\devkit\include\pctcp\pctcp . h"

«include "c: \sockets\devkit\include\pctcp\ipconfig.h"

«include "c: \sockets\devkit\include\pctcp\sockets.h"

«include "c:\3ocketa\devkit\include\pctcp\options.h"

«include "c: \sockets\devkit\include\fcntl ._h"

«include <sys\time.h>

/««define DEPURA

«define TEST

«define extern*/

/* «de fine svrName "eq3.uab.es"

«define svrName "158.109.13.2"

«define Port (ushort) 32323

«define TAMANY 512

«define TAMANY_PETIT 32

«define TAMANY M

100

typedef unsigned short ushort;

typedef unsigned long ulong;

/* Direcciin SUN */

/* Direcciin num,rica SUN */

/* Numero de puerto del socket */

/* Tamaoo del buffer */

/* Tama°o del mensaje cliente */

/* Definición de tipo de variables */

/e********************** subrutinas del fichero *****

int sockets_pasa_datos(void) ;

int sockets_lee_datos_SUN(void);

void medidas_al_buffer(void);

int cambio_consignas(void);

int nuevo9_datos_SUN (void)

,-int mensaje_a_SUN(char 'mensaje);

void medida_a_SUN_varios(char variable, float valor);

int sockets_pasa_datosjpetit(void);

int connectToServer(char *serverName, ushort port);

int discpnnectToServer(int toServerSocket);

void error_send(int errno);

void error_socket(int errno);

void error_connect(int errno);

Sifdef TEST

void main(void);

«define extern

«endif

A-18

APÉNDICES

Page 72: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

AP

ÉN

DIC

ES

. P

RO

GR

AM

A D

E M

ON

rTO

RIZ

AC

IÓN

Y C

ON

TRO

L P

LAN

TA P

ILO

TO

ex

tern

u

lon

g

inet_

ad

dr(c

har

'serv

ido

r};

/**

JB*

*/

ex

tern

in

t clo

se(in

t e

lso

ck

et);

/**

JB*

*/

ex

tern

in

t v

aria

r_v

elo

cid

ad

(do

ub

le v

elo

cid

ad

, in

t v

aria

do

r);ex

tern

v

oid

g

uard

a_

tnen

saje (

ch

ar

*m

en

3aje

) ;ex

tern

v

oid

im

prim

e(c

har

«m

en

saje

);ex

tern

in

t m

A_

caud

al ( ch

ar

*fic

hero

, flo

at

cau

dal,

float

*mA

) ,-ex

tern

in

t p

c!7

26

(int

can

al,

floa

t m

iliam

pe

rios);

ex

tern

in

t p

lc_

time

r(int

valo

r, in

t n

um

ero

);exte

rn void

ala

rma(in

t m

otiv

o);

ex

tern

v

oid

g

ra£

_tn

en

saje (c

har

*m

en

saje

);

orau

nes

del

pro

gra

ma

**

**

**

**

**

**

**

**

**

**

/

/*

Varia

ble

a tra

nsm

itir o recib

ir *

/ch

ar

bu

ffer[TA

MA

NY

]¡ch

ar

bu

ffer_p

[TA

MA

NY

_P

ET

IT];

ex

tern

esta

do

_p

lan

ta p

lan

ta;

ex

tern

p

rimera

m

ed

ida

s[3}

;

/****„*.*,.„.*..****.*******,

******.*«.*»*..*.**********.**.****/

/* FunciCn para establecer la comunicación y controlar el env¡o y la

recepciCn de datos */

int sockets_pasa_datos(void)

int toServerSocket = -1;

int i ;

char carácter[1]={'S'};

/* Variables de control */

/* Si la conexifn anterior no ha sido correcta, vuelve */

if (planta.conexion_SUN == 0} return -2;

/* ConexiCn con la SUN */

toServerSocket = connectToServer(svrName, Port);

/* Si la conexiín no es correcta, devuelve -1 */

i f (toServerSocket = = -1)

{ftifdef

DEPURA

printf ("Error en la conexitn\n");

ttendifplanta. conexion_SUN=0

;'guarda_mensaje( "La conexiCn con la SUN no es correcta\t\t\xO");

imprime( "La conexiCn con la SUN no es correcta\v\v\n\xO");

return -1;

Î

ffifdef DEPURAprintf("CONEXIO A %s REALITZADA, %i\n",svrName,toServerSocket);

Sendif

/* Pedimos nuevas consignas */

carácter[Oj « *C';

send (toServerSocket, carácter, sizeof (carácter), O)

,-

recv(toServerSocket, carácter, sizeof(carácter), 0);

if (caracter[0)=='S')

í/*

printf("Tenemos consignas\n");*/

recvítoServerSocket, buffer, sizeof(buffer), 0);

if (cambio_consignas()==l)

{carácter[0]»'O1;

send(toServerSocket, carácter, sizeof(carácter), 0);

/•printf("Consignas correctas\n");*/

carácter[0]='N';

send(toServerSocket, carácter, sizeof(carácter) , 0);

/*printf("Las consignas no son correctas\n");*/

APÉNDICES A

-19

DESARROLLO

E IMPLEM

ENTAQ

ÓN

DE UN SISTEM

A SUPERVISO

R PARA LA G

ESTIÓN

Y CO

NTR

OL DE E

DA

R

/* Introducimos los datos en el buffer */

medida3_al_buffer()

,-

carácter[0]='S';

/* Mandamos una S, queremos establecer los valores, set */

send(toServerSocket, carácter, sizeof(carácter), 0);

/* Mandamos el buffer */

i = send(toServerSocket, buffer, sizeof(buffer), 0);

ttifdef DEPURA

if (io=r-i)

error_send (errno) ;

ttendif

/* Recibimos respuesta */

recv(toServerSocket, carácter, sizeof(carácter), O);

/* Lo env¡a de nuevo si no ha sido bien recibido */

if (caracter[0]!-'O')

ííf i

f de f DEPURA

printf("Recibimos mal\nn);

#endifcarácter [Oj

s» *S • ;sendítoServerSocket, carácter, sizeof(carácter), 0);

send(toServerSocket, buffer, sizeof(buffer), 0);

recv(toServerSocket, carácter, sizeof(carácter), 0);

if (carácter(0]!='0')

/* Si lo recibe mal de nuevo, desconecta */

{(t i

f de f DEPURA

printf("Recibimos mal de nuevo\nn);

Sendif

disconnectToServer(toServerSocket);

return -3;

/* Pedimos desconexitn */

carácter[0J ='F';

sendítoServerSocket, carácter, sizeof(carácter), 0);

disconnectToServer(toServerSocket);

return O ;

j/* Función para pedir las lectura de la SUN */

int sockets_lee datos_SUN(void)

int

toS

erv

erS

ock

et

= -1

;in

t i ,-

ch

ar

ca

rac

ter[l]=

{·R

'};

/* Variables de control */

/* Conexiín con la SUN */

toServerSocket = connectToServer (svrName, Port) ;

/* Si la conexiCn no es correcta, devuelve -I */

if (toServerSocket==-l)

íit i

f de f DEPURA

printf ("Error en la conexiín\n" ) ;

Sendifplanta . conexion_SUN=0 ;

retu

rn

-1;

#ifdef DEPURA

printf ("CONEXIO A %s REALITZADA, %i\n" , avrName, toServerSocket ) ;

Sendif

/* Mandamos una R, queremos leer los valores */

sendítoServerSocket, caràcter, gizeof (caràcter) , 0) ;

A-2

0APÉNDICES

Page 73: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ON

ITO

RIZ

ACIÓ

N Y

CO

NTRO

L PL

ANTA

PIL

OTO

/* Recibimos el buffer */

recvttoServerSocket, buffer, sizeof(buffer), 0);

if (nuevos_datos_SUN()==l)

ífif

de

f D

EPU

RA

pri

ntf

("D

ato

s en

via

do

s p

or

la

SU

N:\

n"

);it en

d i

fC

or

(Í=

0;Í

<3

;i+

+)

prin

tft

"%s\

n",

m

ed

ida

s[i

].n

om

>

;p

rin

tfí

"pH

; %

7.4

f\n

",

me

did

as[i

].p

h

);

prin

tf(

"T:

%7

.4f\

n"

, m

ed

ida

s[i

]-te

mp

era

tura

);

prin

tf(

"mV

: %

7.4

f\n

",

med

idas[i

]-p

ote

ncia

l );

prin

tfí

°O2

: %

7.4

f\n

",

med

idas[i

]-o

xig

en

o

);

prin

tfí

"mA

: %

7.4

f\n

",

me

did

as[

i]-m

A

);

prin

tf(

"V

: %

7.4

f\n

",

med

idas[i

].v

elo

cid

ad

);

}

/* Pedimos desconexión */

carácter[0]='F';

sendttoServerSocket, carácter, sizeof(carácter), 0);

disconnectToserver(toServerSocket);

return 0;

t •

/* Introduce los datos de la estructura medidas en el buffer,

añadiendo un cheksum

*/

void medidas_al_buffer(void)

í str

uct

seg

un

da{

ch

ar

no

m[3

][1

0],

co

ntr

ola

do

r[3

][1

0],

ph

{3

] [1

0],

tem

pera

tura

[3]

[10J

,p

ote

ncia

l[3

] [1

0]

,o

xig

en

o[3

] [1

0] ,

mA

[3]

110]

,v

elo

cid

ad

[3]

[10]

,c

au

da

les[3

][1

0],

set_

po

int_

ox

igen

o[3

] [1

0]

,set_

po

int_

ag

itacio

n[3

][1

0],

en

trad

as_

plc

[16

],sa

lid

as_

plc

[24

],eata

do

s_

vari

os

[20

],ti

em

po

s[1

0][

10

];}

dato

s;

int i;

unsigned long chequeo=OL;

memset(buffer, O, sizeof(buffer));

memset(&datos. O, sizeof(datos));

/* Borra las estructuras */

/*

Intr

od

ucim

os

las

med

idas

en

la

estr

uctu

ra

qu

e p

asa

mo

s a

la

SU

N

*/

for

(i=

0;i

<3

;i+

+)

sp

rin

tf(

da

tos.n

om

[i],

"%

s",

me

did

as[i

].n

om

);

sp

rin

tf(

dato

s.c

on

tro

lad

or[

i],

"%4

i",

med

ídas[i

}.c

on

tro

lad

or

);

sp

rin

tfí

da

tos.p

h[i

],

"%

7.4

fn,

me

did

as[i

].p

h )

;

sp

rin

tfl

dato

s.t

em

pera

tura

[i]

, "

%7

.4f"

, m

ed

idas[i

j.te

mp

era

tura

);

sp

rin

tfí

da

tos.p

ote

nc

ial[

i],

n%

7.4

f",

med

idas[i

}.p

ote

ncia

l );

sp

rin

tf (

d

ato

s -o

xig

en

o [

i] ,

"%

7 . 4

f " ,

med

idas

[i]

.ox

igen

o

) ,-

sp

rin

tfl

da

tos.m

A[i

],

"%

7.4

f",

me

did

as[

i].m

A );

sp

rin

tft

dato

s.v

elo

cid

ad

fi],

"

%7

.4f"

, m

ed

idas[i

]-v

elo

cid

ad

);

sp

rin

tf(

da

tos.s

et_

po

int_

ag

ita

cio

n[i

],

"%

7.4

f",

pla

nta

.velo

cid

ad

[i]

);

sp

rin

tfí

dato

s.s

et_

po

int_

ox

igen

o[i

] ,

"%

7.4

f",

pla

nta

. P

ID[i

] .s

et_

po

int

) ,- AP

ÉNDI

CES

A -

21

DESA

RRO

LLO

E IM

PLEM

ENTA

QO

N D

E UN

SIS

TEM

A S

UPER

VISO

R P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

OE

ED

AR

sprintf( datos.caudales[0], "%7-4f"

sprintf( datos.caudales[1], "%7.4f"

sprintf( datos.caudales[21 , -%7.4f"

planta.caudal_agua);

planta.caudal_RE);

planta.caudal_RI);

for

(i=

0;i

<1

6;i

++

)if

(p

lan

ta.e

ntr

ad

as_

plc

[i]=

=1

) d

ato

s.e

ntr

ad

as_

plc

[i]=

49

;els

e

da

tos-e

ntr

ad

as_

plc

[i]=

48

;

for (i = 0;i<24;i-H->

if (planta.salidas_plc[i]==1) datos.salidas_plc[i]=49;

else datos.salidas_plc[i]=48;

for (i = 0;i<3;i++) datos.estados_varios [i] = (char) (planta.PID[i] .activo+48);

for (i=3,-i<20; i++) datos . estados_varios [i] =48;

sprintf (datos . tiempos [O] , "%4i" , planta. intervalo_SUN) ;

sprintf(datos.tiempos El],"%5i", planta.duracion_purga);

sprintf(datos.tiempos[2],"%4i", planta.tiempo_purga);

sprintf (datos . tiempos [3] , "%4i" , planta . intervalo__dosif i cae ion [0] ) ;

sprintf(datos.tiempos[4],"%4i"

sorintf(datos.tiempos[5],"%4i"

sprintf(datos.tiempos[6] ,"%4i"

planta.intervalo_dosificacion[1]);

planta.intervalo_flojet_on);

planta.intervalo_flojet_off);

for (i=7;i-c9;i + + ) sprintf ( datos .tiempos [i] , "100") ;

sprintf( datos.tiempos[9], "%2i" , planta.alarma);

/* Copiamos la estructura de datos al buffer */

memcpy(buffer, ¿datos, sizeof(datos));

/* Calculamos el cheksum del buffer */

for (i=0;i< (TAMANY-12) ;i-n-J

chequeo+=buf f er [i] ;

/* Introducimos el cheksum como cadena de caracteres en la posiciín 500 */

sprintf(Sbuffer[500],"%lllu",chequeo);

/*•************»******,*******.*******..******,,**.**,****************.**/

/* A partir de las consignas mandadas por la SUN en el buffer, efectua las

acciones necesarias para establecerlas en la planta piloto */

int cambio_consignas(void)

{ struct consignas{

char cambio_oxigeno[3],

cambio_agitacion[3],

cambio_caudales[3],

cambio_tiempos[10] ,

valor_oxigeno[3][10],

valor_agitacion[3][10],

valor_caudales[3][10],

tiempos[10][10],

cambio_variable[20] ,

valor_variable[20] [10] ;

}datos;

unsigned long chequeol=OL,

chequeo2=OL;

int

i ,-

float consigna;

int consignai;

int intervalo;

float tnA=O.OF;

char mensaje[100];

int status=0;

int debug=0;

if (planta.variable_actual«20) debug=l;

for (i = 0,-i< (TAMANY-12) ;i+-t-> chequeol+=buf f er [i] ;

chequeo2= atol(¿buffer[500]);

/* Si falla el chequeo, devuelve un cídígo de error -1 */

if (chequeol!=chequeo2) return -1;

/* Copiamos el buffer a la estructura de datos */

memcpy(¿datos,buffer,sizeof(datos));

A-22

APÉNDICES

Page 74: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONITO

RIZACIÓN

Y CONTRO

L PLANTA PILOTO

for (i=0;i<3;i++)

íi f (datos.cambio_oxigeno[i J =

='1' )

if (debug) graf_mensaje("Cambio consigna oxigeno G2">;

consigna = (float) atof(datos,valor_oxigeno{i]);

if ( (consigna <= 10.0) &&

(consigna >= 0.0) )

planta.PID[i].set_point = consigna;

sprintf(mensaje,

"Nueva consigna oxigeno reactor %i: %4.2f ppm", i+l, consigna);

guarda_mensaje( mensaje );

if (datos.cambio_agitacion ti]=='1')

fif (debug) graf_mensaje("Cambio consigna agitación G2n);

consigna = (float) atof(datos.valor_agitacionEil);

if ( (consigna <= 100.0) && (consigna >= 0.0) )

variar_velocidad( consigna, i+l);

planta.velocidad[i]=consigna;

sprintf(mensaje,

"Nueva consigna agitación reactor %i: %4.2f ppm", i+l, consigna);

guarda_mensaje( mensaje );

í

if (datos.cambio caudales [0]=='1')

íif (debug)

graf_mensaje("Cambio consigna caudal G2");

consigna =

(float) atof(datos.valor_caudales[O]);

if ( (consigna <= 500.0) && (consigna >=

0.0) )

ístatus = mA_caudal( "c:\\depura\\v_agua.dath, consigna, &mA);

if (status==0)

íplanta.caudal_agua=consigna;

pc!726 (0,mA)

,- /*Abre la v Ivula de entrada de agua*/

sprintf(mensaje,

"Nueva consigna: v Ivula de agua abierta: Q = %4.If ml/min, %4.2f mA

planta.caudal_agua,mA);

guarda_mensaje( mensaje );

else

guarda_mensaje( "Consigna de caudal de agua recibida incorrecta\t\xO") ;

if (datos . c

ambio_caudales [i]

== ' i

* )(if (debug)

graf_mensaje ("Cambio consigna caudal G2") ;

consigna =

(float) atof ( datos. valor__caudales [1] ) ;

if ( (consigna <= 1000.0) && (consigna

>=» 0.0} )

status = mA_caudal( "c:

\\depura\\bombal.dat11 ,

consigna, &mA) ;

if (status==0)

íplanta. caudal_RE=consigna;

pcl726(l,mA) ;

/«Regula la bombai, RE*/

sprintf (mensaje,

"Nueva consignas bomba RE: Q =

%4.lf ml/min, %4.2f mA

",planta. caudal_RE,mAÍ ;

guarda_mensaje ( mensaje );

}else

guarda_mensaje ( "Consigna de caudal bomba-1 RE recibida incorrecta\t\xO" )

,-

if (datos.cambio_caudales [2]

= =< '

1 ' )

íif (debug)

graf_mensa je ("Cambio consigna caudal G2");

consigna =

(float) atoE (datos. valor_caudales [2]

) ;

if ( (consigna <= 2000.0) && (consigna >= 0.0) )

status = mA_caudal( "c:

\\depura\\bomba2 .dat" , consigna, &mA) ,-

if (status==0)

APÉNDICES A

- 23

DESARROLLO

E IMPLEM

ENTAOO

N DE UN

SISTEMA

SUPERVISOR PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

planta . caudal_RI=consigna ;

pc!726 (2,mA) ;

/*Regula la bomba2, RI*/

sprintf (mensaje,

"Nueva consigna: bomba RI : Q = %4.1f ml/min, %4.2f mA

" ,

planta. caudal_RI,mA) ;

guarda_mensaje( mensaje );

}else

guarda_mensaje( "Consigna de caudal bomba-2 RI recibida incorrecta\t\xO" ) ;

if (d

ato

s. c

am

bio

_tie

mp

os [O

] o=

'i' ){if (debug)

graf_mensaje(nCambio consigna comunicaciCn G2°);

consignai = a toi (datos. tiempos [0]

) ;

if ( (consignai <= 2000) && (consignai >~ 10) )

íplanta . intervalo_SUN=consignai ;

sprintf (mensaje, " Nueva consigna: intervalo SUN, t = %4i seg" .consignai) ;

guarda_mensaje ( mensaje ) ;

}else guarda_mensaje ( "Consigna intervalo SUN recibida incorrecta\t\xO" ) ;

}if

(dato

s .cam

bio

_tie

mp

os [1

] ==

'!'}{if (debug)

graf_mensaje( "Cambio consigna purga G2") ;

consignai = atoi (datos . tiempos [1]

) ;

if ( (consignai <= 9999) && (consignai >= 0) )

íplanta. duracion_purga consignai;

intervalo=planta . d

uracion_purga ;

plc_timer( intervalo, 3) ;

sprintf (mensaje,

"Nueva consigna: duración purga, t

=• %5i /10 =segn , c

onsignai) ;

guarda_mensaje ( mensaje );

}else guarda_mensaje( "Consigna duracitn purga recibida incorrecta\t\xO" ) ;

}if (datos.cambio_tiempos [2]

oo1 i

' )tif (debug)

graf_mensaje ("Cambio consigna intervalo purga G2") ;

consignai = atoi (datos. tiempos [2]

) ;

if ( (consignai <= 1000) && (consignai >= O) )

{planta . tiempo_purga=consignai ;

intervalo^planta. tiempo_purga*10-planta.duracion_purga;

plc_timer( intervalo, 4) ;

sprintf (mensaje,

"Nueva consigna: intervalo purga, t = %4í seg" , c

onsignai) ;

guarda_mensaje ( mensaje ) ;

ielse guarda_mensaje ( "Consigna intervalo purga recibida incorrecta\t\xO") ;

tif (datos . cambio_tiempos [3] «

' 1 ' )

{if (debug)

graf_mensaje ("Cambio consigna intervalo N G2") ;

consignai = atoi (datos . t

iempos [3]

) ;

if ( (consignai <= 1000) && (consignai >= 1) }

íplanta. intervalo_dosif icacion [O]

«consignai;

intervalo=planta.intervalo_dosificacionlO] *10-1;

if (plc_timer( intervalo, 11)!=0) plc_timer( intervalo, 11);

sprintf (mensaje,

"Nueva consigna: intervalo dosificación N, t - %4i seg" , c

onsignai) ;

guarda_mensaje ( mensaje );

- else guarda_mensaje( "Consigna intervalo dosificaciín N recibida incorrecta\t\xO" ) ;

}if (datos. cambio_tiempos [4]

=='!')

(if (debug)

graf_mensaje ("Cambio consigna intervalo C G2") ;

consignai =

atoi (datos. tiempos [4]

} ;

if ( (consignai <= 1000) 6& (consignai >= 1) )

A-24

APÉNDICES

Page 75: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONi

TORi

zAaó

N Y

CON

TROL

PLA

NTA

PILOT

O

í planta.intervalo_dosificacion [1]^consignai;

intervalo=planta.intervalo_dosificacion[1] *10-1;

i£ (plc_timer( intervalo, 13}!=0> plc_timer( intervalo, 13);

sprintf(mensaje,

"Nueva consigna: intervalo dosificaciCn C, t = %4i seg",consignai);

guarda_mensaje( mensaje );

ielae guarda_mensaje( "Consigna intervalo dosificaciCn c recibida incorrecta\t\xO");

}if (datos.cambio_tiempos[S]=='l')

í if (debug)

graf_tnensaje ("Cambio consigna flojet on G2");

consignai = atoi(datos.tiempos[5] ) ;

if ( (consignai <= 30) && (consignai >= 0) )

{ planta.intervalo_flojet_on=consignai;

planta.intervalo_flojet_off=30-planta.intervalo_flojet_on;

intervalo=planta.intervalo_flojet_on*10;

if (plc_timer( intervalo, 30)¡«0) plc_timer( intervalo, 30);

if (plc_timer( intervalo, 32)1=0) plc_timer( intervalo, 32j;

:

intervalo=planta.intervalo_flojet_off*10;

if (plc_timer( intervalo, 31)!=0) plc_timer( intervalo, 31);

if (plc_timer( intervalo, 33)!=0) plc_timer( intervalo, 33);

sprintf(mensaje,

"Nueva consigna: intervalo flojet on, t = %4i seg",consignai);

guarda_mensaje( mensaje );

}elae guarda_mensaje( "Consigna intervalo flojet on incorrecta\t\xO"í ;

)if (datos.cambio tiempos[9]=='1')

{ if (debug)

graf_mensaje("On-off G2");

consignai = atoi(datos.tiempos[9});

if

(consignai ==> 10)

alarma (6) ;

else if

(consignai == 11) alarma(-2);

elae guarda_mensaje( "Alarma SUN incorrecta\t\xO") ;

for (i=0;i<3;i++)

/* Cambio de estado PIDs */

if (datos.cambio_variable[i]=='1')

i consignai

=• atoi (datos . valor_variable [i] ) ;

if (planta.PID[i].activo!=0) /* Si no est

estimando OUR */

( if (consignai == l)

planta.PID[i).activo=l;

sprintf(mensaje,"PID %i activado",i+1);

guarda_mensaje( mensaje };

if (consignai == 2)

planta.PID[i}.activo=2;

sprintf(mensaje,"PID %i desactivado",i+l);

guarda_mensaje( mensaje );

}

for (i-4;i<6;i+t)

/* Cambio de salida PCL726 >/

if (datos.cambio_variable[i]—'1')

{ consigna = (float) atof(datos.valor_variable[ij);

if (consigna >= 4.0 && consigna <= 20.0)

{ pcl726 (i, consigna);

/* Actuación */

sprintf(mensaje,"PCL726 *i, %7.4f mA", i, consigna);

guarda mensaje(mensaje);

ielse guarda_mensaje( "Consigna PCL726 incorrecta\t\xO");

APÉN

DICE

S

A -

25

DESA

RROL

LO E

IMPL

EMEN

TADÓ

N DE

UN

SISTE

MA S

UPER

VISO

R PA

RA LA

GES

TIÓN

Y CO

NTRO

L DE

EDAR

/* Toma el buffer mandado por la SUN y da valores a la estructura

de las medidas */

int nuevos_datog_SUN(void)

{ 81ruc t s egunda{

char nom[10],

controlador[10],

ph[10],

temperatura[10],

potencial[10],

oxigeno[10] ,

mA[10] ,

velocidad[10];

}datos(3];

int

chequeólaOL,

chequeo2=OL;

for

(i=

0,-

i< (

TA

MA

NY

-12)

;i

cheq

ueo

l+=

bu

f f er

[ij

;

chequeo2= atoi (&buf fer (500] );

i f (chequeol«chequeo2 )

printf ("Cheltsum OK\n");

else

{ printf ("Falla el cheksum\n") ;

retu

rn

-1;

mema e t (medidas. O, sizeof (medidas) ) ;

memcpy ( datos, buf fer, sizeof (datos) ) ;

í memcpy (medidas [i] .nom, datos [i] .nom, sizeof (medidas [i] .nom)) ;

medidag[i] .controlador =(short int) atoi (datos [i] .controlador) ;

medidas [i] .ph = (f loatïatof (datos [i] .ph) ;

medidas [i] . temperatura = (float) atof (datos [i] .temperatura) ;

medidas [i] -potencial = (float) atof (datos [i] .potencial) ;

medidas [i] .oxigeno = (float) atof (datos [i] .oxígeno)

,-medidas [i] .mA - (float) atof (datos [i] .mA) ;

medidas[i] .velocidad = (float) atof (datos [i] .velocidad) ;

Î

return 1;

i

/* Variables de control */

int

men

saje

a

S

UN

(ch

ar

*m

en

saje

){ in

t to

Serv

erS

ocíc

et

= -1

;in

t i;

unsigned long chequeo=OL;

char caracter[l]={'M'î;

time_t Itime;

char mensaje_cliente[TAMANY_M];

/*if (planta.conexion_SUN =» 0} return -2;*/

memset(buffer. O, sizeof(buffer));

/* Borra las estructuras */

memset (mensaje_cliente. O, sizeof(mensaje_cliente));

time (Sltime);

sprintf(mensaje^cliente,"%s*s", mensaje, ctime( &ltime ));

/* Copiamos el mensaje al buffer */

memcpy(buffer, mensaje_cliente, sizeof(mensaje_cliente)};

/* Calculamos el cheksum del buffer */

A-26

APÉNDICES

Page 76: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MO

NITORIZACIÓ

N Y CO

NTROL PLANTA PILO

TO

for (i = 0

;i<(TAMANY-12) ;i + + )

chequeo+=buf f e

r [i]

;

/* Introducimos el cheksum como cadena de caracteres en la posicíín 500 */

sprint f (

¿buffer [500]

, "Illlu" , c

hequeo) ;

/* Conexión con

la SUN

*/

toServerSocket = connectToserver ísvrName, Port) ;

/* Si la conexiín no es correcta, devuelve -1

*/

if ( toServerSocket ==-1)

fftifdef

DEPURA

printf ("Error

en

la conexiínXn"}

,-tenditplanta . c

onexion_SUN=0 ;

return -l;

)else planta. conexion_SUN=l;

ftifdef DEPURA

printf ("CONEXIO A %s REALITZADA, %i\n" , s

vrName, toServerSocket ) ;

ftendif

/* Mandamos una M, queremos mandar mensaje */

send (toServerSocket, carácter, sizeof (carácter) , 0) ;

/* Mandamos el buffer */

sendttoServerSocket, buffer, sizeof (buffer) , 0) ;

/* Recibimos respuesta */

recv(toServerSocket, carácter, sizeof (carácter) , 0)

;/* Lo env¡a de nuevo si no ha sido bien recibido */

if (caractériel ¡='O'}

ícarácter [0]

= 'M' ;sendttoServerSocket, carácter, sizeof (carácter) , o) ;

send {toServerSocket, buffer, sizeof (buffer) , 0) ;

recv( toServerSocket, carácter, sizeof (carácter) , 0)

;if (carácter [0]

¡s'O' }

/* si lo recibe mal de nuevo, desconecta */

disconnectToserver (toServerSocket) ,-

return -3;

/* Pedimos desconexión */

carácter [0]

= ' F

r ;send (toServerSocket, carácter, sizeof (carácter) , 0) ;

disconnectToserver (toServerSocket) ;

return 1;

/* Introduce los datos de la estructura medidas en el buffer,

a°adiendo un cheksum y

llama a otra funciCn que manda los datos */

void medida a SUN varios (char

variable, float valor)

{struct variable_texto{

char

variable [5]

;char

valor [10]

;}var_texto;

int i;

unsigned long chequeo=OL;

memset (buf

fer_p. O, sizeof (buf

f er_p) ) ;

memset (&var_texto, O,

sizeof (var_texto) ) ;

/* Borra las estructuras */

/* Introducimos las medidas en la estructura que pasamos a la SUN */

sprint f ( va r_texto. variable, "%3i" , v

ariable) ;

sprint f ( var_texto. valor, "%9.

5 f n , valor) ;

APÉNDICES A

- 27

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISO

R PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

/* Copiamos la estructura de datos al buffer */

memcpy(buffer_p, &var_texto, sizeof(var_texto));

/* Calculamos el cheksum del buffer */

for (i=0;i<(TAMANY_PETIT-12);i++> chequeo+=buf f er__p [i]

;

/* Introducimos el cheksum como cadena de caracteres en la posición 20 */

sprintf (&buffer_p [20] ,-"%lllu"

, chequeo)

,-

/* Pasamos los datos a la SUN */

sockets_pasa_datos_petitO ;

í/*******

******

*.*,**************.*****.

********

//* Funcitn para establecer la comunicaciín y controlar el env;o y la

recepción de datos */

int sockets_pasa_datos_petit(void)

int toServerSocket =

-1 ;int

i;

char carácter [1];

/* Variables de control */

if (planta. conexion_SUN == O) return -2;

/* Conexitn con la SUN */

toServerSocket = connectToserver (svrName, Port) ;

/* Si la conexión no es correcta, devuelve -1 */

if (toServerSocket ==-1)

{ftifdef DEPURA

printf ("Error en la conexiín\n" ) ;

ttendif

planta . conexion_SUN=0 ;

guarda_mensaje( "La

conexiCn con la SUN no es correcta\t\t\xO" ) ;

imprime ( "La conexiCn con la SUN no es correct a\v\v\n\xO" ) ;

retu

rn

-1;

(t i f de f DEPURA

printf ("CONEXIO A %s REALITZADA, %i\n", svrName, toServerSocket) ;

ftendif

carácter [0]

=' V ,-

/* Mandamos una V, queremos establecer un valor */

send (toServerSocket, carácter, sizeof (carácter) , 0) ;

/* Mandamos el buffer */

i = sendttoServerSocket, buffer_p, sizeof (buf

fer_p) , 0) ;

ftifdef DEPURA

if (i==-i) error_send(errno) ;

ftendif

/* Recibimos respuesta */

recv (toServerSocket, carácter, sizeof (carácter) , 0)

,-/* LO envja de nuevo si no ha sido bien recibido */

if (caracterfO] lo'O')

í» i f d

e f DEPURA

printf ( "miserver recibe mal\nn) ;

Sendifcaracter[0] ='V' ;

sendttoServerSocket, carácter, sizeof (carácter) ,

0) ;

send (toServerSocket, buffer_p, sizeof (buf

f er_p) ,

recv(toServerSocket, carácter, sizeof (carácter) ,

if (carácter [O]

¡='O' )

/* Si lo recibe mal de nuevo, desconecta •/

«i f d

e f D

EPUR

Ap

rintf ("m

iserv

er

recib

e

ma

l\n"

);ftendif

disconnectToserver (toServerSocket) ;

return -3;

i

A-2

8A

ND

ICE

S

•••••••••••••••••••••••••+

*•••+

•••••»

•••+

Page 77: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DIC

ES.

PRO

GRA

MA

DE M

ON

ITO

RIZ

AOÓ

N Y

CO

NTRO

L PL

ANTA

PIL

OTO

/* Pedimos desconexión */

carácter [01 = ' F

1 ;

send (toServerSocket, carácter, sizeo

disconnectToServer (toServerSocket) ,•

return 0;

r) , 0) ;

/••*•• ........

*•••• ................. ............... ....... ... ....... ...../

/* connectToServer es usada por el cliente para abrir una conexiCn

*/

/*

con el servidor

*/

/.............. ............. ..................... ......... ...........„../

int connectToServer (char *9erverName, ushort port)

struct sockaddr_in serverSockAddr;

int toServerSocket = (-1) ;

ulong hostAddr;

int result = (-1) ;

int error=0;

struct linger{

int l_onof f ;

int l_linger;

}mi_linger;

/* Variable dirección del host remoto */

/* Puntero direcciín del host remoto */

/* Descriptor del socket local */

/* Dirección del host */

/* Supone fallo */

/*

Borra y establece la estructura de la direcciCn del servidor

memset(&serverSockAddr, O, sizeof(serverSockAddr) };

hostAddr = inet_addr (serverName) ;

if ( (long)hostAddr != {long)(-l)}

/* Devuelve la direcciCn */

/* Hay direcciCn */

ttifdef DEPURA

printf (

n\nconnectToServer : se ha obtenido la dirección de %s i es %lx \n", serverName,

hostAddr);

Sendif

memcpyí & {serverSockAddr .sin_addr), &hostAddr, sizeof (hostAddr) ) ,-

else

/* No hay direcciín */

ffifdef DEPURA

printf("\nconnectToServer: no se ha obtenido directamente la direcciín \n" );

«endif

/* Se consulta al servidor de nombres para determinar la direcciCn del host */

serverHostEnt = gethostbyname(serverName); /* Asignación de la direcciín remota */

if(NULL == BerverHostEnt)

{«ifdef DEPURA

fprintf(stderr, "Imposible localizar host \" %s \"\n", serverName};

«endit

goto egress ;

}/* Se copia la direcciín de entrada del host a la estructura del socket */

memcpy(&(serverSockAddr.ain_addr), serverHostEnt->h_addr,serverHostEnt->h_length);

serverSockAddr.sin_family = AF_INET;

/* Asignaciín de direcciones */

serverSockAddr.sin_port = (ushort)htons(port); /* Asignación del puerto */

Se crea el socket

0;

toServerSocket = socket ( AF_INET, SOCK_STREAM, 0) ;

if (toServerSocket == -1)

Sifdef DEPURA

error socket (errno) ;

APÉN

DICE

S A

- 2

9

DESA

RRO

LLO

E IM

PLEM

ENTA

N D

E UN

SIS

TEM

A S

UPE

RVI

SOR

PAR

A LA

GES

TIÓ

N Y

CO

NTR

OL

DE E

DA

R

goto egress;

}ftífdef DEPURA

printf("El socket vale %i \n",toServerSocket);

ítendif

if (setsockopt (toServerSocket, SOL_SOCKET, SO_REUSEADDR, "sisi", 4)= = -1)

printf ("Error en setsockopt, reusa\n");

mi_linger.l_onoff=l;

mi_linger.l_linger=10;

if (setsockopt (toServerSocket, SOL_SOCKET, SO_LINGER, (char *} &mi_linger,

sizeof(mi_linger))==-l)

printf ("Error en setsockopt, linger\n")

,-

if (connect(toServerSocket, &serverSockAddr, sizeof(serverSockAddr)) « -1)

{ err

or

= i;

ffif

de

f D

EPU

RA

err

or_

co

nn

ec

t(e

rrn

o);

Sen

dif goto

eg

ress

;}

result n toServerSocket;

egress :

return result;

/* FunciCn para cerrar la conexión con el servidor */

int disconnectToServer(int toServerSocket)

{ int shut,clo;

shut=shutdown(toServerSocket, 2);

clo=close(toServerSocket);

ífifdef DEPURA

if (shut== -1)

printf(" Error en shutdown toServerSocket.\n"

else

printf("Shutdown toServerSocket ok.\n");

if(clo « -1)

printf{"Error en close toServerSocket.\n");

ítendif

return clo;

void error_send(int errno)

switch (errno)

A-30

case EACCES:

printf ("ERROR: EACCESXn");

break;

case EFAULT:

printf ("ERROR: EFAULT\n")¡

break;

case ENOBUF5:

printf ("ERROR: ENOBUFSXn");

break;

case ENOTCONN:

printf ("ERROR: ENOTCONN\n " ) ;

break;

case ENOTSOCK:

printf ( "ERROR: ENORSOCK\n" ) ;

break;

case ESHUTDOWN:

printf ("ERROR: ESHUTDOWN\n") ;

break;

case EHOULDBLOCK:

printf ( "ERROR: EWOLULDBLOCKXn" )

;

APÉNDICES

Page 78: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITOFUZACION Y CONTROL PLANTA PILOTO

da

tfti] .xf

- d

at£

[i) . lamb

da*

datf [i] .x

* (1

.OF

-datf [i] . lam

bd

a) *d

atf (i] .x

f_o

ld;

da

tfli] .xf_

old

-

da

tflil.xf;

med

idasli] .o

xig

en

o=

datf [i] .x

f;

if (p

lan

ta. ré

gis t ro

_0

2=

=l)

ístream

=

f op

en ( "c

:\\da

tos\\f iltro

O2

.dat" ,

"a+

"};

time

i&ltim

e) ;t

- lo

caltim

e(

sltitne

),-

for

(i=0

;i<3

;it- + ) fp

rintfl

stream

, "

%6

.4f

" , datf [i] .x

) ;fo

r (i = 0

,-i<3

;i + + ) fp

rintfl

stream

, "

%6

.4f

" ,datf [i] .x

f ) ;fo

r (i=

0;i<

3;i+

+)

fprin

tf ( stre

am

, "

%6

.4f

", datf [i] . lam

bd

a) ;fo

r (i=

0;i<

3;i+

+)

fprin

tf( stre

am

, "

%6

.4f " , d

atf [i] -d

elta

fs) ;for

(i = 0;i<

3,-i+

+)

fprin

tf { stre

am

, "

%6

.4f ", m

edid

as [i] .m

A) ,-

fprin

tf (stre

am

, "

%2d

%0

2d %

02dfp

rintf

( stre

am

, "

\n

") ;t->

tm h

ou

r, t->

tm m

in,

t->tm

sec);

f clo

se (stre

am

) ;

retu

rn

1;

ivoid inicio_filtro_digital(void)

{int i;

for (i=0;i<3;i++)

{da

tf[il .x_

old

=m

ed

ida

s[ij.ox

ige

no

;d

atf[i]-x

f_o

ld=

med

idas[i].o

xig

en

o;

datf [il -E

=0

.5F

;d

atfli]-d

elta

fss.0.1

25

F;

int registro_O2(void)

íint i;

FILE *stream;

struct tm *t;

tirae_t Itíme;

stream = fopen( "c :\\datos\\O2.dat", "a+");

time (ultime);

t =

localtimeí &ltime );

for (i=0;i<3;i++) fprintf( stream, " %6.4f ",medidas[i].oxigeno);

for <i=0;i<3;i++) fprintf( stream, "

%6 .4f

",medidas[i]-mA);

fprintf(stream, "

%2d %02d %02d

", t->tm_hour, t->tm_min, t->tm_sec);

fprintf(stream, "%s", ctime(filtime));

fclo

se(stre

am

);

int

co

nta

do

r_o

ur[3

];flo

at

ox

ig[3

][10

];flo

at

t_o

xig

[3][1

0];

time_

t t_

ini_

ou

r[3];

float

ou

r a[3

], o

ur_

b[3

] , o

ur_

r[3];

float

old

^ma [3

] ;flo

at

r_m

inl=

0.7

5F

, r_

min

2 = 0.8

5F

, r_m

in3=.o .7

5F

, b_m

in=O

.OF

, b

_m

ax=

0.0

5F

;

void our estimación(int reactor, int step)

{ch

ar

me

nsa

je[2

00

];

APÉNDICES A

- 35

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CONTROL DE ED

AR

switch(step)ícase 0:

/* Fin estimaciÇn */

planta.PID[reactor-1].activo=l;

/* Activa PID •/

if ( planta.PIDfOJ .activo==l && planta.PID[1].activo==l £,&

planta.PID[2].activo«l)

planta.intervalo_control_O2 = old_intervalo_o2;

/* Recupera intervalo 02 */

medidas[reactor-lj.mA=old_ma[reactor-lj;

/* Recupera Cltima accitn de control */

pcl726 ( {reactor-D+3, old_ma[reactor-1]);

/* Abre la v Ivula

variar_velocidad (planta.velocidad[reactor-1], reactor);

delay(200);

/* Recupera la agitación */

variar_velocidad (planta.velocidad[reactor-1], reactor);

break;

/* Guarda actuación */

case

It

/*

Inic

io estim

ació

n *

/p

lan

ta.P

ID[re

ac

tor-l].a

ctiv

o=

0;

/*o

ld_

ma[re

acto

r-1]=

med

ídas[re

acto

r-1].m

A;

me

did

as[re

ac

tor-l].m

A=

4.0

F;

pc!7

26

((re

ac

tor-1

)+3

, 4

.OF

); /*

C

ierra

la

v

Ivu

la

*/

varia

r_v

elo

cid

ad

(2

5.0

F,

reacto

r);d

ela

y(2

00

); /*

D

ismin

uy

e ag

itació

n

*/

varia

r_v

elo

cid

ad

(2

5.0

F,

reacto

r) ,- /*

D

ismin

uy

e a

gita

ció

n

*/

pla

nta

.inte

rvalo

_co

ntro

l_0

2=

5;

/*

Aum

enta fre

cu

en

cia

lectu

ra

*/

co

nta

do

r_o

ur[re

acto

r-1]=

0;

/*

Resé

tea

co

nta

do

r *

/p

lan

ta.t_

ph

roco

n.tie

mp

o=

pla

nta

.t_actu

al+

45

; /*

E

vita

lectu

ra

pH

roco

n

*/

pla

nta

.t_p

hro

co

n.fin

=0

;m

emset (o

xig

. O, siz

eo

f (ox

ig} ) ,-

/*

Bo

rra d

ato

s an

terio

res

*/

me

mse

t(t_o

xig

,O,siz

eo

f(t_o

xig

));t_

ini_

ou

r[rea

cto

r-1]stim

e(H

UL

L);

/*

Gu

arda

t in

icio

*

/b

reak

;case

2

; /*

R

eg

istro O

UR

*/

switc

h(re

ac

tor){

case

1:

/* R

eacto

r 1

"/

ox

ig[0

][co

nta

do

r_o

ur[0

]J=m

ed

ida

s[0].o

xig

en

o;

/*

Gu

arda

med

ida

*/

t_o

xig

[0][c

on

tad

or_

ou

r[O]]=

(floa

t)difftim

e(tim

e(N

UL

L),t_

ini_

ou

r[0]);

/*

Gu

arda

t m

edid

a *

/if

(co

nta

do

r_o

ur[0

] >

4)

/*

Para

a la

5|

*/

íreg

resio

n_

lineal(

t_o

xig

[0],

oxig

[O],

6,

&(o

ur_

a[0] ) ,

&(o

ur_

b[0

] ) , &

(ou

r_r [0

] ) ) ,-/*

C

alc

ula

n

uev

os

valo

res

*/

ou

r_e

stima

cio

n(1

,0);

/*

Desa

ctiv

a la

estim

ac

ión

*/

sprin

tf(me

nsa

je,

"Nuevo

Q O

2 calc

ula

do

reacto

r 1

: %

6.4

e m

g O

2

/ (1

ou

r_r[0

]);if

(pla

nta

.va

riab

le_

ac

tua

l==

20

) g

raf_

me

nsa

je(m

en

saje

);/*

g

uard

a_m

ensaje(

men

saje );

*/

if (o

ur_

r[0]

> r_

min

l &&

-ou

r__

b[0

] >

b_

min

&& -o

ur_

b[0

] <

b_max

)m

edid

a_a_

SU

K_

vario

s( O

, -o

ur_

b [0

]);sp

rintf(m

en

saje

, "%

6.4

e %

6.4

e", -o

ur_

b[0

], o

ur_

r[0]);

gu

arda_

med

ida(

men

saje, "c

:\\da

tos\\o

url.d

at"

);

/*

sp

rintf(

me

nsa

je,

" %

6.4

f ",m

ed

ida

s[0].o

xig

en

o);

gu

arda_

med

ida (

men

saje, "c : \\d

ato

s\\o

ur-l .d

at" } ,-

*/

bre

ak

;case

2 :

/*

Reacto

r 2 *

/o

xig

tl] [con

tado

r__

ou

r [1] ] =

med

idas [1

] .ox

igen

o;

/*

Gu

arda

med

ida

*/

t_o

xig

[l] [co

nta

do

r_o

ur[1

] ] =(flo

at)d

ifftime

(time

(NU

LL

),t_in

i_o

ur[1

]); /*

G

uard

a t

med

ida

•/if

(co

nta

do

r_o

ur[1

] >

4)

/*

Para

a la

*/

reg

resio

n_

lineal(

t_o

xig

[i], o

xig

[1],

6,

&(o

ur_

a[l]),

&(o

ur_

b[l]),

&(o

ur_

r [1] ) ) ;/* Calcula nuevos valores */

our_estimacion(2,0);

/* Desactiva la estimación */

sprintf(mensaje,

"Nuevo Q O2 calculado reactor 2: %6.4e mg O2 / (1 s) .

%6.4e", -our_b[0] ,

%6.4e-, -our_b[l] ,

ou

r_r[l]);

A-3

6

if (p

lan

ta.v

aria

ble

_a

ctu

al=

°2

0)

gra

f_m

en

saje

(me

nsa

je);

/*

gu

ard

a_

men

saje

( m

ensaje

);

"/

if (o

ur_

r[l] >

r_m

in2

&& -o

ur_

b[l]

> b m

in &&

-ou

r_b

(l] <

b_max

)m

edid

a_a_

SU

N_

vario

s ( 1,

-ou

r_b

[l] ) ,-sp

rintf(m

en

saje

, "%

6.4

e %

6.4

e", -o

ur_

b[1

], o

ur_

r[1]);

APÉNDICES

Page 79: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICES

. PR

OGRA

MA D

E M

ONrro

RiZA

dÓN

Y CO

NTRO

L PL

ANTA

PILO

TO

gu

ard

a_

med

ida(

me

nsa

je,

"c

:\\d

ato

s\\

ou

r2.d

at"

);}

/*

sp

rin

tf(

me

nsa

je,

" %

6.4

f ",m

ed

ida

s[1

).o

xig

en

o);

gu

ard

a_

med

ida(

me

nsa

je,

"c :

\\d

ato

s\\

ou

r-2

.da

t");

*

/b

reak

;case

3

: /*

R

eacto

r 3 *

/oxig

12]

[co

nta

do

r__

ou

r [2

] ]

=m

edid

as [

2]

.ox

igen

o;

/*

Gu

ard

a m

edid

a *

/t_

ox

ig[2

][c

on

tad

or^

ou

r[2

]]=

(flo

at)

dif

ftim

e(t

ime

(NU

LL

),t_

ini_

ou

r[2

]);

/*

Gu

ard

a t

med

ida

*/

if

(co

nta

do

r_o

ur[

2]

> 4

) /*

P

ara

a

la

5|

*/

{ reg

resi

on

_li

ne

alC

t_

ox

ig[2

],

ox

ig[2

],

6,

&(o

ur_

a[2

]),

&(o

ur_

b[2

]),

&(o

ur_

r [2

] )

) ;

/* Calcula nuevos valores */

our_estimacion(3, 0};

/* Desactiva la estimación */

sprintf(mensaje,

"Nuevo Q 02 calculado reactor 3: %6.4e mg O2 / (1 s) . r: %6.4e", -our_b[2] ,

if (planta.variable_actual==20) graf_mensaje (mensaje)

,-/* guarda_mensaje( mensaje );*/

medida_a_SUN_varios ( 2,

~" -our_b[2])~

sprintf(mensaje, "%6.4e

%6.4e", -ourjb [2], our_r[2]);

guarda_medida ( mensaje, "c.-\\datos\\our3 .dat") ;

}/* sprintf( mensaje, " %6.4f ".medidas[2].oxigeno);

guarda_medida( mensaje, "c:\\datos\\our-3.dat"); */

break;

} contador_our [reactor-1] ++,-

break;

APÉN

DICE

S A

- 3

7

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA S

UPER

VISOR

PARA

LA

GEST

IÓN

Y CO

NTRO

L DE

EDA

R

CRISON.C - FUNCIONES. PARA LA COMUNICACIÓN CON LOS CONTROLADORES DE

SONDAS CRISON-PHROCONia

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 30/4/98

«include <stdio.h>

«include <string.h>

((include <stdlib.h>

«include <bios . h>

«include <conio.h>

«include <dos.h>

«include <math.h>

«include <time.h>

«include "nombres.h"

«define COM4

3«define SETTINGS4 (_COM_9600 | __COM_CHR7 | _COM__STOP1

j _COM_EVENPARITY)

«define DTR

0x01

/* Data Terminal Ready */

«define RTS

0x02

/* Ready To Send */

«define DCOM3

Ox3E8

«define DCOM4

Ox2E8

«define THRE

0x2000

/* Bit 13, Transmission-hold register empty */

/'define TEST*/

/**************».***.*** subrutinas del fichero **************«****«***/

int inicializar_sondas(void);

int recibe(void);

int phrocon_orden(char «orden, char «respuesta);

void phrocon_lecturas(void);

void phrocon_ph(void);

void phrocon_T(void);

void phrocon__mv(void) ;

void phrocon_02(void);

float lectura_ph(void);

float lectura_T(void);

float lectura_mv(void);

void lectura_valores(int sonda);

extern void dec_to_bin(int numero_decimal);

extern float minutos_desde_inicio(void)

,-

/****.**********•*** variables comunes del programa •*******************/

extern estado_planta planta;

extern primera medidas[3];

struct correlacion{

float a;

/* ordenada origen correlación O2-mV */

float b;

/« pendiente correlación O2-mV */

}corr{3];

char entrada[100];

/*Variable de lectura PhroconlS*/

/***...**.*.*.*.****.******..****.*.***..»*..»..***».***.***.**.*****.**.*.**

.*******..*********.********

PHROCON-18

***.*********.*******.**.***•**

**********..****.******.**«•****.***************.*.********.*,**.**.***.****/

/******"********

*****

„.**..********.*

***/

/* Obliga a los pHrocon 18 a leer los dos canales.

A-38

APÉNDICES

Page 80: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZAOÓN Y CONTROL PLANTA PILOTO

cambia de hold a lectura, reinicializa

*/

int inicializar_sondas(void)

íint sonda,in;

int suma=0;

char obliga_lectura [3J [26]={°

S01I01ClM02WrC2M02WrK3C ",

" S01I02ClM02WrC2M02WrK3D ",

" S01I03ClM02WrC2M02WrK3E "};

in~_bios_serialcom(_COM_INIT, COM4, SETTINGS4);

/"Inicializa el port com.*/

/*fputs(BSTATUS COM4: \t",Stdout);

dec_to_bin(in);*/

for (sonda=0;sonda<3 ; sonda*+)

suma=suma+phrocon_orden(obiiga_lectura[sonda] ,entrada);

return suma;

/

i***.****.*******.*.*.*.*.*****

***..******...»*.*

**/

/* Recibe la respuesta a las Crdenes enviadas a los pHrocon 18

*/

/" La respuesta debe comenzar por un char 5 y acabar por un char 4.

Para evitar el bloqueo si no existe comunicaciÇn, se establecen unos

limites de 15 lecturas para el comienzo y 50 lecturas para el total. */

int recibe(void)

int j =0,error=0;

int kk=0;

_OUtp ( DCOM4 * 4, 0);

memset(entrada,O,sizeof(entrada));

do {error**;

kk=0;

do kk*+;

wh

ile ((0

x1

00

& _bios_serialcom

<_C

OM

_ST

AT

US

, C

OM

4,0))==

0 &&

kk

<3

00

00

);en

trad

a[0

] =

(char)

_in

p

(DC

OM

4) ,-}

wh

ile (e

ntra

da [0

]!=S

&

í e

rror<

15

);if

(erro

r«i5

) re

turn

1;

erro

r=0

;do

{erro

r**

;

kk

=0 ;

do

k

k+

*;

while ((OxlOO & _bios_serialcom(_COM_STATUS, COM4,0))==0 && kk<30000);

entrada[j] = (char)

_inp (DCOM4);

} while (entradatj] i=4

&& error<50) ,-

if (erro

r==

50

) re

turn

2

;

print f ("fc

return 0;

" , entrada) ;

/* Manda una orden a un pHrocon 18 y recibe la respuesta.

La respuesta debe comenzar por un char 5 y acabar por un char 4.

Para evitar el bloqueo si no existe comunicación, se establecen unos

limites de 15 lecturas para el comienzo y 50 lecturas para el total.

Devuelve los siguientes valores:

-1 En 15 lecturas no ha existido un 5 de inicio

-2 En 50 lecturas no ha existido un 4 de finalizaciín

-3 Orden no correcta

-4 Existe respuesta pero no cumple el checksum

1 Existe respuesta y cumple el checksum

int phrocon_orden(char "orden, char "respuesta)

int

j=0,kk=0.

APÉNDICES A

- 39

DESARROLLO E IM

PLEMENTAQ

ON

DE UN SISTEMA SUPERVISOR PARA LA G

ESTIÓN

Y CONTROL DE EDAR

largo,

error=0,

chequeo=0;

char cheksum[3] ;

/"printf("%s\nn,orden);*/

if (strchr(orden,' ')==NULL) return -3;

memset(entrada,O,sizeof(entrada));

/* Para determinar la longitud de la orden */

wh

ile(o

rde

n[j]¡=

4)

JHla

rgo

=j;

_OUtp ( DCOM4 + 4, DTR | RTS );

for (j=0;j<=largo;j**)

_outp ( DCOM4 , orden[j]);

kk=0;

do kk*+;

while ((THRE & _bios_serialcom(_COM_STATUS, COM4,0))==0 && kk<30000);

_OUtp ( DCOM4 +4, O );

do {error*+;

kk=0;

do kk*-»-;

while ((0x100 & _bios_serialcom(_COM_STATUS, COM4,0))«0 G.&

kk<30000) ;

respuesta [OJ

=(char) _inp (DCOM4);

} while (respuesta[0]!=5 && error<15);

if (error==15) return -1 ;

error=0;

do {error**;

J++Í

do kk*+;

while ((0x100 & _bios_serialcom(_COM_STATUS, COM4,0))==0 && kk<30000);

respuesta [j]

=•

(char) _inp (DCOM4) ;

} while (respuesta[j]1=4 && error<50);

if (error=="50)

return -2;

respuesta[j *1]=0 ;

for (kk=0;kk<=j-4;kk+*> chequeo=chequeo*respuesta[xkj;

chequeo=OxFF & chequeo;

sprintf(cheksum,"%02XB,chequeo);

/*p

rintf(

B%

X\t%

B\n

n.ch

eq

ue

o,c

he

ksu

m);

prin

tf ("%a\n

t1, resp

uesta

) ;

if (c

he

ksu

m[0

]==

resp

ue

sta[j-2

] &&

ch

ek

sum

[1]=

=re

spu

esta

[j-lj) re

turn

1;

els

e

retu

rn

-4 ;

/* Pide la lectura de todos los valores de los pHrocon 18.

Si la lectura es correcta llama a una funciCn que transforma la

respuesta en los valores float de la estructura medidas.

void phrocon_lecturas(void)

{int sonda, estado_lectura

,-char salida[3][28]={n S01I01C1M03RM04RC2M03RK53 ",

" S01I02C1M03RM04RC2M03RK54 °,

" S01I03C1M03RM04RC2M03RK55 "};

for (sonda=0;sonda<3;sonda++)

iestado lectura=phrocon_orden( salida[sonda], entrada);

/* Si la lectura phrocon es correcta leemos los valores */

if (estado_lectura==l) lectura_valores(sonda);

A-40

APÉNDICES

Page 81: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

onrro

Riz

Adó

N Y

CON

TROL

PLA

NTA

PILO

TO

retu

rn;

) /* Pide la lectura de los valorea de pH de los pHroconlS

Si la lectura 63 correcta llama a una funciín que transforma la

reapuesta en loa valores float de la estructura medidas.

void phrocon__ph(void)

int sonda,estado_lectura;

char aalida_ph[3] [18]={n S01I01C1M03RKD9 ",

11 S01I02C1M03RKDA »,

" SÛ1I03C1M03RKDB •};

for (sonda=0; sonda<3 ,-sonda+ + )

i estado_lectura°phrocon_orden{ salida_ph[sonda], entrada);

/* Si la lectura phrocon es correcta leemos los valores */

íf (estado_lectura==l) medidas[sonda].ph =lectura_ph();

}return;

i /* Pide la lectura de los valores de T de loa pHroconlS

Si la lectura es correcta llama a una funciín que transforma la

reapuesta en los valores float de la estructura medidas.

void phrocon_T(void)

{ int

son

da,e

stad

o_

lectu

ra;

Ch

ar

sali

da_

T[3

] [1

8]=

{n

S01I

01C

1M04

RK

DA

",

11 S0

1I02

C1M

04R

KD

B

","

S01I

03C

1M04

RK

DC

"}

;

for

(so

nd

a=0

;so

nd

a<3

; so

nd

a+ +

){ estado_lectura=phrocon_orden( salida_T[sonda] , entrada);

/* Si la lectura phrocon es correcta leemos los valores */

if (estado_lectura==l) medidas[sonda].temperatura =lectura_T();

}return;

i /* Pide la lectura de los valores de mV de los pHroconlS

Si la lectura es correcta llama a una funciín que transforma la

respuesta en los valores float de la estructura medidas.

void phrocon_mv(void)

{ int sonda,estado_lectura;

char salida_mv[3][18]={" S01I01C2M03RKDA ",

" S01I02C2M03RKDB ",

" S01I03C2M03RKDC "};

for (sonda=O;sonda<3 ; sonda + +}

{ estado_lectura=pnrocon__orden( salida_mv[sonda], entrada);

/* Si la lectura phrocon es correcta leemos los valores */

if (estado_lectura=s>l) medidas[sonda].potencial =lectura_mv();

/* Pide la lectura de los valores de O2 de los pHroconlS.

Primero debe asegurarse que los rel,s correspondientes a las salidas

20 a 22 est n apagados. Despu.s se pide la lectura de los milivoltios.

Si la lectura es correcta llama a una funciín que transforma la

respuesta en valores float. Utilizando la correlaciín itw-O2 se transforma

esa lectura en los valores de 02 de la estructura medidas. Por £ltimo

debe asegurarse que los rel,s quedan encendidos para leer mV.

*/

void phrocon_O2(void)

AP

ÉN

DIC

ES

A -

41

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR

PAR

A LA

GES

TIÓN

Y C

ONTR

OL D

E ED

AR

int

son

da,e

stad

o_

lectu

ra;

flo

at

mvs

O;

char salida__mv [3] [18]={" S01I01C2M03RKDA ",

" S01I02C2M03RKDB ",

" S01I03C2M03RKDC "};

/*for (j=20;j<23;

delay (1500) ;*/

estado_salida { j , 0) ;

for (sonda = 0;sonda<3 ; sonda* + )

( estado_lectura=phrocon_orden ( salida_mv [sonda]

, entrada)

,-/* Si la lectura phrocon es correcta leemos los valores */

if (estado_lectura==l) mv =lectura_mv () ;

else continue;

medidas [sonda] . oxigeno=corr [sonda] .a+corr [sonda] .b*mv;

if (medidas [sonda] .oxigeno < 0.07) medidas [sonda] .oxigenólo;

dela

y(lO

OO

) ;*

/

retu

rn;

y...».*..**.*....*.,,,******»*****»»***»**.*.**.**.*.**,****.*********.*****/

/* Funciín que transforma la respuesta a la peticiín de pH al pHrocon 18

en un valor float que devuelve.

*/

float lectura_ph (void)

int i, inicio, final;

char ph[6] ;

char *ptr, el = 'M

* , c2='p' ;

float valor_medidO;

ptr = strchr (entrada, el) ;

inicio = ptr-entrada+3 ;

ptr = strchr (entrada, c2) ;

final = ptr-entrada;

nicio] =entrada [i]

for (i=0;i<6;i++) ph[i]=' ';

for (i=inicio; i<f inal; i++) ph [i

valor_medido= (float) atof (ph) ;

return valor_medido;

i /* Funciín que transforma la respuesta a la petición de T al pHrocon 18

en un valor float que devuelve.

*/

float lectura_T(void)

íint i, inicio. final;

char TES] ;

char *ptr, el = 'M' , c2= ' c ' ;

float valor_medido;

ptr = strchr(entrada, el} ;

inicio » ptr-entrada+i;

ptr

= strchr (entrada, c2)

,-final = ptr-entrada;

for (i=0; i<5; Í+-+)

T [i] =' ' ;

for (i= inicio; i<f inal; i + +

í T [i -inicio] sent rada [i

J ;

valor_medido= (float) atof (T) ;

return valor_medido;

} / .......... ****** ....... *** ........ * ....... * .......... ************.*.*.**./

/* Funciín que transforma la respuesta a la peticiín de mV al pHrocon 18

en un valor float que devuelve.

*/

float lectura_mv (void)

{int i, inicio, final;

A-4

2A

ND

ICE

S

Page 82: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONTTORIZACIÓN

Y CONTROL PLANTA PILOTO

ch

ar

mv [5] ;

ch

ar

*p

tr, el

=

'M',

c2

='m

';flo

at

valo

r_m

ed

ido

;p

tr =

strc

hr (e

ntra

da

, el) ;

inicio = ptr-entrada+3;

ptr o atrchr (entrada, c2) ;

final = ptr-entrada;

for {i=

0;i<5;i-t"

»-) m

v[i] = '

';fo

r (i=

inic

io; i<

final; i+

+)

mv [i -in

icio

] en

trad

a [i] ;v

alo

r_m

edid

o=

(flo

at)a

tof (m

v) ,-

retu

rn v

alo

r m

edid

o;

/*

Fu

nciín

q

ue

tran

sform

a la

resp

uesta

a

la

petic

iín d

e tod

os

los

va

lores

al

pH

roconlS

en

los

va

lores

floa

t d

e las

varia

ble

s en la

estru

ctu

ram

edid

as.

*/

void lectura valores (int

sonda)

íint i;

char ph[6j , T{6] , mv{6] ;

memset (ph.

O, sizeof (ph)

) ;

memset (T,

O, sizeof (T)

) ;

memset (mv.

O, sizeof (mv)

) ;

if (entrada 112]

==49)

{for (iaQ;i<5;i++) ph [ i ] =6ntrada [12+i]

;for

(i«l;ic48;i++) entrada [il

=entrada [i+1]

;}

elsefor (i=0;i<4;i++) ph[i] =entrada 1 12

+ i]

;medidas [sonda]

.ph= (float) atof (ph)

;

for (i = 0;i<4,-i +

+ ) Ti i] =entrada [21+iJ

;medidas [sonda]

. temperatura= (float) atof (T)

;

if (entrada[31] !=45)

{mv[0] =48;

for (i=0; i

<3;i++) mv[i+l] =entrada [31+i]

;

for

íi=0

;i<4

;i*+

) m

vti) =

en

trad

a 13

1+

i] ;ímedidas [sonda]

-potencial= (float) atof (mv)

;

/* CCdigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

Sifdef TEST

int main(void)

iinicializar_sondas ( );

phrocon_lecturasO ;

phrocon_ph();

phrocon_T();

phrocon_mv();

phrocon_02 O ;

return 0;

ivoid dec to bin(int numero_decimal)

{int binds] ;

APÉNDICES A

- 43

DESARROLLO E IM

PLEMENTAO

ÓN

DE UN SISTCMA SUPERVISOR

PARA LA GESTIÓN Y CONTROL DE ED

AR

int

i;

for

(i.0;i<

16

;i**

>

bin

(i] =

nu

mero

_d

ecimal

& 1;

nu

mero

_d

ecimal

»=

1;

retu

rn;

itime_t t_actual, t_phrocon, t_inicio;

float dia_absoluto(void)

float dias=0;

time_t t referencia=3015817200L;

float dïa_referencia»132.OF;

dias=(float) (dia_referencia+difftime(t_actual,t_referencia)/3600.0F/24.OF)

return dias;

ifloat minutos_desde_inicio(void)

(float segundos=0,

minutos^O;

segundos= (float) t_phrocon-t_inicio;

minutos=segundos/60.OF;

A-4

4APÉNDICES

Page 83: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

OM

TTO

L PI

ANTA

PILO

TO

'DANFOSS.C - FUNCIONES PARA LA COMUNICACIÓN CON LOS VARIADORES DE

FRECUENCIA DANFOSS 2100-LT

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISION: 17/9/95

ftinclude <stdio.h>

ttinclude <string.h>

- ttinclude <bios.h>

{(include <conio.h>

ftinclude <stdlib.h>

(tinclude <dos. h>

ttinclude <graph.h>

ftinclude <time.h>

Binclude -nombre».¡i~

/*************

** Definiciones

****

*

****.*/

ttdefine COM2

1ftdefine SETTIKGS2 (_COM_300 |

_COM_CHR8 | _COM_STOP1 | _COM_NOPARITY)

«define DCOM2

Ox2F8

((define THRE

0x2000

/* Bit 13, Transmission-hold register empty */

/*ftdefine TEST*/

/*****.***************** Subrutinas del fichero **««****••*•**********•/

void inicializar_variador_frecuencia(void);

int danfoss_orden(char *orden, char «respuesta);

int variar_velocidad(double velocidad, int variador);

int control_variador(int estado, int variador);

void graf_control_agitador(int on_off);

void graf_velocidad_agitadore3(void);

extern void dec_to_bin(int numero_decimal);

extern void graf_borra__ayuda (void) ;

extern void graf_ayuda_general(void);

8ifdef TEST

void dec_to_bin(int numero_decimal);

void graf_borra_ayuda(void);

void graf_ayuda_general(void);

void selectmenu(void);

void main(void);

ífendif

/*********+**»****** Variables comunes del programa

extern primera medidas[3];

extern estado_planta planta;

/*

Inicializa el puerto de comunicaciones COM2 con las variables

definidas en SETTINGS2.

*/

void inicializar_variador_frecuencia(void)

í int in;

/•char out[23]={"0<OOCOOE@0516+800003??>"}; */

/*

bytes

chrSO

ASCII

*/*

1

60

/* start byte

/* address

.

2,3

/* control char.

4/* control/status word

5,6,7,8

)

<

(inicio) */

48,48

0,0 (enviar a todos) */

67

C

(control) */

APÉN

DICE

S A

- 45

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL D

E ED

AR

/* menu/para me ter ft

/* sign

/* data

/* comma

/* check sum

./* stop byte

9,10,11,12

•/

13

43

+

(signo) */

14,15,16,17,18

*/

19

*/20,21

63,63

?,? (pasar de checksum) */

22

62

> (fin)

*/

/*Inicíaliza el puerto com.*/

in=_bios_serialcom(_COM_INIT, COM2, SETTINGS2);

/*fputs{"STATUS COM2; \t",Stdout);

dec_to_bin(in);*/

return;

í /*********.*********.********»***..,**..***.*.»**..***.***...*.*,*.*******/

/* Esta funciín sClo funciona si hay un solo variador encendido.*/

/* Manda una orden a un danfoss y recibe la respuesta.

La respuesta debe comenzar por un char 60 y acabar por un char 62.

Para evitar el bloqueo si no existe comunicaciín, se establecen unos

limites de 15 lecturas para el comienzo y 50 lecturas para el total.

Devuelve los siguientes valores:

-1

En 15 lecturas no ha existido un 60 de inicio

-2

En 50 lecturas no ha existido un 62 de finalización

-3

Orden no correcta

-4

Existe respuesta pero no cumple el checksum

1 Existe respuesta y cumple el checksum

*/ int danfoss orden(char *orden, char «respuesta)

{ int

j=0,kkoO,

largo=21,

errorsO,

ch

eq

ueo

=0

;ch

ar

ch

ek

sum

(5];

if

(str

ch

r(o

rde

n,6

2)=

=N

UL

L)

retu

rn

-3;

for

(kk

=l;

kk

<=

l8;k

k+

+)

ch

eq

ueo

=ch

eq

ueo

+o

rden

[kk

];sp

rin

tf (

chek

sum

, "%

i" ,

cheq

ueo

) ,-

ord

en

[19

1 =

ch

ek

sum

[2j;

ord

en

[20

]=c

he

ksu

m[3

];

pri

ntf

C^

sXn

" , o

rden

) ;

for ( j=0;j<=largo;j++)

{_outp ( DCOM2 , ordentj]);

kk=0;

do kk++;

while ((THRE & _bios_serialcom(_COM_STATUS, COM2,0))==0 && kk<30000);

}

do {error++;

kk=0;

do kk++;

while ((0x100 & _bios_serialcom(_COM_STATUS, COM2,0))==0 &6 kk<30000);

respuesta(0] =(char) _inp (DCOM2);

} while (respuesta[OJ¡=60 && error<15);

if (error==15) return -1;

error=0;

j-O;

do {error++;

j++;

kk=0;

do kk++;

while ((0x100 & _bios_serialcom(_COM_STATUS, COM2,0)}==-0 && kk<30000) ;

respuesta[j] =

(char) _inp (DCOM2);

} while (respuestatj]!=62 &t error<50);

if

(err

or*

=5

0)

retu

rn

-2;

A-4

6AP

ÉNDI

CES

Page 84: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONITO

RIZACIÒN

Y CONTROL PLANTA PILOTO

respuesta!j+1] =0;

cheq

ueo

=0

;fo

r (k

ka

l;kk

< = j-3

;kk

++ )

ch

eq

ueo

=ch

eq

ueo

+re

spu

esta

[kk

];sp

rintf(c

he

ksu

m,"%

i",ch

eq

ue

o);

prin

tf("%

i\n".c

he

qu

eo

);p

rint f ("%

s\n", re

spu

esta

) ;

if (c

he

ksu

m[O

]==

resp

ue

sta[j-2

] &&

ch

ek

sum

[1]=

=re

spu

esta

[j-1])

retu

rn

1;

els

e

retu

rn

-4 ;

î/ **********

**

**

**

**

**

**

* *

*.*

**

**

**

*/

/* Funciín para variar la velocidad de cualquier variador independientemente,

o los tres a la vez.

*/

int variar velocidad(double velocidad, int variador)

íchar out[23}={B0<OOUOOE@0516+500003\?\?>"};

char "string;

int j, dec, sign;

int ndig=5;

if (velocidad<-100 )]

velocidad>100) return 1;

if (variador<0 || variador>3)

return 2;

/*Si los par metros no son posibles devuelve un cídigo de error*/

out 13]=

(char) (48+variador);

string = ecvt(velocidad, ndig, &dec, &sign);

if (sign==0) out

[13] = '•»•';

/*Signo de

la velocidad*/

else out[13]

for (j=0;j<5;j++) outtl4 + j]-Btring[j] ;

/'Velocidad*/

out [19]*

(char)

(5-dec+48);

/*NEmero de decimales*/

for (j-l;j<23;j++) _bios_serialcom(_COM_SEND, COM2, out[j]>;

/* envia el carácter por el puerto de com.*/

/*if (variador!=0)

for (j-l;j<23;j++) out [ j J =

__bios_serialcom(_COH_RECEIVE, COM2, O);*/

/* recibe el mensaje devuelto por el variador */

/* solo si utilizamos checksum */

if (variador==0) for (j=0;j<3;j++) medidas[j].velocidad=(float)velocidad;

else medidas[variador-1].velocidad=(float)velocidad;

/*.******..

******

********

***************

//* FunciCn para encender, apagar o apagada de emergencia de cualquiera

de los variadores o de los tres a la vez.

*/

int control__variador (int

estado, int variador)

int j;

Char out[23]={"0<OOCOOE®0000+000000\?\?>"};

if (estado!=0 && estado!=l &&

estado!=2) return 1;

if (variador<0 || variador>3)

return 2;

/*Si los par metros no son posibles devuelve un cídigo de error*/

out[3]= (char)

(48+variador);

if (estado==0) out[5]=78;

if (estado==l) out[5]=79;

if (estado==2) out[5]=75;

for (j*l;j<23;j + + ) _bios_serialcom(_COM_SEND, COM2, out

[j] ).;

/* envia el carácter por el puerto de com.*/

/"for (j=l;j<23;j++) printf("%c",out[j]);

printf("\n");*/

return 0;

APÉNDICES A

- 47

DESARROLLO E IM

PLEMENTAQ

ON

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CO

NTROL DE ED

AR

/** *

************************

****************.*

***/

/* Funciín para llamar a control_variador desde la pantalla gr fica.

*/

void graf_control_agitador(int on_off)

(int var;

char fuente [20]

="t 'Tms

Rmn'hl2w50b" ,-

graf_borra_ayuda();

/*Borra la zona de la ayuda*/

_setgtextvector( 1, O );

/*Texto horizontal*/

_setfont( fuente );

/*Fuente utilizada*/

_setcolor(7);

_moveto(5,2);

if (on_off==1) _outgtext("Encendido agitador(es):

if (on_off==0) _outgtext("Apagado agitador(es);

_moveto(5,19);

_setcolor(29);

_outgtext("NEmero de variador: ");

_settextposition(2,17);

fscanf (stdin, "%dn, frvar);

control_variador( on_off , var );

1,2,3 ç

O (todos)");

1,2,3 C

O (todos)");

graf ayuda general!);

i/*Deja las cosas como estaban*/

/* Funciín para llamar

ir_velocidad desde la pantalla gr fica.

void graf_velocidad_agitadores(void)

tint var;

double vel;

char fuente(20)="t'Tms Rmn'hl2w50b";

graf_borra_ayuda();

/*Borra la zona

de la ayuda*/

_setgtextvector( 1, O );

/*Texto horizontal*/

_setfont( fuente );

/*Fuente utilizada*/

1,2,3 C

O (todos)");

_setcolor(7);

_moveto(5,2);

_outgtext("Variación velocidad agitador(es):

_moveto{5,19);

_setcolor(29);

_outgtext("N£mero de variador: ");

_settextposition(2,17);

fscanf (stdin, "%dh, &var);

_moveto(250,18);

_outgtext("Velocidad:

") ;

_settextposition(2,46);

fscanf (stdin, "%lf", &vel);

variar_velocidad (vel, var);

graf_ayuda_general();

/«Deja las cosas como estaban*/

/* Cídigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

Sifdef TEST

int £i=i;

void main(void)

Îchar out[23]={n<OOUOOE@0516+000003\?\?>"};

char entrada[100);

inicializar_variador_frecuenciaO;

danfos3_orden(out, entrada);

A-48

APÉNDICES

Page 85: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONITO

RIZA

CIÓN

Y C

ONTR

OL PL

ANTA

PILO

TO

control_variador(1,1);

do{

selectmenuO ;

while (fi=»l);

*/ void selectmenu(void)

f int tecla;

int va

re-

double vel;

• tecla=_bios_keybrd(_NKEYBRD_READY) ;

if (tecla==>0) return;

_bios_keybrd(_NKEYBRD_READ} ; /*Vac;a el buffer, lee el £ltimo carácter*/

switch(tecla) {

case ux

iiíg

u :

:

printf ("NEmero de variador: ") ;

fscanf (stdin, "%dn, &var) ;

break;

case 0x4000:

printf ("NEmero de variador: ");

fscanf (stdín, "%d", &var) ;

control_variador ( O , var ) ;

break;

case 0x4100:

controlava r i ador ( 2 , O )

,-break;

case 0x4200:

printf { "N£mero de variador: " ) ;

fscanf (stdin, "%d", &var) ;

printf ("Velocidad:

") ;

fscanf (stdin, n%lf " , &vel} ;

variar_velocidad (vel, var) ;

break;

case 0x4400:

fi=0;

break;

vo

id d

ec_

to_

bin

(in

t n

um

ero

_d

ecim

al)

int

bin

ds] ;

int

i;

for

(i=

0;i

<1

6;i

-nO

bin

[i]

=

nu

mer

o_

dec

imal

&

1;

nu

mer

o_

dec

imal

»

= 1;

for (i=0;i<16;i

printf (

n\nn) ;

return;

t void graf_borra_ayuda(void)

{} vo

id

gra

f ay

uda

gen

era

l (v

oid

)

printf (ni- , bin [15-i]) ;

APÉN

DICE

S A

- 4

9

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA S

UPER

VISOR

PARA

LA G

ESTIÓ

N Y C

ONTR

OL DE

EDA

R

FUNCIÓN PARA ESPERAR LOS MILISEGUNDOS DETERMINADOS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISION: 23/6/9S

/********************* Libreriras a incluir *********

ífinclude <time.h>

Sinclude <conio.h>

«include <stdio.h>

/*•.*******»***********• subrutinas del fichero ******

void delayí clock_t wait );

/* Pauses for a specified number of microseconds. */

void delayí clock_t wait )

clock_t goal;

goal = wait + clock () ;

while ( goal > clock

t ) >

ftifdef TEST

void main (void)

íint duracion=lOOO;

clock_t

cstart, cend;

cstart = clock();

delay ( duración };

cend = clock();

printf ( "\nTietnpo tranacurrido:\t\t%6.4f seconds \n"

((float)cend - cstart) / CLOCKS_PER_SEC ),-

A-50

APÉNDICES

Page 86: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONTTORIZACIÓN Y CO

NTROL PLANTA PILOTO

PARA CONVERSIÓN DE ENTEROS A BINARIOS

PROGRAMADOR:

Juan AnConio Baeza Labat

ULTIMA REVISIÓN: 26/6/95

y*****************»**. Librerías a incluir *******

ffinclude <math.h>

ftinclude <stdio.h>

/*S

ub

rutin

as

del

fich

ero

*

**

**

**

**

**

**

jfifdef

TE

STv

oid

m

ain

(vo

id);

ffend

ifvoid dec_to_bin(int numero__decimal) ;

Subrutina de conversion de un numéro décimal en un binario

void dec_to_bin(int numero_decimal)

int bin

[16];int

i;

for (i=0;i<16;i++

bin

[ij =

nu

mero

_d

ecimal

& 1;

numéro

décim

al

»*

1;

for

(i=0

,-i<1

6;i+

+)

prin

tf ("%i

n , bin

{1

5-i] ) ;

prin

tf ( n\n" ) ;

*/

retu

rn;

if i f de f T

EST

vo

id

main (v

oid

)

int

i;fo

r (i=

0,-i<

10

; i + + ) d

ec to

b

in(i);

AP

ÉN

DIC

ES

A - 5

1

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN

Y CONTRO

L DE EDAR

FICH

ERO

S.c -FUNCIONES PARA LA LECTURA Y ESCRITURA DE FICHEROS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 21/9/98

Sifdef TEST

ífdefine extern

Sendif

ftinclu

de

ftinclu

de

tí inclu

de

ft inclu

de

stdio.h>

stdlib.h>

process ,

ftinclu

de

<co

nio

.h>

ftinclu

de

<tim

e .h>

ffinclu

de

ffinclu

de

(f include

dos.h>

direct. h>

errno.h>

ftinclu

de

"no

mb

res . h"

/*•*

**

**

**

*•*

**

*.*

•**

**

*

Su

bru

tinas

del

fich

ero

*

**

**

**

**

**

**

**

**

**

**

**

/

void

le

ctu

ra_

co

nfig

ura

cio

n(v

oid

);v

oid

le

ctu

ra_

alim

en

tacio

n(v

oid

);v

oid

arc

hiv

ar_

dato

s_tn

ed

ida (v

oid

) ;v

oid

fic

he

ro_

sem

an

al(v

oid

);v

oid

g

uard

a_m

ensaje(

ch

ar

"me

nsa

je);

vo

id

gu

arda_

med

ida(

ch

ar

"men

saje, ch

ar

"fic

he

ro);

vo

id

seg

uro

_g

rafic

as(in

t o

rde

n);

vo

id

arc

hiv

ar_

dato

s_esc

alo

n(v

oid

);

ex

tern

flo

at

dia

_a

bso

luto

(vo

id);

/ft**

**

**

**

**

**

**

**

**

Varia

ble

s co

munes

del

pro

gra

ma

**

**

**

**

**

**

**

**

**

**

/

ex

tern

in

t h

ora

, d

ia;

ex

tern

p

rimera m

ed

ida

s[3];

ex

tern

estad

o_

_p

lanta

pla

nta

;

floa

t a;

/*

ord

en

ad

a o

rigen

co

rrela

ció

n

O2-m

V

*/

floa

t b

; /*

p

en

die

nte

co

rrela

ciín

O

2-mV

*

/}

co

rr[3] ;

ex

tern

flo

at

raat_

gra

f_el[3

][6][3

60

]; /"

Ma

trice

s p

ara

las

gr

fica

s*

/ex

tern

flo

at

ma

t_g

raf_

e2

[3]

[6J [4

80

] ;ex

tern

flo

at

ma

t_g

raf_

e3

[3][6

][48

0];

ex

tern

tim

e_

t tie

mp

o_

el[3

60

]; /«

Ma

trice

s tiem

po g

r fic

as*

/ex

tern

tim

e_

t tie

mp

o_

e2

[48

0];

ex

tern

tim

e_

t tie

mp

o_

e3

[48

0];

/**

**

*

**

**

**

**

*.*

*..*

*.*

**

*...*

**

**

**

*.*

*.*

**

**

**

.**

*/

/* Fichero para leer la configuraciCn base inicial del fichero de

datos depura.dat

* /

void lectura_configuracion(void)

íFILE "obert;

ch

ar

linea

[15

0];

int

i;in

t si;

if { access ("c:

\\depura\\depura.dat" ,0)

=•=

0)

obert = f

open ( "c:

\\depura\\depura -dat" ,

"r t" )

,-

/*En primer lugar se lee la l¡nea y despu.s se traduce a n£meros*/

A-5

2A

ND

ICE

S

Page 87: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

tplanta.intervalo_dosificacion[0],

APÉN

DICE

S. P

ROGR

AMA

DE M

ONITO

RIZA

CIÓN

Y C

ONTR

OL P

LANT

A PIL

OTO

fgets(linea,sizeof(linea),obert);

aacanf(linea,"%d", &planta.intervalo_control_O2);

fgets(linea,sizeof(linea),obert);

ascanf (linea, n%d" , &planta . intervalo_OUR) ;

if (planta.intervalo OOR==-1) planta.OUR=0;

else planta.OUR=1;

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%d%d",

fiplanta.intervalo_dosificacionll] ) ;

fgets(linea,sizeof(linea),obert) ;

sscanf (linea, "%d%d" , &planta.intervalo_limp_dosif [01 ,

fiplanta.intervalo_limp_dosif

[1] )

,-fgets(linea,sizeof(linea),obert) ;

sscanf (linea, n%d%d1', &planta.pistonadas_limp_dosif [0] , &planta.pistonadas_limp_dosif [1] ) ;

fgets(linea,sizeof(linea),obert) ;

sscanf(linea,"%d", &planta.intervalo_control_nivel);

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%dn, &planta.intervalo_toma_de_datos);

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%d", &planta.tiempojpurga);

¿gets(iinea,sizeof(linea),obert);

sscanf (linea, "%d" , &planta .duracion_purga) ;

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%d", &planta.actualizacion_grafica);

fgets(linea,sizeof(linea),obert) ;

sscanf(linea,"%f", splanta.caudal_agua);

fgets(línea,sizeof(linea),obert);

sscanf(linea,"%f", &planta.cauda1_RI);

fgets(linea,sizeof(linea),obert);

sscanf (linea, "%f ", &planta .caudal_RE)

,-fgets(linea,sizeof(linea),obert);

sscanf(linea,"%d", &planta.intervalo_flojet_on);

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%d", &planta.intervalo_flojet_off);

for (ioO;i<3;i++)

fscanf (obert, tl%*[

for (i=0,-i<3;i + + )

fscanf (obert, "%* [~

for

(i = 0;i<3;i-f+)

fscanf (obert, "%* [

for

(i=0;i<3,-i +

-»-)

fscanf (obert, "%* 1

for (i=0;i<3,-i-n-)

fscanf (obert, "%• [*

for (i=0;i<3;i-f + )

fscanf (obert, "%*[

for (i=3;i<6;i-n-)

fscanf (obert, "%* [

for (i=0;i<3;i++)

fscanf (obert, "%* [*

for (i=0,-i<3;i++}

si=f scanf (obert, H%

if (si==EOP)

printf ( "\nError :

fclose (obert) ;

exit(l);

fscanf (obert, "%f " , ¿planta. velocidad [i] ) ;

01234S6789]n);

fscanf (obert, "%f ", «.planta .PID [i] . set_point) ;

0123456789] ") ;

fscanf (obert, "%f " , &planta ,PID [i] . Kc) ;

0123456799] n);

fscanf (obert, "%f B,tplanta.PID[i] ,Ti) ;

0123456789] ") ;

f scanf (obert , "%f ", &planta.PID [i] .Td) ;

-0123456789] " ) ;

fscanf (obert, B%d11 , &planta.PID [i] .activo) ;

'-01234567B9]1');

fscanf (obert, "%f " , Splanta.raA[i] ) ;

-0123456789] ") ;

facanf (obert, "%f " , &corr [i] .a) ;

-0123456789] n) ;

f acanf (obert , " %f " , &corr [i] .b) ;

(*0123456789] ") ;

/*Si hay menos datos de los necesarios"/

Faltan datoa en el fichero de conf iguraciín depura.dat \n"

fclose (obert)

,-

ielse { printf("\nError: El fichero de configuración depura.dat no existe\n"

exit (II;

/* Fichero para leer el perfil de alimentación en alimento.dat

void lectura_alimentacion(void)

{ FILE «obert;

APÉN

DICE

S A

- 53

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SIST

EMA

SUPE

RVISO

R PA

RA LA

GES

TIÓN

Y CO

NTRO

L DE

EDAR

char linea [150] ;

int i;

int si;

if ( access(nc:\\depura\\alimento.datn,0) == 0)

{ obert =f open ("c: \\depura\\alimento. dat" , nrt") ;

/*En primer lugar ae lee la l¡nea y despu.s se traduce a nEmeros*/

f ge ta (linea, sizeof (linea) , obert) ;

sscanf (linea, "%d", fiplanta.perf il) ;

for (i=0;i<3;i++)

fgeCs (linea/ sizeof (linea) , obert) ;

for (i=0,-i<24;i + +-

) f scanf (obert , "%d" , &planta. alimento [i] .nitrogeno) ;

fscanf (obert, "%* [*-01234567B9]

n ) ;

for (i=0;i<24;i++) f acanf (obert, "%d" , &planta. alimento [i] .carbono) ;

fscanf (obert, "%* ["-01234567B9] ") ;

for (i=0;i<24;i++) si=fscanf (obert, n%f " , &planta. alimento [il .agua) ;

if (si==EOF)

/*Si hay menos datos de los necesarios*/

pri

ntf

{"\n

Err

or:

F

alt

an d

ato

s en

el

fich

ero

d

e conf

igu

racií

n

ali

me

nto

.da

t \n

");

fclo

se (

ob

ert

) ;

ex

it (

1) ;

}

f close (obert) ;

}else { printf ("\nError: El fichero de conf iguraciín alimento.dat no existe\nn);

exit (1) ;

/•**"***'***'•** ..... * ................ ***.****************.* ...... ********/

/* Guarda los valores de los datos de la estructura "medidas" en

el fichero depura.dat. Si es lunes a las ocho de la ma°ana, llama a

fichero semanal, que renombra depura.dat a la fecha actual.

*/

void archivar_dato3_medida (void)

íFILE «stream;

int i ;

float dias=0;

struct _dosdate_t d;

struct

tm *t;

time_t Itime;

time í&ltime) ;

t

=• localtimeí &ltime );

dias=dia_absoluto() ;

stream = fopen ("c: \\datos\\depura.dat" , "a+") ;

f printf (stream, "%5.4f

" , diaa) ;

for

(i=

0; i<

3 ;

i++

) /«

Escri

bim

os

el

pro

med

io d

e

los

£1 t

irn

os

3 m

inu

tos*

/{ fp

rin

tf (s

tre

am

, "

%4

-2f

" , m

at_

gra

f_e

2 [

i] [

0]

[47

91

) ;

/*p

H*

/fp

rin

tf (s

tream

, "

%4

. If

" ,m

at_

gra

f_e

2 [

i] {

!] [

47

9]

) ;

/*T

*/

fpri

ntf

(s

tream

, "

%4

.0f

" ,m

at_

gra

f_e2 [

i] [

2]

[47

9])

; /*

mV

*/

fpri

ntf

(s

tream

, •

%4 . I

f "

,mat_

gra

f_e2 (

i] [

3]

[47

9J

) ;

/*O

2*

/fp

rin

tf

(str

eam

, •

") ;

}fp

rin

tf

(str

eam

, "

%4 . 2

f "

,mat_

gra

f_e2

[O

j [4

] [4

79

] )

;fp

rin

tf

(str

ea

m,

" %

4 .2

f" ,

ma

t_g

raf_

e2 [

1]

[4]

[47

9]

) ;

fpri

ntf

(s

tream

, °

%4

. 2f

" ,m

at_

gra

f_e

2 [

2]

[4]

[47

9])

;fp

rin

tf (s

tream

, "

") ;

fpri

ntf

(s

tream

, "%

2d

%0

2d

%02

d "

, t-

>tm

_h

ou

r,

t->

tm_

min

, t-

>tm

_se

c);

fpri

ntf

(s

tream

, "ts

" ,

cti

me ( ti ti

me

) )

,-

A-54

APÉNDICES

Page 88: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MO

NITORIZACIÓ

N Y CONTROL PLANTA PILO

TO

f close (stream) ;

time (il

time) ;

t = localtimeí tltime );

_dos_getdate (&d)

;if

( (t->tm_hour==8)

(t->tm_min<=9) && (d.dayofweek==l) ) f ichero_semanal (} ;

/*******.*..*.*,*,**.**.*.*.********.*.*******»****.**.*..***.*.***,***..,/

/* Renombra depura.dat a la fecha actual, comprobando primero que el

fichero no exista ya. Tambi.n copia el fichero de seguridad de las

gr ficas a otro fichero con la fecha actual.

*/

void fichero semanal (void)

{char fitxer [25}

;struct tm *time_ara;

time_t segns_ara;

tzsetO ;

time (&segns_ara)

,-time_ara = localtime (&segns_ara) ;

strftimeí fitxer, 21, "c:

\\datos\\%d%b%y -dat" ,

time_ara) ;

if ( access! fitxer, 0) ==

0) return;

rename ("c:

\\datos\\depura. dat" , f

itxer) ;

strftime ( fitxer, 21, "c : \

\datos\\%d%b%y.gra" , time_ara) ;

if ( access { fitxer, 0) ==

0) return;

systemí"copy c : \

\depura\\tmp\\sec-graf .dat

c: \\datos\\sec-graf .dat

> copy.tmp /y">;

remove ( " c

opy . tmp

d ) ;

rename ("c:

\\datos\\sec-graf .dat"

, fitxer) ;

return;

/ ............... .************.*.* ..... .****** ......... *********.„* ........ /

/" Guarda el mensaje pasado como argumento en el fichero depura.dat,

añadiendo la hora y la fecha.

*/

void guarda_mensaje { char *mensaje)

FILE *stream;

time_t Itime;

time Ultime) ;

stream

f open (" c

: \\datos\\depura. dat" ,

f print f (stream, n%9n , m

ensaje) ;

f print f (stream, "%sn , c

time ( &ltime ) )

;

fclose (stream) ;

return;

void guarda medida( char "mensaje, char *fichero)

{FILE «stream;

struct tm *t;

time_t Itime;

time (tltime);

t = localtimet tltime ) ;

AP

ÉN

DIC

ES

A - 5

5

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CO

NTROL DE ED

AR

stream = fopen( fichero, "a*");

f print f (stream, "%s"

, mensaje) ;

fprintf (stream, "

%2d %02d %02d

\t", t->tm_hour, t->tm_min, t->tm_sec);

fprintf (stream, "%s"

, ctime (&ltime) ) ;

fclose (stream) ;

return;

J/ .......... * ..... *****,*********..*..********..******.*.**»***********..*./

/*

Subrutina de seguridad para los datos de las gr ficas y de medidas.

Con ordensO, lee los datos; con orde=l los sobreescribe .

*/

void seguro_graf icas (int

orden)

{FILE *obert;

/* Si comienza el programa y existe el fichero de seguridad, lo lee */

if (orden==0 && access ("c:

\\depura\\tmp\\sec-graf.dat11 ,0)

== O)

fobert=fopen( "c:

\\depura\\tmp\\sec-graf .dat" , "

rb") ;

f read (&hora,

sizeof (hora)

, 1, obert) ;

freadí&dia, sizeof (dia)

, 1,

obert) ,-

fread(&mat_graf_el, sizeof (mat_graf_el) , 1,

obert) ;

fread(6mat_graf_e2 , s

izeof (mat_graf_e2) , 1,

obert) ;

fread(&mat_graf_e3 , s

izeof (mat_graf_e3) , 1,

obert) ;

fread(&tiempo_el, sizeof (tiempo_el) , 1,

obert)

,-fread(&tiempo_e2, sizeof (tiempo_e2) , 1,

obert) ;

f read(&tiempo_e3 , s

izeof (tiempo_e3) , 1,

obert) ;

f readí&medidas, sizeof (medidas) , 1,

obert) ;

fclose (obert) ;

/* Sobreescribe el fichero con datos actuales */

if (orden==l)

{obert =f o

pen ( "c : \\depura\\tmp\\sec-graf . dat " , " w

b" ) ;

fwrite (&hora, sizeof (hora)

, 1, obert) ;

fwrite(&dia, sizeof (día)

, 1, obert) ;

fwrite(&mat_graf_el, sizeof (mat_graf_el) ,1,

obert) ;

fwrite(&mat_graf_e2, sizeof (mat_graf_e2) ,1,

obert)

,-fwrite (&mat_graf_e3 .sizeof (mat_graf_e3) ,1,

obert) ;

fwrite(&tiempo_el, sizeof (tiempo_el) , 1,

obert) ;

fwrite(&tiempo_e2, sizeof (

t iempo_e2) , 1,

obert) ;

fwrite (&tiempo_e3, sizeof (tiempo_e3) , 1,

obert) ;

f wri te (smedidas, sizeof (medidas) .1,

obert) ;

"

fclose (obert) ;

/*****»»***********..**** + **

***.*******

...********.***.*/

/* Funcitn que guarda los valores de oxigeno y mA en un fichero, con la

hora actual.

*/

void archivar_datos_escalon(void)

{FILE * fichero;

int i=0;

struct

tm "t;

time_t Itime;

f ichero=fopen ( "c :

\\datos\\escalon.dat" , "at-t-" )

;

time (&ltime);

A-56

APÉNDICES

Page 89: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONTR

OL P

LANT

A PI

LOTO

t = localtimeí fcltime );

for ' <i-0;i<3;i++) fprintf(fichero, " %4.2f ".medidas[i].mA);

for (i=0; i<3; i-

n-l

f print f (fichero, " %4 ,2f " .medidas [i] .oxigeno) ;

fprintf(fichero, "

%2d %02d %02d

", t->tm_hour, t->tm_min, t->tm_sec);

fprintf(fichero,"\h"};

fclose (fichero);

/* Cídigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

ffifdef TEST

float dia_absoluto(void)

{return 0.OF;

void main (void)

i /*lectura_conf iguracionO ; */

/*archivar_datos_escalon() ;

archivar_datos_medida() ;*/

lectura alimentación ();

ftendif

/.****.

APÉN

DICE

S A

- 5

7

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONTR

OL D

E ED

AR

GRÁFICOS.C -

FUNCIONES PARA LA PRESENTACIÓN DE DATOS Y GRÁFICAS

POR PANTALLA

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 10/10/96

tfinclude <conio.h>

#include

If include

Sinclude

Sinclude

«include

íí include

stdlib.h>

string.h>

stdio.h>

graph.h>

math.h>

time.h>

nombres-h"

/*#define TEST*/

tfifdef TEST

^define extern

ííendif

fídefine PATHFONTS "c : \\depura\\fonts\\* . fon"

/*************.********* subrutinas del fichero ***********************/

void modo_graf ico (void)

,-void graf_colorinea(int orden);

void graf_base(void);

void graf_plc(void) ,•

void graf_led( int led, int on_off );

void graf_nivel(int nivel, int on_off);

void graf_reloj(void);

void graf_hora(void);

void graf_sombra_grafica(void);

void graf_ayuda_general(void);

void graf_ayuda_graficas(void);

void graf_borra_ayuda(void);

void graf_display(void);

void graf_valores_display(void);

void salir_al_doa(void);

void graf_mA(float *mA);

void actualizar_matrices_graficas(void);

void graf_ejes_tierapo(int escala);

void graf_eje_pH (void)

,-void graf_eje_T(void);

void graf_eje_mV(void);

void graf_eje_O2(void);

void graf_eje_raA(void);

void graf_eje_multiple(void);

void graf_eje_debug{void);

void graf_tanques(void);

void graf_tanque(int tanque),-

vo

id g

rafi

ca_

vari

ab

le(i

nt

vari

ab

le,

int

tan

qu

e,

int

esc

ala

, sh

ort

co

lor)

;void

g

raf_

actu

ali

zacio

n_

gra

fico

(in

t v

ari

ab

le,

int

escala

);v

oid

g

raf_

nu

evo

__

gra

f ic

o (

in

t v

ari

ab

le,

int

escala

);v

oid

g

raf_

pre

sen

tac

ion

(vo

id);

vo

id

gra

f_m

en

saje

(ch

ar

*m

en

saje

);

/**

•**

**

**

**

**

**

**

**

vari

ab

les

com

un

es d

el

pro

gra

ma

**

**

**

**

**

**

**

**

**

/

flo

at

mat_

gra

f_el

[3] [6

] [3

60

]; /

'Matr

ices

para

la

s g

r fi

cas*

/fl

oat

ma

t_g

raf_

e2

[3]

[6]

(48

0]

,-fl

oat

ma

t_g

raf_

e3

[3][

6]

Í4B

O];

tim

e_

t ti

em

po

_e

l[3

60

);

/*M

atr

ices

tiem

po g

r fi

ca

s*

/ti

me_

t ti

emp

o_

e2 [

48

0]

,•ti

me_

t ti

emp

o_

e3[4

80

];

int

ho

ra,d

ia;

A-5

8AP

ÉNDI

ŒS

Page 90: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDIOES. PROGRAMA DE M

ON

iroRizAaÓ

N Y CCW

TROL PLANTA PILOTO

extern primera medidas [3];

extern estado_planta planta;

/* FunciCn para dar un poco de color a la vida en una esqui:

void graf_colorines(int orden)

{int i,k;

switch(orden)

case O :

for (i=116;i>20;i--)

for (k=40;k>0,-k--)

_setcolor( (short) (i-t-k)

);_moveto( (short)(600+k), 430 );

_lineto( (short) (600+k), 480 );

break;

case 1:for (i=20;i<116;i++)

for (k=0;k<40;k+-O

_setcolor{ (short) (i-t-k)

) ;

_rooveto( (short) (600-t-k) ,

430 ) ;

_lineto( (short) (600+k)

, 480

)

,-

/* Pasa del modo texto al gr fico.

void modo_graf ico (void)

{if( ¡_setvideomode( _MAXRESMODE ) )

exit ( 1 );

_registerf onts ( PATHFONTS ); /«Fuentes gr ficas*/

/*******•********************+***********.****.*. *********.• *****. *..*.****/

/* Función que llama a las funciones necesarias para dibujar la pantalla. */

void graf_base(void)

graf_plc ()

;graf_nivel{ 1,1);

graf_reloj O ;

graf_sombra_grafica () ;

/*gra£_ayuda_graf icas ()

;*/graf_ayuda_general O ;

graf_display() ,•

graf_hora O ;

graf_nuevo_graf ico ( planta. variable_actual, planta. escala actual) ;

Î/

******

**

**********

****.****..

.*//* Función para dibujar el recuadro y los cjrculos inferiores de los leds

indicadores del estado del PLC.

*/

void graf_plc(void)

APÉND

ICES

A

- 59

DESARROLLO E IMPLEMETÍTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN

Y CONTROL DE EDAR

short i, x;

char fuente(2OJ ="t "Tros

Rmn'hlOwSOb";

char numero[3];

_setcolor(242);

/'Establece el color activo*/

_rectangle( _GFILLINTERIOR, 600, O ,639, 365);

/'Dibuja rect ngulo relleno*/

_rectangle( _GBOÍÍDER,

600, O ,639, 365);

_setcolor(7);

_setgtextvector( 1, O ) ;

_setfont( fuente );

for (Í=0;Í<24;Í++)

/*Dibuja rect ngulo silo borde*/

/'Orientación del texto*/

/*Selecciín de la fuente»/

í= 605;

/*Se posciona en x-y indicado*/

/*Escribe en el buffer el n§*/

/'Escribe el buffer en pantalla*/

if ( i>=10 )

else x = 610;

_moveto ( x, (short)

(5 + i*15)

sprint f (

numero, "%liB , i) ,-

_outgtext(numero);

_setcolor(183);

for (Í=0;Í<24; Í-4-+)

_ellipse( _GFILLINTERIOR, 620, (short) (i*15

+ 5), 630, (short)

(15 + 1*15) );

_setcolor(130);

/*Dibuja cjrculo*/

for (i=0;i<24;i++}

_ellipse( _GBORDER, 620, (short)

(i*15+5), 630, (short) (15+i*15) );

/*Dibuja circunferencia*/

i/* Dibuja un led del color indicado, para indicar su estado,

void graf_led{ int led, int on_off )

short xl= 621, x2°629;

short yl, y2;

if ( led<0 || led>23 ) return;

if ( on_off!=0 && on_off!=l &&

on_off!=2 ) return;

yl = (short)

(led*15+6);

y2 o (short) (led*15

+ 14) ,-

switch(on_off )

case O:

/'Apagado*/

_setcolor(183);

break;

case 1 :

/'Encendido*/

_setcolor(4);

break;

case 2:

/*Error cotnunicacitn*/

_setcolor(0);

break;

_ellipse( _GFILLINTERIOR, xl, yl, x2, y2

/***'"****"* ..................... ********** .............. ****..**..**.***/

/* Dibuja el indicador del estado del tanque 3, es decir si se est vaciando

o llenando demasiadas veces seguidas. Tambi.n indica si existe alguna

alarma de funcionamiento.

*/

void graf_nivel(int nivel, int on_off)

ichar

fuen

te[20

]="t'T

ras R

mn'hlO

wSO

b";

_setcolor(242);

_rectangle( _GFILLINTERIOR, 600, 370 ,639, 420);

_setcolor(29);

_rectangle( _GBORDER, 600, 370 ,639, 420);

_setcolor(24);

_rectangle( _GFILLINTERIOR, 615, 375 ,634, 415) ;

A-60APÉNDICES

Page 91: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONITO

RIZA

CIÓN

Y C

ONTR

OL P

LANT

A PI

LOTO

_aetcolor (7) ;

_setfont( fuente ) ;

_moveto ( 603, 407 )

;_setgtextvector ( O, 1 )

;_outgtext ("Nivel" )

,-

_movetO ( 615, 400 ) ;

_lineto ( 634, 400 )

;

_setcolor (187) ;

switch(on off)

{case 0:

/*Bomba apagada*/

_rectangle( _GFILLINTERIOR, 615, 401 ,634, (short)

(400-t-nivel/2) );

break;

case i:

/'Bomba encendida*/

rectangle! _GFILLINTERIOR, 615, 399 ,634, (short) (400-nivel/2) ) ;

break;

case -1:

/*Alarma de nivel. Tanques 1 C 2*/

_setcoior Í4i ;

_rectangle ( J3FILLINTERIOR, 615, 375 ,634, 415);

_aetcolor (7)

,-_moveto ( 620, 412 )

;_outgtext ("A.Tanc") ;

break;

case

-2:

/*Alarma de nivel, bomba*/

_setcolor{6) ;

_rectangle( _GFILLINTERIOR, 615, 375 ,634, 415);

_setcolor (7) ;

_moveto (620, 415 );

_outgtext ("A. Bomba"

ï ;

break;

case

-3

i /*Alarma escape*/

_setcolor(12) ;

_rectangle( _GFILLINTERIOR, 615, 375 ,634, 415);

_setcolor (7) ;

_moveto ( 620, 415 )

;_outgtext ( "A. Escape" ) ;

break;

case

-4:

/"Alarma manual*/

_setcolor (110) ;

_rectangle( _GFILLINTERIOR, 615, 375

,634, 415);

_setcolor (7) ;

_moveto ( 620, 415 ) ;

_out9text("A. Manual")

,-break;

/*.**•**. .*******.*+.**.. .*++***„********. **•**********+*.** .............. */

/* Gr fica del indicador de deteccifn de sobrecargas, el reloj que da

vueltas en la esquina inferior derecha. Es llamada una vez cada ciclo

del do while del programa principal.

*/

void graf_reloj (void)

f short x, y;

short radio=19

;double alfa;

static int i=0;

if U>=180) i = 0;

_setcolor(242) ; /*antes 17l*/

_rectangle( _GFILLINTERIOR, 601, 426, 638, 473);

_setcolor{29) ;

_rectangle( _GBORDER, 600, 425 ,639, 474);

alfa= (double)

(2*3 . 14159265*i*2 . /360. ) ;

x= (short) (619 - radio * sin (alfa));

y= (short) (449

+ radio

* cos (alfa)), •

/*_setcolor( (short)

i) ;-/

APÉN

DICE

S A

- 6

1

DE

SA

RR

OLL

O E

IMP

LEM

EN

TAQ

ÓN

DE

UN

SIS

TEM

A S

UP

ER

VIS

OR

PAR

A L

A G

ES

TIÓ

N Y

CO

NTR

OL

DE

ED

AR

_setcolor (3l) ;

_moveto ( 619, 449) ;

__lineto ( x, y) ;

_lineto { 618, 450) ;

/***** ........................ **** ......... **** ..... * ......... .*****..**./

/* Reloj digital, con fecha y hora.

*/

void graf_hora (void)

{ time_t Itime;

short x=445,

y=460;

char fuente (20J ="

t 'Tms Rmn'hl2w50bn ;

char buf fer [30] ;

_setgtextvector ( 1, 0 );

_setfont ( fuente ) ;

time (&ltime) ;

sprintf (buffer, "%s" , ctime( &ltime ));

_setcolor(242) ;

_rectangle( _GFILLIKTERIOR, 441, 459

,587, 471);

_setcolor(28) ;

__rectangle( _GBORDER, 441, 459 ,587, 471);

_setcolor (29) ;

_moveto(x,y) ;

_outgtext (buffer) ;

} / ............... **** ....... ******.***.***** .............. ****.*»******..*. + /

/* Escribe la pantalla de ayuda general del programa.

*/

void graf_ayuda_general (void)

{ int i;

short x,y;

char

fu

ente

(20

] =" t

'Tm

s R

mn'

hSw

Sb" ;

char

b

uff

ert

lS]

[28]

={/

****

****

****

****

****

****

*/"F

l A

yuda

gr

fic

as"

,"F

2 V

aria

r mA

PC

L72

6",

"F3

En

cen

der

PL

C 1

-4",

"F4

Apa

gar

PL

C 1

-4",

"F5

Encender agitador",

"F6

Apagar agitador",

"F7

Parada emerg.

agit.",

"F8

Variar vel.

agit.",

"F9

Encender salida PLC",

"FIO

Salir del programa",

"Fll Reinicializar ",

"F12

Parada manual

",

"ALT-Q Salida + parada",

"ALT-D Salida al DOS",

"ESC Cr, ditos programa"};

_setgtextvector ( 1, O ) ;

_setfont( fuente

);

_setcolor (242) ;/*antes 19*/

_rectangle( _GFILLINTERIOR, O, O, 595, 38);

_setcolor (29) ;

_rectangle( _GBORDER, O, O, 595, 38);

for (i=0;i<15;i++)

{ x= (short) (5+i*120- (int) (i/5) *600)

;y= (short) (2 + 12* (int) (i/S) } ;

_moveto(x, y) ;

_outgtext (buffer

[i} ) ;

A-62

APÉNDICES

Page 92: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZACIÓN Y CONTROL PLANTA PILOTO

/* Escribe la pantalla de ayuda referida a las gr ficas.

void graf_ayuda_graf icas (void)

iint i ,-

short x,y;

char fuente [20]

="t 'Tms

Rmn'hSwSb" ;

char buf fer 115]

[26] ={/********""**•*********•/

"Fl Ayuda general",

"O

Gr fica Oxigeno" ,

"H

Gr fica pH",

"R Gr fica Redox" ,

"T

Gr fica Temperatura" ,

"A

Gr fica mA",

" 1

Variables tanque 1 " ,

" 2

Variables tanque 2 " ,

"3 Variables tanque 3"

,"E

Cambio de escala" ,

"ESPACIO

Actualizar" ,

"D

Debug programa"};

_setgtextvector ( 1, O ) ;

_setfont ( fuente ) ;

_3etcolor(l7l) ;

_rectangle( _GF ILL

INTERIOR, O, O, 595, 3B) ;

_setcolor (30)

;_rectangle( _GBORD8R, O, O, 595, 38);

for

íx= (short) (5+i*120- (int)

(i/5) *600) ;

y= (short) (2+12*

(int) (i/5)

) ;

_moveto(x,y) ;

_outgtext (buffer [i]

) ;

/***•**•*****

**********

**********

*****.*****/

/* Dibuja un rect ngulo negro para borrar el cuadro de ayuda, y as¡ poder

escribir un mensaje en esa zona.

*/

void graf_borra_ayuda(void)

t_setcolor(0);

_rectangle( _GFILLINTERIOR, O, O, 595, 38);

_setcolor(29);

_rectangle( J3BORDER, O, O, 595, 38);

/*****

*

***

******..****************.*,*********,

/*• Dibuja el rect ngulo, las rayas interiores y los títulos del display

donde se muestran los valores.

*/

void graf_display(void)

íint i, j;

short x, y;

char fuente[20]="t "Tms

Rmn'hSwSb";

char variables[6] [12]={/**********/

pH

T (C)

-,"Redox (mV)n,

" O2 (ppm) ",

" mA pcl726",

"V (%)

agit"};

char tanques[3] [12)=

{/*•***»*•**/

" Tanque 1 ",

" Tanque 2 ",

" Tanque 3 "};

_setgtextvector( 1, O );

_setfont( fuente );

_setcolor(171);

APÉNDICES A

- 63

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

_re

cta

ng

le(

_GFIL

·L·IN

TE

RIO

R,

O,

41

, 5

95

, 97

);_

se

tco

lor(2

9);

_re

cta

ng

leí

_GB

OR

DE

R,

O,

41

, 5

95

, 97

) ;

for

(i=l; i<

7; Í + -O

_se

tco

lor(3

0);

x=

(sho

rt)(3+

i*7

0);

y=

(sh

ort)(4

5);

_re

cta

ng

le(

_GB

OR

DER

, x

, y

, (sh

ort)(x

+7

0),

(sho

rt)(y+

12

)};

__

setc

olo

r (10) ;_

mo

ve

to((sh

ort)(x

+1

0),y

);_

ou

tgte

xt(v

aria

ble

s[i-1

]};

ifo

r (j=

l;j<4

;j++

)

_setc

olo

r(30

);x

=(s

ho

rt)(3);

y=

(sho

rt) (45

+j*

12

);_

recta

ng

le(

_GB

OR

DER

, x

, y

, (sh

ort)(x

+7

0),

(sho

rt)(y+

12

));_

setc

olo

r (10) ,-_

mo

ve

to((sh

ort)(x

+1

0),y

);_

ou

tgte

xt(ta

nq

ue

s[j-1

]);

gra

f_v

alo

res_

disp

lay

() ;

/** ....... **********.******.*********.********************...*.** ...... ****/

/* Escribe los valores de las variables medidas del sistema en el display.*/

void graf_valores_display (void)

íint i ,

j ;

short x, y;

ch

ar

fue

nte [2

0] =

"t'Tm

s R

mn'hB

wS

b";ch

ar

bu

f fer [6

] [10] ;

_setg

tex

tvecto

r( 1

, 0

);se

t f on

t ( fu

en

te } ;

_setcolor(0);

_rectangle( _GFILLINTERIOR, 73, 57, 493, 93);

_setcolor(242);

for (j=l; j<4; j++)

{for

(i = l;i<7;i-f +

)íx= (short) (3+i*70);

y=(short)(45+J-12);

_rectangle ( _GBORDER, x, y, (short)

(x+70) , (short) (y-t-12) )

;

_rectangle( _GBORDER, 73, 57, 493, 93);

_setcolor(30);

for (i°0;i<3,-i

+ + )

{sprintf (buffer[0], "%2.2f",

sprintf (buffertl], "%2.1f",

sprintf (buffer[2], "%4.0f,

sprintf (buffer[3], "%2.1f,

sprintf (buffer[4], "%2.2f",

sprintf (buffer[5], "%2.lf",

for (j=0; j<6; j++)

{_moveto((short)(100+j*70),

_outgtext(buffer[jj ) ;

ma

t_g

raf_

el[i]

[0] [35

9]);

ma

t_g

raf_

el[i]

[1] [3

59

]);m

at_

gra

f_e

l[i] [2

] [35

9]);

ma

t_g

raf_

el[i][3

][35

9]);

mat_

gra

f_el [i]

[4] [3

59

] ) ,-m

at_

gra

f_el (i]

[5] [359] ) ,-

(short)(5e*i"12));

/* Dibuja la sombra de la gr fica, la pantalla base.

A-64

APÉNDICES

Page 93: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROG

RAM

A DE

MO

NITO

RIZA

CIÓ

N Y

CO

NTRO

L PL

ANTA

PILO

TO

void graf_sombra gráfica(void)

( _setcolor(23);

/*sombra*/

_rectangle( _GFILLINTERIOR, 5, 105, 595, 479);

_setcolor{171);

_setcolor(29);

_rectangle( _GBORDER, O, 100 , 590, 474);

_setcolor(0);

_rectangle{ J3FILLINTERIOR, 80, 115 , 560, 434);

_setcolor(29);

_rectangle( _GBORDER, 80, 115 , 560, 434);

/****••••* ................... * ........... ******.****..*****.* ........ **.***/

/* FunciCn para salir al dos. Cambio de modo gr fico a texto, ejecuta un

command y despu.s redibuja la pantalla, leds incluidos.

*/.

int i;

_setvideomode ( _DEFAULTMODE ) ;

printf ("\nEscribe 'exit' para volver al programa\n") ;

system ("COMMAND. COM") ;

if ( !_setvideomode( _MAXRESMODE ) )

exit( 1 );

gra

f_b

ase

() ;

for

(i=

0,-

i<2

4;i

+ *

) g

raf_

led

( i,

p

lan

ta. s

ali

dag

_p

lc [

ij )

;

/.*.....*...,...............+.........+...,,...,,.....,.*...*.*..,*.*..,,,,/

/* Funciin temporal utilizada para mostrar los valores de aire introducidos

en los tanques.

*/

void graf mA(float "mA)

i ch

ar

fue

nte

[20

J =

"t'T

ms

Rm

n'h

líw

SO

b";

ch

ar

bu

ffe

r[8

0];

sp

rin

t f

(bu

ffe

r,

"mA

: %

5.2

f %

5.2

f %

5.2

f,m

A[0

],m

A[l

],m

A[2

]);

_setcolor(0);

_rectangle( _GFILLIKTERIOR,

setcolor(7) ;

O, 10, 400, 30);

_setgtextvectorí 1, O );

_setfont( fuente ) ;

_moveto(0,10) ; /"arreglo temporal*/

_outgtext(buffer);

í /,**..***.,.****.******.******•****»

Actu

ali

za la

s m

atr

ices

uti

lizad

as

para

d

ibu

jar

las

gr

ficas.

mat_

gra

f_el[

3]

[6]

[360

1 ;

dato

s d

e u

na

ho

ra,

cad

a

10 s

egundos

mat_

gra

f_e2

[3]

[6]

{480

] ;

dato

s d

e u

n d

;a,

cada

3 m

inu

tos

mat_

gra

f_e3

[3)

[6]

[48

0];

dato

s d

e u

na

sem

ana,

cad

a 2

1 m

inu

tos

Lo

s d

ato

s d

e cada

ma

triz

eat

n p

rom

ed

iad

os

de

las

an

teri

ore

s.

18 d

e

el

->

1 d

e

e2

. 7 d

e

e2

->

1 d

e

e3

void

actu

ali

zar_

matr

ices_

gra

ficas(v

oid

}( int

sonda,i,j ;

float sum;

double temp;

for

(so

nd

a=

0;s

on

da<

3;s

on

da-n

-)fo

r (i

=0

;i<

6;i

*+

)fo

r (j

=0

;j<

35

9,-

j* +

) m

at_

gra

f_el

[so

nd

a] [

i]

[ j]

=m

at_

gra

f_el

[so

nd

a]

[i]

[j+

lj ;

for

(j=

0;j

<3

59

;j+

+)

tie

mp

o_

el[

j]=

tie

mp

o_

el[

j+1

];/•

Hac

emo

s sit

io p

ara

el

Clt

imo v

alo

r d

e _

el*

/

for

(3o

nd

a=

0;s

on

da<

3;s

on

da+

+)

APÉN

DICE

S A

- 65

DESA

RROL

LO E

IMPL

EMEN

TAQ

ON

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DAR

t mat_

gra

f_el[

son

da]

[0]

[35

9]=

med

idas

ma

t_g

raf_

el[

son

da

][1

][3

59

]=m

ed

ida

sm

at_

gra

f_e

l[so

nd

a][

2][

35

9]-

me

did

as

ma

t_g

raf_

el[

son

da

][3

]{3

59

]=m

ed

ida

sm

at_

gra

f_e

l[so

nd

a][

4][

35

9]=

me

did

as

ma

t_g

raf_

el[

son

da

][5

][3

59

]=m

ed

ida

si

tiem

po

_el

[35

9]

=ti

me{

NU

LL

) ;

sonda].ph;

sonda].temperatura;

sonda].potencial;

sonda].oxigeno;

sonda].mA;

sonda].velocidad;

/•Asignamos el £ltimo valor*/

ho

ra+

+;

. if

(h

ora

>-1

8)

{ ho

ra=

0;

for

( so

nd

a=0 ;

son

da<

3 ;

sond

a*-*

-)fo

r (i

=0

; i<

6;

i++

)fo

r (j

=0

; j<

47

9; J

+-4-

) m

at_

gra

f_e

2 [

son

da]

[i]

[j]

=m

at_

gra

f_e2 [

son

da]

[i]

[j+

1]

;/*

Hac

emo

s sit

io p

ara

el

Elt

imo v

alo

r d

e _

e2

*/

for

(j=

0;j

<4

79

;j+

+)

tiem

po

_e2

[j]

=ti

emp

o_

e2 [

j+1

] ;

for

(so

nd

ado ;

so

nd

a<3

¡so

nda*

-*-)

for

(i=

0; i

<6

; i+

+)

{ sum

=0

,-fo

r (j

=3

42

; j<

36

0; j

-»-+

) su

mo

sum

+m

at_

gra

f_el

[so

nd

a]

{ij

[j]

;m

at_

gra

f_e

2 (

son

da)

[i)

[47

9]

=su

m/i

a .O

F;

} /"

Pro

med

iam

os

y

asi

gn

am

os

el

Clt

imo v

alo

r*/

tem

p=

0. O

F;

for

( j

=3

4 2

; j<

36

0; j

++

) te

mp

=te

mp

+-t

iem

po

_el

[j

] ;

tiem

po

_e2

[4

79

] =

(lo

ng

int)

(te

mp

/18 .

OF)

;

if

(dia

>=

7)

for

(so

nd

a =

0; s

on

da<

3 ;

sond

a+-f

>)

for

(Í=

0;Í

<6

;Í+

+)

for

(j=

0;j

<4

79

;j+

+)

ma

t_g

raf_

e3

[so

nd

a][

i][j

]=m

at_

gra

f_e

3[s

on

da

][i]

[j+

l];

for

(j-0

;j<

47

9; j*

+ )

tiem

po

_e3

[ j

] =

tiem

po

_e3

[ j

-t-1]

;/•

Hac

ern

os

sit

io p

ara

el

Elt

imo v

alo

r d

e _

e3

*/

for

(so

nd

a=0

,- s

on

da<

3 ;

son

da*

*)

for

(isO

,-i<

6;i

+ *

)i su

maO

;fo

r (

j=4

73

;j<

48

0;j

+ +

) su

m=

sum

+m

at_

gra

f_e2

[so

nd

a]

[i]

[j]

;m

at_

gra

f_e

3[s

on

da

][i]

[47

9]=

sum

/7.O

F;

} /*

Pro

med

iam

os

y asi

gn

am

os

el

Elt

imo v

alo

r*/

tem

p=

O.O

F;

for

(j=

47

3;j

<4

80

;j+

*)

tem

p=

tem

p+

tie

mp

o_

e2

[j];

tie

mp

o_

e3

[47

9]=

(lo

ng

in

t)(t

em

p/7

.0F

);J/*

if

(dia

>=

7)*

/

}/*

if

(ho

ra>

=1

8)*

/

} /• Dibuja el eje horizontal del tiempo, en tres escalas diferentes,

void graf_ejes tiempoíint escala)

{ int i ;

short x,-

char fuente[20]="t'Tms Rmn'hl2w50bn;

char buffer[20];

_setgtextvector ( 1, O

),-

_setfont{ fuente );

_setcolor (30);

switch(escala)

case 1 :

for (Í=0;Í<13;Í*+)

/•Escala de una hora*/

A-66

APÉNDICES

Page 94: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNOIŒS. PROGRAMA DE MONITORIZACIÓN Y CONTROL PLANTA Pnoro

íx=

(sho

rt) (80-t-iMO

) ;_

mo

ve

to(x

,43

4) ;

_lin

eto

(x,4

39

);_

mo

ve

to((s

ho

rt)(x-5

),44

1);

sp

rintf(b

uffe

r, "%

2i", i*

5) ;

_p

utg

tex

t(bu

ffer);

_moveto(150,460);

_outgtext("Tiempo

(minutos)"};

break;

case 2:

/*Escala de un d¡a*/

for (Í=0;Í<25;Í++)

íx=(short)(80+i*20);

_moveto(x,434);

_lineto(x,439);

_moveto((short)(x-5),441);

sprintf(buffer, "%2in,i);

_outgtext(buffer);

_moveto(150,460);

__outgtext {"Tiempo

(horas) ")

,-break

,-case 3 :

for (i=0;i<8;i++)

íx*(short)(80+i*68.5BF);

_moveto(x,434) ;

_lineto(x,439);

_moveto((short)(x-5),441);

sprintf(buffer, "%2i",i);

_outgtext{buffer);

}__moveto(150, 460) ;

_outgtext("Tiempo

(días)"};

break;

/*Escala de una semana*/

/*_rectangle( _GBORDER, 80, 115 , 560, 434);

/* Dibuja el eje vertical del pH.

void graf_eje_pH(void)

{int i;

short y;

ch

ar

fue

nte [2

0] =

"t"Tm

s R

mn

'hl2

w5

0b

" ;ch

ar

bu

ffer[2

0];

^setc

olo

r (3

0);

^setg

tex

tvecto

rt 1,

O )

;_

ae

tfon

t( fu

en

te );

for (i=0;i<5;i++)

/*Escala 5 a 9*/

íy=(short)(434-i*79.75F);

_moveto(75,y);

_lineto(80,y);

_moveto(65,(short)(y-5));

sprintf(buffer, "%2ifl,i+5);

_outgtext(buffer);

_setgtextvector( O, 1);

_moveto(30,270);

"outgtext ("pH")

,-

/* Dibuja el eje vertical de la Temperatura.

void graf_eje_T{void)

{int i;

APÉNDICES

A - 6

7

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

short y,-

char fuente [20]

="t "Tms

Rtnn'hl2w50b" ;

char buffer[20];

_setcolor (30);

_setgtextvector( 1, O );

_setfonc( fuente );

for (i=0;i<6;i++)

/'Escala 10 a 35*/

íy=(short) (434-i*63 . 8F);

_moveto(75,y);

_lineto(80,y);

_moveto(65,(short)(y-5));

sprintf(buffer, n%2i", (i*5+lO));

_outgtext(buffer) ;

_setgtextvector( O, 1) ;

_moveto(30, 300) ;

_outgtext("Temperatura (C)"};

/* Dibuja el eje vertical del redox.

void graf_eje_mV(void)

íint i;

short y;

char fuente[20]="t'Tms Rmn'hl2w50b";

char buffer[20];

_setcolor (30);

_setgtextvector( 1, O );

_setfont( fuente Ï;

for (i = 0;i<ll,-i

+ + )

/*Escala -600 a 400*/

íy=(short)(434-i*31.9F);

_moveto(75,y);

_lineto(80,y);

_moveto(55,(short)(y-5));

sprintf(buffer, "%4in, (i*100-600));

_outgtext(buffer);

_setgtextvector( O, 1);

_move to(30,290);

_outgtext("Redox (mv)");

/* Dibuja el eje vertical del oxigeno.

void graf_eje_02(void)

{int i;

short y;

ch

ar

fue

nte

[20

]="t "T

ras R

mn

'hl2

w5

0b

n;ch

ar

bu

ffer [2

0];

_setc

olo

r (3

0);

_eetg

tex

tvecto

r ( 1,

O

) ,-_

se

tfon

t( fu

en

te );

for

(i=0

;i<9

;i+-O

/*

Esc

ala

O

a 8

*/

íya

(sh

ort)(4

34

-i*3

9.8

7F

);_

mo

ve

to(7

5,y

);_

line

to(8

0,y

);_

mo

ve

to(6

5,(s

ho

rt)(y-5

));sp

rintf(b

uffe

r, "%

2i", i)

;

_o

utg

tex

t(bu

ffer);

}_

setg

tex

tvecto

r( O

, 1

);_

tno

vetO

(30

, 30

0) ;

_o

utg

tex

t("O

xig

en

o

(pp

m)");

A-6

8APÉNDICES

Page 95: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZAO

ÓN

Y C

ONT

ROL

PLAN

TA P

ILO

TO

/* Dibuja el eje vertical de los miliamperios de la v Ivula de aire.

void graf_eje_mA(void)

{ int i;

short Vi

-char fuente [20] ="t "Tras Rmn'hl2w50b" ;

char buffer [20] ;

_setcolor (30)

;_setgtextvector ( i, O ) ;

_setfont( fuente ) ;

for

= 0;i<17;i+-O

/*Escala 4 a 20*/

y= (short) (434-i*19 . 93F> ;

_moveto(75,y) ;

_lineto (80, y) ;

_moveto(65, (short) (y-5)},-

sprintf (buffer, "%2in, i+4) ;

_outgtext (buf fer) ;

_aetgtextvector( O, 1) ;

_moveto(30,340) ;

_outgtext ("Abertura v Ivulaa de aire (mA)

" ) ;

/* Dibuja el eje vertical m£ltiple de cada tanque: pH, T, mV, O2, mA.

void graf_eje_multiple (void)

{ int i ;

short y;

char fuente [20] ="t'Tm9 Rmn'hSwSOb";

char buf fer [20]

,-

_setcolor (40) ;

_setgtextvector< O, 1 ) ;

set f ont ( fuente ) ;

_moveto(16, 115) ;

_lineto(16,434);

for (i=0;i<S;i++)

/*pH escala 5 a 9*/

y= (Short) (434-Í-79 . 75F) ;

_moveto(14 ,y) ;

_lineto(16,y);

_moveto(4, (short) (y+5) ) ;

sprintf (buffer, "%2i" , i+5

> ;

_outgtext (buf fer) ;

}_moveto(6,471) ;

_outgtext ("pH") ;

_setcolor (44) ;

_moveto(32,115) ;

_lineto(32,434) ;

for (i=0; i<6; i++)

/*T escala 10 a 35*/

y=(short) (434-i*63 .8F) ;

_moveto (30, y) ;

_lineto(32,y) ;

_moveto(20, (short) (y+5) ) ;

sprintf (buffer, "%2i", (i*5+10) ) ;

_outgtext (buf fer) ;

_moveto(22,471) ;

_outgtext(nT(C)") ;

setcolor (48) ;

APÉN

DICE

S A

- 69

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DA

R

_raoveto(48, 115) ;

_lineto(48,434) ;

for (i=0;i<ll;i++)

/*mv escala -600 a 400*/

y=(short)(434-i*31.9F) ;

_moveto(46,y);

_lineto(48,y);

_moveto(36,(short)(y+10));

sprintf(buffer, "%4iD, (i*100-600)) ;

_outgtext(buffer);

_raoveto(38,471);

_outgtext("mV"};

_setcolor (52);

_moveto(64,115);

_lineto(64,434);

for (i=0;i<9;i++) /*O2 escala O a 8*/

y=(short)(434-i*39.87F);

_moveto(62,y);

_lineto(64,y);

_moveto(52,(short)(y+5));

sprintf(buffer, "%2i",i);

_outgtext(buffer);

_moveto(54,471);

_outgtext("ppm");

_setcolor (56);

_moveto(80,115}

,-_lineto(80,434};

for (Í=0;Í<17;Í++

/*mA

escala 4 a 20*/

y=(Short) (434-1*19. 93F) ;

_moveto (78, y) ;

_lineto (80, y) ;

_moveto(68, (short) (y+5) ) ;

sprintf (buf fer, 0%2i" , i+4)

_outgtext (buf fer) ;

}_moveto(70,471) ;

_outgtext ("iiiA") ;

/* Dibuja el eje de debug.

void graf_eje_debug(void)

í. char fuente[20]="t'Tms Rmn'hl2w50b";

_setcolor (30);

_setfont( fuente );

_setgtextvector( O, 1);

__moveto (30, 350) ;

_outgtext("Seguimiento del programa");

/* Dibuja el recuadro donde se indica el color correspondiente

a cada tanque.

void graf_tanques(void)

í int j;

short x=3,

y;ch

ar

fue

nte

[20

] =

nt'

Tn

is

Rm

n'hl

Ow

SO

b" ;

ch

ar

bu

ffe

r[2

0]

;

_setg

tex

tvecto

r(

1,

0

);

_se

tfo

nt(

fu

en

te

) ,-

_setcolor(0)

,-_rectangle(_GFILLINTERIOR,3,434,53,468) ;

A-70

APÉNDICES

Page 96: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONTTORIZACIÓN Y CONTROL PLANTA PILOTO

for (j=l;j<4;j++)

{_setcolor(30);

y=(short) (422

+ j*12) ;

_rectangle( _GBORDER, x, y, (short)(x+50), (short) (y+12)ï

;_setcolor((short)(j*8+44));

_moveto((short)(x+6),y);

sprintf(buffer,"Tanque %li",j},-

outgtext (buffer)

,-

/* Dibuja el nombre del tanque al que corresponde la gr fica mEltiple.

void graf_tanque(int tanque)

char fuente[20]="t "Tras

Rmn'hl2w50bn;

char buffer[30];

_setgtextvector( 1, O ) ;

_setfont ( fuente ) ;

_setcolor (0) ;

_rectangle( _GFILLINTERIOR, 300, 459 ,370, 471);

_setcolor (30)

;_rectangle( J3BORDER, 300, 459 ,370, 471);

_moveto(310 ,460) ;

sprintf (buffer, "Tanque %li" , t

anque) ;

_setcolor (51)

;_outgtext (buffer) ;

/* Gráfica las l¡neas correspondientes para una variable de un tanque

determinado, en la escala de tiempo y con el color proporcionado.

void graf ica_variable (int

variable, int tanque, int escala, short color)

{int i;

sho

rt x

,y,x

t;flo

at

xO

=8

0.0

F,

yO

=4

33

.0F

,a

ltO=

31

7.0

F;

float

sets [6] [3] =

{/*

min

imo

, m

xim

o,

ran

go

*/

{5

. OF

, 9. O

F, 4 .O

F} ,

{1

0. O

F, 35

. OF, 2

5. O

F},

{-6

00

. OF, 4

00

. OF, 1

00

0. O

F},

JO. O

F, 8

. OF

, 8. O

F},

{4

. OF, 2

0. O

F, 1

6. O

F} ,{O.OF, 100. OF, 100.

OF} } ;

double increm_t, increm_tt ;

/*PH*/

/*T

em

pera

tura

*/

/*m

v*

//*

02

*/

/*n**/

/*V

elo

cid

ad

*/

switc

h(e

sca

la)

tcase

1

: /"

Esc

ala

para

un

a h

ora

*/

increm

_tts6

0.O

F*

6O

.OF

; /*

! ho

ra,

60

min

uto

s*6

0 seg

un

do

s*/

x=

(sho

rt)(xO

+1

);y

=(s

ho

rt)(yO

-alto

/sets

[varia

ble

][2]*

(ma

t_g

raf_

eltta

nq

ue

-1][v

aria

ble

][1]-se

ts[va

riab

le][0

]) );

if (y<

116) y

=1

16

;if

(y>433)

y=

43

3;

_m

ov

eto

(x,y

);for

(Ío2

;Í<3

60

;Í + -t-){in

cre

m_

t=(d

ou

ble

) d

ifftime (tie

mp

o_

el[3

59

],tiem

po

_e

l[i] ) ;i f

(increm

_t > in

crem_

t t) co

nt in

ue;

xt=

(sho

rt) (55

9-in

cre

m_

t/inc

rem

_tt*

47

8.0

F) ;

if ((xt-x)>10) _setlinestyle(OxAAAA>;

else _setlinestyle(OxFFFF);

x=xt;

y=

(sh

ort)(y

O-a

lto/s

ets

[va

riab

le][2

]*(m

at_

gra

f_e

l[tan

qu

e-lj

[va

riab

le](i)-s

ets

(va

riab

le][0

]}

);

AP

ÉN

DIC

ES

A - 7

1

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓN Y CONTROL DE ED

AR

if (y<116) y-116;

if (y>433)

y=433;

_lineto(x,y);

break;

case 2:

/*Escala para un d;a*/

increm_tt=24.0F*60.0F*60.0F; /*24 horas* 60 minutos*60 segundos*/

x= (short)

(xO + 1);

y=

(sh

ort)(y

O-a

lto/s

ets

[va

riab

le][2

]*(m

at_

gra

f_e

2[ta

nq

ue

-1][v

aria

ble

][1]-se

ts[va

riab

le][0

]) );

if (y<

116>

y=

11

6;

if (y

>4

33

) y

=4

33

;_

mo

ve

to(x

,y);

for

(i=2

; i<4

80

; i•*--*-)

{incre

m_

t-(do

ub

le)

difftim

e(tie

mp

o_

e2

[47

9],tie

rap

o_

e2 [

i]);

if (in

cre

ra_

t>in

cre

m_

tt) co

ntin

ue;

xt=

(sho

rt)(S5

9-in

cre

m_

t/inc

rem

_tt*

47

8.0

F);

if ((xt-x)>lO) _setlinestyle(OxAAAA)

,-else _setlinestyle(OxFFFF);

x=xt ;

y=

(sh

ort)(y

O-a

lto/s

ets

[va

riab

le][2

]*(m

at_

gra

f_e

2[ta

nq

ue

-1][v

aria

ble

](i]-se

ts[v

aria

ble

][0])

};

if (y<

116) y

=H

6;

if (y

>4

33

) y

=4

33

;_

line

to(x

,y);

break;

case 3:

/*E3cala para una semana*/

increm_tt»7.OF*24.OF*6O.OF"6O.OF;/*7 d¡as*24 horas*60 minutos*60 segundos*/

x=(short) (XÛ+-1) ;

y=

(sho

rt) (yO

-alto

/se

ts[v

aria

ble

] [2]*

(ma

t_g

raf_

e3

[tan

qu

e-1

](va

riab

le][1

]-sets(v

aria

ble

][0])

);

if (y<

116) y-1

16;

if (y

>4

33

) y

=4

33

;_

mo

ve

to(x

,y);

for

(Í=2

;Í<4

80

;Í+-t-)

{incretn

_t=

(do

ub

le)

dif f tim

e (tiemp

o_

e3 [4

79

] , tiemp

o_

e3 [i] } ;

i f (in

cre

m_

t >in

cre

m_

tt) co

ntin

ue;

xt=

(sho

rt)(5S

9-in

cre

m_

t/inc

rem

_tt*

47

8.0

F);

if ((xt-x)>10) _setlinestyle(OxAAAA);

else _setlinestyle(OxFFFF);

X=Xt ;

y=

(sh

ort)(y

O-a

lto/s

ets

[va

riab

le][2

J*

(ma

t_g

raf_

e3

[tan

qu

e-1

] [v

aria

ble

] [i]-sets

[varia

ble

] [OJ)

);

if (y<

116) y=

116;

if (y

>4

33

) y

=4

33

;_

line

to(x

,y);

bre

ak

;}_se

tline

style

(Ox

FF

FF

);}/*

**

**

**

**

*.*

*.*

*.*

**

.**

*.*

**

.**

**

**

**

*.*

**

.**

**

*...*

**

**

**

**

**

**

**

.//* Llama a la funciín grafica_variable las veces necesarias para dibujar

todas las variables que aparecer n en el gr fico. El tratamiento es

diferente si se trata de la gr fica de una variable para los tres

tanques o de las variables de un tanque.

*/

void graf_actualizacion_graficotint variable, int escala)

iint i;

if (variable!=20!

f_setcolor (0);

_rectangle( _GFILLINTERIOR, 81, 116 , 559, 433);

íf (variable>nO && variable<5)

/*Una variable de los tres tanques*/

for (i=l;i<4;i + + )

grafica_variable( variable, i, escala, (short)

(i*8+44));

if (variable>=5 &&

variable<8)

/«Variables de un tanque*/

for (i=0;i<5;i + + )

grafica_variable( i, variable-4, escala, (short) (i*4+40));

A-72

APÉNDICES

Page 97: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONÍ

TORI

ZAO

ÓN

Y C

ONTR

OL P

LANT

A PI

LOTO

/* FunciCn con el copyright, presentacitn del programa.

void graf_presentacion{void)

{ ch

ar

fue

nte

l {2

0j =

"t "

Tm

s R

mn'

h60w

50bn ;

ch

ar

fue

nte

2 [

20

] =

"t'T

m3

Rin

n'hl

6wS

Obn ;

ch

ar

fuen

tes

[20

] = "

t"T

ms

Rm

n'h

l2w

50

bB ;

_set

gtex

tvec

tor

( 1,

O ) ,-

_setcolor (104) ;

_rectangle( _GFILLINTERIOR, 61, 116 , 559, 433);

_moveto(250 , 150) ;

_aetcolor (79) ,-

_setfont( fuentel ) ;

_outgtext ( "DEPURA" ) ;

_moveto(160 ,200) ;

_setf ont ( fuente2 ) ;

_outgtext ( "Programa per la Monitoritzacií i Control");

_moveto{130 ,225) ;

_outgtext ("de plantes depuradores d'aigues residuals urbanes");

_setcolor(77) ;

_moveto(100 , 362) ;

_setfont ( fuente3 ) ;

_outgtext ( "Copyright : Juan Baeza 1996") ;

_moveto(100 ,380) ;

_outgtext ("Unitat d1 Enginyeria Química") ;

_moveto(100 ,398);

__

ou

tgte

xt

("U

niv

ers

itat

Au

t-n

om

a d

e B

arc

elo

na")

;

/*

80

, 1

15

, 5

60

, 4

34

*/

/•*.*.**.•**••** ..... * ......................................... ************/

/* FunciCn que hace las llamadas necesarias a otras funciones, para dibujar

la gr fica de la variable en la escala determinada.

*/

void graf nuevo graficoí int variable, int escala)

( graf_sombra_graf ica () ;

/"Sombra inferior*/

graf_hora()

,- /*Reloj digital, hora actual*/

if (variable>=0 && variable<8) graf_ejes_tiempo (escala) ;

/•Escala horizontal tiempo*/

if (variable>=o && variable<5) graf_tanques () ;

/'Leyenda tanques*/

switch (variable)

/*Eje/s vertical/es*/

{ case O :

graf_eje_pH();

break;

case 1 :

graf_eje_T() ;

break;

case 2 :

graf_eje_mv() ;

break ;

case 3 :

graf_eje_02{) ;

break ;

case 4 :

graf_eje_mA() ;

break;

case 5:

graf_tanque (1) ;

graf_eje_multiple ()

,-break;

case 6 :

graf _tanque ( 2 ) ;

graf_eje_multiple() ;

break;

case 7 :

graf_tanque (3) ;

APÉN

DICE

S A

- 73

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONTR

OL D

E ED

AR

graf_eje_multiple ();

break;

case 20:

graf_eje_debug(}

,-break;

}graf_actualizacion_grafico(variable, escala);

/* Salida de un mensaje por pantalla gr fica */

void graf_mensaje(char *mensaje)

t char fuente (20j ="t "Tms Rmn'hl2wSOb"

,-char buffer [100]

,-

static short yd=125;

short xd =100;

if (strlen(mensaje)>B2) mensaje[81] =0;

_setgtextvector( 1, O );

_setfont( fuente );

if (yd>410)

í _setcolor(0);

yd=125;

}sprintf(buffer, mensaje);

_moveto(xd,yd);

yd= (short) (yd-4-15) ;

_aetcolor (30);

_outgtext(buffer) ;

j /* CÇdîgo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

ítifdef TEST

void main()

í /* int i;*/

modo_grafico();

graf_display();

graf_base ()

,-/*

fo

r (i

=0

;i<

10

00

;i+

+)

gra

f_re

loj(

);*

/g

raf_

nu

evo

__

gra

f ic

o (

5, 3

) ;

ge

tch

O ;

gra

f_n

uev

o_

gra

fico

(1,

3) ;

getc

hO ;

graf_nuevo_grafico(2,3);

getch ( ) ,-

graf_nuevo_grafico(3,3);

getch{);

gra

f_n

ue

vo

_g

rafi

co

(4,3

);g

etc

hO

;g

raf_

nu

ev

o_

gra

fico

(5,

3}

;g

etc

h()

;_

setv

ideo

mo

de(

_DEP

AU

LTM

OD

E );

} ttend

if

A-7

4AP

ÉNDI

CES

Page 98: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONUORIZACIÔN Y CONTROL PLANTA PILOTO

GUARDIAN.C -

FUNCIONES PARA WATCHDOG

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 6/6/97

«include <stdio.h>

«include <dos.h>

«include «conio. ti>

«include <process.h>

«include <sya\types.h>

«define INTR OX1C

/* Interrupción del reloj */

/•«define TEST*/

/t.******.*..*.********. Subrutinas del fichero **

void (interrupt *oldhandler)();

void reboot(void);

void inicia_guardian(void);

void finaliza_guardian(void) ;

/*Variables comunes del programa

extern int contador_guardian;

extern int dos;

void interrupt guardian()

(int rebotar=0;

_disable(); /* desactiva interrupciones durante el tratamiento

if (doa==0) contador_guardian-n-¡

if (contador_guardian>2000) rebotar=l;

_enable();

/* reactiva la interrupción al finalizar el tratami

oldhandler ( ) ,- /*

llama a la rutina inicial */

if {rebctar= = D

reboot () ;

ffdefine MAGIC

/* «define MAGIC

«define BOOT_SEG

«define BOOT_OFF

Sdefine BOOT_ADR

«define DOS_SEG

«define RESET_FL·AG

«define RESET_ADR

void reboot(void)

/* for cold restart */

OxffffL

OxOOOOL

({BOOT_SEG « 16) | BOOT_OFF)

0x004OL

OX0072L

((DOS_SEG «: 16) | RESET_FLAG)

void ((far *fp)()) =

(void (far *) O ï BOOT_ADR;

*(int far *)RESET_ADR = MAGIC;

(*fp) O ;

void inicia_guardian(void)

(oldhandler = _dos_getvect(INTR) ;

/* Guarda el vector de interrupciones inicial */

_dos_setvect(INTR, guardian); /* Instala el nuevo vector de interrupciones */

void finaliza guardian(void)

{_dos_setvect(INTR, oldhandler);

/* Recupera el vector de interrupciones inicial */

APÉNDICES A

- 75

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

ftifdef TEST

int fi=0;

int main(void)

{inícia_guardian(} ;

printf("Antes; %i\n ",contador_guardian);

dos=l

,-system("command.com");

dos=0;

printf("Después : %i\n ",contador_guardian)

while ífi==0)

íprintf ("%i\n " , c

ontador_guardian) ¡

f inaliza_guardian () ;

return 0;

ittendif

A-76

APÉNDICES

Page 99: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DIŒ

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONT

ROL

PLAN

TA P

ILOTO

PCL726.C - FUNCIONES PARA UTILIZAR LA PLACA DE SALIDAS 4-20 mA PCL726

PROGRAMADOR: Juan Antonio Ba

ULTIMA REVISIÓN: 21/9/98

«include <stdio.h>

Sinclude <conio.h>

ftinclude <graph.h>

«include <time.h>

«include "nombres.h"

«define BASE Ox2cO

/•direccii base de la plaça pc!726*/

int pc!726 (int canal, float miliamperios);

void actuacion_externa_pcl726(void);

/*********************** Subrutinas externas **********•***************/

extern void graf_borra_ayuda(void);

extern void graf_ayuda_general(void);

extern void delayí clock_t wait );

/*************•***** variables comunes del programa *****•*******»****•*/

extern estado__planta planta;

extern primera medidas[3];

/********

*.***********.****.*.******************/

/* FunciCn para pedir por pantalla en modo texto los par metros para

ejecutar la funciín pc!726, que varia los mA de salida de un canal. */

void actuacion_externa_pcl726(void)

int canal;

float miliamperios;

printf ("NEmero de canal: ") ;

fscanf (stdin, "%d", &canal);

printf ("Miliamperios: M;

fscanf (stdin, "%f", fimiliamperios);

pc!726 (canal, miliamperios);

/******

*.*.*****..

******

*

*//* Funciin para pedir por pantalla en modo gr fico los par metros' para

ejecutar la funciín pc!726, que var;a los mA de salida de un canal. */

void graf__actuacion_externa_pcl726 (void)

int canal;

float miliamperios;

char fuente[20]="t'Tms Rmn'hl2w50bn;

graf_borra_ayuda();

_setgtextvector( 1, O );

_setfont( fuente );

_setcolor(7);

_moveto(5,2);

_outgtext("Variación de los miliamperios de salida de la placa PCL726");

_moveto(S,19);

_setcolor(29);

_outgtext("NEmero de canal: ");

_settextposition(2,17) ;

fscanf (stdin, "%d", scanal);

_moveto(250,18) ;

APÉN

DICE

S A

- 7

7

DES

ARR

oao

E IM

PLEM

ENTA

N D

E UN

SIS

TEM

A SU

PERV

ISOR

PAR

A LA

GES

TIÓ

N Y

CO

NTRO

L DE

ED

AR

_outgtext ("Miliamperios;

"} ;

_settextposition(2,46) ;

fscanf (stdin, n%f", tmiliamperios) ;

graf_ayuda_general () ;

pc!726 (canal, miliamperios) ;

/****•**** ..... ***.*.*.******.* ....... *********,*..****.*.******.****.*.,./

/* Control de la placa pcl726.

Funciín para variar los mA de salida de un canal de la placa pcl726.

*/

int peí 72 6 (int canal, float miliamperios)

í unsigned char high_byte, low_byte;

int rango=20-4 ;

int consigna;

if (miliamperios>20 | |

miliamperios<4) return 1 ;

if (canal>5 j j canal<0) return 2;

/*Si los par metros no son correctos, devuelve un cCdigo de error*/

if (canalo=s && miliamperios»a4 . OF && planta .mA [5] ! =4 . OF)

/* Para abrir un poco la v Ivula antes de cerrarla*/

{ _outp(BASE+canal*2, (charl 11);

_outp(BASE+l+canal*2, (char) 0) ;

delayUOO) ,•

co

nsi

gn

a=

(in

t)

(40

95

* (m

ilia

mp

eri

os-

4 .

) /r

an

go

) ;

hig

h_

by

te=

(ch

ar)

(c

on

sig

na»

B)

;lo

w__

byte

= (

ch

ar)

(c

on

sig

na

&

25

5);

_o

utp

(BA

SE

+can

al*

2,h

igh

_b

yte

) ;

_o

utp

(B

AS

E+

l-h

can

al*

2, lo

w_

by

te)

;

planta. mAlcanall =miliamperios; /• Guarda mA •/

if (canal>2 && canal<6) medidas [canal-3] .mA=miliamperios;

/* Guarda mA actuaciín oxigeno */

A-78

APÉNDICES

Page 100: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROG

RAMA DE

MO

NITO

RIZAC

IÓN

Y C

ON

TRO

L PLANTA PILO

TO

PL

C.C

-

FUN

CIO

NE

S PA

RA

L

A C

OM

UN

ICA

CIÓ

N

CO

N E

L

PLC

IZ

UM

I/FA

2J

PRO

GR

AM

AD

OR

: Ju

an

A

nto

nio

B

aeza

Lab

at

UL

TIM

A

RE

VIS

ION

: 2

0/1

/99

ffinclu

de

<std

io.h

inclu

de

<std

lib.h

>((in

clu

de

<strin

g.h

>ffin

clu

de

<b

ios.h

>ffin

clu

de

<c

on

io.h

>ffin

clu

de

<d

os.h

>ffin

clu

de

<tim

e.h

>ffin

clu

de

<g

rap

h.h

>ffin

clu

de

"n

om

bre

s.h"

/*ftd

efin

e T

ES

T*/

ffifde

f T

ES

Tffd

efin

e ex

tern

Jfend

if

«d

efin

e

CO

Ottd

efin

e S

ET

TIN

GS

1 (

CO

M 9

60

0_C

OM

_CH

R8

| _C

OM

_ST

OP

1 |

_CO

M_E

VE

NP

AR

ITY

)

/*

Sub ru tina3 del fichero

void plc_on(void);

void plc_off(void);

void do3ifica(int bomba);

void alarma(int motivo);

void estado_salida(unsigned int

numero, unsigned int

of f_on)

,-int envia_orden(unsigned char orden[8]>;

void actuacion_externa_3alidas(void);

void purgaíint duración);

void graf_actuacion_externa_salidas(void);

void supervision_plc(void);

int inicializar_plc(void);

int plc_inputs(void);

int plc_outputs(void);

int plc_monitor(int tipo, int numero);

int plc_9et(int acción, int numero);

int plc_timer(int valor, int numero);

int plc_counter(int valor, int numero);

int plc_programa{int on_off);

int cambiar_alimentacion(void);

extern void dec_to_bin(int numero_decimal);

extern int pc!726 (unsigned char canal, float miliamperios);

extern void delayt clock_t wait );

extern void graf_led( int led, int on_off );

extern void graf_nivel(int nivel, int on_off);

extern void guarda_menaaje( char *mensaje);

extern void graf_borra_ayuda(void);

extern void graf_ayuda_general(void);

extern void inicializar_tiempos(void);

extern void imprime(char *mensaje);

extern int mensaje_a_SUH(char *mensaje);

extern int mA_caudal( char «fichero, float caudal, float *mA) ;

/******************* Variables comunes del programa **********

extern estado_planta planta;

int monitortlS];

APÉNDICES A

- 79

DESARROLLO

E IMPLEM

ENTAQ

ON

DE UN SISTEM

A SUPERVISO

R PARA LA G

ESTIÓN

Y CO

NTR

OL O

E ED

AR

/* Enciende las salidas del pic indicadas en salidas_iniciales.

*/

void plc_on(void)

funsigned int in;

in=_bios_serialcom(_COM_INIT, COMÍ, SETTINGS1);

/*Inicializa el port com.*/

/*fputs("STATUS COMÍ: \t",stdout);

dec_to_bin(in);*/

plc_programa[l);

/* Prepara programa PLC */

return;

/* Apaga las salidas del pic indicadas en salidas_iniciales.

void plc_off(void)

iplc_programa(0); /* Apaga programa PLC */

return;

/* Supervisa el funcionamiento del PLC

*/

void supervision_plc(void)

int i;

int status=0;

if (planta.com_PLC==0) return;

if (inicializar_plc()==0)

/*Si la comunicación es correcta*/

/* Gr fica del nivel en el tercer tanque */

plc_monitor(5,O); /*Contador bomba encendida*/

for (i = 0;i<10;i + + ) statu3=status | ( (monitor [i] & 1) «i> ;

if (status>0 i& status< 31) graf_nivel ( status, 1) ;

else {plc_monitor(5,1); /'Contador bomba apagada*/

status=0;

for (i=C;i<10;i++)

status=status | ( (monitor [i] & 1) «i) ;

if (status>0 && status< 21)

graf_nivel ( status, 0);

}

/* Deteccíín de alarmas PLC*/

plc_monitor(2, 40);

/*Rel,s internos M50-M57*/

if (monitor 10]==1 || monitor [1]=

= 1 || monitor{2]==1 || monitor[3]==1

|| monitor[4]==1) plc_monitor(2,40);

/* Comprobamos el estado */

if (monitor (0] ==1 |] monitor [1] = = 1 || monitor 12]

==1 || monitor [3] =•=!

|| monitor [4] ==•!)

plc_monitor {2,

40) ; /* Comprobamos el estado */

if (monitor JO]==1) alarma(O); /*M50 encendido, 30 veces bomba encendida*/

if (monitor[1]==1) alarma(l);

/*M51 encendido, 20 veces bomba apagada*/

if (monitor[2]==1) alarma(2);

/*M52 encendido, nivel tanque 1 alto*/

if (monitor [3]==!) alarma<3);

/*M53 encendido, nivel tanque 2 alto*/

if (monitor [4]

=*i) alarma (4

),- /*M54 encendido, escape de agua*/

/* Estado de las salidas del PLC */

plc_outputsO ;

/*Mira el estado de la salidas*/

for (i=0;i<24;i+-O graf_led( i, planta.salidas_plc[i]);

}else

guarda_mensaje( "No es posible la comunicación con el PLCt\t\xO">;

imprime("No es posible la comunicación con el PLC\v\v\n\xO");

/* planta.com_PLC=0;*/

/* Tratamiento de las alarmas detectadas por control_de_nivel.

A-80

APÉNDICES

Page 101: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

DESA

RRO

LLO

e IM

PIEM

ENTA

QO

N D

E UN

SIS

TEM

A S

UPER

VISO

R P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DA

R

planta.com_PLC=l;

supervision_plc() ;

guarda_mensaje( "ReinicializaciCn\t\t\xO");

imprime("Reinicializaciín\v\v\n\xO");

mensaje_a_SUN(nReinicializaciCn\t\xO");

planta. alarma=-1

,-break;

case -2:

/* Reinicia la planta desde la SUN*/

pichón();

mA_caudal( "c:\\depura\\v_agua.dat", planta.caudal_agua, &m

pcl726(0,mA);

/*Abre la v Ivula de entrada de agua*/

planta. control__nivel = l;

/* React iva la planta*/

planta.sondas = l ;

planta.conexion_SUN=l ;

planta.com_PLC=l;

guarda_mensaje( "ReinicializaciCn SUN\t\t\xO");

imprime("ReinicializaciCn SUN\v\v\n\xO");

planta.alarraa=-2;

break;

} plc_outputs();

/*Mira el estado de la salidas*/

for (i=0;i<24,-i + + ) graf _led ( i, planta.salidas_plc [i] ) ;

return,-

i /* Funciín para encender o apagar una salida del PLC.

void estado salida(unsigned int numero, unsigned int off on)

í int j.O ;

int datai,data2,data3;

unsigned char estado[5] = {Ox4B,0x31,0x38,0x30,OxOD};

if (off_on==l) estado [1J =0x39; /'Salida encendida'/

if (numero<OxlO)

/'Adapta el nfmero a su nomenclatura*/

estado [3]

= (unsigned char) ( 0x30-t-numero) ;

else esta

do

[2]=

0x

39

;e

sta

do

[3]=

(un

sig

ne

d

ch

ar)

(O

x2

0+

nu

me

ro);

for (j=0; j

/*Escribimo3 y leemos en el puerto*/

_bios_serialcom(_COM_SEND, COMÍ, estadotj] ) ;

_bi03_serialcom(_COM_RECEIVE, COMÍ, 0) ;

datal._bio3_serialcom(_COM_RECEIVE, COMÍ, 0) ;

data2=_bios_serialcom(_COM_RECEIVE, COMÍ, 0) ;

if

(da

tal=

=0

x6

3)

{ gra

f_le

d (

nu

mero

, o

ff_

on

í ;

pla

nta

. sali

das_

plc

[n

um

ero

] =

o

ff_

on

;}

if

(da

tal=

=0

x6

4)

{ data

3=

_b

ios_

seri

alc

om

(_C

OM

_R

EC

EIV

E,

CO

MÍ,

0

) ;

gra

f _

led

(n

um

ero

, 2

) ;

pla

nta

. sali

das_

plc

[n

um

ero

) =

2

;

}if

(d

ata

l!=

0x

63

&

& d

ata

l!=

0x

64

){ gra

f_le

d (

nu

mero

, 2

) ;

pla

nta

. sali

das_

plc

[n

um

ero

] =

2

;

/•Encendido o apagado*/

/'Guardamos estado*/

/*Error mensaje*/

/•Guardamos estado'/

/'Error comunicaciín*/

/'Guardamos estado*/

retu

rn;

i /**••

*••

.................../

/* Funciín para pedir por pantalla en modo texto los par metros para

A-82

APÉNDICES

APÉN

DIC

ES.

PRO

GRA

MA

DE M

ON

ITO

RIZ

ACIÓ

N Y

CO

NTRO

L PL

ANTA

PIL

OTO

void alarma(int motivo)

{ float mAoO.OF;

int

i; -

switch(motivo)

{case 0: '

' /*Posible escape*/

/* pc!726(0,4);

/*cierra entrada*/

planta.control_nivel=0;

/*desactiva la planta*/

gra f __ni ve 1 ( O, - 2

). ;

guarda_mensaje( "Alarma, de funcionamiento bombas, 30 veces encendida\t\t\xO");

imprime("Alarma de funcionamiento bombas, 30 veces encendida\v\v\n\xO");

mensaje_a_SUN("Alarma, de funcionamiento bombas, 30 veces encendida\t\xO");

planta.alarma=0;

break;

case 1:

/'Posible escape*/

/* pc!726(O,4);

/'cierra entrada*/

planta.control_nivel=O,•

/*desactiva la planta*/

graf_nivel { O, -2);

guarda_mensaje ( "Alarma, de funcionamiento bombas, 20 veces apagada\t\t\xO"}

,-imprime("Alarma de funcionamiento bombas, 20 veces apagada\v\v\n\xO");

mensaje_a_SUN("Alarma, de funcionamiento bombas, 20 veces apagada\t\xO");

planta.alarma=l;

break;

case 2:

/*Nivel alto T-l*/

planta.control_nivel=0;

/'desactiva la planta*/

graf_nivel ( O, -i);

guarda_mensaje( "Alarma de nivel alto tanque l\t\t\xO");

imprime("Alarma de nivel alto tanque l\v\v\n\xO");

mensaje_a_SUN("Alarma de nivel alto tanque I\t\x0n);

planta.alarman2 ;

break;

case 3:

/*Nivel alto T-2*/

planta.control_nivel=0;

/*desactiva la planta*/

graf_nivel ( O, -1);

guarda_mensaje( "Alarma de nivel alto tanque 2\t\t\xO" )

,-imprime("Alarma de nivel alto tanque 2\v\v\n\xO");

mensaje_a_SUN("Alarma de nivel alto tanque 2\t\xO");

planta.alarmaos ;

break;

case 4:

/*Alarma escape detectado*/

/* pcl726(0,4);

/'cierra entrada*/

planta.control_nivel=0;

/'desactiva la planta*/

graf_nivel ( O, -3};

guarda_mensaje( "Alarma, escape de agua\t\t\xO"};

imprime("Alarma de funcionamiento, escape de agua\v\v\n\xOn);

mensaje_a_SUN("Alarma, escape de agua\t\xO"),-

planta.alarma=4 ;

break;

case 5:

/*Parada manual*/

pc!726(0,4);

/«cierra entrada*/

plc_pff();

/*apaga bombas*/

planta.control_nivel=>0;

/*desactiva la planta*/

graf_nivel ( O, -4) ;

guarda_mensaje( "Parada manual\t\t\xO");

imprime("Alarma de funcionamiento, parada manual\v\v\n\xO");

mensaje_a_SUN("Alarma, parada manual\t\xO");

planta.alarmaos,-

break;

case 6:

/'Parada SUN*/

pc!726(0,4);

/*cierra entrada*/

plc_off();

/*apaga bombas*/

planta.control_nivel=0;

/*desactiva la planta*/

gra£__nivel ( O, -4) ;

guarda_mensaje( "Parada SUN\t\t\xO");

imprime{"Alarma de funcionamiento, parada SUN\v\v\n\xO");

planta.alarmare ;

break;

case -1:

/* Reinicia la planta */

plc_on();

mA_caudal( "c:\\depura\\v_agua.dat", planta.caudal_agua/ &mA);

pcl726 (0,mA)

,- /'Abre la v Ivula de entrada de agua*/

planta.control_nivel=l;

/«Reactiva la planta*/

planta. sondas=l

,-planta.conexion_SUN=l;

APÉN

DICE

S A

- 81

Page 102: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONTTÜRIZACIÓ

N Y CO

NTROL PLANTA PILO

TO

ejecutar estado_salida, que enciende o apaga una salida del PLC.

void actuacion_externa_salidas (void)

íint salida, status;

printf ("NEmero de salida: ");

fscanf (stdin, "%d", &salida) ;

printf C "

Estado (Abierto 1, Cerrado 0): ");

fscanf (stdin, "%d

lt,

&status) ;

estado_salida (salida, status)

,-

return;

/* FunciCn para pedir por pantalla en modo gr fico los par metros para

ejecutar estado_salida, que enciende o apaga una salida del PLC.

*/

void graf_actuacion_externa_salida3 (void)

tint salida, status;

char fuente [20J =

"t 'Tms

Rmn'hl2w50b'1 ;

graf_borra_ayuda() ;

_setgtextvector ( 1,0);

_setfont( fuente );

_setcolor (7)

;_moveto(5, 2) ;

_outgtext ("ActuaciCn sobre las salidas del PLC FA2J") ;

_moveto(5, 19) ;

_setcolor (29)

;_outgtext ( "NEmero de salida: ") ;

_settextposition(2, 17) ;

fscanf (stdin, "%d", isalida) ;

_movetO(250, 18) ;

_outgtext { "Estado (Abierto 1, cerrado 0) :");

_settextpositíon (2,

55) ;

fscanf (stdin, "%d", ftstatus) ;

estado_salida (salida, status) ;

graf ayuda general ( ) ;

Î/********* i***»*************.*.******.*. *.+*******•********»»********.»» ..**/

/* ImplementaciCn purga. Enciende durante el intervalo de tiempo especificado

la salida correspondiente a la purga.

*/

void purga (int

duración)

{estado__salida(17,l) ;

delay (duración) ;

estado_salida(17, 0) ;

int pic inputs(void)

íint j=0;

unsigned char ord

enl[5

j =

{0x42,0x31,0x30,0x30,OxO

D};

unsigned char orden2[5]

= {0x42,0x31,0x30,0x38,0x00};unsigned char

respu

esta [4];

int

status=

0;

/* orden

l0x42 monitor de seoales

0x31 I/O, entradas y salidas

0x30,0x30 con esto, según la pagina 21, le estoy pidiendo el estado de 8 de

las entradas, a partir de la 00, según la pagina 20 debe añadirseAPÉNDICES

A - 8

3

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEM

A SUPERVISOR

PARA LA GESTIÓ

N Y O

WTR

OL DE ED

AR

Ox3_ y Ox3_ donde _ son los números 00

OxOO fin de mensaje*/

/* orden 2

0x42 monitor de sedales

0x31 I/O, entradas y salidas

0x30,0x38 con esto, según la pagina 21, le estoy pidiendo el estado de 8 de

las entradas, a partir de la 08, según la pagina 20 debe a°adirse

Ox3_ y Ox3_ donde _ son los números 08

OxOD fin de mensaje*/

for (jsO;j<5;j++)

/*mando y recibo mensaje*/

{_bios_serialcom(_COM_SEND, COMÍ, ordeni(j]);

_bios_serialcom(_COM_RECEIVE, COMÍ, O);

for (j=0;j<4;j++)

/'recibo respuesta*/

respuesta[j]=(unsigned char)_bios_serialcom(_COM_RECElVE, COMÍ, 0);

if (respuesta{0]!=0x66) return -1;

/*si no ha leido bien sale devolviendo error*/

status = respuesta[2]-0x30;

/*en el byte 2 de la respuesta est

lo que quiero, según pagina 26

el estado de las 4 primeras entradas*/

/*el formato de respuesta es el 66, esta en la pagina 16*/

for (j=0;j<8;J+-O

{planta.entradas_plc(j] = status & 1;

status »= 1;

/*transformo de decimal a binario, bit a bit*/

if (j==3) status = respuesta[l)-0x30;

/*en el byte 1 de la respuesta est

lo que quiero, según pagina 26

el estado de las 4 siguientes entradas*/

i

/*aqui repetimos el procedimiento, pero a partir de la entrada numero 8*/

for {j=0;j<5¡;j+

+ )

{_bios_serialcom(_COM_SEND, COMÍ, orden2[j]);

_bios_serialcom{_COM_RECEIVE, COMÍ, 0);

}for (j=0;

j<4; j-n-)

respuesta[j]=(unsigned char)_bios_serialcom(_COM_RECEIVE, COMÍ, 0);

status * respuesta{2]-0x30;

for (j°8;j«16;.j++)

{planta.entradas_plc(j] = status & 1;

status »° 1;

if (j==ll) status = respuestaIlJ-0x30;

int plc_outputs(void)

{int j=0;

unsigned char ordeni[5J = {0x42,0x31,0x38,0x30,OxOD};

unsigned char orden2[5] = {0x42,0x31,0x38,0x38,0x00};

unsigned char orden3[5] =

{0x42,0x31,0x39,0x30,OxODJ;

unsigned char respuesta [4];

int status=0;

/* orden l

0x42 monitor de sedales

0x31 I/O, entradas y salidas

0x38,0x30 con esto, según la pagina 21, le estoy pidiendo el estado de 8 de

las salidas, a partir de la 80, según la pagina 20 debe añadirse

Ox3_ y Ox3_ donde _ son los números 80

OxOD fin de mensaje*/

/* orden 2

0x42 monitor de sedales

0x31 I/O, entradas y salidas

A-84

APÉNDICES

Page 103: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. PR

OGRA

MA D

E MO

NITO

RIZA

CIÓN

Y CO

NTRO

L PL

ANTA

PILO

TO

0x38,0x38 con esto, según la pagina 21, le estoy pidiendo el estado de 8 de

las salidas, a partir de la 38, según la pagina 20 debe añadirse

Ox3_

_ y Ox3_ donde _ son los números 88

OxOD fin de mensaje*/

/* orden 3

0x42 monitor de senales

0x31 I/O, entradas y salidas

0x39,0x30 con cato, según la pagina 21, le estoy pidiendo el estado de 8 de

las salidas, a partir de la 08, según la pagina 20 debe añadirse

Ox3_ y Ox3_ donde _ son los números 90

OxOD fin de mensaje*/

for (j=0; j<5; j++)

{ _bi03_serialcom(_COM_SEND, COMÍ, ordeni [j]);

_bios_serialcom(_COM_RECEIVE, COMÍ, 0) ;

for (j=0; j<4; j++)

respuesta [j]

= (unsigned char)_bios_9erialcom(_COM_RECEIVE, COMÍ, 0} ;

if (respuesta [0] ! =0x66) return -1;

status = respuesta [2) -0x30;

for (j«0;j<8;j++)

í planta. salidas_plc [j] = status & 1;

status •»

= 1;

if (j==3) status = respuesta!!] -0x30;

}

for (j=0;j<5;j++)

í Jbio

s_se

rial

com

(_C

OM

_S

EN

D,

CO

MÍ,

ord

en2

[j]

) ;

~b

ios_

seri

alco

m(_

OO

M_

RE

CE

IVE

, C

OM

Í, O

) ;}

for

( j =

0; j

<4

; j-t

-+)

respuesta []) .(unsigned char)_bios_serialcom(_COM_RECEIVE, COMÍ, 0);

status = respuesta [2] -0x30;

for (j.8,-j«16,-j**l

( pla

nta

. sali

das_

plc

[j]

= s

tatu

s &

1;

sta

tus

»=

1;

if (j==ll) status = respuesta [1] -0x30;

1

for (j=0; j<5; j++)

( _bios_serialcom(_COM_SEND, COMÍ, orden31j]),-

_bio3_3erialcom(_COM_RECEIVE, COMÍ, 0)

;

for (j.0;j<4;j+*)

respuesta [jj. (unsigned charl_bio3_serialcom(_COM_RECEIVE, COMÍ, O) ;

status

=• respuesta [2] -0x30;

for

(j=

16

; j<

24

; j+

+)

( pla

nta

. sali

das_

plc

[j]

= s

tatu

s &

1;

sta

tus

»=

1;

if

( j —

19)

sta

tus

- re

spu

est

a [

1]

-0x

30

;

retu

rn O

;i int inicializar__plc(void)'

unsigned int in;

int j=0;

unsigned char orden[2] = {0x45,OxOD};

unsigned char respuesta [3];

int status=0;

APÉN

DICE

S A

- 85

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DAR

in=_bios_serialcom(_COM_INIT, COMÍ, SETTINGSl);

/'Inicializa el port com.*/

for (j=0; j<2; j-

f-f)

{ _bios_serialcom{_COH_SEND, COMÍ, ordenEj]);

bios serialcomf COM RECEIVE, COMÍ, 0);

y -

- -

for (j=0;j<3;j++)

respuesta [j J = (unsigned char)_bios_serialcom(_COM_RECEIVE, COMÍ, 0);

status » respuesta[1] & OxOF ;

if (respuesta[0]¡=0x61) return -1;

return O;

} /.».***.*..*********.**.***************.**.

»*

/

/* FunciÇn general para raonitorizar el estado de entradas, salidas,

rel,s internos... del PLC.

*/

int pie monitoríint tipo, int numero)

{ /*Tipo : 1

> Input /output

I/O

Tipo: 2

> Internal relay

IR

Tipo: 3

> Shift register

SFR

Tipo; 4

> Timer

TIM

Tipo: 5

> Counter

CNT

Tipo: 7

> D register

DR

int j=0;

unsigned char orden[5] = {0x42,0x30,0x30,0x30,OxOD};

unsigned char respuesta[6];

int status=0;

if ( tipo<l || tipo >7 I I tipo==6 ) return -2;

orden [1] = (unsigned char) (0x30

•*• tipo) ;

if (numero<0 |[ numero >255) return -2;

orden [2] = (unsigned char) (0x30 | ((numero»4) & OxOF) ) ;

orden[3]=(unsigned char) (0x30 | (numero & OxOF));

for (j=0;j<S;j++)

í _bios_aerialcom( COM_SEND, COMÍ, orden [j]);

bios serialcom(~"cOM RECEIVE, COMÍ, O) ;

T

"

~ "

switch(tipo)

{ case 1 :

case 2 :

case 3 :

for (j=0; j<4; j+ + )

respuestalj]-(unsigned char)_bios_serialcom(_COM_RECEIVE, COMÍ, O);

status = ( (respuesta [1] S OxOF) « 4)

-»•

(respuesta [2] & OxOF) ;

break;

case 4 :

case 5 :

case 7 :

for (j=0;j<6;j+*)

respuestafj]«(unsigned char)_bios_serialcom(_COM_RECEIVE, COMÍ, O);

status =

((respuesta[11 & OxOF) « 12) + ((respuesta[2] & OxOF) « 8)

•f ( (respuesta [3] & OxOF) « 4) +

(respuesta [4] & OxOF) ;

break;

Î

for (j=0; j<16; j+ + )

{ monitor[j] = status & 1;

status »= 1;

• i

retu

rn 0

;i A

-86

APÉN

DICE

S

Page 104: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE M

ONITORIZAOÓN Y CONTROL PLANTA PILOTO

int plc_set{int acción, int numero)

Acción: 1

Acción: 2

Acción : 3

Acción: 9

Acción: A(10) -

Acción: 8(11) -

> Input/output

> Internal relay

> Shift register

> Input/output

--> Internal relay

--> Shift register

I/O

IRSFR

I/O

IRSFR

OFF

OFF

OFF

ONONON

int j=0;

unsigned char orden[5j = {Ox4b, 0x30, 0x30, 0x30, OxOD} ;

unsigned char respuesta [3]

,•

if ( accion<l | |

acción >ll ) return -2;

orden [1]

a (unsigned char) (0x30

+• acción);

if (numero<0

J |

numero >255) return -2;

orden [2]

= (unsigned char) (0x30 | ( (numero»4) & OxOF));

orden [3J =

(unsigned char) (0x30 | (numero & OxOF) ) ;

for

(j=0

;j<:5

; j+ + )

í_b

ios_

seria

lco

m(_

CO

M_

SE

ND

, C

OM

Í, o

rden

[j] ) ;_

bio

s_se

rialc

om

i_C

OM

_R

EC

EIV

E,

CO

MÍ,

O) ;

respuesta [0] - (unsigned char)_bios_serialcom

(_CO

M_R

EC

EIV

E,

COM

Í, O) ;

respu

esta [1] = (unsigned char)_bios_serialcom(_C

OM

_RE

CE

IVE

, CO

MÍ,

0) ;if

(respu

esta [0] ==0x64){respuesta [2] = (unsigned char)__bios_serialcom(_COM_RECEIVE, COMÍ, 0) ;

return -1;

int pic timer ( int valor, int numero)

íint j=0;

unsigned char orden[8] = {0x43, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, OxOD} ;

unsigned char respuesta [3J

;

if ( valor<0 || valor > OxFFFF ) return -2;

if (numero<o | |

numero =>255)

return -2;

orden [1]

=> (unsigned char) (0x30 | ((numero»4) í OxOF) ) ;

orden [2

]= (unsigned char) (0x30

j (numero & OxOF) )

;

orden [3]

=• (unsigned char) (0x30 | ((valor»12) & OxOF) ) ;

orden [4]

= (unsigned char) (0x30 | ( (valor»8) & OxOF) ) ;

orden [5J

= (unsigned char) (0x30 j <(valor»4) & OxOF) ) ;

orden [6] » (unsigned char) (0x30 |

(valor & OxOF)};

for

(j*0

;j<8

;J+

+>

{_bios_serialcom(_C

OM

_SEN

D,

COM

Í, o

rden

fjj ) ;_bios_serialcom

(_CO

M R

ECEIV

E, COM

Í, O

) ;}

reapu

esta (O] « (unsigned char)_bios__serialcom

(_CO

M_R

EC

EIV

E,

COM

l, 0) ,-

respuesta [1] « (unsigned char)_bios__serialcom

(_CO

M_R

EC

EIV

E,

COM

l, 0) ,•

if (resp

uesta [o] ==0x64)

~"írespuesta [2]

a (unsigned char)_bios_serialcom(_COM_RECEIVE, COMl, o) ;

return -1;

APÉNDICES A

- 87

DESARROLLO E IMPLEM

ENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

int pic counter ( int valor, int numéro)

íint j=0;

unsigned char orden[8] = {0x44 , 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, OxOD) ;

unsigned char respuesta [3]

;

if ( valor<0 | |

valor > OxFFPF ) return -2,-

if (numero<0 | |

numéro >255) return -2,-

orden [1] = (unsigned char) (0x30 | ( (numero»4) & OxOF) ) ;

orden f2J =

(unsigned char) (0x30 [ (numéro & OxOF) ) ;

orden [3] = (unsigned char) (0x30 | ((valor»12) & OxOF) ) ;

orden [4] = (unsigned char) (0x30 | ((valor»8) & OxOF) ) ;

orden [5] = (unsigned char) (0x30 j ( (valor»4) & OxOF) )

,-orden {6]

» (unsigned char) (0x30 j (valor & OxOF) ) ;

for (js=0;

j<8; j+ + >

íJbios_serialcom( COM_SEND, COMÍ, orden [j]

) ;

_bios_serialcom(~COM_RECEIVE, COMl, 0)

,-

respuesta [0] = (unsigned char)_bios_gerialcom(__COM_RECEIVE, COMl, 0) ;

respuesta [1J =

(unsigned char)_bios_serialcom(_COM_RECEIVE, COMl, 0) ;

if ( respuesta [0} «0x64)

{respuesta (2]

= (unsigned char)_bios_serialcom (_COM_RECEIVE, COMl, 0) ;

return -1;

int plc_programa(int on_off)

int intervalo;

switch(on off)

{case 1 ;

intervalo=planta.duracion__purga,-

if (plc_timer( intervalo, 3)!=0) plc_timer( intervalo, 3);

intervalo=planta.tiempo__purga*10-planta.duracion_purga;

if (plc_timer( intervalo, 4)!=0) plc_timer( intervalo, 4);

intervalo=planta.intervalo_dosificacion[0}*10-1;

if (plc_timer( intervalo, 11)!=0) plc_timer( intervalo, 11);

intervalo=planca.intervalo dosificacionfl]*10-l;

if (plc—timer( intervalo, 13)!=0) plc_timer( intervalo, 13);

intervalo=planta.intervalo_limp_dosif(0] *10-1;

if (plc_timer( intervalo, 14)í =0) pic timer( intervalo, 14);

plc_counter( planta .pistonadas__limp_dosif [0] , 10) ;

intervalo=planta.intervalo flojet_on*lO;

if (plc_timer( intervalo, 30)!=0) plc_timer( intervalo, 30);

if (plc_timer( intervalo, 32)1=0) plc_timer( intervalo, 32);

intervalo=planta.intervalo_flojet_off*10;

if (plc_timer( intervalo, 31)!=0) plc_timer( intervalo, 31);

if (plc_timer( intervalo, 33)!=0) plc__timer{ intervalo, 33);

if (plc_set (10,48) !=0) plc_set (10,48) ,- /

'Enciende programa PLC*/

break;

case 0:

if (plc_set(10,49)!=0) plc_set(10,49); /*Apaga programa PLC*/

break;

~

A-88

APÉNDICES

Page 105: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ON

rroR

iZA

dóN

Y C

ONTR

OL P

IANT

A PH

OTO

int

cam

bia

r_ali

men

tacio

n(v

oid

)i char mensaje [100];

int intervalo,hora ;

float mAoO.OF;

struct tm *t;

planta. t_actual = time {NULL<) ;

t = localtime í ¿planta.t_actual );

hora = t->tm_hour;

planta.intervalo_dosificacion[0]=planta.alimento[hora].nitrógeno;

planta.intervalo_dosificacion[1]=planta.alimento[hora].carbono;

planta.caudal_agua=planta.alimento[hora].agua;

intervalo=planta.intervalo_dosificacion[O]*10-1;

if (plc_timer( intervalo, 11)!=0) plc_timer( intervalo, 11};

intervaloaplanta.intervalo_dosificacion[1]*10-1;

if (plc_timer( intervalo, 13)!»0) plc_timer{ intervalo, 13);

mA_caudal( "c;\\depura\\v_agua.dat", planta.caudal_agua, &mA);

pc!726(0,mA);

/«Abre la v Ivula de entrada de agua*/

sprintf(mensaje,"Cambio alimentación: N %4i seg, C %4i seg, Q %5.2f ral/min"

planta.intervalo_dosificacion[0], planta.intervalo_dosificacion[1],

planta.caudal_agua);

guarda_menaaje( mensaje };

return 0;

/* CCdigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

flifdef TEST

void dec_to_bin (int numero__ decimal)

{numero_decimal=0; }

int pc!726 (unsigned char canal, float miliamperios)

{canal=0; miliamperios=0. OF; return 0; }

void delay { clock_t wait }

{wait=0;}

void graf_led{ int led, int on_off )

{led=0; on_of f=0; }

void graf_nivel (int nivel, int on_off)

{nivel=0; on_off=0;}

void guarda_mensaje ( char *mensaje)

{mensaje=0; }

void graf_borra_ayuda(void) { }

void graf_ayuda__general (void) { }

void inicializar_tiempos (void) {}

int mensaje_a_SUN(char *mensaje)

(men9aje=0; return 0;}

void

im

prim

e (c

har

*men

saje

){m

ensa

je=0

; }

int main ( int argc, char *argv[])

{int acción, numero;

if largc—l)

( printf ("\nUtiliza: pic

valor numero \n")

,-return -i;

accio

naato

i (a

rgv

[lj

) ;n

um

ero

=at

oi

(arg

v{

2)

) ;

if

(in

icia

liz

ar_

plc

() ¡

=0)

printf ("ERROR: PLC no conectado, o comunicación incorrecta");

return -2;

if (plc_timer( acción, numero) «0) printf ("\nSet OK\nn) ;

else printf("\nSet NO OK\n");

AP

ÉN

DIC

ES

A -

89

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONTR

OL D

E ED

AR

retu

rn

0 ;

p) A-9

0A

ND

ICE

S

Page 106: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZAOÓN Y CONTROL PLANTA PILOTO

PRINTER.C - FUNCIONES PARA MANEJAR LA IMPRESORA

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 4/10/95

«include <dos.h>

^include <bios.h>

ff include <conio.h>

Sine lude <stdio.h>

ftinclude <time.h>

ffdefine LPT1 O

void imprime (char

*mensaje) ;

/* Mira el estado de la impresora, y si es correcto, imprime el mensaje.

*/

void imprime (char

*raensa j

e)

funsigned

patatús ;

int i = 0,

largo;

time_t Itíme;

char hora [30]

;

time (tltime) ;

sprint f (hora,

"%sn ,

c time ( &ltime ) )

,-

while (mensaje [i]

¡=10 t& i<80 )

i + +

;

largo=i;

if (largo==80) return;

/* Fail if any error bit is on, or if either operation bit is off. */

pstatus - _bios_printer ( _PRINTER_STATUS, LPT1, 0 ) ;

if( (pstatus & 0x29) || !

(pstatus & 0x80)

|| ¡

(psCatus & 0x10)

}

pstatus = 0;

elsepstatus = 1 ;

if (pstatus==l)

{for (i=0;i<26;i++) _bio3_printer { _PRINTER_WRITE, LPT1, horati] ) ;

for (i-0;i<largo;i+»l _bio3_printer( _PRINTER_WRITE, LPT1, mensajelij );

ttifdef TEST

void main (void)

char aviso[] ="Hola hola pepsicola\v\v\n\xO" ;

imprime (aviso) ;

iendif

/"••«

APÉNDICES A

- 91

DESARROLLO E IMPLEMENTAQON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

TROVIS.C - FUNCIONES PARA LA COMUNICACIÓN CON EL PID TROVIS 6497

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISION: 9/4/97

{(include <bios.h>

ftinclude <conio. h>

#include <stdio.h>

((include <stdlib.h>

(I include <memory.h>

it inc lude < t itne-. h

>

«define TEST

((define COM3

2((define

SETTINGS3 (_COM_9600 | _COM_CHR8 | _COM_STOP1 ( _

COM_NOPARITY)

/»*****************•»*** Subrutinas del fichero ******************•****/

int inicio_comunica (void) ;

int comunica (unsigned char «orden, unsigned char 'respuesta) ;

unsigned short CRC16 (unsigned char *puchHsg, unsigned short usDataLen) ;

int orden_MODBUS { int dirección, int función, int param_a, int param_b) ;

y********************* Subrutinas externas necesarias ******************/

^****. ************** variables comunes del programa *****•**********»***/

int registros [60]

;int

coils [16]

,-

/ ......... **•** ................ ****.*****.**** ....... *.******. ..... /

/* Manda una orden de comprobación de la comunicación entre el PC */

/* y el equipo a controlar.

*/

/•

•//* Como la lectura del primer registro siempre da lo mismo

*/

/* se aprovecha esta lectura para comprobar el estado de la

*/

/* comunicación

*//*

*//* Si no la lectura no es la prevista se devuelven los siguientes */

/* valores :

*/

/* */

/*

O Respuesta correcta.

*//*

1 Comunicación no establecida correctamente.

*/

/* */

/**.*******.**.**.***********************.*.****.********•******..*/

int inicio comunica (void)

{unsigned char mensaje_comprobacion [9)

={0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00} ;

unsigned char respueata_comprobacion [8]

;

memset (respuesta_comprobacion, 0, sizeof (respuesta_comprobacion) ) ;

_bios_serialcom(_COM_INIT, COM3, SETTINGS3) ; /«Inicializacion del puerto serie*/

if {comunica (mensaje_comprobacion, respuesta_comprobacion) )

return 1;

/*.*****..*********•.»***.***..*************,.*»»******************/

/« Manda una orden al equipo a controlar y recibe la respuesta.

*/

/* Como hay que enviar un checksum (CRC)

high y low se llama a la */

/* sub rut i na CRC16 para calcularlo.

*/

/*

*//* Para evitar problemas en el programa si no existe comunicación */

A-92

APÉNDICES

Page 107: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

)••••••••••••••*••••••••••••€

APÉN

DICE

S. PR

OGRA

MA D

E M

oNrro

RizA

cióN

Y CON

TROL

PLAN

TA P

ILOTO

/*

en

tre

el

PC

y el

eq

uip

o

se

dev

uelv

en

los

sig

uie

nte

s v

alo

resi

*/

/*

*/

/*

' 0 R

esp

uest

a

co

rrecta

. *

//*

1

Ord

en

inco

rrecta

. •

*/

/*

.2 R

esp

uest

a n

ula

. *

//*

3

C

hec

ksu

m d

e en

vió

in

co

rrecto

. *

//*

4

C

hec

ksu

m

de

recep

ció

n

inco

rrecto

. *

//*

*/

int

com

un

ica

(un

sig

ned

ch

ar

*o

rden

, un

sig

ned ch

ar

*re

spu

est

a)

{ int

i=0

, la

rgo

=0 ;

- u

nsi

gn

ed sh

ort

ou

t;

out=

CR

C16

(o

rden

, 6)

,-o

rden

[7

] = (

un

sig

ned

ch

ar)

(O

xFF

& o

ut)

;o

rden

[6

] o

(un

sig

ned

ch

ar)

(O

xFF

& {

out

»

8)

);

for

(i=

0;i

<8

; i

+ +

) _

bio

s_se

rial

com

{_

CO

M_

SE

ND

, CO

M3

, ord

en (

i] )

;

í resp

ue

sta

fi]

=

(un

sig

ned

ch

ar)

b

ios

seri

alc

om

(

CO

M

RE

CE

IVE

, C

OM

3,}

/*

pri

ntf

("\n

" ) ;

for

(i=

0;i

<7

;i+

+)

pri

ntf

("

%02

X",

re

sp

ue

sta

[ij

) ;p

rin

tf (

B\n

n ) ;

*/

retu

rn

0;

i /*T

he

fun

cti

on

tak

es

two

arg

um

en

ts:

*p

uch

Msg

;

Pu

nte

ro

a

la

cad

ena

de cara

cte

res

del

men

saje

q

ue

se

qu

iere

calc

ula

r C

RC

usD

ataL

en

; L

on

git

ud

del

men

saje

(n

§ d

e b

yte

s)

Th

e fu

ncti

on

retu

rns

the

CR

C

as

a ty

pe u

nsi

gn

ed sh

ort

*/

un

sig

ned sh

ort

C

RC

16 (

un

sig

ned ch

ar

"pu

chM

sg, u

nsi

gn

ed sh

ort

u

sDat

aLen

)(

un

sig

ned

ch

ar

uchC

RC

Hi

o

OxF

F ;

/*

Inic

iali

zacio

n

hig

h C

RC

wu

nsi

gn

ed ch

ar

uchC

RC

Lo

= O

xFF

; /*

In

icia

lizacio

n

low

CR

C b

yte

,u

nsi

gn

ed

u

lnd

ex

; /*

w

ill

ind

ex in

to

CR

C lo

ok

up

*/

/*

Tab

le

of

CR

C v

alu

es

for

hig

h-o

rder

by

te

*/

sta

tic

u

nsi

gn

ed

ch

ar

auch

CR

CH

il]

= {

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1, O

xCO

, 0

x8

0,

0x

41

, 0x

01

, O

xCO

,0

x8

0,

0X

41

, 0

x0

0,

Ox

Cl,

0

X8

1,

0x

40

, 0x01,

OxC

O,

0x

80

, 0x

41

,0

x0

0,

Ox

Cl,

0x81,

0x

40

, 0

x0

0,

Ox

Cl,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1,

0x

01

, O

xCO

, 0

x8

0,

0x

41

, 0x

00

, O

xC

l,

0x

81

, 0

x4

0,

0x

00

, O

xC

l, 0

x8

1, 0

x4

0,

0x

01

, OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xC

l,0x81,

0x

40

, 0

x0

1, O

xCO

, 0

x8

0,

0x

41

, 0x

01

, O

xCO

, 0

x8

0, 0

x4

1,

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1, 0

x0

0,

Ox

Cl,

0x8 1

,

0x

4 0

, 0

x0

0 ,

OxC

l ,

0x81 ,

0x

40

, 0

x0

1 ,

OxC

O ,

0x

80 ,

0x4 1

,0

x0

0,

OxC

l ,

0x81,

0x

40

, 0

x0

1 ,

OxC

O ,

0x

80

, 0

x4

1 ,

0x01

, O

xCO

,0

x8

0,

0x

41

, 0x

00

, O

xC

l,

0x

81

, 0x

40

, 0

x0

0,

Ox

Cl,

0x81,

0x

40

,0

x0

1,

OxC

O,

0x

80

, 0

x4

1,

0x

01

, OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xC

l,0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xC

l,

0x81,

0x

40

,0

x0

0 ,

OxC

l ,

0x81

, 0

x4

0 ,

0x

01 ,

OxC

O,

0x

80

, 0

x4

1 ,

0x

01 ,

OxC

O ,

0x

8 0

, 0x

4 1

,

0x

00 ,

OxC

l ,

0x8 1

,

0x

4 0

, 0

x0

0 ,

OxC

l ,

0x

8 1

,

0x

4 0

,0

x0

1,

OxC

O,

0x

80

, 0

x4

1, 0

x0

0,

Ox

Cl,

0x

81

, 0

x4

0,

0x

01

, O

xCO

,0

x8

0,

0x

41

, 0

x0

1, O

xCO

, 0

x8

0,

0x

41

, 0x

00

, O

xC

l,

0x

81

, 0

x4

0,

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xC

l,

0x

81

, 0

x4

0,

0x

01

, OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xCl,

0x

81

, 0

x4

0,

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

8 0

, 0x

4 1

,

0x

00 ,

OxC

l ,

0x8 1

, 0

x4

0 ,

0x

0 1

,

OxC

O ,

0x

80 ,

0x4 1

,0

x0

1,

OxC

O,

0x

80

, 0

x4

1,

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0) ; by

te.

Todos

los

bit

s a

Todos

los b

its a

I*/

APÉN

DICE

S A

- 93

1 (>

••••••••*•••••••••••••••••••

DES

AR

RO

aO E

iMPL

EMEN

TAaÓ

N D

E U

N S

ISTE

MA

SU

PERV

ISO

R PA

RA U

GES

TIÓ

N Y

CO

NTR

OL

DE E

DA

R

0x

60

, 0

x4

1, 0

x0

0,

Ox

Cl,

0x81,

0x

40

, 0

x0

0,

Ox

Cl,

0x

81

, 0

x4

0,

0x01

, O

xCO

, 0

x8

0,

0x

41

, 0x

01

, OxC

O,

0x

80

, 0

x4

1, 0

x0

0,

Ox

Cl,

0x81

, 0

x4

0,

0x

00

, O

xC

l,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0x

41

,0

x0

0,

Ox

Cl,

0x81,

0x

40

, 0

x0

1,

OxC

O,

0x

80

, 0

x4

1, 0

x0

1, O

xCO

,0

x8

0,

0x

41

, 0

x0

0,

Ox

Cl,

0x81, 0

x4

0)•

;

/*

Tab

le

of

CR

C

valu

es

for

low

-ord

er

by

te

*/

sta

tic

u

nsi

gn

ed

/**

/ ch

ar

auch

CR

CL

o[]

=

{0

x0

0,

OxC

O,

Ox

Cl,

0x

01

, OxC

3,

0x

03

, 0

x0

2,

OxC

2,

OxC

6,

0x

06

,0

x0

7,

OxC

7,

0x

05

, O

xCS

, O

xC4,

0

x0

4,

OxC

C,

OxO

C,

OxO

D,

OxC

D,

OxO

F,

OxC

F,

OxC

E,

OxO

E,

OxO

A,

OxC

A,

OxC

B,

OxO

B,

OxC

9,

0x

09

,0

x0

8,

OxC

B,

OxD

8,

0x18,

0x19,

OxD

9,

Ox

lB,

OxD

B,

OxD

A,

Ox

lA,

Ox

lE,

OxD

E,

OxD

F,

Ox

lP,

OxD

D,

Ox

lD,

Ox

lC,

OxD

C,

0x

14

, O

XD

4,O

xD5,

0x15,

OxD

7,

0x17, 0x16,

OxD

6,

OxD

2,

0x

12

, 0x13,

OxD

3,O

xll

, O

xD

l,

OxD

O,

0x10,

OxF

O,

0x

30

, 0x31,

Ox

Fl,

0

x3

3,

OxF

3,O

xF2,

0

x3

2,

0x

36

, O

xF6,

O

xF7,

0

x3

7,

OxF

S,

0x

35

, 0

x3

4,

OxF

4,O

x3C

, O

xFC

, O

xFD

, O

x3D

, O

xFF

, O

x3F

, O

x3E

, O

xFE

, O

xFA

, O

x3A

,O

x3B

, O

xFB

, 0

x3

9,

OxF

9,

OxF

8,

0x

38

, 0

x2

8,

OxE

8,

OxE

9,

0x

29

,O

xEB

, O

x2B

, O

x2A

, O

xEA

, O

xEE

, O

x2E

, O

x2F

, O

xEF

, O

x2D

, O

xED

,O

xEC

, O

x2C

, O

xE4,

0

x2

4,

0x

25

, O

xE5,

0

x2

7,

OxE

7,

OxE

6,

0x

26

,0

x2

2,

OxE

2,

OxE

3,

0x

23

, O

xE

l,

0x

21

, 0x

20

, O

xEO

, O

xAO

, 0

x6

0,

0x

6 1

,

OxA

l ,

0x

63 ,

OxA

3 ,

OxA

2 ,

0x

62

, 0

x6

6 ,

OxA

6 ,

OxA

7 ,

0x

67

,O

xA5,

0

x6

5,

0x

64

, O

xA4

, O

x6C

, O

xAC

, O

xAD

, O

x6D

, O

xAF

, O

x6F

,O

x6E

, O

xAE

, O

xAA

, O

x6A

, O

x6B

, O

xAB

, 0

x6

9,

OxA

9 ,

OxA

S,

0x

68

,0

x7

8 ,

OxB

8 ,

OxB

9 ,

0x7

9 ,

OxB

B ,

Ox7

B ,

Ox7

A,

OxB

A,

OxB

E ,

Ox7

E ,

Ox7

F,

OxB

F,

Ox7

D,

OxB

D,

OxB

C,

Ox7

C,

OxB

4 ,

0x

74

, 0

x7

5,

OxB

S,

0x

70

, O

xBO

, 0

x5

0,

0x

90

, 0x91,

0x

51

, 0

x9

3,

0x

53

, 0

x5

2,

0x

92

,0

x9

6,

0x

56

, 0

x5

7,

0x

97

, 0

x5

5,

0x

95

, 0

x9

4,

0x

54

, O

x9C

, O

xSC

,O

xSD

, O

x9D

, O

xSF

, O

x9F

, O

x9E

, O

xSE

, O

xSA

, O

x9A

, O

x9B

, O

x5B

,0

x9

9,

0x

59

, 0

x5

8,

0x

98

, 0

x8

8,

0x

48

, 0

x4

9,

0x

89

, O

x4B

, O

x8B

,O

xSA

, 0x

4 A

, O

x4E

, O

x8E

, O

x8F

, 0x

4 F

, O

x8D

, O

x4D

, O

x4C

, O

xSC

,0

x4

4,

0x

84

, 0

x8

5,

0x

45

, 0

x8

7,

0x

47

, 0

x4

6,

0x

86

, 0

x8

2,

0x

42

,0

x4

3,

0x

83

, 0

x4

1, 0

x8

1, 0

x8

0,

0x

40

} .-

í uln

dex

=

uch

CR

CH

i *

*p

uchM

sg+

+

; /*

calc

ula

te

the

CR

C *

/uc

hCR

CH

i =

(un

sig

ned

ch

ar)

(u

chC

RC

Lo

"

auch

CR

CH

i [u

lnd

ex

j )

;uc

hCR

CL

o H

auc

hCR

CL

o [u

lnd

ex

] ;

}re

turn

(u

nsi

gn

ed

sh

ort

) (

(uch

CR

CH

i «

8)

| uc

hCR

CL

o)

;

En

v¡a

u

na

ord

en

a

TR

OV

is

med

ian

te p

roto

co

lo

MO

DB

US

y re

cib

e

la

resp

uesta

.

dir

ecció

n

->

Iden

tif

icati

vo

d

el

esc

lav

ofu

nció

n

->

Fu

nci

Cn

Mod

bus

a eje

cu

tar

para

m__

b ->

S

egu

nd

o

par

metr

o

de

la

fun

ciC

n

CC

dig

os

de

reto

rno

:

-2

-> O

rden

en

via

da

y re

cib

ido

m

en

saje

d

e err

or

-3

->

Ord

en

en

via

da,

resp

uesta

re

cib

ida

co

n c

hek

sum

co

rrecto

, p

ero

int

ord

en_

MO

DB

US

(in

t d

irecció

n,

int

fun

ció

n,

int

para

m_

a,

int

par

am_

b)

«d

efi

ne

RE

SPU

EST

AS

(A, B

) fo

r (i

=A

; i<

B; i

++

) re

spu

est

a [

i]

=

(un

sig

ned

ch

ar)

_b

ios_

seri

alco

m(_

CO

M_

RE

CE

lVE

, C

OM

3,

0)

int

i=0

;u

nsi

gn

ed sh

ort

ou

t;u

nsi

gn

ed

ch

ar

ord

en

(8];

un

sig

ned ch

ar

resp

uest

a [

14

0] ;

mem

set (r

esp

uesta

, 0

, siz

eo

f (r

esp

uest

a)

) ;

A -

94

APÉN

DICE

S

Page 108: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

orden [1]

=orden[2]=

orden [3]

=orden [4]

=orden[5]=

unsigned char) (OxFF

& función);

APÉNDICES. PROGRAMA DE MONITORIZACIÓN Y CONTROL PLANTA PILOTO

/* Funcitn a realizar */

unsigned char) (OxFP & (param_a » 8)}; /* Par metro a High */

unsigned char) (OxFF

& param_a)

,-/* Par metro a Low */

unsigned char) (OxFF

& (param_b » 8)); /* Par metro b High */

unsigned char) (OxFF

& param_b);

/* Par metro b Low */

out=CRC16(orden,6);

orden[6] =

(unsigned char) (OxFF

& (out

» 8));

orden{7]= (unsigned

char) (OxFF

& out);

/" Cheksum High */

/* Cheksum Low */

for (i=0;i<8;i++) _bios_serialcom{_COM_SEND, COM3, ordenti] );

/* Envja orden */

switch(funcion) {

case 1:

/*** Read Coil Status ***/

RES PUESTAS (0,

3) ;

/* Lee 3 primeros bytes */

if (respuesta [1]

! =orden [1]

)

/* Mensaje de error */

RES PUESTAS (3, 5)

;return -2;

/* Lee 2 bytes finales*/

RESPUESTAS(3, (3+respuesta[2]+2)) ;

/* Lee resto de la respuesta */

out=CRC16(respuesta,(unsigned short) (i-1)); /'Comprueba cheksum */

if ( ((unsigned char) (OxFF

& (out

» 8))) 1= respuesta [i-lj

||

((unsigned char) (OxFF & out)) !=

respuesta[i]) return -i¡

for (i=param_a;i<param_a+param b;i++)

/* Asigna valores */

coils [i]=

(respuesta (3+

(i/8)] » (i-param_a-(i/8*8)) ) & 1;

break;

case 3:

/*** Read Holding Register ***/

RESPUESTAS(O,3);

/* Lee 3 primeros bytes */

if (respuesta[1]!=orden[1])

/* Mensaje de error */

iRESPUESTAS(3,5);

/* Lee 2 bytes finales*/

return -2;

RESPUESTAS (3, (3-t-respuesta

[2] +2) ) ;

/* Lee resto de la respuesta "/

out=CRC16(respuesta,{unsigned short)(i-1)); /'Comprueba cheksum */

if ( ((unsigned char) {OxFF & (out

» 8}))

!=>

respuesta [i-1]

|)

((unsigned char) (OxFF & out)) !=

respuesta[i]) return -1;

for (i=param_a;i<param_a+param_b;i++)

/* Asigna valores */

registros(i]= (respuesta[3+2*(i-param_a)] « 8) |

respuesta[4+2*(i-param_a));

break;

case 5:

/*** Forcé Single Coil ***/

RESPUESTAS(O,3);

/* Lee 3 primeros bytes */

if (respuesta[1]!=ordenll])

/* Mensaje de error */

íRESPUESTAS(3,5);

return.-2;

}RESPUESTAS(3,8);

/* L

ee 2 by

tes fin

ales*/

/* L

ee resto de b

ytes

*/

out»CR

C16(respuesta,(unsigned sh

ort) (i-1

) ),- /'C

omprueba

cheksum

*/if

( ((unsigned ch

ar) (O

xFF & (out

»

8)))

i= respuesta (i-U

||

((unsigned char) (O

xFF &

ou

t)) != resp

uesta[i])

return

-1;

if ( respuesta{6]!=

orden[6] || resp

uesta!?]!*

ord

en[7

] )

return

-3;

break

;case

6: .

/**

* Preset

Sin

gle R

egister ***/

RESPU

ESTAS(0,8);

/* L

ee respuesta */

out=C

RC

16(respuesta, (unsigned sho

rt) (i-1) );

/'Com

prueba cheksum

*/

if (

((unsigned char) (O

xFF &

(out »

8)))

!= resp

uesta[i-1

] J|

((unsigned char) (O

xFF &

ou

t)) != resp

uesta[i])

return

-1;if

( respu

esta [6] !=orden[6]

| | respuesta[7J !=>orden[7J

) return -3

;b

reak;

Î

printf("\nOrden: \n");

for (i=0;i<8;i++) printf(" %02X".orden[i]);

printf("\nRespuesta: \n");

for (i=0;i<20,-i

+ + ) printf ("

%02X", respuesta[i] ) ;

printf(" ,.,\n");

APÉNDICES A

- 95

DESARROLLO E IMPLEMENTAGÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

retu

rn

0 ;

i/* CCdigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

«ifdef TEST

void delayí clock_t wait )

(clock_t goal;

goal = wait

+- clocM);

while! goal > clock!) )

int

ma

int

int

arg

c,

ch

ar

*a

rgv

[])(

int

reto

rno

;in

t i;

if (a

rgc

==

l){prin

tf ("\n

Utiliz

a:

trov

is fu

nció

n

para

metro

_a

para

metro

_b

\n"

í;re

turn

- 1

;i

if (inicio_comunica () )

{printf ( "\nComunicacion no establecida. Comprobar conexiones");

return -1;

}else printf (" \

nComunicacion OK !¡!\n");

delay (500)

;

retorno = orden_MODBUS ( l , a

toi (argv[l] ) , atoi (argv[2] ) , atoi (argv

[3] ) );

printf ("\nValor de retorno de la función:

%i\n", retorno);

if (retorno !=0)

return -2 ;

if (retorno==0) printf ( "\nOrden OK! ! ! \n"

) ;

if (atoi

(argv[l] } ==1)

(printf ("Coils: \n") ;

for

(i=0

; i<1

6;i + + )

prin

tf ("

}if

(ato

i (argv [1

] ) ==

3)

prin

tf ("R

eg

istros:

\n"

) ,-fo

r (i = 0

;i<5

8;i+

+)

prin

tf ("tt

", co

ils [i]}

;

" , i, re

gis

tros lij ) ;

orden_MODBUS(1,3,1,1);

orden_MODBUS(Oxb,1,4,4);

orden~MODBUS(Oxf,5,Oxc,OxffOO);

orden__MODBUS (1,3,0,1);

orden~MODBUS(0x12,6,9,0x64);

retu

rn

0;

iA-9

6APÉNDICES

Page 109: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

»•••••••••••••••••••••••••••«

APÉN

DICE

S. PR

OGRA

MA D

E MO

NO-O

RIZAC

IÓN

Y CON

TROL

PLAN

TA PI

LOTO

DE

PU

RA

.DA

T

- F

ICH

ER

O

DE

CO

NFI

GU

RA

CIÓ

N

10

INT

ER

VA

LO

D

E

CO

NT

RO

L D

E O

XIG

EN

O60

0 IN

TE

RV

AL

O

DE

E

ST

IMA

CIÓ

N

DE

L

CO

NSU

MO

D

E O

XIG

EN

O

30

0 3

00

INT

ER

VA

LO

LIM

PIE

ZA

D

OS

IFIC

AD

OR

A

NIT

GE

NO

/

CA

RB

ON

O5

5 N

UM

ERO

D

E P

IST

ON

AD

AS

LIM

PIE

ZA

D

OS

IFIC

AD

OR

A

NIT

GE

NO

/

CA

RB

ON

O15

IN

TE

RV

AL

O

AC

TU

AC

IÓN

S

UP

ER

VIS

IÓN

P

LC

300

INT

ER

VA

LO

TO

MA

D

E

DA

TOS

EN

FI

CH

ER

O50

0 T

IEM

PO

IN

TE

RV

AL

O

EN

TR

E

PUR

GA

S (M

xim

o

10

00

) + 4

*1

00

0

60

TIE

MP

O

AC

TU

AL

IZA

CIÓ

N

DE

L

A G

FIC

A

EN

PA

NT

AL

LA

(S

EG

)3

00

C

AU

DA

L

EN

TR

AD

A A

GU

A60

0 C

AU

DA

L R

EC

IRC

UL

AC

ION

IN

TE

RN

A

(RE

AT

OR

3

->

RE

AC

TO

R

1)

7 T

IEM

PO

F

LO

JET

S

EN

CE

ND

IDA

S23

T

IEM

PO

F

LO

JET

S

APA

GA

DA

S30

50

50

V

EL

OC

IDA

D A

GIT

AD

OR

ES

(%)

2.5

2

.5

2.5

G

AN

AC

IA C

ON

TR

OL

AD

OR

100

100

100

CO

NST

AN

TE

DE

TIE

MP

O

INT

EG

RA

L0

.00

2

0.0

02

0

.00

2 C

ON

STA

NT

E

DE

TIE

MP

O

DE

RIV

AD

O1

11

P

ID A

CT

IVO

(U

NO

) 0

IN

AC

TIV

O (

DO

S)

4.0

1

2.0

1

2.0

S

I E

L P

ID

EST

A

INA

CT

IVO

, S

AL

IDA

m

A V

ÁL

VU

LA

-1.3

44

3

0.9

96

4

-1.7

84

4

OR

DEN

AD

A

OR

IGE

N

CO

RR

EL

AC

IÓN

O

XIG

EN

O

MV

0.0

52

88

0

.05

81

8

0.0

81

19

P

EN

DIE

NT

E

CO

RR

EL

AC

IÓN

OX

IGE

NO

_MV

AL

IME

NT

O.D

AT

-

FIC

HE

RO

D

E C

ON

FIG

UR

AC

IÓN

1

TIP

O

DE

AL

IME

NT

AC

IÓN

(0

C

ON

STA

NT

E,

1

PE

RF

IL.)

HO

RA

S

28

35

65

100

200

200

160

100

45

25

18

13

10

8 7

6 6

7 7

8 10

12

15

23

DO

SIF

ICA

CIa

N

CA

RB

ON

O

(CA

DE

NC

IA E

N S

EG

UN

DO

S)30

37

67

10

2 20

2 20

2 16

2 10

2 47

27

20

15

11

10

9

7 7

8 8

9 11

14

16

24

108

100

95

90

90

93

100

113

128

143

115

184

APÉN

DICE

S A

- 97

(>

••••••••••••••••••€

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA SU

PERV

ISOR

PARA

LA GE

STIÓ

N Y C

ONTR

OL D

E ED

AR

V_A

GU

A.D

AT

-

FIC

HE

RO

D

E C

ON

FIG

UR

AC

IÓN

9 4.0

00

.

0.0

00

8.0

00

36

.43

01

0.0

00

92

.16

61

2.0

00

15

6.6

58

14

.00

0

22

3.0

48

16

.00

0

29

5.5

67

20

.00

0

44

1 .1

76

BO

MB

A1.

DA

T

- F

ICH

ER

O

DE

CO

NFI

GU

RA

CIÓ

N

15 4.0

00

0

.00

05

.00

0 5

3.0

5.5

00 8

0.0

6.0

00

10

5.6

6.5

00

13

3.0

7.0

00

15

3.0

7.5

00 1

85.0

10

.00

0

26

0.0

12

.00

0

27

5.0

14

.00

0

34

7.0

18

.00

0

48

8.0

20

.00

0

55

0.0

BO

MB

A2.

DA

T

- F

ICH

ER

O

DE

CO

NF

IGU

RA

CIÓ

N

4.0

00

0.0

00

5.0

00 1

70

.06

.00

0

34

0.0

8.0

00

69

0.0

10

.00

0

92

5.0

12

.00

0

10

00

.01

4.0

00

11

80

.0

•1

6.0

00

13

65

.01

8.0

00

15

40

.01

9.9

00

15

60

.02

0.0

00

20

00

.0

A -

98

APÉN

DICE

S

>••••••••

+

Page 110: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg
Page 111: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONFT

ORIZA

CION

Y C

ONTR

OL D

EL SI

STEM

A AN

ALÍTI

CO

PROGRAMA PRINCIPAL DE GESTIÓ DELS ANALITZADORS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIO: 4/1/99

«include "fiacfa.h"

int maint int argc, char *argv[])

{ if (argc==2)

/* Lo hace si entramos l par metro */

{ if

( !_

str

icm

p(a

rgv

[l],

"/o

ffli

ne

"))

o

ffli

ne

=l;

/*

Co

n e

ste

p

ar

met

ro

fun

cio

nar

emo

s o

ffli

ne

, si

n

lectu

ras

*/

if

(!_

stri

cm

p(a

rgv

[l],

"/s

olo

no

B")

) so

lón

os=

1;

if

(!_

3tr

icm

p(a

rgv

[l]

, "/s

incal"

) )

.

sin

cal=

l;}

if (access("c;\\fiacfa\\tmp\\secur.tmp",0) == 0) sincal=l;

inicia_sistema();

do

/*Actualitzacit temps FIA*/

dat.t_actual=time(NULL);

ftimet&t);

dat.t_milli=t.time*1000*t.millitm;

acciones__comunes O ;

switch (estado)

{case 0: /***** C-lcul Ijnia base FIA *****/

if ((difftime(dat.t_actual,dat.t_inici)>=dat.inici_lectura_base)

£,&

(dif

f time (dat.

t actual, da?

- t_inici) <=dat. f i lectura base))

íif (difftime(dat.t_milli,dat.t_milli_old)>=200)

da

t.t_

mil

li_

old

=t.

tim

e*

10

00

*t.

mil

litm

;if

(l

ec

tura

_a

bso

r()=

=0

)

for

(i =

0;i

-; =

18;

i +

+ )

mes

ur_

abs

[i]

=m

esu

r_ab

s [i

*l]

;m

esu

r_a

bs[

19

]=v

alo

r.a

bso

r;su

raa=

0.O

F;

for (i=0; i<=19; i**) suma= suma * mesur_abs[i];

dat.linea_base=suma/20.OF;

if (difftimetdat.t_actual,dat.t inici)>dat.fi_lectura base)

( sprintf(mensaje,"Línia base calculada: %5.3f ",dat.linea_base);

graf_texto(mensaje,1,1,594,37,1,1);

~estado**;

}break;

case 1:

/***** c_rrega del loop ******/

reinicializa__puerto(í ;

comunica (load, retorno)

,-reinicializa_puertob();

valor.punt_nitrits=dat.punt_mostreig; /* Guardem punt de mostreig */

valor.punt_nitrats=dat.punt_mostreig;

if (dat.numero injeccio>=dat.inj entre calibrats)

( comunica(valv_sup_off,retorno);

comunica (valv

inf

of f, retorno)

,-}

estado**;

break;

case 2 :

if (difftime(dat.t_actual.dat.t inici)>=dat.inici lectura maxl)

í graf_texto("Iniciem deteccií Pic de nitrits",1,1,594,37,1,1);

dat.t_milli_old=dat.t_milli;

contador=0;

APÉN

DICE

S A

- 9

9

DESA

RROL

LO E

IMPL

EMEM

TAQÓ

N DE

UN SI

STEM

A SU

PERV

ISOR

PARA

LA G

ESTIÓ

N Y

CONT

ROL D

E ED

AR

bre

ak

;case

3

: /*

In

ici

de l

a

lectu

ra

del

pri

mer

nujt

im

*/

if

(dif

fcim

e(d

at.

t m

illi

.da

t.t_

mil

li_

old

)>=

20

0)

{ dat.t_milli_old=t.time*1000+t.millitm;

if(lectura_absor()!=o) break;

/* Si no ha llegit b,, surt del switch*/

if (valor.absor>max)

f max^valor.absor;

contadorsO;

}else (contador**);

if(contador>50)

í hpicl=max-dac.linea_base,-

concentracio_nitrits () ;

max=0.OF;

estado**;

contadoraO;

sprintf(mensaje,"Pic de nitrits detectat, hpicl = %6.4f °,hpicl);

graf_texto(mensaje, 1,1,594, 37,1,1} ;

}

break;

case 4 :

if (difftime(dat.t_actual,dat.t_inici)>=dat.inici_lectura_max2)

{ dat.t_milli_old=dat.t_milli;

contador=0;

graf_texto("Iniciem detecciC Pic de nitrats" , 1, 1, 594, 37,1,1) ,-

estado**;

}break;

case 5 :

/***** 'Deteccií segon m..jcim *****/

if (difftimetdat.t milli,dat.t milli old)>=200)

{ dat.t_milli_old=t.time-1000+t.millitm;

if(lectura_absor()!=0) break; /* Si no ha llegit b,, surt del switch*/

if (valor.absor>max)

( max=valor.absor;

contadoraO;

ielse (contador**);

if(contador>50)

( hpic2=max-dat.linea_base;

concentracio_nitrats(};

max= 0.O F;

estado**;

contadoraO;

sprintf(mensaje, "Pic de nitrats detectat, hpic2 = %6.4f n,hpic2);

graf_texto(mensaje,1, 1,594, 37,1,1);

}

break;

case 6: /***** injecció de nova mostra *****/

if (difftime(dat.t_actual,dat.t_inici)>=dat.t_inj eccio)

{dat.t_inici=time(NULL);

/**** Desactivación del env;o sClo del segundo valor

if (dat.repeticion==OÍ dat.repeticíon=l;

else dat.repeticion=0; /*Para mandar un solo dato a la SUN*/

reinicializajpuertoO ;

comunica(inject,retorno);

reinicializa_puertob();

graf_texto("Nova injecciC de mostra" , 1,1, 594, 37, l, l)

,-printf("\a\a\a");

if(dat-numero_injeccio>=dat.inj_entre_calibrats)

/*carregar */

f dat.nuraero_injeccio=0;

Posat

aquí per donar

temps a

A-100

APÉNDICES

Page 112: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZACIÓN Y CONTROL DEL SISTEMA ANALÍTICO

calibra_no3();

dat-numero_injeccio++;/* contador per calibrar nitrats */

for (i=0;i<20;i++) mesur_abs[i]=O.OF;

estado=0;

ïbreak;

} /**Fin switch **/

switch(estado2){

case O:

if(difftime(dat.t_actual.dat.t_cicle)>=(dat.t_canvi_punt_mostreig-60))

valor.punt_amoni=dat.punt_mostreig;

if (dat.mostra_manual==0)

graf_texto("Permta per mostreig manual (F8)",1,1,594,37,1,1);

if (dat.mostra_manual==l)

graf_texto(nPerm¡s per mostreig autom_tic (F9)",1,1,594,37,l,l);

estado2++;

break;

case 1: /** Canvi del punt de presa de mostra (-17

min. desde t=0) **/

if(difftime(dat.t_actual,dat.t_cicle)>=dat.t_canvi_punt_mostreig)

if (dat.mo3tra_manualn=0) /* Mostra normal */

/*

dat.punt_mostreig++;*/

/*

if(dat.punt_mostreig>=5) dat.punt_mostreig=0;*/

/•Cambio para tomar muestra silo de los reactores (puntos

1-2-3)*/

/*

if (dat

.punt_jnostreig>=4) dat .punt_mostreig=l,- */

/•Cambio para tomar muestra silo de dos reactores (puntos 1-3)*/

/*

if(dat,punt_mostreig==l) dat.punt_mostreig=3;

else dat.punt_mostreig=l;

*/

/*

presa_mostra(dat.punt_mostreig);

sprintf(mensaje,"Canvi de presa de mostres al punt %i ",dat.punt_mostreig);

graf_texto(mensaje,l,l,594,37,l,l); */

/* Cambio para tomar solo salida •/

estado2++;

break;

case 2:/** Lectura CFA per obtenir concentraciç als 18 minuts desde t=0 **/

if(difftime(dat.t_actual.dat.t cicle)>=dat.t lectura amoni)

(if(lectura_ammv()==0)

da t.numero_most ra_CFA+ +;

concentracio_amoni();

graf_texto("Nova concentració d'amoni calculada",1,1,594,37,1,l);

estado2++;

ibreak;

case 3: /** FinalitzaciC del cicle a un reactor **/

if( difftime(dat.t_actual,dat.t_cicle)>= /*2**/ dat.t_injeccio

&& estado==0 )

/* Para sincronizar los dos tiempos */

dat. t_cicle=titne (NULL) ;

dat.t_inici=time(NULL);

graf_texto("Finalizacií d'un cicle déla analitzadors",1,1,594,37,1,1);

/* Entrem a calibrat cada 24 hores */

/****

if(dat,numero_mostra_CFA>s72)

comunica2(amvalv_sup_on,retorno);

comunica2(amvalv_inf_off,retorno);

calibra_amoni();

dat. numero_mostra_CFA=0

,-]

************************** calibrado de amonio desactivado •*•/APÉNDICES

A-1

01

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

break;

} /**Fin switch **/

while (dat

. f i_programa=aO) ;

/i*********************** sortida del programa */

comunica (purap_of

f, retorno) ;

/*Para la bomba*/

_setvideomode ( _DEFAUI.TMODE );

/*Acaba con el modo gr fico, pasa a texto*/

remove ("C:

\\fiacfa\\tmp\\secur. tmp" ) ;

return 0;

ï

Subrutina actuacions desde teclat

*/

void selectmenu(void)

íint tecla;

int retorno[40];

tecla«_bios_keybrd(_NKEYSRD_READY); /«Comprueba si se ha presionado una tecla*/

if(tecla==0) return;

_bios_keybrd(_NKEYBRD_READ); /*Vac;a el buffer, lee el Cltirno

carácter*/

switch(tecla){

case FI :

reinicializa_puerto() ;

comunica(load,retorno);

reinicializa_puertob();

break;

case F2:

comunica (pump_on, retorno)

,-break;

, case F3:

comunica(pump_off,retorno);

break;

case F4:

reinicializa_puerto() ;

comunica(inject,retorno);

reinicializa_puertob();

break;

case F5:

reinicializa_puerto();

comunica(valv_inj,retorno);

reinicializa_puertob();

break;

case F6:

comunica(valv_sup_off.retorno);

break;

case F7:

comunica(va1v_sup_on,retorno) ;

break;

case F8:

comunica(valv_inf_on,retorno);

/* actuació manual */

dat,mostra_manual=l;

graf_texto("Mostreig manual activat",1,1,594,37,1,1);

break;

case F9:

comunica{valv_inf_off,retorno); /* Fi actuaciç manual */

dat-mostra_manual=0;

graf_texto("Mostreig automàtica activat",1,1,594,37,1,1);

break,-case FIO:

dat.fij>rograma=l;

/* parar programa */

break;

case Fll:

dat.fisl;

/* parar calibrat */

break;

case F12:

lectura_configuracioO ; /* lectura fitxer dades */

A-102APÉNDICES

Page 113: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. PR

OGRA

MA D

E MO

NITO

RIZA

CIÓN

Y CO

NTRO

L DEL

SIST

EMA

ANAL

ÍTICO

break;

Case ALTF2:

coraunica2(ampump_on,retorno);

break;

case ALTF3:

comunica2(ampurap_off,retorno);

break;

case ALTF6:

comunica2 (amvalv_sup_off,retorno);

break;

case ALTF7;

comunica2tamvalv_sup_on,retorno);

break;

case ALTF8;

comunica2(amvalv_inf_on,retorno); /*actuacio manual*/

break;

case ALTF9:

comunica2(amvalv_inf_off.retorno);

break;

case ALTQ:

/*graf_texto("Inventando valores de la gr fica",1,1,594,37,1,1);*/

/*inventa_valores O ;*/

break;

case CTRLC:

/* calibracio_manual=l;*/

break;

case CTRLQ:

_setvideomode( J3EFAULTMODE );

exit(O)

,-break;

case ALTO:

salir_al_dos() ;

break;

case ALTH:

graf ayuda_genera1(} ;

break;

case ESC:

graf_presentacion();

break;

case RETURN:

break;

Case BARRA:

dat-t_grafica=time(NULL);

botoní 1, "Barra", 503, 3, 636, 20, 1);

grafica_variable(0);

grafica_variable(1);

graf_valores_display () ,-*/

graf_valor_absor();

graf_valor_mv();

graf_hora O ;

botont O, "Barra", 603, 3, 636, 20, 1) ;

break;

case AMUNT:

boton( 1, "Ar", 610, 30, 629, 50, 2);

seleccionar_graf ico

(1)

,-botont O, "Ar", 610, 30, 629, 50, 2);

break;

case ABAIX:

botont 1, "Ab", 610, 60, 629, 80, 2);

seleccionar_grafico(2);

botoni O, "Ab", 610, 60, 629, 80, 2);

break;

case DRETA:

botonf 1, "De", 610, 90, 629, 110, 2);

seleccionar_graf ico (3)

,-botont O, "De", 610, 90, 629, 110, 2);

break;

case ESQUERRA:

botoní 1. "Iz", 610, 120, 629, 140, 2);

seleccionar_grafico(4);

botont O, "Izn, 610, 120, 629, 140, 2);

break;

case CTRLBS:

break;

default :

break;

APÉN

DICE

S A

-10

3

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA SU

PERV

ISOR

PARA

LA GE

STIÓ

N Y C

ONTR

OL D

E ED

AR

retu

rn;

)

InicialitzaciC de temps

void inicializar_tiempos(void)

í dat.t_actual=time(NULL);

dat.t_cicle=dat.t_actual;

dat. t__inici=dat. t_actual ;

dat.t_grafica=dat.t_actual;

dat.t_lectura=dat.t_actual;

dat.t_milli=dat.t_actual;

dat.t_reloj=dat.t_actual;

dat.t_estab=dat.t_actual;

valor.t_amoni=dat.t_actual;

valor.t_nitrats=dat.t_actual;

valor.t nitrits=dat.t_actual;

Inicialitzacií de les variables

void inicializar_variables(void)

{ dat.contrôlai;

/* Cambio reactores

dat.punt_raostreig=0;*/

/*dat .punt_mostreig=l,- */

dat.punt_mostreig=4; /*Solo salida*/

dat.numero_injeccio=0;

dat,numero_mostra_CFA=0;

dat.fi=0;

dat.fi_programa=0;

dat.inicio_graf=3 ;

dat.fin_graf=4 ;

dat.mostra_manual=0;

dat .posada_en__marxa=l;

dat. conexion_SUN=l

,-/*dat.repeticion=0;*/

dat.repeticion^l; /* Para enviar todas las medidas */

i

Calcul i arxiu de la concentració d'amoni

void concentracio_amoni(void)

i char medida[25];

valor .amonis (14 . OF/18 . OF) * (f loat)pow(10 . , (valor .mv-dat .ordenada) /dat .pendent)

,-valor. t_amoni=titne (NULL) ;

if (dat.mostra_manual==l) valor.punt_amoni=-l; /* La mostra ,s off-line */

if (dat.mostra_manual==0)

medida_a_SUN (3 , (char) valor.punt_amoni, valor.amoni)

,-sprintf(medida,"%6.4f \t%2i \t".valor.amoni.valor.punt_amoni);

guarda_medida ( medida, "c : \\fiacfa\\datos\\amoni .his")

,-sprintf(medida,"%8.4f \t%2i

\t".valor.mv,valor.punt_amoni);

guarda_medida( medida, "c:\\fiacfa\\datos\\mv.his");

graf_valores_display{);

return;

i

Calcul de la concentració de nitrits

void concentració nitrits(void)

valor.nitrits=> (dat .a+dat .b'hpicl) *14 .OF/46.0F;

if ( valor.nitrits<0.OF ) valor.nitrits=0.OF;

valor.t_nitrits=time(NULL);

if (dat .mo9tra_manual«l) valor.punt_nitrits = -l; /* La mostra ,s off-line */

if (dat .mostra_manual"0 && dat. repeticion= = l)

A-104

APÉNDICES

Page 114: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MO

NTORIZACIÓ

N Y CONTROL DEL SISTEM

A ANALÍTICO

medida_a_SUN {1,

(char)valor.punt_nitrits, valor.nitrits);

graf_valores_diaplay();

return;

}/..*Calcul i arxiu de la concentració de nitrats

»**»**«•*•/

void concentracio_nitrats (void)

{char medida [25]

;

valor. nit rat s*

(dat

.e+dat . f * ( (dat

.d*hpic2- (dat

-a+dat .b*hpicl) +dat.c) /dat.d) ) *14

.OF/62 .OF;

if ( valor. nitrats<:0.

OF ) valor. nitrats=0 . O

F;

valor. t_nitratsotime (NULL)

;if

(dat .mostra_manual==l) valor .punt_nitrats=-l; /* La mostra , 3

off-line */

if (dat.mostra_manual==0 &&

dat .repeticion==l)

medida_a_SUN(2, (char)

valor. punt_nitrats, valor. nitrats) ;

sprintf {medida, "%6.4f \t%6.4f \t%2i

\t",

valor .nitrits, valor . nitrats , v

alor . p

unt_ni trata) ;

guarda_medida ( medida, nc:\\f iacfa\\datos\\nitr.his")

,-sprintf (medida, "%6.4f \t%6.4f \t%2i \t",

hpicl, hpic2, valor. punt_nitrats) ;

guarda_medida ( medida, nc:\\f iacfa\\datos\\hpic.his" ) ;

graf_valores_display () ;

return;

}

Acciones comunes del programa utilizadas en varias funciones

*****/

void acciones comunes (void)

{selectmenuO ;

lectura_ammv() ;

/***** Actualiza reloj gr fico *****/

if ( (int)

dif f t

ime (dat

. t_actual, dat . t reloj ) >oio>

ídat. t_reloj=time (HULL)

;graf_hora O ;

j/*•*** Lectures per fer gràfiques *****/

if ( (int)

dif t time (dat.

t_actual.dat. t lectura) >=4)

íif ( lectura_absor () ==0/* && lectura_ammv() ==o*/ )

/* Si lee bien */

{dat .t__lectura=time

(NULL) ;

lectura__amnrv() ;lectura_ammv() ;

actualizar_matrices_graficas ()

,-graf_valor_absor O ;

graf_valor_mv() ;

delay(lOO) ;

í}

/***** Gràfiques per pantalla *****/

if ( (int)

dif f time (dat

. t_actual, dat . t gràfica) >=20)

ídat. t_grafica=time (NULL)

;grafica_variable(0) ;

gràfica variable(l);

i

Inicia tot el sistema FIA CFA

void inicia sistema O

APÉNDICES A-105

DE

SA

RR

OLLO

E iM

PLE

ME

NTA

N D

E U

N S

ISTE

MA

SU

PE

RV

ISO

R P

AR

A L

A G

ES

TIÓ

N Y

CO

NTR

OL

DE

ED

AR

FILE -obert;

inicializar_variables(! ;

inicializar_tiempos O ;

lectura_conf iguracioO ;

/* Lectura de los Eltimos calibrados */

if (lee_calibrado( "c:\\f iacfa\\datos\\calilno2.his", &dat.a, &dat.b}!

{ dat. a = -0.009499F; dat. b = 8.355F;}

i£ (dat.b--0.OFI

printf ("\nError: Fitxer de calibrat calilno2.his incorrecte\nB

exit(l);

}if (lee_calibrado( -c:

\\fiacfa\\datos\\cali2no2 .his"

, sdat.c, sdat.d)

{ dat. c - 0.20377F; dat.d .

76.2797P;}

if (dat.d«O.OF)

printf (

B\nError: Fitxer de calibrat cali2no2.his incorrecte\n" }

èxit íl) ;

if (lee_calibrado( -c:\\£iacfa\\datos\\calibno3.his", sdat.e, ldat.£)I

( dat. e - -0.2976F; dat . f - 132.2938F;}

if (dat

-f ==0. OF)

(printf ("\nError: Fitxer de calibrat calibno3.his incorrecteVn")

exit(l);

)if (lee_calibrado( "c:

\\fiacf a\\datos\\calibnh4 .his"

,&dat. ordenada, &dat .pendent) ! =0)

{ dat. ordenada = -79.954F; dat. pendent = -66.296F;}

if (dat

.ordenada—O. OF

¡| dat

.pendent ==0. OF)

printf ("\nError : F

itxer de calibrat calibnh4.his incorrecteXn" )

èxit (I)

;

modo_graf ico() ;

graf_baae O ;

graf_presentacion ()

;

reinicializa_puertob() ;

if (sincal ==

1>

ícomunica (valv_inf_of f , retorno) ;

comunica (valv_sup_on, retorno) ;

comunica 2 (amvalv_inf_of f , r

etorno) ;

comunica2 (amvalv_sup_of f , r

etorno) ;

tif

(sincal == O && solono3==0)

icomunica (valv_inf_on, retorno)

,- /"necessari per

entrar i calibrar no2-*/

comunica (valv_sup_of f, retorno) ;

comunica2 (amvalv_inf_of f , r

etorno) ;

/*necessari

per

entrar

passant

patri

50 ppm

comunica2 (amvalv sup_on, retorno) ;

if (solono3==l)

com

un

ica (valv

_in

f_o

f f, reto

rno

) ,-co

mu

nica (v

alv_

sup

_o

f f, reto

rno

) ;co

mu

nica2 (am

valv

_in

f_o

f f .reto

rno

) ;com

ún i ca 2 (amv

alv_

sup

_o

f f , reto

rno

) ;

/*n

ecessa

ri p

er e

ntra

r i

calib

rar

no

3-*

/

/'necessari

per

en

trar

mo

stra*

/

rein

icia

liza_

pu

erto

() ;co

mu

nica (v

alv

_in

j , reto

rno

) ,-d

elay(S

OO

) ;co

mu

nica (lo

ad

, reto

rno

) ;re

inic

ializ

a_

pu

erto

b () ;

com

un

ica (pump_on,

reto

rno

) ;co

mu

nica2 (am

pump_on, re

torn

o) ;

sic

io d

e c

_rre

ga

a l'in

ici*

/

A-106

APÉNDICES

Page 115: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONFT

ORIZA

CIÓN

Y C

ONTR

OL D

EL S

ISTEM

A AN

ALÍTI

CO

presa_mostra(dat.punt_mostreig);

/* comencem amb poaicií de mostreig de TO */

if (sincal « 0 && solono3 = =>0)

í graf_texto("Espereu uns minuts, el sistema est- estabilitzant-se...",1,1,594,12,1,1);

graf_texto(nATENCIÓ, ai no voleu que m'enfadi, cal que ara mateix poseu el patrC de 3 PPM

NITRITS per calibrar el sistema.",1,13,594,24,0,1);

graf_texto("NO MARXEU ENCARA, espereu a que aparegui el missatge : 'Introduiu patri 7 PPM

NITRITS', que ja hauries de tenir preparat.",1,25,594,37,O,1);

}

while(difftime(dat.t_actual,dat.t_estab)<=dat.t_estabilit)

í dat. t__actual=time (NULL} ;

selectmenuO ;

reinicializa_puertob();

comunica(colorimEOJ, retorno);

/***delay(1000);*****/

/*Calibracio del colorimetre*/

/** y una M.

for (i=l;i«=3;i++)

delay(1000);

comunica(colorim[1], retorno);

****/

delay(8500);

reinicializa_puerto();

comunica(inject,retorno); /*Injeccio a temps O */

reinicializa_puertob();

inicializar_tiempos();

dat.control=0;

/•Reset del colorimetre*/

/* permetem carrega del loop als calibrats */

if (sincal ==

O && solono3==0)

í dat.posada_en_marxa=0; /*calibrem amoni 50 amb nitrits pic 1

i calibrem amoni 5 amb nitrats sols a l'inici*/

calibra_picl_no2 () ;

/*comencem calibrant el sistema*/

calibra_pic2_no2 O ;

calibra_no3 {) ;

graf texto ("Calibrats finalitzats".!, 1, 594,37, i, i) ;

íf (solono3==l)

( dat.posada_en_marxa=l; /* no calibrem amoni ni nitrits»/

calibra_no3 () ;

graf_texto( "Calibrat Nitrats f inalitzat" , 1, 1, 594

, 37, 1, lï ;

/* En cas de reboot evita la posada en marxa amb calibrats */

obert = f open ("c: \\fiacfa\\tmp\\secur. ttnp" , "wt" ) ;

fprintf (obert, "Hola\n") ;

fclose (obert) ;

ï

APÉN

DICE

S A

-107

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN SI

STEM

A SU

PERV

ISOR

PARA

LA

GEST

IÓN

y CO

NTRO

L DE

EDA

R

DEFINICIONS DEL PROGRAMA PRINCIPAL DE GESTIÓ DELS ANALITZADORS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓ: 4/1/99

#include <time.h>

it include <bios . h>

Sinclude <sys\timeb.h>

it include <stdio.h>

# include <graph.h>

ítinclude <stdlib.h>

íiinclude <string.h>

ítinclude <math.h>

Sinclude <io.h>

ffinclude "nombres -h"

(finclude "teclas .h"

void selectmenu(void);

void inicializar_tiempos(void);

void inicializar_variables(void);

void concentracio_amoni(void);

void concentracio_nitrits(void);

void concentracio_nitrats(void);

void acciones_comune3(void);

void inicia_sistema(void);

extern void modo_grafico(void);

extern void graf_base(void);

extern void graf_hora(void);

extern graf_presentacion(void);

extern void grafica_variable(int variable);

extern int botón ( int on_off, char *nombre, short xl, short yl,

short x2, short y2, short font);

extern int graf_texto (char *nombre, short xl, short yl,

short x2, short y2, int font, int fondo);

extern void salir_al_dos(void);

extern void seleccionar_graficoíint orden);

extern void graf_valor_absor(void);

extern void graf_valor_mv(void);

extern void actualizar_matrices_graficas(void);

extern void graf_valores_display(void);

extern void graf_ayuda_general(void);

extern void reinicializa_puerto(void);

extern void reinicializa_puertob(void);

extern int comunicatint *frase, int *salida);

extern int comunica2(int *frase, int *salida);

extern int lectura_absor(void);

extern int lectura_ammv(void);

extern int calibra_picl_rto2(void);

extern int calibra_pic2_no2(void);

extern int calibra_no3(void);

extern int calibra_amoni(void);

extern void presa__mostra (int la_mostra) ;

extern void guarda_medida( char *mensaje, char *fichero);

extern void lectura_configuracio(void);

extern int lee_calibrado( char *fichero, float *param_a, float *param_b)

,-

extern void delay ( docket wait ) ;

extern void medida_a_SUN (char parámetro, char punto, float medida) ,-

datos_fia

dat;

valores_fia

valor;

struct timeb t;

/* Estructura de temps en mil.lisegons */

int offline«0; /* Opciones de inicio */

int solono3=0;

int sincal=0;

int retorno [40] ;

A-108

APÉNDICES

Page 116: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DÉ MoNiroRizAaÓN Y CONTROL DEL SISTEMA ANALÍTICO

float mesur_abs[20];

float suma;

int i;

int estado«0;

int estado2=0;

float max;

int contador =0;

float hpicl;

float hpic2;

char mensaje [200]

;

Instruccions per actuar sobre modul EASI

int

valv

_in

j [20

]={

'\r', '/'.'l

'.'Z'.'S

'.'R'

int

pu

mp

_o

n[2

0]=

{*

\r','O',' 1

' ,'M1,'O

1,'1' ,

int

pu

mp

_o

ff[20

]={

'\r','O','!','M

1,'O','O

1

int

colo

rim[3

] [20

]={{'\r

', 'O', '3

', 'R','S

',{

'\r', 'O

', '3' , 'T

', 'C{

'\r'. 'O

1,'3',-R

-,'Cin

t v

alv

_in

f_o

n[2

0]=

{'\r','0

1,'2','V

1,'l1,

int

va

lv_

inf_

off

[20

]={

'\r', 'O1, '2

', 'V, 'I

int

loa

d[1

5]=

{'\r', '/

'.'l'.'Y

'.^'.'A

1,'!

'in

t in

jec

t[15

J=

{'\r', '/

'.'l'.'Y

'.'IS

'A',

1

int

valv

_su

p_

on

[20

J ={

'\r',

10

',I2

1,'V

','S1

,in

t v

alv

_su

p_

off (2

0)-{

'\r', 'O','2

', 'V, 'S

1

int

am

pu

mp

_o

n[2

0]=

{t\r',

1l','l','M','O

1,':in

t a

mp

um

p_

off[2

0]=

{'\r','!','!','M

','O',

int

amv

alv_

inf_

on

[20

] ={

'\r', '!

', '2', 'V

, • :in

ferio

r*/

int amvalv_inf_off[20]={'\r',ll','21,'V',

inferior*/

int amvalv_3Up_on [20]={'\r', *!',

'2', 'V,

'íinferior*/

int amvalv_sup_off[20]={'\r','1','2',W,

int ampotenciometre[20]={'\r1,'l','5','R'1

int

ampotenciometrel[20] »{ ' \r* ,

'!', '51, '

potenciometre*/

int amcorreccio[20]={'\r','!',' 5 ' ,'T','U',

,'\r','O'};

'\r','Q'};

,'\r'.'°'};

'T','\r','°

','A','\r',

','!','\r',

'!','\r',-a

,'O','\r','

, 'R', '\r', '

2','R-,(\r'

'\r',, '\r''!',

''\r',, '\r'•T',

"

/*Inicialitza vàlvula injecció*/

/* Posa bomba en marxa*/

/* Para bomba*/

'},

/* Reset colorimetre*/

'°'}' /* Calibraciç color¡metre*/

'D|}}; /* Lectura colorïmetre*/

/* Encen vmlvula inferior*/

/* Apaga v._lvula

inferior*/

/* Carrega del loop*/

/* Injeccií de mostra*/

/* Encén vàlvula inferior*/

/* Apaga v_.lvula

inferior*/

/* Posa

bomba en marxa*/

/* Para bomba*/

/*

Encen

vàlvula

/*

Apaga

v—lvula

/*

Encén

v...lvula

/* Apaga v._lvula

inferior*/

; /*

Lectura de

mV*/

11 } ;

/*

Reset

del

/* Tecla up */

APÉNDICES A

-109

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVKO

R PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

NOMBRES.H - DEFINICIÓN DE ESTRUCTURAS COMUNES PARA EL PROGRAMA

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 15/4/97

typedef struc

ime

ntntf loafloa

f loafloa

floa

floa

floa

fiofio

fiofiofiointintintintintintintint

intintintintfloat

intintfloat

float

intintintintintint

int}datos_fia;

t_actual;

t_cicle;

t_inici ;

t_graf ica;

t_lectura;

t_reloj ;

__

t^estab;

fi;

f i_programa;

a;b;rl;

C;d;r2;

e;f;r3;

ordenada ;

pendent ;

linea_base;

t_estabilit;

inici_lectura_base;

f i_lectura_base;

ínj_entre_calibrats;

inici_lectura_maxl;

inici__lectura_max2;

t_carrega_loop ;

t_injeccio;

t_canvi_punt_mostreig;

t_lectura_amoni

,-delta_t [4]

;delta_picl [3}

,-delta_pic2[3]

,-inici_lectura_base_calibratno

fi_lectura base_calibratno3 ;

diferencia_entre_pics;

posada_en__ma rxa ;

control;

ammvSppm;

inicio_graf ;

f in_graf ;

punt_mostreig ;

o_injeccio;

o_mos t ra_CFA ;

a_manual ;

typedef struct {

controladors*/

float

time_t

intfloat

time_t

intfloat

time_t

intfloat

amoni;

t_amoni;

punt_amoni;

nitrats;

t_nitrats;

punt_n i t rat s ;

nitrits;

t_nitrits;

punt_nitrita;

ab

sor;

/•Estructura

per

paràmetres

referents

als

/*Valor mesurat de la variable*/

'

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

A-110

AP

ÉN

DIC

ES

Page 117: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

9999999999999999999999999999*

APÉN

DICE

S. PR

OGRA

MA D

E M

onrro

RiZA

aóN

Y CON

TROL

oa

SISTE

MA A

NALÍT

ICO

t itn

e t

t ab

sor ;

flo

at

mv;

tim

e_t

t_m

v;}v

alo

rea_

_fi

a;

typ

edef

st

ruct

{fl

oa

t ab

sor;

flo

at

mv

;ti

me

t t_

ab

sor;

tim

e_t

t_m

v;}

mat

riz

grá

fica;

APÉN

DICE

S A

- 1

1 1

i QÍ999999999 9

99

99

99

99

99

99

9 9

99

99

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA S

UPER

VISO

R PA

RA LA

GEST

IÓN

Y CON

TROL

DE E

DAR

TEC

LAS.

H

- D

EFIN

ICIÓ

N

DE

CÓD

IGO

S D

E TE

CLA

DO

PRO

GRA

MA

DO

R:

Juan

An

ton

io

Bae

za

Lab

atU

LTIM

A

RE

VIS

IÓN

: 14/1

1/9

6

«d

efin

e E

SC

O

xOll

def

ine

CTRL

C

OX

2E03

«d

efin

e CT

RLQ

0x

1011

«d

efin

e C

TRLB

S O

XO

E7F

«d

efin

e CT

RLRE

T O

xlC

OA

«d

efin

e A

LTQ

0x

1000

«d

efin

e A

LTP

0x19

00«

def

ine

ALT

S O

xlFO

def

ine

ALT

D

0x20

00«

def

ine

ALT

F 0x

2100

«d

efin

e A

LTO

0x

2200

«d

efin

e A

LTH

0x

2300

«d

efin

e A

LTC

O

X2E

OO

«d

efin

e A

LTN

0x

3100

«d

efin

e AL

TM

0x32

00

«d

efin

e RE

TURN

O

xlC

OD

«d

efin

e IN

TRO

O

xEO

OD

«d

efin

e BA

CKSP

O

xOEO

def

ine

TA

B

OxO

F09

«d

efin

e BA

RRA

0x

3920

«d

efin

e AM

UNT

OX

48EO

«d

efin

e A

BA

IX

OxSO

EO«

def

ine

DRE

TA

OX4D

EO«

def

ine

ESQ

UER

RA

ox4b

EO

«d

efin

e IN

SER

T O

X52

ÈO«

def

ine

SUPR

O

X53

EO«

def

ine

INIC

IO

OX

47EO

«d

efin

e FI

N

OX

4FEO

«d

efin

e RE

PAG

O

xSlE

def

ine

AV

PAG

OX

49EO

«d

efin

e F

I O

X3B

OO

«d

efin

e F2

OX

3COO

«d

efin

e F3

O

x3D

OO

«d

efin

e F4

O

X3E

OO

«d

efin

e F

5 O

x3FO

def

ine

F6

0x40

00«

def

ine

F7

0x41

00«

def

ine

F8

0x42

00«

def

ine

F9

0x43

00«

def

ine

FIO

0x

4400

«d

efin

e F

ll

0x85

00«

def

ine

F12

0x

8600

«d

efin

e A

LTF1

0x

6800

«d

efin

e A

LTF2

0x

6900

«d

efin

e A

LTF3

OX

6AOO

«d

efin

e A

LTF4

Ox

fiBOO

«d

efin

e A

LTF5

O

xSCO

def

ine

ALT

F6

0x60

00«

def

ine

ALT

F7

OX

6EO

def

ine

ALT

F8

OX

6FO

def

ine

ALT

F9

0x70

00«

def

ine

ALT

F10

0x71

00

«d

efin

e o

Oxl

86F

«d

efin

e O

O

X18

4F«

def

ine

p 0x

1970

«d

efin

e P

0x19

50«

def

ine

m

OX

326D

«d

efin

e M

O

x324

def

ine

t 0x

1474

«d

efin

e T

0x

1454

«d

efin

e e

0x12

65«

def

ine

E

0X12

45

A -

112

AP

ÉNDI

CES

Page 118: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZACIÓN Y CONTROL DEL SISTEMA ANALÍTICO

«define a

«define A

ffdefine r

«define R

íídefine h

«define H

ffdefine d

«define D

*/

ffdefine NUM1

«define NUM2

«define NUM3

«define NUM1E

«define NUM2E

«define NUM3E

OxlESl

OxlE41

0x1372

0x1352

0x2368

0x2348

0x2064

0x2044

0x0231

0x0332

0x0433

OX4FOO

0x5000

0x5100

APÉNDICES A

-113

DESARROLLO

E IMPLEM

ENTACIÓN

DE UN SISTEM

A SUPERVISO

R PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

CALCULO.C - FUNCIONES PARA REALIZAR CÁLCULOS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 9/11/98

Sinclude <stdio.h>

/•ífdefine TEST*/

ínt regreaion_lineal( float *x, float *y, int n,

float "a, float *b, float *r);

/* Calcula la regresiCn lineal con los datos de x e y.

Devuelve ordenada (a)

, pendiente (b)

y coeficiente correlación (r)

*/

int regreaion_lineal ( float *x, float *y, int n,

float *a, float *b, float *r)

íif

(n<

l) re

turn

-1

; /*

**

*te

mp

ora

l**

**

//*flo

at

3umx=

0. OF

,sum

y 3 0 . O F

,sum

xysO . O

F,

sumx2=

0 . OF

,su

my

2=

0 . OF

;in

t i;

if (n

<2

) re

turn

-1

;

for

(i=0

; i<n,- i+

+)

{sum

x=

3u

mx

+x

li) ;su

tny

nsu

my

+y [ij ;

sum

xy

=su

mx

y+

x[i] *y

lij ;su

tnx

2=

sum

x2

+x [i] *

x [i] ;

sum

y2

=su

my

2+

y Ei] *y

[i] ;i

*b= in

*su

mx

y-su

mx

*su

my

} / (n*

sum

x2

-sum

x*

sum

x) ;

*a= (su

my

- (*b

) *sumx) /n

;*

r= (n

*su

mx

y-su

nix

*su

iny

} * (n

*su

mx

y-su

tnx

*su

my } /

( (n*

sum

x2

-sum

x*

sum

x) « (n

*su

my

2-su

my

*su

ray) ) ;

*/

/**** temporal****/

/*Solo utiliza el punto de mayor concentración M!!!!!!!*/

if (x[0]==O.OF) return -2;

*b=y[0]/x[0] ;

*a=0. OF;

*r=1.0F;

«ifdef TEST

void main(void)

{float «IÍ3X

[51= (1.

OF, 2. OF, 3. OF, 4. OF, 5. OF);

float misy[51-{2.OF,4.OF,6.OF,8.OF,10.OF);

float a.b.r;

,regresion_lineal( misx, misy, 5, &a, &b, &r);

print£("\ta: %f\tb: %f\tr: %£\n",a,b,r);

A-114

APÉNDICES

Page 119: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONT

ROL

DEL

SIST

EMA

ANAL

ÍTIC

O

ften

dif

/***

**.

APÉN

DICE

S A

-11

5

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONTR

OL D

E ED

AR

CALIBRA.C - FUNCIONES.PARA EL CALIBRADO DEL SISTEMA

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 4/1/99

ttinclude <titne .h>

ff include < ay s \types .h>

n include <syg\tiroeb.h>

Sinclude <maCh.h>

Sinclude <string.h>

it include <stdio.h>

tfinclude "nombres.h"

/.*****».***««+*****»**** Definiciones *********************»**********/

/*»*»**+.**************» Subrutinaa del fichero *************»•***•«*-«/

int calibra_picl_no2(void);

int calibra_pic2_no2(void);

int calibra_no3(void);

int calibra_amoni(void);

void recta__amoni (void) ;

y********************* subrutinas externas necesarias ****»*************/

extern int comunica(int *fraae, int *salida);

/* Comunicació EASI-PC*/

extern int comunica2(int *frase, int *salida);

extern int regresion_lineal( float *x, float *y, int n,

float *a, float *b, float *r) ;

extern void reinicializa_puerto(void);

extern void reinicializa_puertob(void);

extern void delayt clock_t wait );

extern int lectura_absor(void);

extern int lectura_aramv(void);

extern void accione3_comunes(void);

extern int graf_texto (char *nombre, short xl, short yl,

short x2, short y2, int font, int fondo);

extern void concentracio__amoni (void) ;

extern void concentracio_nitrits(void);

extern void concentracio_nitrats(void);

extern void guarda_medida( char *mensaje, char *fichero);

extern void graf_valores_display(void);

/**********»*•****** Variables comunes del programa ******»********»****/

extern int

va

lv_

inj[

20

] ,

pu

mp

_o

n[2

0}

, p

ura

p_

off

[20

J,

co

lori

m[3

] [2

0] ,

va

lv_

inf_

on

[20

] ,

va

lv_

inf_

off

[20

] ,

load

[15

],

inje

ctf

lS],

valv

_su

p_

on

[20

],

va

lv_

au

p_

off

[20

J,

amp

um

p_

on

[20

],

arap

um

p_

off

[20

],am

val

v_

inf_

on

(2

0]

, am

val

v_

inf_

of

f [2

0] ,

ar

riv

alv

_su

p_

on [

20

] ,a

mv

alv

_su

p_

off

[20

J,

am

po

ten

cio

me

tre

[20

],

am

po

ten

cio

metr

el[

20

],am

co

rreccio

[20

];

ex

tern

d

ato

s fi

adat;

float hpic;

extern float hpicl;

extern float hpic2;

CalibraeiÇ pic 3 ppm de nitrit

int calibra_picl_no2(void)

int i;

. float mesur_abs[20];

float suma;

int estado=0;

float max=O.OF;

int contador=0;

A-1

16

AP

ÉN

DIC

ES

Page 120: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZACIÓN Y CONTROL DEL SISTEMA ANALÍTICO

time_t t_maximsO;

struct timeb t;

/'Estructura de temps amb mil . l

isegons*/

float h_pic(4]<={O.OF,O.OF,O.OF,O.OF};

float C_picl4] ={3 .OF, 2.0F, 1. OF, 0.5F} ;

int retorno [40]

;int

paeudo_pico=0 ;

char mensaje [200]

;

dat .mostra_manual=l; /*No envia datos a SUN*/

graf_texto( "Calibrad* electrónica PIC 1 DE NITRITS.

- . "

, 1, 1, 594, 37, l, l)

;

for

do{

mesur_ab3ti] =O.OF;

dat. t_actual=time (NULL)

,-ftime(&t);

dat.t_milli=t.time*10ÛO*t.millitm;

acciones_comunes();

/*ActualitzaciC dels temps */

/* Valor del patri de 50 ppm amoni

( calculat sols a 1'inici del programa )*/

/*Llegit 1 minut abans de tornar a injectar */

if((difftime(dat.t_actual.dat-t_inici)>=(dat.t_injeccio-60))

&& (difftime(dat.t_actual,dat.t_inici)<=dat. t_injeccio)

&& (dat.posada_en_marxa==0))

ícomunica2(amvalv_sup_on,retorno);

/* canviem a patri de S ppm amoni*/

comuníca2(amvalv_inf_on,retorno);

if (lectura_ammv()==0)

dat.ammv50ppm= valor.mv;

valor.punt_amoni=0;

concentracio_amoni();

dat.posada_en_marxa=l;

ï

/*•*********.* calibrat ********•*****•/

switch(estado){

case 0:

/* Calcul linia base */

if ((difftime(dat.t_actual.dat.t_inici)>=dat.inici_lectura_base)

&.Í (dif

f time (dat.

t_actual, dat. t_inici) <=dat. f i_lectura_base) )

if (difftime(dat.t_milli,dat.t_milli_old)>=200)

dat.t_milli_old=t.time*1000*t.millitm;

if (lectura_absor()==0)

mesur_abs[19]=valor.absor;

suma=O.OF;

for (i=0;

i<=19; i**) suma= suma * mesur_abs[i];

dat.linea_base=suma/20.OF;

í

if (difftime(dat.t_actual,dat.t_inici)>dat.fi_lectura_base)

sprintf(mensaje,"Linia base calculada: %5.3f ",dat.linea_base);

graf_texto(mensaje,l,1,594,37,1,1);

estado**;

break;

case 1:

/* Carrega del loop */

if (difftime(dat.t_actual,dat.t_inici)>=dat.t_carrega_loop)

reinicializa_puerto();

comunica(load,retorno);

reinicializa_puertob();

estado**;

break;

case 2:

APÉNDICES

A-1

17

DESARROLLO E IMPLEMENTAOÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

if (difftime(dat.t_actual,dat.t_inici)>=dat.inici_lectura_maxl) estado**;

break;

case 3:

/* Inici de la lectura del primer m..jcim

*/

if (difftimetdat.t milli,dat.t_milli_old)>=200)

idat.t_milli_old=t.time*1000+t.millitm;

if(lectura_absor()!=0) break; /* Si no ha llegit b,, surt del switch*/

if (valor.absor>max)

(max=valor. absor

-,contador=0;

t maxim^dat.t actual ;

)else (contador**);

if(contador>20)

fh_pic[0]=max-dat.linea_base;

sprintf (mensaje, "Pic 1 de nitrits 3 ppm detectat, hpic = %6.4f ", h

_pic [0]

) ,-

graf_texto(mensaje,1,1,594,37,l,l);

estado**;

}

break;

case 4:

/* Lectura de los pseudo picos */

/**********.* Desactivamos el calibrado electrónico

if (difftime(dat.t_actual,t_maxim+dat.delta_picl[pseudo_pico])>=0)

if (lectura__absor() ==o)

{h_pic [pseudo_pico+l]=valor.absor-dat.linea_base; '

pseudo_pico*+;

if (pseudo_pico>=3) estado**;

iestado*+;

break;

case 5 :

regresion_lineal( h_pic, c_pic, 4, &dat.a, &dat.b, &dat.rl);

sprintf(mensaje,"%6.4f\t%6.4f\t%6.4f\t",dat.a,dat.b.dat.rl);

guarda_medida( mensaje, "c:\\fiacfa\\datos\\calilno2.his");

hpic=h_pic10];

hpicl=hpic;

concentracio_nitrits();

sprintf(mensaje, "%6.4f \t%6.4f \t%6.4f \t%6.4f \t",h_pic [0] ,h_pic[1] ,h_pic[2],h_pic [31)

;guarda_medida( mensaje, "c:\\fiacfa\\datos\\hno21.his");

estado**;

break;

case 6:

/* Injeccií nova mostra */

if (difftime(dat.t_actual,dat.t_inici)>=dat.t_injeccio)

ídat.t_inici=time(NULL);

reinicializa_puerto();

comunica(inject,retorno);

reinicializa_j>uertob() ;

estado++;

}break;

}/*Fin switch*/

} while(estado!=7 && dat.fi = = 0),-

dat,mostra_raanual=0; /*Envia datos a SUN*/

dat.fi=0;

dat.posada_en_marxa=0;

return 0;

i/....................Calibrad? pic 7 ppm de nitrit

A-118

APÉNDICES

Page 121: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONT

ROL

DEL

SIST

EMA

ANA

LÍTI

CO

int calibra_pic2_no2(void)

int estadosO;

float max=O.OF;

int contador=0;

time_t t_maxim=0;

struct timeb t;

/'Estructura de temps en mil.lisegona*/

float h_pic[4]={O.OF,O.OF,O.OF,O.OF};

float c_pic[4]a{7.0F,5.0F,3.0F,1.0F};

int retorno[40];

int pseudo_pico=0;

char mensaje[200];

dat.mostra_manual=l; /*No envia datos a SUN*/

graf_texto("Calibracií electrónica PIC 2 DE NITRITS...», 1,1,594,37,1,1);

do { /*

dat.t_actual=time(NULL);

ftime(&t);

dat.t_milli=t.time*1000+t.millitm;

acciones_comunes();

********* Calibrat ***************/

/*ActualitzaciC deis temps */

switch(estado){

case 0:

/* Calcul linia base */

/* Asumim que es la mateixa del calibrat anterior */

estado**;

break;

case 1:

/* Carrega del loop */

if (difftime(dat.t_actual.dat.t_inici)>=dat.t_carrega_loop)

reinicializa_puerto()

,-comunica(load,retorno);

reinicializa_puertob();

if(dat.posada_en_marxa==l)

comunica(valv_sup_on,retorno);

comunica(valv_inf_off,retorno);

îif(dat.posada_en_marxa==0) /*per tenir temps de carregar patri NO3- sols a l'inici del

programa*/

comunica(valv_sup_off,retorno);

comunica(valv_inf_off,retorno);

iestado**;

break

,-case 2 :

if

(dif

f tim

e (d

at .

t_actu

al,

dat.

t_

inic

i) >

=d

at.

inic

i_le

ctu

ra_

max

2)

est

ad

o*

*,-

bre

ak

;case

3

: /*

In

ici

de la

le

ctu

ra

del

pri

mer

m.j

tim

«

/if

(d

ifft

ime

(da

t.t_

mil

li,d

at.

t_m

illi

_o

ld)>

=.2

00

)

da

t.t_

mil

li_

old

=t.

tim

e*

10

00

+t.

mil

litm

;if(lectura_absor()!=0) break; /* Si no ha llegit b,, surt del switch*/

if (valor.absor>max)

max=valor.absor;

contador=0;

t_maxim=dat.t_actual;

ielse (contador**);

if(contador>20)

hjpic tO]=max-dat.linea_base;

sprintf(mensaje,"Pic 2 de nitrits 7 ppm detectat, hpic = %6.4f n,h_pic[0]);

graf_texto(mensaje,1,1,594,37,1,1);

estado**;

}break;

APÉN

DICE

S A

-11

9

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUP

ERVI

SOR

PAR

A LA

GES

TIÓ

N Y

CO

NTRO

L DE

ED

AR

case 4:

/*****»*****• Desactivamos el calibrado electrónico

if (difftime(dat.t_actual,t_maxim+dat.delta_pic2[pseudo_pico])>=0)

( if (lectura_absor()==0)

( h_

pic

[pseu

do

_p

ico

+l]

=v

alo

r.ab

so

r-d

at.

lin

ea_

base;

pse

ud

o_

pic

o-n

-,-

if

(pse

ud

o_

pic

o>

=3

) est

ad

o+

+;

i..**.******.**...*..*.*»..**********.****.******/

estado**;

break;

case 5 :

regresion_lineal( h_pic, c_pic, 4, &dat.c, &dat.d, &dat.r2);

sprintf (mensaje, "%6.4f \t%6.4f \t%6.4f \t" ,dat .c, dat .d,dat. r2)

,-guarda_medida ( mensaje, "c: \\fiacfa\\datos\\cali2no2 .his" )

,-

sprintf(mensaje,"%6.4f\c%6.4f\t%6.4f\t%6.4 f\t",h_pic[0] ,h_pic[l],h_pic[2],h_pic[3J);

guarda_medida( mensaje, "c:\\fiacfa\\datos\\hno22.his");

estado**;

break

,-case 6:

/* Injeccií nova mostra */

if (dif f time (dat. t_actual, dat. t__inici) >=dat. t_injeccio)

dat.t_inici °time(NULL);

reinicializa_puerto{);

comunica(inject,retorno);

reinicializa_puertob();

estado**;

ibreak;

}/*Fin switch*/

} while(estado!=7 &&

dat.fi==0);

dat-mostra_manual=0; /*Envia datos a SUN*/

dat.fi=0;

return 0;

i

Calibracií electrònica de nitrats

int calibra_no3(void)

{float mesur_abs[20];

float suma;

int i;

int estado=0;

float max=O.OF;

int contador=0;

time_t t__maxim=0 ;

struct timeb t;

/*Estructura de temps en mil.lisegons*/

floa

t h_

pic[

5]O

{O.O

F,O

.OF,

O.O

F,O

.OF,

O.O

F};

float c_pic[5]={50.OF, 30.OF,15.OF,5.OF,1.OF};

float h_pic_old=0;

/* Variable per comprobar la repetitivitat del pic */

int retorno[40];

int

pseudo_pico=0

,-char mensaje[200];

dat.mostra_manual=l; /'No envia datos a SUN*/

graf_texto("Calibraci<í electrònica de NITRATS. ..", 1,1, 594, 37,1,1) ;

ftime(&t);

dat.-t_milli = t.time*1000+t.millitm;

dat.t_milli_old=dat.t_milli;

for (i=0; i<20; i + + ) mesur_abs[i]=0.OF;

do í

dat.t_actual=time(NULL);

ftime(&t);

/*Actualitzaci4 dels temps */

A-120

APÉNDICES

Page 122: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MoNiroRizAaóN Y CONTROL DEL SISTEMA ANALÍTICO

l*/

dat.t_milli=t.time*1000+t.millitm;

accioneB_comunes () ;

/* Valor del patrí de 5 ppm amoni */

/•Llegim quan calibrem nitrats sols a l'arrencar */

if ( (difftime(dat.t_actual,dat.t_inici) >=60)

4& (di

f f time (dat. t_actual.dat. t_inici) <=BO)

&& (dat .posada_en_marxa==0) )

(if (lectura_ammv{) ==0)

(comunica2 (amvalv_sup_of f, retorno) ;

/* canviem a most

comunica2 (amvalv_inf_of f, retorno) ;

dat .ammv5ppm= valor. mv;

valor . punt_amoni = O ;

dat . posada_en_marxa=l ;

/•Evita lectura amoni en calibrats de nitrats excepte a l'inici*/

concentracio_amoni {)

;recta_amoni () ;

sprint f (mensaje, "%6 .4f\t%6 .4f\ t" , dat .ordenada, da t .pendent) ,-

guarda_medida ( mensaje, "c ; \\fiacfa\\datos\\calibnh4 .his")

,-

/* Carrega del

loop */

if ( (di f f time (dat . t_actual , dat . t_

inici) >=dat . t_carrega_loop)

&.& (dat .control=

=0) )

treinicializa_puerto{) ;

comunica (load, retorno) ;

reinicializa_puertob() ;

dat .control=l;

}if (dif ftimetdat . t_actual, dat . t_inici) >=dat . t injecció)

{dat . t_inici=time (NULL) ;

dat . t_cicle=time (NULL) ;

reinicializa_puerto() ;

comunica (inject, retorno) ;

reinicializa_puertob() ;

dat . cont rol = O ;

if (estado==6) estado-»--»-;

/** El calibrat ha finalitzat i compleix la repetitivitat */

else if (estado == -1) eatado=0; /*Vuelve a calibrar*/

}/************* calibrat **********•****/

switch (estado) {

case 0:

/* Calcul linia base */

if ( (dif f time (dat . t_actual , dat . t_inici) >=dat . inici_lectura_base_calibratno3 )

&& (difftimeídat.t actual, dat. t inici) <=dat . fi

lectura base calibratno3) )

{

-

-

-

-

if (difftime(dat.t_milli,dat.t_milli_old)>=200)

ídat.t_milli_old=t.time*1000+t.millitm;

if (lectura_absor()==0)

{for

(i=0

; i<=

18

; i+

+)

mesu

r_ab

s [i] *m

esur_

ab

s [i+1

] ;m

esur_abs[19] -valor . abso

r;sum

a=O.O

F;for

(is-0; i<=19;

i + + ) suma=> sum

a + m

esur_abs li] ;dat.linea_base=

suma/20.0F

}if (difftime (dat.t actual.dat . t_inici) >dat . f i_lectura base calibratnoS)

{sprintf (mensaje, "Línia base calculada: %5.3f " , dat . linea_base) ;

graf_texto(mensaje, 1,1, 594, 37, 1,1) ;

estado*-*-;

APÉNDICES A

-121

DESARROLLO E IMPLEMENTAQON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

if (difftime(dat.t_actual,dat.t_iniciï >=dat.inici_lectura_max2)

íestado**,-

graf_texto("Iniciem deteccií Pic de nitrats",1,1,594,37,1,1);

break;. .

case 2:

/* Inici de la lectura del segon m_xim */

if (difftime(dat.t_milli,dat.t_milli_old)>=200)

dat. t_milli_old=t. time* 1000-f

t .millitm;

if(lectura_absor<)!=0) break; /* Si no ha llegit b,, surt del switch*/

if (valor.absor>max)

imax=valor.absor;

contador=0;

t_maxim=dat.t_actual;

¡else (contador**);

if(contador>20)

h_j?ic [0] =max-dat. linea_base;

max=0.OF;

. sprintf(mensaje,"Pic de nitrats 50 ppm detectat, hpic = %6.4f n,h_pic[0]);

graf_texto(mensaje,1,1,594,37,1,1);

delaytlOOO)

,-contador=0;

estado++;

}break;

case 3 :

if ( (float) fabs (h_pic [0-]

-h_pic_old) <=dat-diferencia_entre_pics)

comunica(valv_sup_on,retorno);

/* Per entrar mostra real */

comunica(valv_inf_off,retorno);

graf_texto("Pic de nitrats repetitiu",1,1,594,37,1,1)

¡;estado-»-*

;

h_pic_old=h_pic[0];

graf_texto("Pic de nitrats no repetitiu",1,1,594,37,1,1);

estado =-1; /* El pic no ,s repetitiu,

s'ha de repetir el proc.s en una injeccií posterior */

isprintf(mensaje," %6-4f ",h_pic[0]);

guarda_medida( mensaje, "c:\\fiacfa\\datos\\hpicno3.his");

hpic=h_pic (0]

,-valor.nitrats= dat.e+dat.f*((dat-d*hpic-0.OF+dat.c)/dat.d);

valor.t_nitrats=time(NULL);

valor.punt_nitrats=0;

graf_valores_displayO ;

pseudo_pico=0;

/* ReinicialitzaciC de variables */

break;

case 4 :

/*********»** Desactivamos el calibrado electrónico

if (difftime(dat.t_actual,t_maxim+dat.delta_t[pseudo_pico])>=0)

if (lectura_absor O = = 0)

{sprintf(mensaje,"Detectando pseudo pico: %i ",pseudo_pico);

graf_texto(mensaje,1,1,594,37,1,1) ;

h_pic Ip3eudo_pico+lí =valor.absor-dat.linea_base;

pseudo_pico++;

if (pseudo_pico> = 4) estado-n-;

*•.******.****.*..****•******.***.,*********.***/

estado**;

break

,-case 5 :

regresion_lineal( h_pic, c_pic, 4, &dat.e, &dat.f, &dat.r3);

sprintf(mensaje,"%6.4f \t%6.4f \t%6.4f \t",dat.e,dat.f,dat-r3);

guarda_medida( mensaje, "c:\\fiacfa\\datos\\calibno3.his");

A-122

APÉNDICES

Page 123: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONT

ROL

DEL

SIST

EMA

ANAL

ÍTIC

O

graf_texto("Nou calibrat de nitrats calculat",1,1,594,37,1,1);

sprintf(mensaje,"%6.4f\t%6.4f\t%6.4f\t%6.4f\t%6.4f\t",h_pic[0] ,h_pic[l] ,h_pic[2] ,h_pic[3] ,h_pi

C [4]);.

guarda_medida( mensaje, "c:\\fiacfa\\dato3\\hno3.his");

estado*-*-;

break;

}/*Fin switch*/

}

while (estado! =7 && dat. f i==

«0) ;

dat.mostra_manual=0; /*Envia datos a SUN*/

•dat.fi=0;

return 0;

CalibraciC d'araoni

int

calibra_amoni(void) •

í int estado=0;

int

reto

rno

[4

0] ;

ch

ar

me

nsa

je[2

00

];

gra

f_te

xto

("C

ali

bra

ciC

d

' A

MO

NI.

.."

,1,1

,59

4,3

7,1

,1)

,•d

at.

mo

stra

_m

an

ua

l=l;

/*

No

en

vía

d

ato

s a

SU

N*/

do {

dat.t_actual=time(NULL);

acciones comunes ();

/*Actualitzacií dels temps */

switch(estado){

case 0: /** Canvi per fer passar patri S ppm **/

if(difftime(dat.t_actual,dat.t_cicle)>=660)

í comunica2(amvalv_sup_on,retorno);

comunica2 (amvalv_inf_on, retorno)

,-estado*t;

ibreak;

case 1: /** Lectura CFA per pâtre 50 ppm als 11 minuts **/

iff

difftimetdat.t_actual.dat.t_cicle)>a665 )

{ if (lectura_ammv{)==0)

f dat.aramv50ppm= valor.mv;

valor.punt_amoni=0;

concentracio__amoni () ;

estado++;

i}

break;

case 2: /** Canvi per fer passar mostra al sortir de la subrutina **/

if( difftimetdat.t_actual.dat.t_cicle)>=16BO )

i comunica2(amvalv_sup_off,retorno);

comunica2 (amvalv_inf_of f, retorno)

,-estado*+• ;

)break;

case 3: /** Lectura CFA per pâtre 5 ppm aïs 30 minuts **/

if((difftime(dat.t_actual.dat.t_cicle)>=1790))

( if (lectura_ammv()==0)

{ dat.ammv5ppm= valor.mv;

valor.punt_amoni=0;

concentracio_amoni();

recta_amoni();

sprintf(mensaje,"%6.4f \t%6.4f \t",dat.ordenada,dat.pendent);

APÉN

DICE

S A

-12

3

DESA

RROL

LO E

IMPL

EMEN

TAQ

ON

DE

UN S

ISTE

MA

SUPE

RVIS

OR

PAR

A LA

GES

TIÓ

N Y

CO

NTRO

L DE

ED

AR

guarda_medida ( mensaje, "c: \\fiacfa\\datos\\calibnh4 .his") ;

estado++;

ibreak;

case 4 :

if ( dif ftimeidat. t_actual.dat .t_cicle) >=1800 )

com

un

ica2

(am

val

v_

sup

_o

f f

, reto

rno

) ;

com

un

ica2

(am

valv

_in

f_o

f f

, reto

rno

) ;

dat.

t_

cic

le=

tim

e (

NU

LL

) ;

dat.

t_

inic

i=ti

me

(H

UL

L) ;

rein

icia

liza_

pu

ert

o()

;co

mu

nic

a (i

nje

ct,

reto

rno

)re

inic

iali

za_

pu

ert

ob

() ;

est

ad

o-f

+;

ibreak;

}/*Fin switch*/

} while (estado! =5 && dat.fi==0);

dat .mostra_manual=0; /*Envia datos a SUN*/

dat.f i=0;

return

0,-

i

/*

can

vie

m

a m

ost

ra re

al*

/

/*

Inje

cció

p

er

FIA

*/

void recta_amoni(void)

{ flo

at

am

on

i[2

],h

_am

on

i[2

] ;

am

on

i[0

]=(f

loa

t)lo

glO

(50

.OF

);a

mo

ni[

l]=

(flo

at)

log

lO(5

.0F

) ,-

h_

amo

ni[

0]=

dat

.am

mv

SO

pp

m;

h_

amo

ni[

1]=

dat

.am

mv

Sp

pm

;

/"

Yl=

a*

b*

xi,

Y

2=

a+b

*X

2.

b=

(Y1

-Y2

)/(X

1-X

2).

a

=Y

l-b

*x

i.

*/

dat.

pen

den

t =

(h

_a

mo

ni[

0]-

h_

am

on

i[I]

)/(a

mo

ni[

Oj-

am

on

id

at.

ord

en

ad

a

= h

_a

mo

ni[

0]-

da

t-p

en

de

nt*

am

on

i[O

];U

I);

A-1

24

APÉN

DICE

S

Page 124: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MoN

rrofuzAdóN

Y CONTROL DEL SISTEMA A

NA

LÍnco

CLIENTE.C - FUNCIONES PARA LA COMUNICACIÓN CON LA SUN

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 28/8/97

** Librerías a incluir

«include <stdio.h>

«include

«include

Sinclude

Sinclude

«include

Sinclude

Sinclude

Sinclude

string.h>

memory.h>

process-h>

stdlib.h>

io.h>

conio.h>

time.h>

nombres.h"

Sinclude "c:\sockets\devkit\include\pctcp\typea.h"

«include "c:

\sockets\devkit\include\sys\types.h"

Sinclude "c:\sockets\devkit\include\sys\ioctl.h11

ffinclude "c i \

sockets\devkit\include\pctcp\errno.h"

{(include "c : \sockets\devkit\include\sys\socket .h"

(tinclude "c:\sockets\devkit\include\netinet\in.h11

Sinclude "c:\sockets\devkit\include\netdb.h"

/*ftinclude "c:\sockets\devkit\include\arpa\inet.h"*/

ttinclude "c : \sockets\devkit\include\pctcp\pctcp.h"

Sinclude "c :\socket3\devkit\include\pctcp\ipconfig.h"

if include "c:\sockets\devkit\include\pctcp\socketa.h"

«include "c :

\sockets\devkit\include\pctcp\options.h"

ff include "c :

\aockets\devkit\include\fcntl .h"

Sinclude <sys\time.h>

/*Sdefine DEPURA*/

/*ftdefine TEST*/

/*Sdefine svrName "eq3.uab.es" */

«define svrName "158.109.13.2"

«define Port (ushort) 32323

«define TAMANY 512

Sdefine TAMANY_M

100

typedef unsigned short ushort;

typedef unsigned long ulong;

/* Díreccitn SUN */

/* Direcciín num.rica SUN */

/* Numero de puerto del socket */

/* TamaDo del buffer */

/* Tamaño del mensaje cliente */

/* Definición de tipo de variables */

int sockets_pasa_datos(void);

void medida_a_SUN(char parámetro, char punto, float medida);

int mensaje_a_SUN(char *mensaje);

int connectToServer(char *serverName, ushort port);

int disconnectToserver(int toServerSocket);

void error_send(int errno);

void error_socket(int errno);

void error_connect(int errno);

fiifdef TEST

void main(void);

«define extern

«endif

extern ulong inet_addr(char *servidor); /**JB**/

extern int closefint elsocket);

/**JB**/

extern int variar_velocidad(double velocidad, int variador);

extern void guarda_mensaje( char *mensaje);

extern void imprimefchar *mensaje);

Variables comunes del programa

AP

ÉN

DIC

ES

A -1

25

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CONTROL DE ED

AR

char buffer[TAMANY];

extern datos_fia

dat;

extern valores fía

valor;

/* Variable a transmitir o recibir */

/* Funciín para establecer la comunicación y controlar el env¡o y la

recepción de datos */

/* Variables de control */

int sockets_pasa_datos(void)

íint toServerSocket = -1 ;

int i;

char carácter[!)={'A1};

/* Si la conexión anterior no ha sido correcta, vuelve */

if (dat.conexion_SUN == 0} return -2;

/* ConexiCn con

la SUN

*/

toServerSocket = connectToServer(svrName, Port);

/* Si la conexión no es correcta, devuelve -1 */

if ( toServerSocket «-D

{«ifdef DEPURA

printf ("Error en la conexiín\n°);

Sendifdat,conexion_SUN=0;

return -1;

ftifdef DEPURA

printf("CONEXIO A %s REALITZADA, %i\n",svrName,toServerSocket);

«endif

/* Mandamos una A, queremos establecer los valores de los analizadores */

send (toServerSocket, carácter, sizeof (carácter) , 0)

,-

/* Mandamos el buffer */

i = send(toServerSocket, buffer, sizeof(buffer), 0);

«ifdef DEPURA

if (i==-l) error_send(errno)

,-flendif

/* Recibimos respuesta */

recvítoServerSocket, carácter, sizeof(carácter), 0);

/* Lo env¡a de nuevo si no ha sido bien recibido */

if (carácter[O]l~'O') '

í«ifdef DEPURA

printf("Recibimos mal\n");

Sendifcarácter[0]='A';

send(toServerSocket, carácter, sizeof(carácter), O) ;

aendftoServerSocket, buffer, sizeof(buffer), .0);

recv (toServerSocket, carácter, sizeof (carácter) ,

0) ,-

if (carácter[0]!a-o1}

/* Si lo recibe mal de nuevo, desconecta */

{«ifdef DEPURA

printf("Recibimos mal de nuevo\nn);

Sendif

disconnectToServer (toServerSocket)

,-return -3;

/* Pedimos desconexión */

carácter[O]='F';

send(toServerSocket, carácter, sizeof(carácter), O);

disconnectToServer(toServerSocket);

retu

rn

0;

iA-1

26

AP

ÉN

DIC

ES

Page 125: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

Y C

ONTR

OL D

EL S

ISTE

MA

ANAL

ÍTIC

O

/* Introduce los datos de la estructura medidas en el buffer,

aQadiendo un cheksum y llama a otra funciCn que manda los datos */

void medida_a_SUN(char parámetro, char punto, float medida)

í struct sexta{

char punto;

/* O R-Anaerobio, 1 R-l, 2 R-2, 3 R-3, 4 Salida */

char parámetro;

/* 1 nitrato, 2 nitrito, 3 amonio */

char valor[10];

}dato_analisis;

int

i;unsigned long chequeo*OL;

memset(buffer, O, sizeof(buffer));

/* Borra las estructuras */

memset(&dato_analisis, O, sizeof(dato_analisis));

/* Introducimos las medidas en la estructura que pasamos a la SUN */

dato_analisis .parámetro = parámetro,-

dato_analisia.punto = punto;

sprintf(dato_analisis.valor,"%7.4f", medida);

/* Copiamos la estructura de datos al buffer */

memcpy(buffer, &dato_analisis, sizeof(dato_analisis));

/* Calculamos el cheksum del buffer */

for (i=.0;i<(TAMANY-12) ;i++) chequeo+=buf fer [i]

,-

/* Introducimos el cheksum como cadena de caracteres en la posición 500 */

sprintf(&buffer[500),"%lllu",chequeo);

/* Pasamos los datos a la SUN */

sockets_pasa_datos();

int mensaje a SUN (char *mensaje)

i int toServerSocket =

- 1 ;

int i;

unsigned long chequeo=OL;

char carácter [IJ ={ 'M'

J ;

time_t Itirae;

char mensaje_cliente [TAMANY_M] ;

/* Variables de control */

/*if (dat.conexion_SUN =•=

0) return -2;*/

memset (buffer. O, sizeof (buffer) ) ;

/* Borra las estructuras */

memset (mensaje_cliente, O, sizeof (mensaje_cliente) ) ;

time t&ltime) ;

sprint f (mensa j e_c li ente, "%s%s" , mensaje, ctime ( &ltime ) )

;

/* Copiamos el mensaje al buffer */

memcpy (buffer, mensaje_cliente, sizeof (mensaje_cliente) ) ;

/* Calculamos el cheksum del buffer */

for

(i=0;i<(TAMANY-12) ;i

+-fr) chequeo+=buf fer [i

J ;

/* Introducimos el cheksum como cadena de caracteres en la posiciCn 500 */

sprint f UbuffertSOO] , "%lllu" , chequeo) ;

/* Conexión con la SUN */

toServerSocket = connectToServer(svrName, Port);

/* Si la conexiCn no es-correcta, devuelve -1 */

if (toServerSocket==-l)

{ftifdef DEPURA

printf ("Error en la conexiCn\n");

ifendifdat.conexión SUN=0;

AP

ÉN

DIC

ES

A -

127

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR

PAR

A LA

GES

TIO

N Y

CON

TROL

DE

EDAR

retu

rn -1

;i

els

e

dat.

co

nex

ion

_S

UN

=l;

.

ftifdef

DEPURA

printf ("CONEXIO A %s REALITZADA, %i\n" , svrName, toServerSocket) ;

«endif

/* Mandamos una M, queremos mandar mensaje */

send (toServerSocket, carácter, sizeof (carácter) , O) ,•

/* Mandamos el buffer */

send(toServerSocket, buffer, sizeof(buffer), 0);

/* Recibimos respuesta */

recv(toServerSocket, carácter, sizeof(carácter), 0);

/* Lo env¡a de nuevo si no ha sido bien recibido */

if (caracterlO] !=*'O')

í carácter 10] = 'M1;

send(toServerSocket, carácter, sizeof(carácter), 0};

send(toServerSocket, buffer, sizeof(buffer), 0};

recv(toServerSocket, carácter, sizeof(carácter), 0);

if (carácter[0]l='0')

/* Si lo recibe mal de nuevo, desconecta */

i disconnectToServer (toServerSocket)

,-return -3;

}

/* Pedimos desconexión */

carácter[OJ = 'F';

send(toServerSocket, carácter, sizeof(carácter), 0);

disconnectToServer(toServerSocket);

/*** ......... * ...... ..**.*.**.**.******..****.********* ...... *„„.** ...... /

/*************.********* ......... * ..... ******* .......... .****.******.****/

/*

connectToServer es usada por el cliente para abrir una conexiín

*/

/* con el servidor

*//****.********************.*..*****.*****.*..*......,...*.***********..***/

int connectToServer (char *serverName; ushort port)

/* Variable direccitn del host remoto */

/* Puntero direcciCn del host remoto */

/* Descriptor del socket local */

/* DirecciCn del host */

/* Supone fallo */

struct sockaddr_in serverSockAddr ;

struct hostent *serverHostEnt;

int toServerSocket =

(-1) ;

ulong hostAddr;

int result =

(-1) ;

int error=0;

struct linger {'

int l_onof f ;

int l_linger;

}mi_linger;

/************,******* ........ .*.****..* .................................. /

/*

Borra y establece la estructura de la dírecciín del servidor

*/

memset (&serverSockAddr, O, sizeof {serverSockAddr ) )

;

hostAddr = inet_addr(serverNatne) ;

/* Devuelve la direcciCn */

if ( (long) hostAddr l= (longj(-l)l

/* Hay direcciCn */

ííf i f de f DEPURA

printf ("\nconnectToServer: se ha obtenido la direcciCn de %s i es *lx \n"

hostAddr) ;

ft endif memcpy ( & (serverSockAddr. sin_addr) , shostAddr, sizeof (hostAddr) ) ;

serverName,

else

/* No hay direcciCn */

Sifdef DEPURA

printf ("\nconnectToServer : no se ha obtenido directamente la direcciCn \n" ) ;

A-128

APÉNDICES

Page 126: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICES. PROOTAM

A DE M

ON

ITORIZA

CION

Y CONTROL DEL SISTEM

A A

NA

LÍTICO

(tend i í

/*

Se c

on

sulta

al

serv

ido

r d

e n

om

bres

para

d

ete

rmin

ar

la

dire

ccic

n

del

ho

st *

/

if (NU

LL

»

serv

erl·lo

stEn

t)í

ffifdef

DE

PUR

Af p

rint f (s

tderr,

"Imp

osib

le lo

caliz

ar

ho

st \"

%

s \"

\n°,

serverN

ame) ;

ffend

ifg

oto

eg

ress;

}/*

S

e c

opia

la

d

irecció

n de e

ntra

da del

host

a la

estru

ctu

ra del

socket

*/

mem

cpy (& (se

rverS

ock

Ad

dr. sin

_ad

dr) ,

serv

erl·lo

stEn

t->h

ad

dr, a

erv

erl·lo

stEn

t->h

len

gth

) ;

serv

erS

ock

Ad

dr.sin

_fa

mily

=

AF

_INE

T;

/*

Asig

naciín

d

e d

ireccio

nes

*/

serv

erS

ock

Ad

dr. s in

_p

ort

=

(ush

ort)h

ton

s (po

rt) ; /*

A

sign

aciC

n

del

pu

erto

*/

/*

Se c

rea el

sock

et

*/

erro

r =

0

;

toS

erv

erS

ock

et

= so

ck

et (

AF

_INE

T,

SOC

K STR

EAM

, 0

) ;if

(toS

erv

erS

ock

et

==

-1)

{S

ifdef

DEPU

RA

erro

r so

ck

et (e

rmo

) ;tte

nd

if

}ttifd

ef

DE

PUR

Ap

rint f ("E

l so

ck

et

vale

%

i \n

" , toS

erv

erS

ock

et) ;

prin

tf ("

Erro

r en

setso

ck

op

t, re

usa

\n") ;

mi_

ling

er. l_

on

of f=

l;m

i_lin

ger.l_

ling

er=

lO;

if (se

tsock

op

t (to

Serv

erS

ock

et,

SOL

_SOC

KE

T,

SO_L

ING

ER

, (c

har

*)

&m

i_lin

ger,

sizeo

f (mi_

ling

er) ) =

=-1

)p

rintf

("E

rror

en

setso

ck

op

t, lin

ge

r\n");

(erro

r =

1;

it i f de f

DE

PUR

A

Sen

difg

oto

eg

ress;

}re

su

lt =

toS

erv

erS

ock

et;

eg

ress :

retu

rn re

su

lt;}in

t d

isco

nn

ectT

oS

erv

er {

int

toS

erv

erS

ock

et)

íint

sh

ut.c

lo;

shu

tosh

utd

ow

n (to

Serv

erS

ock

et,

2) ;

ftifde

f D

EPU

RA

if (sh

ut=

=

-1)

prin

tf (" E

rror

en

sh

utd

ow

n

toS

erv

erS

ock

et . \n

") ;

els

e

prin

tf ("Sh

utd

ow

n to

Serv

erS

ock

et

ok

.\nn);

if (clo

=

= -1

) p

rintf { "E

rror

en c

lose to

Serv

erS

ocket. \n

") ;

tten

dif

APÉNDICES A

- 129

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

retu

rn

clo

;tvo

id

erro

r se

nd (in

t errn

o)

{switc

h (e

rrno

)fcase

E

AC

CE

S:p

rint f ( " ER

RO

R :

EA

CC

ES

\n" ) ;b

reak

;case

E

FAU

LT

:p

rint f ( " E

RR

OR

: E

FA

Ul/r\n

" ) ;b

reak

;case

E

NO

BU

FS:p

rintf ("E

RR

OR

: E

HO

BU

FSXn" ) ;

bre

ak

;case

EN

OTC

ON

N:

bre

ak

;case

E

NO

TSO

CK

:p

rintf ("E

RR

OR

: E

NO

RS

OC

K\n") ;

bre

ak ;

case

ESH

UTD

OW

N:

prin

tf ("ER

RO

R:

ESH

UT

IX)W

N\n") ; .

bre

ak

;case

EW

OU

LDB

LOC

K:

prin

tf ("ER

RO

R:

EWO

LXH

/DB

LOC

KX

n" ) ;b

reak

;

)

{switc

h (e

rrno

) {case

E

PRO

TO

NO

SUPPO

RT

:p

rintf ("F

AIL

: E

PRO

TO

NO

SUPPO

RT

\n " ) ;b

reak

;case

E

MFIL

E:

prin

tf ("FA

IL:

EM

FIL

E\n

fl);b

reak

;case

E

NF

ILE

:

bre

ak

;case

E

NO

BU

FS:p

rintf ("F

AIL

: E

NO

BU

FS

\n") ;

case

E

PRO

TO

TY

PE:

prin

tf ("FA

IL:

PR

OT

OT

YP

E\n") ;

bre

ak

;d

efa

ult:p

rintf ("F

AIL

: d

efa

ult\n

") ;

*}

íswitc

h(e

rrno

) {case

E

AD

DR

INU

SE:

prin

tf ("ER

RO

R:

EA

DD

RIN

US

E\n" ) ;

bre

ak

;case

E

AD

DR

NO

TA

VA

IL:

bre

ak

;C

ase E

AFN

OSU

PPOR

T :

prin

tf ("ER

RO

R:

EA

FNO

SUPPO

RT

\n" ) ;b

reak

;case

E

CO

NN

RE

FUSE

D:

prin

tf ("ER

RO

R:

EC

OK

NR

EFU

SED

\n" ) ;b

reak

;

A- 130

APÉNDICES

Page 127: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROG

RAM

A D

E M

ON

ITO

RIZ

ACIO

N Y

Con

reen

. DEL

SIS

TEM

A A

NAL

ÍTIC

O

case EDESTADDRREQ:

printf ("ERROR: EDESTMDRRECAn" ) ;

break;

case EFAULT : '

printf("ERROR. EFAULT\n")¡

break;

case EINPROGRESS:

printf("ERROR: EDESTADDRREOAn");

break;

case EINVAi:

printf("ERROR: EINVAL\n");

break;

.case EISCONN:

print f("ERROR : EISCONN\n");

break;

case EMPILE:

printf("ERROR: EMFILE\n"l;

break;

case ENETUNREACH:

printf ("ERROR: ENETTJNREACHXn" ) ;

break;

case ENOBUFS:

printf("ERROR: ENOBUFSXn");

break;

case ENOTCONN:

printf("ERROR: ENOTCONN\n"ï ;

break;

case ENOTSOCK:

printf("ERROR: ENOTSOCK\n");

break;

Case ETIMEDOUT:

printf("ERROR: ETIMEDOUT\n");

break;

default: printf("default. errno: %d\n", errno);

/* Ctdigo necesario ai desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

«ifdef TEST

void main(void)

int i,j;

dat. conexion_SUN = 1 ;

for (i»l,-i<4,-i++)

for (j»0;j<5;ji-f) medida_a_SUN((charli,(char) j, 1.0F);

getch();

for (i=l;i<4;i++)

for (j=0;j<5;j++) medida_a_SUN((char)i,(char) j, O.OF);

} Kendif

/

*

*

•**

....................../

APÉN

DICE

S A

-131

DESA

RRO

LLO

E IM

PLEM

EMTA

QO

N D

E UN

SIS

TEM

A S

UPER

VISO

R P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DA

R

COM

UN

ICA

.c -

FU

NC

ION

ES

PAR

A

CO

MU

NIC

AR

C

ON

EA

SI

PROG

RAM

ADOR

: Ju

an A

nton

io B

aeza

L

abat

ULTI

MA

REV

ISIÓ

N:

4/1

/99

ífín

clud

e <

std

io.h

>^i

ncl

ud

e <

bios

.h>

ífin

clud

e <

coni

o.h>

tt inc

lude

< t

ime.

h >

8in

clu

de

«dos

.h>

fíin

clud

e <m

emor

y.h>

fí in

c lu

de

<mat

h. h

>#

incl

ud

e "n

ombr

es,h

"

/*tt

defi

ne

TEST

*/tti

fdef

TE

STft

defi

ne

exte

rníf

endi

f

cií

v

ia

CO

tf de fine DTR

Jídefine RTS

«define COM1PORT

íídefine COMÍ

«define DCOM1

«define COM2

íídefine DCOM2

0x01

0x02

0X0000

O 0x3 F8

1 OX2F8

/*Data Terminal Ready*/

/*Ready To Send*/

/*Pointer to Location of COMl port*/

«define DATA_READY

0x100

«define FALSE

0«define TRUE

! FALSE

«define SETTINGS { OxEO | 0x00 |

«define SETTINGS2 ( OxEO | 0x00 |0x02 |

0x03

0x00)

| 0x00)/* 9600,N,7,1 */

/* 9600,N,8,1 */

int comunica(int *fraae, int *salida};

int comunica2(int *frase, int *salida);

void reinicializa_puerto(void);

void reinicializa_puertob(void)

,-void reinicializa_puerto2(void);

int lectura_absor(void);

int lectura_ammv(void);

extern void delay! clock_t wait );

extern valores_fia valor;

extern datos_fia dat;

extern int colorim(3] [20) , ampotenciometre[20];

extern int offline;

/* Subrutina per enviar/rebre dades bit a bit a trav,s del COMl

*/

int comunica(int *fra3e, int *salida)

íint in, ra=0,i=0, j=0, k=0, status, DONE = FALSE;

if (offline==l) return -3;

/*

delay(iO);*/

status = _bios_serialcom(_COM_STATUS, COMÍ, O); /'Comprueba estado*/

while ( (status & DATA READY)!=0 )

{_bios_serialcom(_COM_RECEIVE, COMl, 0);

status = _bios_serialcom(_COM_STATUS, COMl, 0);

m=l;

1 if (m==l) return -2;

A-132

APÉNDICES

Page 128: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA re MO

NITORIZAO

ÓN

y CONTRO

L DEL SISTEMA ANALÍTICO

salida CO] =

48;

while ( 1DONE

_outp ( DCOM1 + 4 , D

TR | RTS ) ;

iE ( (in » frase [i])

i. '°'

)

status = _bios_serialcO(n(_COM_STATUS, COMÍ, O) ;

_bios_serialcom(_COM_SEND, COMÍ, in);

while ( (status & DATA_READYÍ ==0 )

status = _bios_serialcom(_COM_STATUS, COMÍ, 0) ;

salidalj] - bios serialcoml COM RECEIVE, COMÍ, o) í Ox7F;

)

~ ~

status

=> _bios_serialcom(_COM_STATUS, COMÍ, 0) ;

if (status & DATA_READY)

{J+ + ;

salidalj] >

bios serialcoml COM RECEIVE, COMÍ, 0)

s, Ox7F ;

}

~ ~

if ( (fraseEi] ==

'°') && (j >3) && (salidatj] == '\r')) DONE=TRUE;

if (k>25000) return -1;

/* retorna error i no agafa lectura */

if (j>30)

return -2;

/* Subrutina per enviar/rebre dades bit a bit a trav,a del COM2

int comunica2 (int

*frase, int *salida)

{int

in, m=0,i=0, j=0, k=0, status, DONE = FALSE;

if (offline==l) return -3;

/*

delay(lO) ;*/

status " _bios_serialcom(_COM_STATUS, COM2, 0)

; /*Comprueba estado*/

while ( (status & DATA READY) 1=0 )

{_bio3_seríalcom(_COM_RECEIVE, COM2, 0) ;

status = _bios_serialcom(_COM_STATUS, COM2, 0);

mal;

salida (0]o4B;

while ( ¡DONE

)

_OUtp ( DCOM2

-t-

4, DTR | RTS ) ;

if ( (in = frasefi]) != -D-

)ístatus = _bios_serialcom(_COM_STATUS, COM2, O);

_bios_serialcom(_COM_SEND, COM2, in);

while ( (status s, D

ATA_READY) ==0 )

status = _bios_serialcom(_COM_STATUS, COM2, 0);

salidalj] = _bios_serialcom(_COM_RECEIVE, COM2.0) & Ox7F;

status a _bios_serialcom(_COM_STATUS, COM2, 0);

if(Status & DATA READY)

íj++;

sa

lida

tj] -

_b

ios_

serialcom

(_C

OM

_R

EC

EIV

E,

CO

M2,

0)

& O

x7F ;

if (

(frase

li] «

'd')

íf. (j

>3

) &&

(sa

lida

tj] ==

'\r')

) D

ON

E=TRU

E;if

(k>

25

00

0)

retu

rn

-1;

/*

reto

rna erro

r i

no

ag

afa

lectu

ra

*/

if (j>

30

) re

turn

-2

;

return O ;

ivoid reinicializa_puerto(void)

APÉNDICES A

-133

DESARROLLO E IM

PLEMENTAQ

ON

DE UN SISTEMA SUPERVISO

R PARA LA G

ESTIÓN

Y CONTROL DE EDAR

rialcom(_COM INIT, COMÍ, SETTINGS2);

void reinicializa_puertob(void)

(_bios_serialcom(_COM_INIT, COMÍ, SETTINGS);

void reinicializa_puerto2(void)

{_bios_serialcom(_COM_INIT, COM2, SETTINGS);

Su

bru

tina

lectu

ra

d'a

bso

rb..Jic

ia

int

lectu

ra_

ab

sor(v

oid

)

int

erro

r=0

, j =

0 ;ch

ar

tem

po

r[10

];flo

at

ab

sor;

int

reto

rno

[40

];

do

/*Borra la variable*/

memset(retorno,O,sizeof(retorno));

error=comunica(colorim[2].retorno);

while{error!=0 && j<4);

/*for (j=0;

j<25; j+*) print f ( " %c" , retorno [ j ] )

,- */

if (error==0)

if (re

torn

o[O

] 1=13

| j re

torn

o [2] ! = '3

' | | re

torn

o[8

] ! = 'A

1 j |

reto

rno

[7] ! =

' " ' | | re

torn

o [2

4] ! =* ' " '

) re

turn

-2

;/*

Ha

leíd

o p

ero

n

o e

s co

rrecto

*/

me

mse

t(tem

pe

r,0,siz

eo

f(tem

pe

r)); /*

Bo

rra la

varia

ble

*/

for

(j=0

;j<7

;j++

) te

mp

er[j]=

(ch

ar)

reto

rno

[12

+j];

/*A

sign

a lo

s cara

cte

res*

/a

bso

r=(flo

at)a

tof(te

mp

er)

; /'C

alc

ula

el

valo

r*/

if ((a

bso

r>-0

.IF)

&&

(ab

sor<

l.OF

)) /*

Co

mp

rueb

a ra

ng

o*

/if

( (abso

r< (v

alo

r .abso

r-t-0 . 6 OF) )

&&

( ab

sor > (v

alo

r, ab

sor-O

.6 O

F) ) ){

/'Co

mp

rueb

a v

aria

ció

n

resp

ecto

an

terio

r*/

valo

r.ab

sor=

ab

sor;

va

lor.t_

ab

sOr=

time

(NU

LL

);re

turn

O

;Subrutina lectura de mv

int inicio=l;

int lectura_ammv (void)

iint

amerro

r=0 ,

j =0 ;

ch

ar

temp

er [10] ;in

t am

reto

rno

[40

] ;flo

at

temp

;

memset (amretorno, O, sizeof (amretorno) ) ;

do

/*Borra la variable*/

amerror=comunica2 (ampotenciometre , a

mretorno) ;

)while (amerror!=0 &&

j«=4) ;

/•for (j=0;

j<25; j

-t--*-} print f ("%c"

, amretorno [j

] ) ;-/

A-134

APÉNDICES

Page 129: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ON

rroR

EA

dóN

Y C

ONT

ROL

DEL

SIST

EMA

AN

nco

it (amerror==0)

if

(am

reto

rno

[0

] 1=

13 | |

am

reto

rno

{2

) !

= '5

' | |

am

reto

rno

{7

] ¡

= '

" '

j j

am

reto

rno

[2

4]

! = '

" '

) re

turn

-2

;/*

Ha

le ¡do p

ero

no

es

co

rrecto

*/

mem

aet

(tem

po

r, 0

, siz

eo

f (t

emp

er)

) ;

/*B

orr

a la

v

ari

ab

le*

/fo

r (j

»0

; j<

6 ; j

+ +

) te

mp

er

[j) -

(c

ha

r) a

mre

torn

o [

8+

jl ;

/*

Asi

gn

a

los

cara

<te

mp

= (

flo

at)

ato

f (t

emp

or)

;

/*C

alc

ula

el

valo

r*/

if ({temp>-400.OF) && (temp<100.OF))

/*Comprueba rango*/

if((temp<(valor.mv+SO.OF)) && (temp>(valor.mv-50.OF)) ||

difftime(dat.t_actual,valor.t_mv)>60)

{

/*Comprueba variaciCn respecto anterior*/

valor,mv=temp;

valor.t_mv=time(NULL);

return 0;

}if (inicio==l)

if <(temp>-300.0F) ss, (temp<100 .OF) ÍÍ (temp!=0.OF) )

{ valor.mv= temp;

valor.t_mv=time(NULL);

inicio=0;

itifdef TEST

void main(void)

{ int i;

int tecla;

reinicializa_puertobO;

reinicializa_puerto2( ) ;

for (i=0;i<10000;i++)

{tecla=Jbios_keybrd(_NKEYBRD_READY); /*Comprueba si se ha presionado una tecla*/

if(tecla!=0) break;

lectura_ammv();

printf("\t%f\t%i\n",valor.mv,i);

lectura_absor();

printf(n\t%f\t%i\nn,valor.absor,i);

delay(lOO);

i void delay( clock_t wait )

fclock_t goal;

goal = wait

*• clockl);

whilet goal > clock() )

í int

co

lori

m[3

] [

20

]=

{{

'\r

1,'

0',

'3',

'R',

IS

','T

','\

r' )

ia

i}

, /*

R

ese

t co

lor¡

metr

e*

/{

'\r

','0

','3

-,'

T1

,'C

*,'

A',

'\r

' (-

a-

},

/* C

ali

bra

cií

co

lor¡

metr

/{

'\r

','O

','3

','R

','D

','I

','\

r',

'Q'}

};

/* L

ectu

ra c

olo

r¡m

etr

e*

/in

t a

mp

ote

nc

iom

etr

e[2

0]=

{l\r

l('l

',15

','R

l,'

D',

'If,l

\r',

'o1}

; /*

L

ectu

ra

de

mV

*/

ítendif

/**

**

"•*

**

*

*

**

**

**

**

**

* *

**

**

**

**

**

**

**

* /

AP

ÉN

DIC

ES

A -

13

5

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR

PARA

LA

GES

TIÓ

N Y

CO

NTRO

L DE

ED

AR

FUNCIÓN PARA ESPERAR LOS MILISEGUNDOS DETERMINADOS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISION: 23/5/95

******** Libreriras a incluir

((include <time.h>

((include <conio.h>

(finclude <stdio.h>

Subrutina3 del fichero

void delay( clock_t wait );

/* Pauses for a specified number of microseconds. */

void delay( clock_t wait )

clock_t goal;

goal = wait + clockO ;

while! goal > clockO )

itifdef

TEST

void main (void)

<int duracion=1000;

clock_t cstart, cend;

cstart = clockO;

delay ( duración );

cend » clockO ;

printf( "\nTiempo transcurrido:\t\t%6.4f seconds \n"

((float)cend - cstart) / CLOCKS PER SEC };

A-136

APÉNDICES

Page 130: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONÏTOREACION Y COHTROL DEL SISTEMA ANALÍTICO

FICHERO

S.c -FUNCIONES PARA LA LECTURA Y ESCRITURA DE FICHEROS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 15/4/97

ffinclude <io.h>

ffinclude <time.h>ffinclude <stdio.h>ffinclude <stdlib.h>

ffinclude <memory.h>

ftinclude "nombres. h"

/•ffdefine TEST*/

Sifdef TEST

{(define extern

ftendif

Subrutinas del fichero

void lectura_configuracio(void);

void guarda_mensaje( char *mensaje, char «fichero);

void guarda_medida( char *mensaje, char "fichero);

int

lee_calibrado( char *fichero, float *param_a, float *param_b),-

/*************•**.»».* submtinas externas necesarias *************

extern datos_fia

extern valores fia

Variables comunes del programa

dat;

valor;

Subrutina lectura de la configuracií inicial del fitxer de dades fia4.dat */

void lectura_configuracio(void)

{FILE *obert;

int si,i;

char linea[150];

if ( access(nc:\\fiacfa\\fia4.daf,0) == 0)

{obert=fopen("c :\\fiacfa\\fia4.dat","rt");

/*En primer lugar se lee la l¡nea y despu,s ae traduce a nEmeros*/

fgets(linea,sizeof(linea),obert) ;

sscanf (linea, "IIo, sdat. t_estabilit) ,-

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%In, &dat.inici_lectura_baae);

fgets(linea,sizeof(linea),obert);

aacanf(linea,"%I", &dat.fi_lectura_base);

fgets(linea,sizeof(linea),obert);

sacanf(linea,n%d", &dat.inj_entre_calibrats);

fgeta(linea,sizeof(linea),obert) ;

aacanf(linea,"%I", &dat.inici_lectura_maxl);

fgets(linea,sizeof(linea),obert) ;

~aacanf (linea, "%!", &dat.inici_lectura_max2) ,-

fgets(linea,sizeof(linea),obert);

sscanf(linea,"%!", &dat.t_carrega_loop);

fgeta(linea,sizeof(linea),obert) ;

ascanf(linea,"%l", sdat,t_injeccio),-

for (i=0;i<4;i++)

ífgets(linea,sizeof(linea),obert);

sscanf(linea,"%I", tdat.delta_t[i]);

APÉNDICES A

- 137

DESARROLLO E IMPLEMENTAOON DE UN SISTEMA SUPERVISOR PARA LA GESTION Y CONTROL DE EDAR

for (i.0;i<3;it+)

<f gets (linea, sizeof (linea) , obert) ;

sscanf (linea, "%I", &dat -delta_picl [ij

} ;

}for (i=0; i<3;i++)

ífgets (linea, sizeof (linea) , obert) ;

ascanf (linea, "%l", &dat .delta_pic2 [i]

) ;

}fgets (linea, sizeof (linea) , obert) ;

ascanf (linea, " %I" , &dat

- inici_lectura_base_calibratno3 )

,-fgeta (linea, aizeof (linea) , obert) ;

sscanf (linea, "%In , &dat. f i_lectura_base_calibratno3) ;

fgets (linea, sizeof (linea) , obert) ;

sscanf (linea, "%f " , &dat.diferencia_entre_pics) ;

f gets (linea, sizeof (linea) , obert) ;

sscanf (linea, "%I", &dat. t_canvi_punt_moatreig) ;

fscanf (obert, "li" , üdat . t_lectura_amoni)

,-ai=fscanf (obert, "%* [*0123456789] -);

if (si==EOF)

/*Si hay menoa datos de los necesarios*/

printf ( "\nError: Faltan dades en el fitxer de configuracit fia4.dat \n");

f close (obert) ;

exit(l) :

}f close (obert) ;

îelse(printf ("\nError: El fitxer de configuracií fia4.dat no existeix\n") ;

exit (1)

;

îreturn;

ivoid guarda mensaje( char *mensaje, char *fichero)

íFILE *stream;

time_t Itime;

char la_f

rase [160]

,-

time (&ltime) ;

sprint f (la_frase, "%a

%s\n" , ctime ( &ltime ) , mensaje) ;

la_frase [24]

=32;

atream = f open ( fichero, "a+");

fprintf (stream, "%s" , la_f rase) ;

f close(stream) ;

í void guarda_medida( char 'mensaje, char *fichero)

FILE *stream;

struct

tm *t;

time_t Itime;

time (&ltime);

t = localtime( filtime ) ;

stream = fopen( fichero, "a+");

fprintf(stream, "%sn, mensaje);

fprintf(stream, "%2d %02d %02d

", t->tm_hour, t->tm_min, t->tm_sec);

fprintf (stream, n%sri, ctime ( & Itime ) ) ;

fclo

se

(atre

am

);

A-1

38

APÉNDICES

Page 131: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICES

. PRO

GRAM

A DE

MoN

rroRi

ZAaÓ

N Y

CONT

ROL D

EL S

ISTEM

A AN

ALÍTI

CO

return;

} /****•*•****

*

.«*******,****.

***,*,,**.**/

int

lee calibrado! char *fichero, float *param_a, float *parara b)

í FILE *obert;

char lineal[150], Iinea2[150];

if ( access(fichero,0} != 0) return -I ;

obert=fopen(fichero, "rt")

,-memset(lineal,O,sizeof(lineal));

while(fgets(lineal,sizeof(lineal).obert) != NULL} /* Lee linea mientras hay */

memcpy(linea2,lineal,sizeof(Iinea2));

/* Guarda la £ltima linea */

memset(lineal,O,sizeof(lineal));

f close (obert) ;

sscanf (Iinea2, "%f %f " , param_a, param__b) ;

return 0;

i

/* Convierte linea a par metros */

ííifdef TEST

void main(void)

í float a=.O.OF,b=O.OF;

int retorno;

retorno=lee_calibrado( "c:\\fiacfa\\datos\\calibnh4.his", &a, &b);

print f ("a: %f\tb: %f \t retorno: %i\n", a, b, retorno)

,-retorno=lee_calibrado( "c:\\fiacfa\\datos\\calilno2.his", &a, &bï;

printf ("a: %f\tb: %f\t retorno: %i\n" , a,b, retorno)

,-retomo=lee_calibirado( "c: \\fiacfa\\datos\\cali2no2. his" , ta, &b) ;

printf ("a: %f\tb: %f\t retorno: %i\n" , a, b, retorno)

,-retorao=lee_calibrado( "c:\\fiacfa\\datos\\calibno3.his", &a, &b) ;

printf("a: %f\tb: %f\t retorno: %i\nn,a,b,retorno);

«en

dif

/**

**

**

APÉN

DICE

S A

-13

9

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA S

UPER

VISOR

PARA

LA G

ESTIÓ

N Y C

ONTR

OL D

E ED

AR

GR

ÁF

ICO

S.C

-

FUN

CIO

NE

S P

AR

A L

A

PR

ESE

NT

AC

IÓN

DE

DA

TO

S Y

GR

ÁF

ICA

SPO

R

PAN

TA

LL

A

PRO

GR

AM

AD

OR

: Ju

an

A

nto

nio

B

aeza

Lab

at

UL

TIM

A

RE

VIS

ION

: 6

/5/9

7 Lib

reri

as

a in

du

ir

^in

clu

de

«ro

nio

.h>

ttin

clu

de

<std

lib

.h>

ftin

clu

de <

str

ing

.h>

ftin

clu

de <

std

io.h

>íí

inclu

de

<g

rap

h.h

>((

inclu

de

<

ma

th.h

>#

inclu

de

<

tim

e.h

>((

inclu

de

"no

mb

res

.h"

Defi

nic

ion

es

**

*/*

ítd

efi

ne

TE

ST

*/

flif

def

TE

ST

(¡d

efi

ne

ex

tern

ffe

nd

if

íídefine PATHFONTS "c:\\f iacfa\\f onts\\* . fon"

y*********************** Subrutinas del fichero ***********************/

void modo_grafico(void);

void graf_base(void);

void graf_led( int led, int on_off );

void graf_hora(void);

void graf_sombra_grafica(void);

void graf_ayuda_general(void);

void graf_borra_ayuda(void);

void graf_display(void);

void graf_valores_display(void);

void graf_valor_ab3or(void)

,-void graf_valor_mv(void);

void salir__al_dos (void) ;

void graf_ejes_tiempo(int escala);

void graf_eje_mv_absor (void)

,-void graf_eje_vertical

(short xl, short yl, short y2, float min, float max, int div, short col);

void graf_eje_horizontal

(short xl, short yl, short x2, int min, int max, int div, short col);

void graf_tanques(void);

void graf_tanque(int tanque);

void graf_presentacion(void);

int botón ( int on_off, char *nombre, short xl, short yl,

short x2, short y2, short font);

int graf_texto

(char "nombre, short xl, short yl, short x2, short y2, int font, int fondo);

void actualizar_matrices_graf icas (void)

,-void seleccionar_grafico(int orden);

void grafica_variable(int variable);

void barra_botones(void);

/*omunes del programa

extern valores__fia

valor;

extern datos_fia

dat;

matr

i2_

gra

fica

mat_

gra

[18

00

];

/'D

ato

s

cada

4 se

gu

nd

os,

2 h

ora

s en to

tal*

/

/•***.*****•*********«.*+********+*...**.****.*.***..**.****.***.*********

/* Pasa del modo texto al gr fico.

"

*/

void modo_grafico(void)

if( J_setvideomode( _MAXRESMODE ) )

exit{ 1 );

_registerfonts( PATHFONTS ); /*Fuentes gr ficas*/

A-140

APÉNDICES

Page 132: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MO

NITORCACIÓ

N Y CONTROL DEL SISTEM

A AN

ALtnco

/*.»

,...+**.*

.*

**.*

..***.,*

.**..*

*.*

..**.*

*

* /

/* Funciín que llama a las funciones necesarias para dibujar la pantalla. */

void graf base(void)

ígra

f_so

mb

ra_

gra

fica

();/*

gra

f_a

yu

da

_g

rafic

as();*

/g

raf_

ay

ud

a_

ge

ne

ral();

gra

f_d

ispla

y();

gra

f_h

ora () ;

barra_botones {)

;graf_texto{"Temps

(minuts)", 130, 455, 230, 473, 1, Oí;

graf_eje mv_absor();

graf_eje~horizontal (80,434,560, (short)((dat.inicio_graf-4)*30),

(short)((dat.fin_graf-4)*30), 6, 30);

graf_jvalor_absor()

,-graf_valor_mv();

i/*

Re

loj

dig

ital,

co

n fe

ch

a y

h

ora

,

vo

id

gra

f_h

ora

(vo

id)

time_

t Itim

e;

sho

rt x

=4

45

,y

=4

60

;ch

ar

fue

nte

[20

]="t "Tm

s R

mn

'hl2

w5

0b

";ch

ar

bu

ffer[3

0];

int

seg

un

do

s,min

uto

s ;

•_se

tgte

xtv

ec

tor(

1, O

) ;_

se

tfon

t( fu

en

te ) ;

time

(&Itim

e);

sp

rintf (b

uffe

r, "%s",

ctim

ef

fcltime

) ) ,-

_setcolor(242);

_rectangle( _GFILLINTERIOR, 441, 459 ,587, 471);

_setcolor(28);

_rectangle( _GBORDER, 441, 459 ,587, 471);

_setcolor(29);

_moveto(x,y);

_outgtext(buffer);

_rectangle( _GBORDER, 350, 459 ,430, 471);

segundos^(int)(time(NULL)-dat.t_cicle);

minutososegundos/60;

segundos=segundos-minutos*60;

sprintf( buffer, "T cicle: %2i : %2i", minutos,segundos);

graf_texto( buffer, 351, 460, 429, 470, O, 1)

,-

/* Escribe la pantalla de ayuda general del programa.

void graf_ayuda_general(void)

íint i;

short x,y;

ch

ar

fue

nte

[20

]=nt'T

ms

Rm

n'hBw

Sb";

ch

ar

bu

ffer[l5

][28

]={

/**

•**

**

**

**

«*

**

**

**

«»

**

*•/

"FI

Carg

a m

ostra

FIA

",

"F2

En

c,n bom

ba F

IA

",

"F3

Apaga

bomba

FIA

",

"F4

Iny

eccií

mo

stra F

IA ",

"F5"F6"F7

Inic. v-lvula 6 vies

Apaga v_l. sup. FIA "

Enc,n v_.l.

sup. FIA

"

Enc.n v_l. inf. FIA n

Apaga bomba CFA

"AltF2 Enc,n bomba CFA

AP

ÉN

DIC

ES

A -1

41

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓN Y CONTROL DE ED

AR

"AltF3 Apaga bomba CFA ",

"AltF6 Apaga v-.lv.

sup.CFA" ,

"AltF7 Ene,n v_lv.sup.CFA",

"AltFS Enc.n v...lv.

inf-CFA" ,

"AUF9 Apaga v-.lv.

inf .CFA

" }

,-/*,"FIO Sortida del programa",

"ALT-D Sortida al DOS",

"ESC Cr,ditos programa"};

_setgtextvector( 1, O );

_setfont( fuente );

_setcolor (242) ,-/*antes

19*/

_rectangle( _GFILLINTERIOR, O, O, 595, 38);

_setcolor(29);

_rectangle( _GBORDER, O, O, 595, 3B) ;

for (i=0;i<15;i++)

{x=(short)(5+1*120-(int)(i/5)*600);

y= (short)

(2 + 12*

(int) (i/5)

) ,-

_moveto(x,y);

_outgtext(buffer(i) ) ;

/" Dibuja un rect ngulo negro para borrar el cuadro de ayuda, y as

i poder

escribir un mensaje en esa zona.

*/

void graf_borra_ayuda (void)

(_setcolor (0)

;_rectangle( _GFILLINTERIOR, O, O, 595, 38);

_setcolor (29)

;_rectangle( _GBORDER, O, O, 595, 38);

/* Dibuja el rect ngulo, las rayas interiores y los títulos del display

donde se muestran los valores .

*/

void graf display (void)

(int i ,

j ;

short x, y;

ch

ar

fue

nte [2

0] =

"t'Tm

s R

mn

'hS

wS

b";

ch

ar

varia

ble

s[6]

f!2] =

{/*

**

**

**

**

*/

" N

-N0

3-

" N

-N0

2-

" N

-NH

4+m

V11

Ab

sorb

" ,

char tanques[3] [12]=

{/•

Mesura " ,

" Temps " ,

" Punt

" } ;

_setgtextvector ( 1, 0 );

_setfont( fuente ) ;

_setcolor (171)

;_rectangle( _GFILLINTERIOR, 0, 41, 595, 97) ;

_setcolor (29)

;_rectangle( _GBORDER, 0, 41, 595, 97);

_setcolor (10)

;_rectangle( J3BORDER, 15, 56, 76, 82);

_moveto(20, 59) ;

_outgtext( "ÚLTIMS") ;

_moveto(20, 69)

,-_outgtext ( "VALORS" ) ;

setcolor (30)

;

A-1

42

AP

ÉN

DIC

ES

Page 133: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. PR

OGRA

MA

DE M

ONÍT

ORIZ

ACIÓ

N Y

CONT

ROL

DEL S

ISTEM

A AN

ALÍT

ICO

_re

cta

ng

le(

_GB

OR

DE

R,

50

0, 5

6,

57

6,

82

);_

mo

ve

to(5

3S

,56

)_

lin

eto

(S3

5,8

2)

_m

ov

eto

{5

35

, 69

)_

lin

eto

(50

0,

69

)_

mo

veto

(50

5, 5

8)

_outgtext("Absor "ï ;

_moveto(505,70)

_outgtext("mV

");

for (i=l;i<4;i++)

_se

tco

lor

(30

í;x

=(s

ho

rt)

(10

3+

i*7

0);

y= (

sh

ort

) (4

5) ;

_re

ctan

gle

( _G

BORD

ER,

x,

y,_

setc

olo

r (1

0) ,-

_tnp

veto

( (s

ho

rt)(

x+

10

),y

);_

ou

tgte

xt(

var

iab

les[

i-ll

);

for (j=l; j<4; j-t-O

í _setcolor(30);

x=(short)(103);

y= (short) (45+j*12);

_rectangle ( __GBORDER, x, y,

_setcolor(10) ;

_moveto( (short) (x-t-10) , y) ;

_outgtext (tanques íj-ll ) ;

(short) (x+70) , (short) (y-t-12) ) ;

(short) (x+70), (short) (y-t-12) ) ;

_setcolor(30)

,-_rectangle( _GBORDER, 415, 56, 476, 82);

_moveto{415,69);

_lineto(476,69);

_moveto(417,57);

_outgtext("Punt mostreig");

graf_valores_display{) ;

/*********** ************************************** t*************»**********/

/* Escribe los valores de las variables medidas del sistema en el display.*/

void graf_valores_display(void)

( int i, j;

short x , y ;

ch

ar

fue

nte

[2

0] =

"t

'Tm

s R

mn

'hS

wS

b"

;ch

ar

bu

f fe

r [1

0] ;

str

uct

tm

*te

mp

s;

_setgtextvector( 1, 0 );

_setfont( fuente );

_3etcolor (0) ;

_rectangle( _GFILLINTERIOR, 173, 57, 383, 93);

_setcolor(242) ;

for (j-l,-j<4;j*»)

(for (i»l;i<4,-i»t)

{ x. (short) (103+i*70) ;

y- (short) (45+j*12) ;

_rectan9le( _GBORDER, x, y, (short) (x+70) , (short) (y+12) );

_setcolor(30) ;

_rectangle( _GBORDER, 173, 57, 383, 93);

sprintf(buffer,"%4.2f.valor.nitrats);

_moveCo(200, 58); _outgtext(buffer);

temps = localtime(&valor.t_nitrats);

strftime( buffer, 20, "%H:%M:%S", temps);

APÉN

DICE

S A

-14

3

DESA

RROa

o E I

MPLE

MENT

AQÓN

DE

UN S

ISTEM

A SU

PERV

ISOR

PARA

LA G

ESTIÓ

N Y C

ONTR

OL D

E ED

AR

_moveto(190, 70) ; _outgtext (buf fer) ;

sprintf (buffer, "%li" , valor ,punt_nitrats) ;

_moveto(205, 82) ; _outgtext (buffer) ;

sprintf (buffer, "%4. 2 f ", valor .ni trits) ;

_moveto(270, 58) ; _outgtext (buffer)

,-

temps = localtimettvalor. t_nitrits) ;

strftime ( buffer, 20, "%H: %M: %S" , temps) ;

_moveto(260, 70) ; _outgtext (buffer) ;

sprintf (buffer, n%li" , valor. punt_nitrits) ;

_moveto(275, 82) ; _outgtext (buffer) ;

sprintf (buffer, "%4 . 2 f " .valor .amoni) ;

_moveto(340, 58) ; _outgtext (buf f er) ;

temps = localtime (&valor.t_amoni)

,-strftimei buffer, 20, "%H:%M:%S", temps);

_moveto(330, 70) ; _outgtext (buf fer) ;

sprintf (buffer, "%lin , valor .punt_amoni) ;

_moveto(345, 82) ; _outgtext (buf fer) ;

sprintf (buffer, "%li" , dat .punt_mostreig) ;

graf_texto( buffer, 416, 70, 475, 81, 0, 1) ;

/* Escribe los valores de las variables medidas del sistema en el display.*/

void graf _valor_absor (void)

í char medida [10] ;

sprintf (medida, "%2 . 3 f " , valor .absor) ;

graf_texto( medida, 536, 57, 575, 68, 0, 1) ;

/* Escribe los valores de las variables medidas del sistema en el display.*/

void graf_valor_mv(void)

char medida{10];

sprintf (medida, "%2.3fJ valor.mv) ;

graf_texto( medida, 536, 70, 575, 81, O, 1);

} /**

******

*

**

*.*.„..*.******„***.*.******/

/* Dibuja la sombra de la gr fica, la pantalla base.

*

void graf_sombra gràfica(void)

í _setcolor(23);

/"sombra*/

_rectangle( _GFILLINTERIOR, 5, 105, 595, 479);

_setcolor(171);

_rectangle( _GFILLINTERIOR, O, 100, 590, 474);

_setcolor(29);

_rectangle( J3BORDER, O, 100 , 590, 474);

_setcolor(0);

_rectangle( _GFILLINTERIOR, 80, 115 , 560, 434);

_setcolor(29);

_rectangle( _GBORDER, 80, 115 , 560, 434);

_moveto(560,275);

_lineto(80,275);

/**•.*•***.*****.********.************.****..**********...*.....**..*****.*/

/* Funciin para salir al dos. Cambio de modo gr fico a texto, ejecuta un

command y despu.s redibuja la pantalla.

*/

void salir_al_dos(void)

t _se

tvid

eo

mo

de

(

_DE

FA(J

LT

MO

DE

)

;p

rin

tf("

\nE

sc

rib

e

'ex

it'

para

v

olv

er

al

pro

gra

rna\n

");

ayst

em(n

CO

MM

AN

D.C

OM

'1)

;i£

( l_

setv

ideo

mo

de(

_MA

XR

ES«

OD

E

) )

ex

it (

1

)

,•

A-1

44

APÉN

DICE

S

Page 134: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITORIZAOON Y CONTROL DEL SISTEMA ANALÍTICO

graf__base O ;

/* Dibuja el eje horizontal del tiempo, en tres escalas diferentes,

void graf ejes tiempo(int escala)

{char Cuente[20] ="t "Tms Rmn'hl2w50b";

_setgtextvector( 1,0);

_setfont( fuente );

_setcolor (30);

switch(escala)

{case 1:

graf_eje_horizontal( 80,

_moveto (150, 460) ,•

outgtext("Tiempo

(minutos)"

break;

case 2:

graf_eje_horizontal( 80,

_moveto(150,460);

outgtext("Tiempo

(horas)");

break;

case 3:

graf_eje__horizontal ( 80,

_moveto(150,460);

_outgtext("Tiempo

(d;as)");

break;

_rectangle( _GBORDER, 80, lis , 560, 434);

/•Escala de una hora*/

434,

560, O, 60,12, 30);

/•Escala de un dja*/

434, 560, O, 24,24, 30);

/•Escala de una semana*/

434, 560, O, 7,7, 30);

/* Dibuja el eje vertical de mv y absorbencia.

void graf eje mv absor(void)

ígraf_eje_vertical{80,120,265,-0.IF,I.OF,11,92);

graf_eje_vertical(80,28S,430,-250.OF,50.OF,6,100);

_setcolor(92);

_setgtextvector( 0, 1);

_moveto(20,220);

_outgtext ("Ab3orb._nciaa) ;

_setcolor(100);

_moveto(20,400);

_outgtext("Potencial (mV)");

void graf_eje_vertical

(short xl, short yl, short y2, float min, float max, int div, short col)

{int i=0;

short y;

float incremento=0

,-float inc_med=>o.OF;

char valor IS] ;

char fuente[20]="t'Tms Rmn'hl2w50b";

ol) ;

_setgtextvector( 1, 0 );

_setfont ( Cuente )

,-incremento=(float)((float)(y2-yl)/div);

inc_med= ( (max-min) /div);

_moveto(xl,yl);

_lineto(xl,y2)

,-

for (i=.0;i<=div;i + + )

APÉNDICES A

- 145

DESARROLLO E IMPLEMENTACIÔN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN ir CONTROL DE EDAR

y=(short)(y2-incremento*i);

_moveto(xl,y);

_lineto((short)(xl-5),y);

if (max<5 . OF) sprint f (valor, "%2,1C", inc_med*i-4-min) ;

else sprint f (valor, "%2.Of", inc_med*i+min) ;

_moveto((short)(xl-30),(short)(y-5)};

_outgtext (valor)

,-

i

void graf_eje_horizontal

(short xl, short yl, short x2, int min, int max, int div, short col)

íint i=0;

short x;

floa

t in

cre

me

nto

=0

;in

t in

c_

med

=0

;ch

ar

va

lor[5

];

ch

ar

fuen

te [2

0] =

"t 'T

ens R

mn

'hl2

w5

0b

n ;

_setcolor(col);

_setgtextvector( 1, 0

),-_setfont( fuente );

incremento=(float)((float)(x2-xl)/div);

inc_med= (int) ( (max-min) /div);

_moveto(xl,yl);

_lineto(x2,yl);

for (i=0;i<=div;i++)

x=(short)(xl+incremento*i);

_moveto(x,yl);

_lineto(x,(short)(yl+5));

sprintf(valor,"%2i",min+inc_med*i);

_moveto( (short) (x-7) , (short) (yl-f-10)),-

_outgtext(valor);

}/***.**.*.***.*****.********.***..*******.*.*.*.***..**********.**.*•**-**

/* Dibuja el nombre del tanque al que corresponde la gr fica m£ltiple.

void graf_tanque(int tanque)

char fuente [20]

="t"Tms Rmn'hl2w50bn ;

char buf fer [30] ;

_setgtextvector( 1, 0 );

_setfont( fuente );

_setcolor(0);

_rectangle{ _GFILLINTERIOR, 300, 459 ,370, 471);

_setcolor(30);

_rectangle( _GBORDER, 300, 459 ,370, 471);

_moveto(310 ,460);

sprintf(buffer,"Tanque %li",tanque);

_setcolor(SI);

_outgtext(buffer);

/*

Fu

nciin

co

n e

l co

py

righ

t, p

resen

tació

n d

el

pro

gra

ma,

vo

id

gra

f_p

rese

nta

cio

n(v

oid

)

ch

ar

fue

nte

l[20

]="

t'Tm

s R

mn

'h6

0w

50

b";

ch

ar

fue

nte

2[2

0]°

"t'T

ms

Rm

n'h

l6w

50

b";

ch

ar

fue

nte

3[2

0]=

nt "Tm

s R

mn

'hl2

w5

0b

";

_setg

tex

tvecto

r( 1

, 0

)

;

se

tco

lor(1

04

);

A-146APÉNDICES

Page 135: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

oNno

RE

AdÓ

N Y

CO

NTRO

L DE

L SI

STEM

A AN

ALÍT

ICO

_rectangle( _GFILLINTERIOR, 81, 116 , 559, 433);

_moveto(250 ,150) ;

_setcolor(79)

,-_setfonc( fuentel );

_outgtext{"FIACFA">;

_moveto(180 ,200);

_setfont( fuente2 );

_outgtext ("Programa peí control d'analitzadors"),-

_moveto(220 ,225);

_outgtext("de Nitrits, Nitrats i Amoni");

_36tCOlor(77);

_moveto(100 ,362) ;

_setfont( fuente3 );

_outgtext("Copyright : Juan Bâeza - David Gabriel 1997");

_moveto(100 ,380);

_outgtext("Departament d'Enginyeria Qu¡micaH);

_moveto(100 ,398);

_outgtext("Universitat Autónoma de Barcelona");

/* 80, 115 , 560, 434'/

int botón

( inc on_off, char

nombre, short xl, short yl, short x2, short y2, short font)

short xll=(short) (xl+l) ,

x!2= (short) íxl-t-2 ,

x21=(short) (x2-l ,

x22=(short) (x2-2 ,

yll= (short) (yl+l ,

y!2= (short) (yl+2 ,

y21= (short) (y2-l ,

y22= (short) (y2-2) ;

sh

ort

x

t.y

t,la

rgo

;ch

ar

fue

nte

[3J

[20

]={

"t'

Te

rmin

al'

h!2

w5

0b

""t

'Tm

s R

mn

'hlO

wS

Ob

","t'

Tm

s R

mn

'hS

wS

b"

};

_setgtextvector( 1, O ) ;

_setfont ( fuente [fontj ) ,•

largo=_getgtextextent(nombre);

if (largo>(x2-xl-4)} return -2;

switch(on_off)

ícase 0:

colorí = 15;

COlor2 = 8 ;

break;

case 1:

colorí = 8;

color2 =

7;

break;

default:

return

-1;

_setc

olo

r(7

) ;

_rectangle( _GFILLINTERIOR, xl, yl, x2, y2);

_setcolor(0);

_rectangle( _GBORDER, xl, yl, x2, y2) ;

_setcolor(colorl);

_moveto(xll,y21);

_lineto(xll,yll)

,-_lineto(x21,yll)

,-_moveto(xl2,y22);

_lineto(xl2,yl2);

_lineto(x22,yl2);

_setcolor(color2);

_moveto(x21,yll);

_lineto(x21,y21);

APÉN

DICE

S A

-14

7

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DAR

_li

ne

to(x

ll,y

21

);_

mo

ve

to(x

22

,yl2

);_

Ün

eto

{x

22

,y2

2) ;

_li

ne

to(x

!2,y

22

);

_setcolor(0);

switch(on_off)

ícase 0:

xt= (short) ( (xl+x2-largo)/2) ;

yt=(short)((yl+y2-12)/2);

break;

case 1 :

xt= (short) ( (xl+x2-largo) /2+1)

,-yt=(short)((yl+y2-12)/2+1);

break;

default:

xt= (short) (xl-t-2) ;

yt=* (short) (yl+2) ;

break;

} _moveto ( xt, yt);

_outgtext( nombre );

int graf_texto

(char *nombre, short xl, short yl, short x2, short y2, int font, int fondo)

short largo;

char fuente[2][20]={"t'Tms Rmn'hSwSb","t'Tms Rmn'hl2w50b"};

short xt.yt;

_setgtextvector( 1, O );

_setfont( fuente[font] );

largo=_getgtextextent(nombre);

if (largo>(x2-xl-2>) return -2;

if (fondo==l)

í _setcolor(0);

_rectangle(. _GF ILL INTERÍ OR, xl, yl, x2, y2) ;

xt=(short)((xl+x2-largo)/2);

yt=(short)((yl+y2-9)/2);

_setcolor(30);

_moveto ( xt, yt);

_outgtext( nombre );

retu

rn

O ;

} /'*

**

**

**

**

*

**

**

**

**

.»*

**

**

**

**

.**

*.*

**

**

**

**

*.*

.**

**

**

*.*

.**

**

«*

**

*/

/* A

ctu

ali

za l

as m

atr

ices

uti

lizad

as

para

d

ibu

jar

las

gr

ficas.

ma

t_g

raf;

d

ato

s d

e 2 h

ora

s,

cada

4 se

gu

nd

os

*/

vo

id

actu

ali

zar_

matr

ices_

gra

ficas(v

oid

)

int

i ;

for

(i=

0,-

i<1

79

9;i

+ +

)i ra

at_g

ra[i

]=m

at_g

ra[i

+1]

;i

/*H

acem

os

sit

io p

ara

el

Elt

imo v

alo

r*/

mat_

gra

[17

99

J.ab

sor=

valo

r.ab

sor;

mat_

gra

[1

79

9]

.mv

=v

alo

r.m

v,-

tnat_

gra

[l7

99

] . t

_ab

sor=

valo

r. t_

ab

so

r;m

at_

gra

[17

99

].t_

rov

svalo

r.t_

mv

;/•

Asi

gn

am

os

el

Elt

imo v

alo

r»/

void seleccionar_graficoíint orden)

f A-1

48

APÉN

DICE

S

Page 136: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONITOREACIÓN Y COIÍTROL DEL SISTEMA ANALÍTICO

«define N_SEC 4

switch(orden){

case 1: /*AMUNT*/

dat.inicio_graf--;

if (dat.

inicio__graf <0)

dat.inicio_graf=0;

dat. f in_graf •*-+;

if (dat.fin__graf>N

SEC) dat. f in graf=N SEC;

}break;

case 2: /«ABAIX-/

dat.inicio_graf++;

if ((dat.fin_graf-dat.inicio_graf)cl)

dat.inicio_graf=dat-fin_graf-l;

break;

case 3: /*DRETA*/

dat.fin_graf++;

if (dat.fin_graf>N SEC)

ídat.fin_graf=N_SEC;

break;

idat

- inicio__graf+ •»-;

if (daC.inicio_graf>(N_SEC-l)í dat.inicio_graf=(N_SEC-1);

break;

case 4:

/-ESQUERRA*/

dat.inicio_graf--;

if (d

at.in

icio

g

raf<0

){dat.inicio_graf=0;

break;

)dat.fin_graf--;

if (dat.

f in_graf«:l}

dat. fin_graf*l;

break;

ï

_setcolor (171)

,-_rectangle( _GFILLINTERIOR, 70, 442 ,570, 454);

graf_eje_horizontal (80,

434,560, (short) ( (dat.

inicio__graf-N_SEC) * (120/N_SEC) ) ,

(short) ((dat.fin_graf-N_SEC)M120/N_SEC)), 6,

30);

grafica_variable(0);

grafica_variable(l);

j/.....,...,.............................„..,......„......

.....7/* Gráfica las líneas correspondientes de mV y absorbacia

en la escala de tiempo proporcionada.

*/

void grafica_variable(int variable)

{int i;

short x,y;

float XO[2]={80.0F,80.0F},

yO[2]={265.OF,430.OFJ ;

float

alco=i4S.OF;

float sets[2] [3]s{/*m¡nimo, m ximo, rango*/

{-O.lOF^.OF.l.lF},

/*Absorbancia*/

{-2SO.OF,50.0F,300.0F}}; /*mv*/

double increm_t, increm__tt;

time_t t_final,t^inicial;

int inicío=0,

fin=1799;

_setcolor(30);

_moveto(S60,275);

_lineto(80,275);

t_inicial

=• dat.t_actual-( (4-dat.inicio_graf) «30*60) ;

t_final =

t_inicial+{(dat.fin_graf-dat.inicio graf)*30*60);

increm_tt s (double) (t_final-t_inicial) ;

' "~

switch(variable){

case Oí

/*Abgorbancia*/

for (isO;i<1800;Í++)

APÉNDICES A

-149

DESARROLLO E IMPLEMENTAQON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

if (m

at_

gra

[i] . t__

ab

sor>

t_in

icia

l)í

inic

io=

i;b

reak

;}

for (iaO

;i«:1

80

0,-i-f + )

if (m

at g

ra Ei]-t_

ab

sor>

t fin

al)

ífin

=i;

brealc ;

}_

se

tco

lor(0

);'re

cta

ng

le! _G

FILL

·INT

ER

IOR

, 8

1,

116, 5

59

, 27

4);

_3

etc

olo

r(92

);x=

(sho

rt) (xO

[0]+

i) ;y

=(sh

ort) (y

o[0

]-alto

/sets

[0] [2

]*(m

at_

gra

[inic

io].a

bso

r-sets[0

] [0] ) ) ;

if (y<

120) y

=Z

20

;if

(y>265)

y=

26

5;

_m

ov

eto

(x,y

);fo

r (i=

inic

io*

l;i<fin

;i+*

)íin

cre

m_

t=(d

ou

ble

) d

ifftime

(t_fin

al,m

at_

gra

fi].t_a

bso

r);x=

(sho

rt) (55

9.0

F-in

crem_

t/increm

_tt*

47

8~

.OF

) ;if

(x<

81

| x

>5

S9

) co

ntin

ue;

y= (sh

ort) (y

O[0

] -alto

/sets [O

j [2] * fmat_

gra [ij .a

bso

r-sets (0] [0] ) ) ,-

if (y

<1

20

) y

=l2

0;

if (y

>2

65

) y

=2

65

;_

lineto

(x,y

);}

bre

ak

;case

1:

/*

mV

*/

fo

r (is

O;i<

18

00

;i++

)if

(mat g

ra f

i).t

mv>

t in

icia

l)í

inic

io=

i;b

reak,-

l}

fo

r (i=

0;i<

18

00

;i++

)if

(ma

t_g

ra[i].t_

mv

>t_

fina

l)

fin=

i;

bre

ak

;}

_se

tco

lor(0

);_

_rectan

gle{

_G

FILL

·INT

ER

IOR

, 81,

27

6, 5

59, 433) ,-

_se

tco

lor(1

00

> ;

x= (sh

ort) (x

O[l]+

i);y

=(sh

ort) (yO

[1J-a

lto/s

ets

[1] [2

]*(m

at

gra

tinic

io].m

v-s

ets

[1] [0

]});

if (y

<2

85

) y

=2

65

;if

(y>

43

0)

y=

43

0;

_m

ov

eto

(x,y

);fo

r (isin

icio

+1

;i<fin

;i++

){in

cre

m_

te(d

ou

ble

) d

ifftime

(t_fin

al,ra

at_

gra

[i].t_m

v);

x=

(sho

rt)(55

9-in

cre

m_

t/inc

rem

_tt*

47

8.0

F);

if (x

<8

1 |

x>

55

9)

co

ntin

ue;

y=

(sho

rt) Íy0

{l]-a

lto/s

ets

[1] Í2

]*(m

at_

gra [i].m

v-se

ta[1

] [0] ) ) ;

íf (y

<2

85

) y=>285;

if (y>

430) y

=4

30

;_

line

to(x

,y) ;

bre

ak ;

J

void inventa valores(void)

ftime_t tl;

int i;

tl=time(KULL);

for

(i=0

;i<1

80

0;i+

fma

t_g

rali].t_

mv

=(lo

ng

)(cl-4

.0*

(18

00

.0-i));

A-1

50

AP

ÉN

DIC

ES

Page 137: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. P

ROGR

AMA

DE M

ONI

TORI

ZACI

ÓN

y C

ONT

ROL

DEL

SIST

EMA

ANAL

ÍTIC

O

mat

_gra

{i]

.t_a

bsor

= (

long

) (t

l-4

.0*

(18

00

.0-i

));

mat

_g

ra[i

).m

v=

(flo

at)(

I0.0

-30

0.0

*i/

18

00

.0*

9in

((d

ou

ble

)i/4

0.0

));

mat

_g

ra[i

j.ab

sor-

(flo

at)(

0.5

F+

0.5

-sin

í(d

ou

ble

)i/5

0.O

»;

/* mat

g[1

][i]

-ph

=(f

loat

)(7

.0

-f 4.

0 *

sin

((d

ou

ble

)i/3

0.0

));

mat

g[1

][i]

.tem

p=

(flo

at)(

30

.0+

10

.0

* co

s((d

ou

ble

)i/3

0.0

});

mat

g[1

][il

.tie

rop

o=

(lo

ng

int)

(t

ime(

NU

LL) +

((l

on

g in

t)i*

60

*5

*8

J);*

/

void

ba

rra_

boto

nes(

void

){ _se

tco

lor(

17

1);

_rectangle( _GFILLINTERIOR, 600, O ,639, 479);

_setcolor(29);

_rectangle( _GBORDER, 600, O ,639. 479);

botón! O, "Barra", 603, 3, 636, 20, 1) ;

botón! O, "Ar", 610, 30, 629, 50, 2);

botoní O, "Ab", 610, 60, 629, 80, 2) ;

botoní O,

"De", 610, 90, 629, 110, 2);

botón! O, "Iz", 610, 120, 629, 140, 2);

/* CÇdigo necesario si desean hacerse pruebas.

Si quiere utilizarse debe definirse TEST al inicio del fichero

Kifdef TEST

void maint)

( modo_grafico ();

graf_display{);

graf_base();

graf_presentacion();

graf_ejes_tiempo(l);

graf_valor_absor();

graf_valor mv();

getcht);

getchí) ;

_setvideomode( _DEFAULTMODE );

«endif

APÉN

DICE

S A

-151

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DAR

PCL711.C -

FUNCIONES PARA UTILIZAR LA PLACA DE SALIDAS pcl711

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 28/8/97

Librerías a incluir

((include <stdio.h>

((include <conio.h>

ffdefine BASE 0x220

/*direccic base de la placa

SubruC inaa de 1 f i chero *******************

pcl711*/

***/

int pcl711 (int salida, int on_off ) ;

void actuacion_externa_pcl711 (void) ;

void presa_mo3tra (int la_mostra) ;

void apaga_pcl711 (void) ;

/* Funciín para pedir por pantalla en modo texto loa par metros para

ejecutar la función pcl7ll, que var;a el estado de una salida. */

void actuacion_externa_pcl711 (void)

int salida, on_of f ;

printf ("NEmero de salida: " } ;

fscanf (stdin, "%d", &salida) ;

printf ("Encendido/ Apagado: " ) ;

fscanf (stdin, "%d", &on_off) ;

pcl711 (salida, on off) ;

/* Control de la placa pcl7ll.

Función para variar el estado de una salida de la placa pcl711.

int pcl711 (int salida, int on_off)

{ unsigned char high_byte,low_byte;

static unsigned int consigna=0;

if (on_off!=0 && on_off!=l) return -1;

if (salida<0 || salida>15) return -2;

/*Si los par metros no son correctos, devuelve un ctdigo de error*/

if (on_off==l) consigna=consigna | (l«:3alida);

if (on_of f oaQ) consigna=consigna & ~ (l«salída)

low_byte=(char) (consigna & 255);

high_byte= íchar) (consigna»8) ;

_Outpw(BASE+13,low_byte};

_outpw(BASE+14,high_byteï;

void apaga_pcl7ll(void)

int i=0;

for (i=l;i<16;i++) pcl711(i,0);

A-152

APÉNDICES

Page 138: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. PROGRAMA DE MONFTORIZACIÓN Y CONTROL DEL SISTEMA ANALÍTICO

void preaa_rao3tratint la mostra)

iapaga_pcl711O ;

/•

gotoxy(78,25);

printf<"%li",la_mostra);

•/switch(la_mostra)

(case O:

pcl7ll(8,l);

/* Circuit mostreig Reactor Anaerobi */

pcl7ll(7,1);

break;

case 1 :

break;

case 2 :

pcl711(l,l);

pcl711(3,l) ;

pCl711 (5,

1) ;

break;

case 3 :

pcl711 (6, in-

break;

case 4 :

pcl711 (4,

1) ;

break ;

case 5:

break ;

i

/* Circuit mostreig Reactor 1 */

/* electrovalvula I*/

/* electrovalvula 2*/

/* electrovalvula 10*/

/* Circuit mostreig Reactor 2 */

/* electrovalvula I*/

/* electrovalvula 3*/

/* electrovalvula 10*/

/* Circuit mostreig Reactor 3 */

/* electrovalvula ll*/

/* Circuit mostreig Sortida sistema */

/* electrovalvula 7*/

/* Mostra manual FIA */

ftifdef TEST

int maint int argc, char *argv [] )

int salida,on_of f ;

long int i;

/*if (argc==l)

printf ("\nUtiliza: pcl711 salida on_off \nn);

return -1;

salida=atoi (argvtl] ) ;

on_off =atoi (argv(2] ) ;

if (pclvil (salida, on_of£l==l) printf ("\nSalida OK\n-

else printf ("\nSalida NO OK\nn);

for (salida=o ; salida<16 ; salida-*--*-}

pcnil (salida, 1) ,

for (i=0;i<300000¡i +

for <salida=0;salida<16;salida++)

pclVll (salida, 0) ;

for (i=0;i<300000;i»t) ;

ttendif

/******

APÉNDICES A

-153

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

FITXER DE CONFIGURACIÓ FIA4.DAT

30506000

600

3865100

130

1728

393254

0.010

460

430

temps estabilització inicial sistema (seg)

temps inici calcul linea base en operació normal (seg)

temps fi calcul linea base en operació normal (seg)

numero d'injeccions entre calibrats nitrats (nou hores)

temps inici lectura detecció màxim nitrits(seg)

temps inici lectura detecció màxim nitrats+nitrits(seg)

temps retorn a posició 'load' (seg) (carrega loop)

temps retorn a posició 'inject'(seg)

increment de temps entre 50 ppm i 30 ppm nitrats (seg)

increment de temps entre 50 ppm i 15 ppm (seg)

increment de temps entre 50 ppm i 5 ppm (seg)

increment de temps entre 50 ppm i 1 ppm (seg) (antes 330)

increment de temps pic entre 3 ppm i 2 ppm nitrits {seg)

increment de temps pic entre 3 ppm i 1 ppm nitrits (seg)

increment de temps pic entre 3 ppm i 0.5 ppm nitrits (seg)

increment de temps pic entre 7 ppm i 5 ppm nitrits (seg)

increment de temps pic entre 7 ppm i 3 ppm nitrits (seg)

increment de temps pic entre 7 ppm i 1 ppm nitrits (seg)

temps inici càlcul linea base en calibracio nitrats (seg)

temps fi càlcul linea base en calibracio nitrats (seg)

error màxim acceptat entre dos pics consecutius en la calibracio (mUA)

temps pel canvi del punt de mostreig

temps per la lectura dels mv pel calcul de l'amoni

A-154

APÉNDICES

Page 139: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

•••••••••••••••o

Page 140: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. PR

OGRA

MA D

EL PL

C

1

| *

C

ON

TRO

L P

RIN

CIP

AL

2 +

1 +

| M

50

|

i 13

+--

| +

--|

M 5

1i

4 +

--!

+--

| M

5

4

5

+--

| +

--¡

M

62i 1

6 +

-- 1

+ --

¡ M

52

17

+--¡

+ -

- +

1 M

53

18

|9

| *

SI

NO

HA

Y A

LAR

MA

S E

NC

IEN

DE

LA

S B

OM

BA

S Y

EN

TRA

DA

T

rt

.

1 /

,

1 / .

j_U

+

[

/ +

1

/ •*

| M

52

M

53

|!

11

11

J.

ü

1 +

] ! | M

5

2 Q

3

1

50

1 | M

52

Q

3

150

114

+

• -

| / +

¡

+

[T

32

]1

M

53

Q

4 15

0

11

5

H |

/H

| /H

ÍT

3

3]

1 M

53

Q

4

150

116

¡

* C

ON

TRO

L

DE

NIV

EL

^ 1

J.

1

1 A

.L

I +

--

[/+

1 M

0

1-1 n

, j

/ ,

rrri

-il

lo

+ —

l'+

L -L

J "•

-1

M

0 2

1

1 1

1 I

121 1

M

0 T

1

I 12

121

j

* N

ivel

alt

o s

edim

enta

dor

| M

0

T

1

I

14

1 1 M

0

T

1 I

141 1

24

¡ *

C

EBA

DO

R

TAN

QU

E 1

| M

0

T

1

I 10

!7

fi

j.

-

Í /J.

1/4

. 1

/4

.¿

O

4.

]/+

I/"

*"

I'"

*"

¡ M

0

T

1

I

10

27

-4--

-I

+ ¡

+ [T

5]

1 M

52

Q

3

50

a

(JM

P) |

* *(S

ET

)Q

1

Q

5

Q

3

_ (S

ET

)Q

3

\ K

o l ;

Q 4

(SE

T)

Q

4

(SE

T)

Q

27

(SE

T)

M

0

f p

e;rp

\^ K

a 1

í•

Q

2

(SE

T)

Q

2

*(R

ST

)Q

0

Q 0

-M

52

(RS

T)

M

52

(RS

T)

Q

3

APÉN

DICE

S A

- 1

55

>••••••••••••••••••€

DESA

RROL

LO E

IMPL

EMEN

TACC

ON D

E UN

SISTE

MA S

UPER

VISO

R PA

RA LA

GEST

ION

Y CON

TROL

DE

EDAR

! ¡ M

52

Q

3

50

!29

|

*

CEB

AD

OR

TA

NQ

UE

2

M

0

T

1

I 11

M

0

T

1

I 11

M

53

Q

4 50

1 M

53

Q

4

50

!34

*

ALA

RM

A

DE

P

OS

IBL

E

ES

CA

PE

¡ M

0

T

1

I

13

!36

¡

* T

EM

POR

IZA

DO

R

DE

L C

ON

TRO

L D

E N

IVE

L

! M

0

I 1 Q

.

27

300

139

1

40

1 *

CO

NTA

DO

RES

-

EN

CE

ND

IDO

1 ! M

2

1 ¡M

0

T

1

I 1

2! 1

M

0

1

T

1

I 12

144

1

* C

ON

TAD

OR

ES

- A

PAG

AD

O1 |

M

31 1

M

0 T

1

I 12

1 1 M

0

T

1 I

12!

48

¡ *

ALA

RM

AS

CO

NTA

DO

RES

| C

0

1 1 C

1

1 ! M

50

1

! 1

1 M

5l

1 1

M

54

¡!

!

A -

156

AP

ÉNDI

CES

>•••••••••

Q

3

*

M

53

M

53

Q 4

Q

4

M

54

Q

27

M

0

* '

*

+ +

R I

30¡

I 1

C •*•

+

M

2

•f +

R 1

20|

1 1

C

+ +

M

3

M

50

M

51

Q 1

Q

2

Q 3

Page 141: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

55

56

57

58

59

60

61

62

63

6465

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

APÉNDICES. PROGRAMA DEL PLC

M 5

2 |

Q

4 ¡

1 !

M

53

1 (

35

1 Q

2

7

Q

0

M

40 Q

3

M

41 Q

4

*

*

*

PUR

GA

.

Ml

Q

21

Ml

l|

Ml

1

Q

21

Q

21

6

00

0

99

99

99

99

99

99

99

99

M

1

*

**

BO

MB

AS

DO

SIFICA

DO

RA

S *

* U

N

IMP

UL

SO

T

EM

PO

RIZ

AD

O

*

M

10

06

M

10

1

| M

10

Q

6

M

10

Q

6

800

M

10

*

*

M

11

Q

7

M

11

1

|

M

11

Q 7

M

11

Q

7

800

M

11

* M

ÚL

TIP

LE

S IM

PUL

SOS

TE

MP

OR

IZA

DO

S *

+ +

M

12 •

R j

5 j

.., + ¡

jM

13

'

~

' '

C

+

+

APÉNDICES A

- 157

DESA

RROI!

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

A-15Í O E IM

PLEMEW

TACIÓN DE UN SISTEMA

SUPERVISOR PARA LA GESTIÓN Y CONTROL DE ED

AR

C

10 3

00

0

M

12

*

*

C

10

M

13

¡ Q

6

1

Q 7

C

10

M

13

1

| M

13

!! Q

6

1

Q 7

M

13 C

10

Q

6 7

M

13

* A

PAG

AD

O

EX

TE

RN

O

*

M

61

!

Q

1

!

Q

2

1 Q

3!1

Q

4

!1 Q

01¡

Q

27

1i| M

6

2|

10

M

61

*

*

* R

ES

ET

D

E A

LA

RM

AS,

RE

INIC

IO

*

M

60 j

M

2

i| M

- 3

I| M

5

0

| M

51

1

: APÉNDICES

Page 142: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

4 SÈRVlDORiDE os1'\ / >

Page 143: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. S

ERVI

DOR

DE

DATO

S

MISERVER.C - FUNCIONES PARA LA COMUNICACIÓN CON PCS

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 20/10/98

** Librerías a incluir

«include <stdio.h>

«include <string.h>

«include oys/types.h>

«include oys/socket .h>

«include <sys/uio.h>

«include <sys/ioctl.h>

«include <netinet/in.h>

«include <arpa/inet.h>

«include <netdb.h>

«include <errno.h>

ff include <stdlib.h>

«include <signal.h>

«include <sys/ipc.h>

fiinclude <sys/shm.h>

ffinclude <time. h>

/•Memoria compartida*/

/•Memoria compartida*/

/* Tiempo */

/***«***..***»***+******* Definiciones ****•*•**»**•*•*••»*********»***/

/•ftdefine DEPURA'*/

«define Port (ushort)

32323 /* numero del puerto del socket */

«define TAMANY

512

/* tamaño del buffer de recepción de datos */

ftdefine TAMANY_PETIT 32

«define SEMKEYI ((key_t) 4223353L) /*Semáforo, definiciones en semáforo.c*/

fídefine SEMKEY2 ((key t) 4223354L) /«Semáforo, definiciones en semaforo.c*/

ítdefine SEMKEY3 ((key~t) 4223355L) /*Semáforo, definiciones en semaforo.c*/

ífdefine SHMKEY1 ((key t) 1995)

ttdefine SHMKEY2 ((key't) 1996)

ífdefine SHMKEY3 ( (keyt) 1997)

ftdefine TAMANY_SMl 1000

«define TAMANY_SM2 1000

ítdefine TAMANY_SM3 1000

ftdefine TAMANY_M

100

ftdefine PERMS 0644

«define err_sys(A) printf (A "\n")

/* Segmentos de memoria compartida */

/* Tamaño memoria compartida l */

/* Tamaño memoria compartida 2 */

/* Tamaño memoria compartida 3 */

/* Tamaño del mensaje cliente */

/* Permisos de acceso */

ftdefine MIS ADDRS

(u_long)0x00000000 /* Direcciones permitidas */

*** Subrutinas del fichero ***********************/

void mi_servidor(ínt clientSocket);

int nuevos_datos_cliente(void);

int mensaje_cliente(void);

int comprueba_consignas_gsi(void);

void medidas_al_buffer(void) ;

void mensaje_al_buffer(void);

void medidas_texto(void);

void otras_medidas_texto(void);

void medidas_analisis(void);

int

datos_cliente_varios(void)

,-void ayuda_servidor(void);

int createService(ushort port);

int disconnectClient(int clientSocket);

void

error_bind(int errno);

/.*•***.****•****.** variables comunes del programa a*********'*****»****/

struct tercera{

/*Estructura per paramètres referents als controladors*/

char nom(31 [10J;

/*Nom del controlador*/

int controlador[3];

/«Numéro del controlador */

APÉN

DICE

S A

-161

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR PA

RA L

A GE

STIÓ

N Y

CON

TROL

DE

EDAR

double

double

double

double

double

double

double

double

double

char

char

char

int

time_t

}medidas;

struct cuarta{

char

ph

[3];

tem

pe

ratu

ra[3

] ;

po

ten

cia

l[3

];o

xig

en

o[3

] ;

mA

[3];

velo

cid

ad

[3]

,-cau

dale

s[3

];se

t_p

oin

t_o

xig

en

o[3

];se

t__

po

int_

ag

itacio

n [

3] ;

en

trad

as_

plc

[16

];sa

lid

as_

plc

(24

);est

ad

os_

vari

os{

20

];ti

em

po

s[1

0J;

tiem

po

;

/•V

alo

r m

esu

rat

de

la

vari

ab

le*

//*

Valo

r m

esu

rat

de

la

vari

ab

le*

//•

Valo

r m

esu

rat

de la

v

ari

ab

le*

//*

Valo

r m

esu

rat

de

la

vari

ab

le*

//*

Valo

r m

esu

rat

de

la

vari

ab

le*

//•

Valo

r m

esu

rat

de

la

vari

ab

le*

/

/•T

iem

po d

e la

s v

ari

ab

les*

/

/*

Est

ructu

ra

para

la

s co

nsi

gn

as

*/

cam

bio

_o

xig

eno

{3

],cam

bio

_ag

itacio

n[3

J ,

cam

bio

_cau

dale

s[3

] ,

cam

bio

_ti

emp

os

[10

] ,-

do

ub

le

valo

r_o

xig

en

o[3

],v

alo

r_ag

itacio

n[3

],v

alo

r_cau

dale

s[3

];in

t ti

em

po

s(1

0];

ch

ar

cam

bio

_v

ari

ab

le[2

0]

;d

ou

ble

v

alo

r_v

ari

ab

le(2

0];

}co

nsi

gn

as;

str

uct

qu

inta

{

/* E

stru

ctu

ra

para

lo

s an

ali

zad

ore

s *

/d

ou

ble

n

itra

tos;

tim

e_

t t_

nit

rato

s;

do

ub

le n

itri

tos;

t im

e_t

t_n

i tr i t

os ;

do

ub

le

amo

nio

;ti

me_

t t_

amo

nio

;}

an

ali

sis

[5];

str

uct

vari

os{

double

v

ari

ab

le[2

0]

;ti

me_

t t_

va

ria

ble

[20

];

ch

ar

bu

ffe

r [T

AM

AN

Y]

,-ch

ar

bu

ffe

rjp

(T

AM

AN

Y_P

ET

IT]

;

int

sem

idl,

sem

id2

,se

mid

3;

int

shm

idl,

shm

id2

,S

hm

id3

;ch

ar

*d

ireccio

nl,

*d

ireccio

n2

,*

dir

eccio

n3

;

mainO

{ /•struct sockaddr_in clientSockAddr;*/

struct gockaddr clientSockAddr;

int serverSocket;

ínt clientSocket;

int addrLen;

int j;

int pid;

/* Segmentos de memoria compartida */

if ( (shmidl=shmget(SHMKEYl, TAMANY_SM1, PERMS) IPC_CR£AT) ) <0>

err_sys("Miserver: No puedo obtener la memoria compartida l\n");

if ( (direccionl=(char *)shmat(shmidl, O, 0)) == (char *)

-l>

A-162

APÉNDICES

Page 144: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. SERVIDOR DE DATOS

err_sys("Miserver: No puedo unirme a la memoria compartida l\n");

if ( <shmid2=shmget(SHMKEY2, TAHANY_SM2, PERMS|IPC_CREAT)} <0)

err_sys("Miserver: No puedo obtener la memoria compartida 2\n");

if ( (direccion2=i

(char *} s

hmat (shmid2. O, 0}) == (char

*)-1)

err__sys ("Miserver: No puedo unirme a la memoria compartida 2\n");

if ( (shmid3=3hmget(SHMKEY3, TAMANY_SM3, PERMS|IPC_CREAT)) <0)

err_sys{"Miserver: No puedo obtener la memoria compartida 3\nn);

if ( (direccion3=(cnar *)shmat(shmid3, o, 0}) == (char

*)-!)

err_sys("Miserver: No puedo unirme a la memoria compartida 3\nn);

/* Semáforos para acceder a la memoria compartida */

semidl=sem_create(SEMKEYl, 1);

semid2=sem_create(SEMKEY2, 1);

semid3=sem_create(SËMKEY3, 1);

ítifdef DEPURA

litaei DEPURA

)rintf{"He abierto el semáforo 1,

%lu\n", semidl);

)rintf(nHe abierto el semáforo 2,

%lu\n", semid2);

>rintf("He abierto el

semáforo 3,

%lu\n", semid3)

,-¡f>nrilf

pP:ífendif

/***.***********.*****************»*************,**.**«•.**********.*

/* Inicialización de la memoria compartida */

sem_wait(semidl); /* Espera el semáforo 1 */

memsett direccionl. O, TAMANY_SMl);

/* Borra memoria compartida I*/

sem_signal(semidl); /* Deja el semáforo 1 */

sem_wait(semid2); /* Espera el semáforo 2 */

memaet( direccion2, O, TAMAHY_SM2); /* Borra memoria compartida 2*/

sem_signal(semid2); /* Deja el semáforo 2 */

sem_wait(semid3); /* Espera el semáforo 3 */

memset( direccions, O, TAMANY_SM3); /* Borra memoria compartida 3*/

sem_signalÍsemid3); /* Deja el semáforo 3 */

signal (SIGCHLD, SIG_IGN);

/* Ignorar muertes de hijoa */

j-0;

/****

****

*****

******

***

•****•*

******

/*

Se crea un socket y se inicializa el servicio TCP en el puerto

seleccionado

*/

serverSocket = createService (Port)

,-if

(serverSocket==-l) goto el_final;

addrLen = sizeof(clientSockAddr);

/**

**

**

**

* *

.**

**

**

•*.*

**

*.*

**

*..*

**

..**

**

**

,**

**

**

**

**

**

*.*

**

/*

Se e

spera

hasta

q

ue u

n c

lien

te p

ida

serv

icio

*

/

ftifdef

DEPU

RA

prin

t f ("\nS

erv

ido

r: esp

era

nd

o lle

gad

a

clie

nte

. tf%

i\n" , j ) ;ífen

dif

clientSocket*accept(serverSocket, üclientSockAddr, taddrLen);

if (clientSocket==-l) goto el_final;

ítifdef DEPURA

printf("Servidor: el cliente ha llegado. \n") ;

ífendif

pid=fork{);

#ifdef DEPURA

APÉNDICES A

-163

DESARROLLO E IM

PLEMENTAG

ON

DE UN SISTEMA SUPERVISOR

PARA LA GESTIÓN Y CONTROL DE EDAR

printf("Proceso: %i\n",pid);

iíendif

if (pid==-l) exit(l); /* Error al hacer el proceso hijo */

if (pid==0)

/* Proceso hijo */

#ifdef DEPURA

printf("\nServidor en marcha ... \n");

ftendifif(close{serverSocket)==-1)

printf("ERROR close server\nn);

mi_servidor(clientSocket);

ífifdef DEPURA

printf("\n... fin de servidor,\n");

iíendifexi

t(O);

} /*Fin proceso hijo*/

if (close(clientSocket) ==

-1)

/* Tratamiento del padre */

printf ("ERROR en close client\n"),-

}if (shmdt(direccionl) < 0)

err_sys("Miserver: No puedo soltar la memoria compartida l\n");

if (shmctl(shmidl, IPC_RMID, (struct shmid_ds *)0) <0)

err_sys("Miserver: No puedo eliminar la memoria compartida l\n");

if (ahmdt(direccion2) < 0)

err_ays("Miserver: No puedo soltar la memoria compartida 2\n");

if (shmctl(shmid2, IPC_RMID, (struct shmid_ds *)0) <0)

err_sys("Miserver: No puedo eliminar la memoria compartida 2\n");

if (shmdt(direccion3) < 0)

err_sys("Miserver: No puedo soltar la memoria compartida 3\n");

if (shmctl(ahmid3, IPC_RMID, (struct

shmid_ds «)0) <0)

err_sys("Miserver; No puedo eliminar la memoria compartida 3\nB);

sem_rm(semidl);

printf("He machacado el semáforo l\nn);

sem_rm(semid2)

,-printf ("He

machacado el semáforo 2\n"),-

sem_rm(semid3);

printf ("He

machacado el semáforo 3\n"),-

el_final:

printf ("Eso

es todo amigosVn");

/* Intercambio de información con el PC */

void mi_servidor(int clientSocket)

ichar carácter[1];

int fin

= 0;

do

/* Mientras existan peticiones ...*/

{carácter¡0]=0;

/* Recibimos petición «/

recv(clientSocket, carácter, sizeof (carácter) , O)

,-

ítifdef DEPURA

printf ("Petición: %c\n", carácter [0]);

ítendif

/* Actuamos en función de la petición*/

A-164

APÉNDICES

Page 145: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICES

. SER

VIDOR

DE

DATO

S

witchícaracterton

í case 'S'¡ /* Establecer nuevos datos */

recv (clientSocket, buffer, sizeof (buf fer) , 0) ;

if (nuevos_datos_cliente ()

== I) /* Comprobación de datos */

carácter [0] = 'O' ;

sendíclientSocket

else

/* Si no son correctos devuelve U */

í carácter [0] = 'Nr ;

sendíclientSocket, carácter , sizeof (carácter) , 0)

;}

break;

case 'M

1 :recv(clientSocket, buffer, sizeof (buf fer) , 0)

;if (mensaje_cliente () == 1) /* Comprobación de datos */

{ carácter [0] ='0' ;

sendlclientSocket, carácter , sizeof (carácter) , 01;

/* Si no son correctos devuelve N */

sendtclientSocket, carácter , sizeof(carácter), 0);

ibreak;

case 'R':

medidas al_buf fer () ;

sendíclientSocket, buffer, sizeof (buffer) , 0) ;

break;

case 'C*:

if ( comprueba_consignas gsi()== 1)

í caràcter[O]='S';

sendtclientSocket, caràcter , sizeof(caràcter), 0);

sendíclientSocket, buffer, sizeof(buffer), 0);

recvíclientSocket, caràcter, sizeof(caràcter), 0);

/* Si se ha conseguido la conexión, borra las consignas de la estructura */

if (caràcter [0]

=>='0' )

í sem_wait(semid2);

/* Espera el semáforo 2 */

memsetí direccion2. O, sizeof(consignas));

sen» signal (semid2) ;

/* Deja el semáforo 2 */

(else ( carácter[O]='N';

sendíclientSocket, carácter , aizeof(carácter), 0) ;

}break;

case 'W: /* Warning, mensaje de la planta */

mensaje_al_buffer();

sendíclientSocket, buffer, sizeof(buffer), 0);

break;

case 'P':

/* Fin de la conexión */

disconnectClient(clientSocket);

fin - 1;

break;

case 'E': /* Tratamiento especial de datos */

medidas_texto();

sendíclientSocket, buffer, sizeof(buffer), O);

break;

case '0': /* Tratamiento especial de datos */

otras_medidas_texto();

sendtclientSocket, buffer, sizeof(buffer), 0);

break;

case 'A1: /* Datos recibidos de los analizadores */

recv(clientSocket, buffer, sizeof(buffer), 0) ;

if (nuevos_datos_analizadores() == l) /* Comprobación de datos */

carácter[O]='O*;

send(clientSocket, carácter , sizeof(carácter), 0);

APÉN

DICE

S A

-16

5

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN SI

STEM

A SU

PERV

ISOR P

ARA

LA G

ESTIÓ

N Y C

ONTR

OL DE

EDA

R

/* Si ño

os devuelve N */

carácter [01 ='N' ;

send (clientSocket, carácter , sizeof (carácter) , 0)

;}

break;

case 'N': /* Valores de los analizadores para enviar*/

medidas_analisis () ;

sendtclientSocket, buffer, sizeof (buffer) , O) ;

break;

case 'V :

recv(clientSocket, buffer_p, sizeof (buf fer_p) , 0) ;

if (datos__cliente varios () == 1) /* Comprobación de datos */

f carácter [0] = *O'

;sendíclientSocket, carácter , sizeof (carácter) , O) ;

}else

/* Si no son correctos devuelve N */

f caracter[0]='N';

sen

dtc

lien

tSo

ck

et,

cará

cte

r ,

sizeo

f (c

ará

cte

r) ,

o

);)

bre

ak

;case 'H' : /* Ayuda del servidor */

case ' ? ' :

case 'h

1 :

ayuda_servidor O ;

sendtclientSocket, buffer, sizeof (buf fer) , 0) ;

break;

default:

/* Si se trata de una orden no contemplada, se desconecta */

ttifdef DEPURA

printf ("Por defecto ... \n");

«endif

disconnectClient (clientSocketí ;

fin . 1;

break; }

} while (fin.. 0) ;

X.................. ........ ............ ......... ............. ............ /

/* Toma el buffer mandado por el cliente y da valores a la estructura

de las medidas */

int nuevos_datos_cliente(void)

{ str

uct

seg

un

da

{ch

ar

nom

[3]

[101

,co

ntr

ola

do

r [3

] (1

0]

,p

h[3

] [1

0],

tem

pera

tura

(3J

[10

1 ,

po

ten

cia

l [3

] [1

0] ,

ox

igen

o{3

] [1

0]

,m

A[3

] [1

0]

,v

elo

cid

ad

[3]

[10

] ,

cau

dale

s [3

] (1

0J ,

set_

po

int_

ox

igen

o[3

] [1

0]

,se

tjp

oin

t_ag

itacio

n [

3] [

10

],en

trad

as_

plc

[16

1 ,

sali

das_

plc

[24

] ,

est

ad

os_

vari

os

[20

] ,

tiem

po

s [1

0J [

10]

;Jd

ato

s;

int i=0;

int chequeóla OL,

chequeo2=OL;

t ime_t t i empo ;

for U=0;i<(TAMAHY-12);i++) chequeo l+=buf f er [i] ;

chequeo2= atoi (&buf fer [500] ) ;

if (chequeol«chequeo2)

A-166

APÉNDICES

Page 146: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. SERVIDOR DE DATOS

int sem créate( key t key, int initval}

{register int

id, semval,-

unión semun

(int

val;

struct semid_ds *buf;

ushort

*array;

} semctl_arg;

if (key

.. IPC_PRIVATE) return (-1);

else if (key

»- (key_t) -1) return (-11;

ag

ain

:if

( (id

> semgetlkey,

3, PERM

S |

IPC_CREAT))

< 0)retu

rn (-1);

if (sem

oplid, sop_lock[o],

2) < 0)

{if (errno == EINVAL) goto again;

err_ays("can1t lock");

}

if ( (semval - semctKid, 1, GETVAL, 0) ) < 0)

err_ays("can't GETVAL");

if (semval == 0)

{semctl_arg.val = initval;

if (semctKid, 0, SETVAL, semctl_arg) < 0)

err__sys ("can SETVAL [o]

") ;

aemctl_arg-val = BIGCOUNT;

if {semctKid, 1, SETVAL, semctl_arg) < 0)

err ays("can SETVAL [1]

"),-}

if (semopiid, &op_endcreate[0] , 2) < 0)

err_sys("can1t end create");

return(id);

/* Abre un semáforo que ya existe.

Devuelve la identidad del semáforo.

*/

int sem_open (key_t key)

(register int id;

if (key == IPC_PRIV

ATE)

return

(-1);

else if (k

ey == (key_t)

-1} retu

rn (-1

) ,-

if (

(id = sem

getikey, 3,

0)) < 0)

return ( - 1

) ;

if (sem

op (id,

&op__open [0] ,

1) < 0)

err^sys ("can

't open") ;

return (id)

;

/* Elimina un semáforo.

Debe ser llamada por el servidor. */

void sem rm(int id)

í

if (semctKid, 0 , IPC_RMID, O) < 0)

err_sys("can't IPC_RMIDn)

;

/* Cierra un semáforo. */

void sem close(int id)

APÉNDICES A

-17

9

DE

SA

RR

OliO

E iM

PLE

ME

/fTAdÓ

N D

E U

N S

ISTE

MA

SU

PE

RV

ISO

R PARA

LA G

ES

TIÓN

Y C

ON

TRO

L D

E E

DA

R

register

int

semval;

if (sem

oplid, &

op_close[0}, 3)

< 0)err_sys{"can*t

semop");

if (semval=semctl(id, 1, GETVAL, 0) <

0)

err_sys("can1t GETVAL"};

if (semval > BIGCOUNT)

err_sys("sem[l] > BIGCOUNT"),-

else if (semval « BIGCOUNT)

sem_rm(id);

else

if (sem

opfid, &

op_unlock[0), 1)

< 0)err_

sys(

rcan't

unlock");

/* Espera hasta que el semáforo es mayor que cero.

Después le resta 1 y vuelve */

void sem wait(int id)

{sem_op(id,-1);

/.*»*****,*****..****.*******»***..**+************

/* Incrementa un semáforo en 1 */

void sem_signal(int id)

sem_op(id,1);

/* Operación general sobre un semáforo.

*/

void sem_op(int id, int valué)

if ( (op_op[0].sem_op = valué) == O)

err_sys("can't have value == O");

if (sem

op(id, &

op_op[0], 1)

< 0)err_sys ( "aem

_op error"),-

A-180

APÉNDICES

Page 147: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. S

ERVID

OR DE

DAT

OS

MIGSI.C - PROGRAMA PARA ACCEDER A LA MEMORIA COMPARTIDA Y MOSTRAR LOS DATOS

IN-LINE POR PANTALLA

PROGRAMADOR: Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 26/10/98

«include <stdio.h>

«include <string.h>

«include <sys/types.h>

«include <sys/ipc.h>

Sinclude <sys/shm.h>

ííinclude <time.h>

/* Tiempo */

ftdef ine SEMKEY1 ( (key_t) 4223353L)

{(define SEMKEY2 {(key_t) 4223354L)

«define SHMKEY1 ( (key_t) 1995)

«define SHMKSY2 ((key_t) 1995)

«define TAMANY_SM1 1000

«define TAMANY_SM2 1000

«define TAMANY_M

100

/•Semáforo, definiciones en semáforo.c*/

/•Semáforo, definiciones en semáforo.c*/

/* Segmentos de memoria compartida */

/* Tamaño memoria compartida 1 */

/* Tamaño memoria compartida 2 */

/* Tamaño del mensaje cliente */

«define PERMS 0644

«define err_sys(A) printf

/• Permisos de acceso */

struct tercera{

/•Estructura per paramètres referents als controladors*/

char nom [3] [10] ;

int controlador[3];

double phl3);

double temperatura(3J;

double potencial[3];

double oxigeno[3];

double mA[3];

double velocidad[3];

double caudales[3];

double set_point_oxigeno[3] ;

double set_point_agitacion[3] ;

char

entradas_plc[16];

char

salidas_plc[24];

char

estados_varios [20]

,-int

tiempos[10];

time_t tiempo;

}medidas;

struct cuarta{

/* Estructura para las consignas */

char

cambio_oxigeno[3],

cambio_agitacion[3],

cambio_caudales(3J,

cambio_tiempos(10];

double valor_oxigeno[3],

valor_agitacion[3] ,

valor_caudales [3] ,•

int

tiempos[10] ;

char

cambio_variable[20];

double valor_variable[20];

Jconsignas;

/•Nom del controlador*/

/•Numero del controlador */

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable"/

/•Valor mesurat de la variable*/

/•Valor mesurat de la variable*/

/•Valor mesurât de la variable*/

/*Tiempo de las variables*/

int semidl,

semid2;

int shmidl,

shmid2;

char *direccionl,

*direccion2;

void main(void)

í int i;

struct tra *mihor

APÉN

DICE

S A

-181

DESA

RROL

LO E

IMPL

EMEN

TAQÓ

N DE

UN

SISTE

MA S

UPER

VISOR

PAR

A LA

GES

TIÓN

Y CO

WTR

OL D

E ED

AR

time_t hora_actual;

char mensaje_cliente{TAMANY_Mj;

/* Segmentos de memoria compartida */

if í (shmidl=shmget(SHMKEYl, TAMANY_SM1, PERMS )) <0>

err_sys("Miserver: No puedo obtener la memoria compartida l\n");

if { (direccionl=(char *)shraattshmidl, O, O)) « (char *)-!)

err_ays("Miserver: No puedo unirme a la memoria compartida l\n");

if ( <shmid2oshmget(SHMKEY2, TAMANY_SM2, PERMS }) <0)

err_sys("Migsi: No puedo obtener la memoria compartida 2\n");

if ( (direccion2=(char *)shmatÍshmid2, O, O)) -- (char *ï-l)

err_sys("Migsi: No puedo unirme a la memoria compartida 2\n");

if {(shmidl==-l)

j | (shmid2»-l) ) goto elfin;

semidl=sem_ppen(SEMKEYl);

semid2o3em_open(SEMKEY2);

if ( (semidl

=> = -i) | j (semid2 == -1) ) goto elfin;

sem_wait(semidl);

/* Esperando el semáforo 1 */

memcpy(tmedidas,direccionl,sizeof(medidas));

memcpy(mensaje_cliente, &direccionl[500], sizeof(raensaje_cliente));

sem_signal(semidl);

/* Deja el semáforo i*/

sem_wait(semid2);

/* Esperando el semáforo 2 */

memcpy(¿consignas,direccion2,sizeof(consignas));

sem_signal(semid2);

/* Deja el semáforo 2*/

printf("Hedidas: \n\n");

printf{

printf(

medidas

printf(

printf(

medidas

printf(

printf(

printf(

printf(

printf(

medidas

printf(

medidas

\t%s\t%s\t%s\n", medidas,nom(0],medidas.nom[l],medidas.nom[2]};

\t*i\t\t%i\t\t%i\n".

controlador [0] .medidas .controlador [1] .medidas. controlador [2] ) ;

pH: \t%f\t%f\t%f\n", medidas. ph[0] .medidas. phfl] .medidas .ph [2] ) ;

T:

\t%f\t%f\t%f\n",

temperatura [O] .medidas .temperatura [1] .medidas .temperatura [2] ) ;

mV: \t%f\t%f\t%f\n" , medidas. potencial [0] .medidas -potencial [1] .medidas .potencial [2] )

;medidas. oxigeno [O] .medidas. oxigeno [1]

, medidas .oxigeno [2] ) ;

medidas. mA f 0] .medidas .mA[l] , medidas. mA[ 2] ) ;

medidas. velocidad [O] .medidas .velocidad [1] , medidas. velocidad [2] ) ;

\t%f\t%f\t%f\n",

medidas. set_point_oxigeno [O]

,.set_point_oxigeno[l] , medidas .set_point_oxigeno [2] ) ;

"SP V:

\t%f\t%f\t%f\n", medidas. set_point_agitacion [0] ,

. set_point_agitacion [1] .medidas ,set_point_agitacion[2] ) ;

O2 : \t%f \t%f \t%f \n"

mA: \t%f\t%f\t%f\n"

\t%f\t%f\t*f\nn

O2 :

printf("\nEntradas PLC:

");

for (i=0;i<16;i++) printf (" %c".medidas.entradasjplc[i]);

printf(B\nSalidas PLC:

•);

for (iaO; i<24; i++) printf (" %c" .medidas . salidas_j>lc [i] ) ;

printf("\nEstados varios:

" )

,-

for (i=0,-i<20;i-»-+) printf (" %c" ,medidas.estados_varios [i] } ;

printf("\nTiempos:

");

for (i=0;i<10;i++) printf (" %i".medidas.tiempos[i)};

printf("\ncaudales:

medidas.caudales[0].medidas.caudales[1],medidas.caudales[2]);

\t%f\t%f\t%f\n"

printf("\n\nConsignas: \n"};

printf{"\nCambio 02: ");

for (i=0;i<3;i++) printf (" \t%c",consigna3.cambio_oxigeno[i]);

printf("\nCambio Vel: ");

for (i=0;i<3;i++) printf (" \t%c".consignas.cambio_agitacion[i]);

printf("\nCambio Caud:

");

for (i=0;i<3;i++) printf (" \t%c",consignas.cambio_caudales[i]};

printf(B\nCambio tiempos: ");

for (i=0;i<10;i++) printf (" \t%c",consignas.cambio_tiempos[i]);

printf(0\nCambio variables: ");

for (i=0;i<20;i++) printf (" \t%c".consignas.cambio_variable[i]);

A-182

APÉNDICES

Page 148: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. SERVIDOR DE DATOS

prin

tf("\n

Va

lor

O2 :

"),-fo

r (i=

0;i<

3;i+

+)

prin

tf ("

\t%f"

,co

nsig

na

s,v

alo

r_o

xig

en

o[i]);

prin

tf("\n

va

lor

Vel :

");

for (i=0;i<3;i++) printf <"

\t%f",consignas.valor_agitacion[i]);

printf("\nValor Caud: ") ;

for (i=0;i<3; i++) printf í " \t%f " , consignas .valor_caudales [il )

;printf("\nValor tiempos: ") ;

for (i=0;i<10;i++) printf ("\t%in.consignas.tiempos ti]);

printf("\nOtras variables: ");

for {i=0;i<20;i++) printf ("

%f".consignas.valor_variable[iJ>;

minora=localtime( s(medidas.tiempo) );

printf("\n\nHora medidas:

%2i %2i %2i\n",

mihora->tm_hour, mihora->tm_min, mihora->tm_sec);

time( &hora_actual );

mihora=localtime( &hora_actual );

printf("Hora actual:

%2i %2i %2i\n",

minora->tm_hour, mihora->tm_min, mihora->tm_sec);

while(mensaje_cliente[ij!=10 && i<(TAMANY_M-2)) i + +;

mensaje_cliente[i+1]=0;

printf ( "Mensaje: %s\n", mensaje_cliente);

elfin:

if (shmdt(direccionl) < 0)

err_sys{nMigai: No puedo soltar la memoria compartida l\n");

if (shmdt(direccion2) < 0)

err_sys("Higsi: No puedo soltar la memoria compartida 2\n");

sem_close(semidl) ;

sem_close(seraid2) ;

APÉNDICES A

-18

3

DESARROLLO E IMPLEMENTAQON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

MIGSIA.C - PROGRAMA PARA ACCEDER A LA MEMORIA COMPARTIDA Y MOSTRAR LOS

DATOS ANALÍTICOS POR PANTALLA

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN; 5/6/97

«include <stdio.h>

«include «string.h>

«include <sys/types.h>

«include <sys/ipc.h>

«include <sy9/shm.h>

«include <time.h>

/* Tiempo */

«define SEMKEY3 (íkey_t) 4223355L) /'Semáforo, definiciones en semáforo.c*/

«define SHMKEY3 ( Otey_t>

1997)

«define TAMANY_SM3 1000

/* Tamaño memoria compartida 3 */

«define PERMS 0644

/* Permisos de acceso */

«define err_sys(A) printf (A)

struct quinta{

/* Estructura para los analizadores */

double nitratos;

time_t t_nitratos;

double nitritos;

double amonio;

time_t t_amonio;

}analisis[5];

int

semid3;

int

shmid3;

char "direccions;

void main(void)

int i ,-

struct tm "mihora;

time_t hora_actual;

/***..*.***.****.*****.*****.********

t*,*.**»*»..*.*********..**.*./

/* Segmentos de memoria compartida */

if ( (shmid3=shmget(SHMKEY3, TAMANY_SM3, PERMS )) <0)

err_sys("Migsi: No puedo obtener la memoria compartida 3\n");

if ( (direccion3=(char *)shmat(shmid3. O, Oí)

== (char *)-l)

err_sys("Migsi: No puedo unirme a la memoria compartida 3\n");

if (shmid3==-l) goto elfin;

semid3=sem_open(SEMKEY3);

if (semid3 == -1) goto elfin;

sem_wait(semid3);

/* Esperando el semáforo 3 */

memcpy(análisis,direccion3,sizeof(análisis));

sem_signal(semid3);

/* Deja el semáforo 3*/

printf("XnUltimos valores analizados: \n\nn);

for (i=0;i<5;i++)

íprintf("Punto: %i\n",i);

printf("Nitratos : %f\n",análisis[i].nitratos);

mihora = l

ocaltime( ¿(análisis [i] ,t_nitratos) );

printf("T nitratos:

%2i %2i %2i, %2i/%2i/%2i\n",

mihora->tm_hour, mihora->tm_min, minora->tm_sec,

mihora->tm__mday, l+mihora->tm_mon, mihora->tm_year) ;

A-184

APÉNDICES

Page 149: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. S

ERVI

DOR

DE D

ATOS

printf("Nitritos: %f\n".análisis[i]-nitritos);

mihora=localtime( &(análisis[i].t_nitritos) );

printf(-T nitritos: %2i %2i %2i, %2i/%2i/%2i\n",

mihora->tm_hour, mihora->tm_min, minora->tm_sec,

minora->tm_mday, l+mihora->tm_jnon, mihora->tm_year);

printf{"Amonio:

%É\n".análisis[i)-amonio);

mihora=localtime( fctanalisis[i].t_amonio) );

printf("T amonio:

%2i %2i %2i, %2i/%2i/%2i\n",

minora- >tm_hour, minora->tm_min, rai hora - >ttn_sec,

minora->tm_mday, l4mihora->tm_mon, minora->tm_yearí;

elfin:

if (shmdt(direccions) < 0)

err_sys("Migsi: No puedo soltar la memoria compartida 3\nB);

sem_close(semid3);

exit(O);

APÉN

DICE

S A

-185

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

y C

ONTR

OL D

E ED

AR

PLANTATR2.C - PROGRAMA PARA ACCEDER A LA MEMORIA COMPARTIDA Y CREAR

AUTOMÁTICAMENTE UNA PAGINA WEB CON DATOS IN-LINE

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISION: 19/X2/97

«include <stdio.h>

ffinclude «string.h>

tfinclude <sys/types . h>

ttinclude <sys/ipc.h>

ttinclude <sys/shra.h>

Sinclude <time.h>

/* Tiempo */

ífdefine SEMKEY1 {(key_t) 4223353L)

ífdefine SEMKEY2 ((key_t) 4223354L)

ífdefine SHMKEY1 ( (key_t) 1995)

Sdefine SHMKEY2 ((key_t) 1996)

ífde

fine TAMANY_SM1 1000

ífde

fine TAMANY_SM2 1000

ífde

fine TAMANY M

100

/'Semáforo, definiciones en semaforo.c*/

/'Semáforo, definiciones en semaforo.c*/

/* Segmentos de memoria compartida */

/* Tamaño memoria compartida 1 */

/* Tamaño memoria compartida 2 */

/* Tamaño del mensaje cliente */

ífdefine PERMS 0644

ífdefine err_sys (A) printf (A)

/* Permisos de acceso */

char

char

int

time_t

}medidas;

struct cuarta{

char

int

{consignas;

tercera{

/*Estructura per

char nom[3] (10] ;

int

cont

rola

dor[

3] ;

doub

le

ph[3

J;do

uble

te

mpe

ratu

ra[3

];do

uble

po

ten

cial

[3];

doub

le o

xige

no[3

];d

ou

ble

m

A[3

];d

ou

ble

v

elo

cid

ad

[3 J

;d

ou

ble

ca

ud

ale

s[3

];d

ou

ble

se

t_p

oin

t_o

xig

en

o[3

];d

ou

ble

se

t_p

oin

t_ag

itacio

n(3

1 ;

cha

r en

tra

da

s_p

lc(1

6];

sali

das_

plc

[24

];est

ad

os_

vari

os[

20

];ti

em

po

s[1

0];

t i etnpo ;

paràmetres referents als controladora*/

/*Nom del controlador*/

/•Numéro del controlador */

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

/*Valor mesurat de la variable*/

/*Tiempo de las variables*/

/* Estructura para las consignas */

cambio_oxigeno[3],

cambio_agitacion[3] ,

cambio_caudale3í3],

cambio_tiempos[10];

valor_oxígeno[3],

valor_agitacion[3] ,

valor_caudales[3] ;

tiempos [10J

,-

int semidl,

aemid2;

int shmidl,

shmid2;

char *direccionl,

*direccion2;

PILE *fichero_in¡

FILE *fichero_out;

char frase[30];

char buffer[1500];

void main(void)

A-186

APÉNDICES

Page 150: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. SERVIDOR DE DATOS

int

i;str

uct

tm

*m

iho

ra;

time_

C

no

ra_

actu

al;

ch

ar

men

saje_clien

te[TA

MA

NY

_M

j;

/* Segmentos de memoria compartida */

if ( (shmidl=shmget(SHMKEYl, TAMANY_SM1, PERMS )) <0)

err_sy9(nMiserver: No puedo obtener la memoria compartida l\n");

if ( (direccionl=(char *)shmat(shmidl. O, 0)) == (char *)-!)

err_sys("Miserver: No puedo unirme a la memoria compartida l\n");

if ( (shtnid2

= shmget (SHMKEY2, TAMANY_SM2, PERMS ) ) <0)

err_sys("Migsi: No puedo obtener la memoria compartida 2\n")

,-if ( (direccion2=(char *)shmat(shmid2. O, 0)) == (char *)-!}

err_ays("Migsi: No puedo unirme a la memoria compartida 2\nn);

if ((9hmidl==-l)

(3hmid2==-l) ) goto elfin;

semidl=sem_openíSEMKEYl);

semid2=sem_open(SEMKEY2);

if ( (semidl == -1)

do{/*-*************

(semid2 == -1) } goto elfin;

sem_wait(semidl);

/* Esperando el semáforo 1 */

memcpy (6tmedidas,direccionl, sizeof (medidas) ) ;

memcpy(mensaje_cliente, &direccionl[500], sizeof(mensaje_cliente)};

sem_signal(semidl);

/* Deja el semáforo I"/

~"

sem_wait(semid2);

/* Esperando el semáforo 2 */

memcpy(&consignas,direccion2,sizeof(consignas));

sem_signal(semid2) ;

/* Deja el semáforo 2*/

memset (frase,O,sizeof(frase));

mema e t (buffer. O, sizeof (buffer) ) ,-

fichero_out=fopen("/quantum/httpd/htdocs/depuradoras/plantatr2.html","wb");

printf("Generando html ...

\n\n");

fprintf(fichero_out,"<HTML>

<META HTTP-EQUIV=REFRESH CONTENT=20; URL=http://eq3.uab.es/depuradoras/plantatr2.html>

<HEAD>

<TITLE>Datos en tiempo real planta piloto</TITLE>

</HEAD>

<BODY bgcolor=#ffffff LINK=#OOOOff VL·INK=#800080>

<FONT FACE=Arial COLOR=#f f OOOOxP ALIGN=CENTER>PLANTA PILOTO: DATOS ACTUALIZADOS EN TIEMPO

REAL</P>

</F

ON

Tx

FO

NT

F

AC

E=

Arial

SIZ

E=

2x

P>

&n

bsp

;</P

x/F

OH

T>

<P

AL

IGN

=C

EN

TE

RxC

EN

TE

RxT

AB

LE

B

OR

DE

R

CE

LL

SP

AC

ING

=1

bg

co

lor=

#d

le9

ff B

OR

DE

RC

OL

OR

-jí 00

00

00

CE

LL

PA

DD

ING

=5

WID

TH

=683>

<T

Rx

TD

W

IDT

Hi=22%

V

AL

IGN

=M

IDD

LE

C

OL

SPAN

=2

HE

IGH

T=

41><

P>

tnb

Sp

;</T

D>

<TD

W

IDT

Ho25*

VA

LIG

N=

MID

DL

E

CO

LS

PA

N=

5 H

EIG

HT

=41>

«B

xF

ON

T

FA

CE

=-A

rÍal S

IZE

=2

C

OL

OR

=#0000£f x

P

AL

IGN

-CE

NT

ER

>R

EA

CT

OR

l<

/Bx

/FO

NT

x/T

D>

<TD

W

IDT

H=

28%

VA

LIG

N=

MID

DL

E

CO

LSPA

N=

4 H

EIG

HT

=41>

<B

xF

ON

T

FA

CE

=A

rial S

IZE

=2

CO

LO

R=ítO

OO

Of f >

<P

A

L I G

K=C

EN

R > R

EA

CT

OR

2

</B

x/F

ON

Tx

/TD

><T

D

WID

TH

=26%

V

AL

IGN

=M

IDD

LE

C

OL

SP

AN

«2 H

EIG

HT

=41>

<B

xF

ON

T

FA

CE

=A

rÍal S

IZE

=2

CO

LO

R=ftO

OO

Of f x

P

AL I G

Ns C

EN

R > R

EA

CT

OR

3

</B

x/F

ON

Tx

/TD

><

/TR

><

TR

xT

D

WID

TH

=22%

V

AL

IGN

=M

IDD

LE

C

OL

SP

AN

=2

HE

IGH

T=

41><

Bx

FO

NT

F

AC

E=

Arial

SIZ

E=

2 C

OL

OR

=8

00

00

ffxP

>p

H<

/Bx

/FO

NT

><

:/TD

><

TD

W

IDT

H-25%

V

AL

IGN

=M

IDD

LE

C

OL

SP

AN

=5

HE

IGH

T=

41

><

P>

","%3

n);s

prin

tf(fras

e,

H%

4.If"

,me

did

as

.ph

[OJ

);fw

rite(fra

se

,4,1

,fich

ero

_o

ut);

fprin

tf(fich

ero

_o

ut,"

</P

><

/TD

><

TD

W

IDT

H=

28%

VA

LIG

N=

MID

DL

E

CO

LSPA

Ne-4

HE

IGH

T=

41

xP

>" , " %

s" ) ;sp

rintf (fra

se

, "%4 . I

f .m

ed

idas.p

h [1

] ) ;fw

rite(fra

se

,4,1

,fich

ero

_o

ut);

fprin

tf(fich

ero

_o

ut,"

</P

><

/TD

>

APÉNDICES A

-18

7

DESARROLLO E IMPLEMENTACIÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

<TD

W

IDT

H=

26%

VA

LIG

N=

MID

DL

E

CO

LSPA

N=

2 H

EIG

HT

=4

1x

P>

" , n%3

" ) ;sp

rintf(fra

se

,"%

4.1

f",m

ed

ida

s.p

h[2

]);fw

rite(fra

se

,4,1

,fich

ero

_o

ut);

f prin

t f (f ich

ero

_o

ut, "

</P

x/T

D>

</T

R>

<T

Rx

TD

W

IDT

H=

22%

VA

LIG

N=

MID

DL

E

CO

LS

PA

N=

2 H

EIG

HT

=41>

<B

xF

ON

T

FA

CE

=A

rÍal S

I2E

=2

CO

LO

R=ífO

OO

Of f >

<P

>T

em

pera

tura

(C) <

/Bx

/FO

NT

x/T

D>

<TD

W

IDT

H=

25%

VA

LIG

N=

MID

DL

E

CO

LSPA

N=

S H

EIG

HT

=4

IxP

>" , "%

S" ) ;

sp

rintf(fra

se

,n%

4.If"

.me

did

as.te

mp

era

tura

(0]3

;

fwriC

e(fra

se

,4,1

,fich

ero

_o

ut);

fprin

tf (f ic

hero

_o

ut, "

</P

x/T

D>

<TD

W

IDT

H=

28* V

AL

IGN

-MID

DL

E

CO

LS

PA

H=

4 H

EIG

HT

=4

1x

P>

" , "%s

n ) ;sp

rintf(fra

se

,"%

4.If"

.me

did

as.te

mp

era

tura

[1

]};

fwrite

(frase

,4,1

,fich

ero

_o

ut);

fprin

tf(fich

ero

_o

ut,"

</P

><

/TD

><T

D

WID

TH

=26%

V

AL I G

N=M

I DD

L E

CO

LS

PA

N=

2 H

ElG

HT

=4

1x

P>

" , "%S

" ) ;sp

rintf(fra

se

,"%

4.If"

.me

did

as.te

mp

era

tura

[2]);

fwrite

(frase

,4,1

,fich

ero

_o

ut);

fprin

tf (f ic

hero

_o

ut, "

</P

x/T

D>

</TR>

~<TRxTD WIDTH=22% VALIGN=MIDDLE COLSPAN=2 HEIGHT=41>

<BxFONT FACE=Arial SIZE=2 COLOR=SOOOOf f xP>Ox&iacute,-geno (ppm) </B><:/FONTx/TD>

<TD WIDTH=25% VALIGN-MIDDLE COLSPAN=5 HEIGHT=41xP>" , " %S" ) ;

sprintf(frase,"%4.1f",medidas.oxigeno[OJ);

fwrite(frase,4,1,fichero_out);

fprintf(fichero_out,"</p></TD>

<TD WIDTH=28% VALIGN=MIDDLE COLSPAN=4 HEIGHT=41xP>" , " *S" ) ;

sprintf(frase,"%4.If".medidas.oxigeno[1]);

fwrite(frase,4,1,fichero_out);

fprintf (fichero_out, "</PX/TD>

<TD WIDTH=26% VALIGN=MIDDLE COLSPAN=2 HEIGHT=41><P>","%s");

sprintf(frase,"%4.If".medidas.oxigeno [2]);

fwrite(frase,4,1,fichero_out);

fprintf (f ichero_out, "</Px/TD>

</TR>

<T

Rx

TD

W

IDT

H=

22%

VA

LIG

N=

MID

DL

E

CO

LS

PA

N=

2 H

EIG

HT

=41>

<B

xF

ON

T

FA

CE

-Arial

SIZ

E=

2 C

OL

OR

=tíOO

OO

f f xP

>R

ed

ox

(m

V) <

/Bx

/FO

NT

x/T

D>

<T

D

WID

TH

=25%

V

AL

IGN

=M

IDD

LE

C

OL

SP

AN

=5

HE

IGH

T=

41

xP

>" , " %

sn ) ;

sp

rintf{

frase

,"%

4f"

,me

did

as.p

ote

nc

ial [O

]);fw

rite (fra

se

,4,1

,fich

ero

_o

ut);

fprin

tf (f ic

hero

_o

ut, n<

/px

/TD

><

TD

W

IDT

H=

28%

VA

LIG

N=

MID

DL

E

CO

LSPA

N=

4 H

EIG

KT

=4

1x

P>

" , " %s

n ) ;sp

rintf{

frase

,"%

4f"

.me

did

as.p

ote

nc

ial

[lj)

;fw

rite(fra

se

,4,1

,fich

ero

_o

ut);

fprin

tf{fic

he

ro_

ou

t,"<

/P>

</T

D>

<TD

W

IDT

H=

26%

VA

LIG

N=

MID

DL

E

CO

LS

PA

N=

2 H

EIG

HT

=4

1x

P>

" , " %s" ) ;

sp

rintf(fra

se

,"%

4f"

,me

did

as.p

ote

nc

ial

[2

]);

fwrite

(fra

se

,4,1

,fich

ero

_o

utí;

fprin

tf (f ic

hero

_o

ut, "

</P

x/T

D>

</T

R>

<TRxTD WIDTH=42% VALIGNoTOP COLSPAN=6 HEIGHT=38>

<P ALIGN=CENTER>Hora de la adquisici&oacute;n de datos:</TD>

<TD WIDTH=58% VAL·IGN=MIDDLE COLSPAN=7 HEIGHT«>38xP>" , " %s" ) ;

sprintf(frase, n%sn, ctime(^medidas.tiempo));

fwrite(frase,27,1,fichero_out);

fprintf(fichero^out,"</p></TD>

</TR>

</TABLE>

</CENTERx/P>

<FONT FACEoArial SIZE=2xP>&nbsp,-</Px/FONT>

<TABLE CELLSPACING-O BORDER=0 CELLPADDING=5 WIDTH=791>

<TRxTD WIDTH=50% VALIGN=TOP>

<P>Stnbsp;</TD>

- -

<TD WIDTH=50% VALIGN=-TOP>

A-188

APÉNDICES

Page 151: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. S

ERVID

OR D

E DAT

OS

<P>&nbsp;</TD>

</TR>

</TABLE>

«FONT FACE=Aríal SIZE=2xP>&nbap; </P>

<P>&nbsp;</P>

</FONT><P>«:A HREF=http : //eq3 . uab. es/index. html>Volver al tiacute ,-ndice de Ingeniertiacute ;a

qu&iacute;raica</Ax/P></BODY>

</HTML>","%a");

fclose(fichero_out);

sleepOO) ;

}while(IL);/*•*****«**«*end while*********"*******/

elfin:

if (shmdt(direccionl) < 0}

err_sys("Migsi: No puedo soltar la memoria compartida l\n°);

if (shmdt(direccion2) < O)

err_ays("Migsi: No puedo soltar la memoria compartida 2\n");

sem_close(semidl);

sem_close(semid2);

APÉNDICES

A-189

Page 152: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg
Page 153: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. CO

MUNI

CACIÓ

N GS

I - S

ERVI

DOR

DE DA

TOS

GSIJB.C - PROGRAMA PRINCIPAL PARA LA COMUNICACIÓN GSI-SERVIDOR DE DATOS

PROGRAMADOR:

Juan Antonio Baeza Labat

ULTIMA REVISIÓN: 31/10/96

ft include <stdio.h>

«include <string.h>

tí include <time.h>

/* Tiempo */

«include <sys/types .h>

((include <sya/ipc.h>

ítinclude <sys/shm.h>

«include "gsi.h"

«include <atdlib.h>

«define SEMKEY1 ((Jcey_t) 4223353L)

ttdefine SEMKEY2 ((key_t) 4223354L)

«define SEMKEY3 ((key_t) 4223355L)

tfdefine SHMKEY1 ((key_t) 1995)

«define SHMKEY2 { (key_t) 1996)

«define SHMKEY3 ((key_t) 1997)

«define TAMANY_SM1 1000

«define TAMANY_SM2 1000

«define TAMANY_SM3 1000

«define TAMAKY_M

100

«define PERMS 0644

«define err_sys(A) printf (A "\n")

«define TCPIP_PORT_NUMBER 22041

/•«define DEBUG*/

/•Semáforo, definiciones en semáforo.c*/

/•Semáforo, definiciones en semáforo.c*/

/*Semáforo, definiciones en semáforo.c*/

/* Segmentos de memoria compartida */

/* Tamaño memoria compartida 1 */

/* Tamaño memoria compartida 2 */

/* Tamaño memoria compartida 3 */

/* Tamaño del mensaje cliente */

/* Permisos de acceso */

str

uct

terc

era

{ch

ar

no

mt3

] [1

0];

int

co

ntr

ola

do

r [3

] ,-

do

ub

le

ph

(3];

double

te

mp

era

tura

[3];

do

ub

le

po

ten

cia

l[3

];d

ou

ble

o

xig

en

o[3

];d

ou

ble

m

A[3

] ;

do

ub

le v

elo

cid

ad

[3];

do

ub

le

cau

dale

s[3

];d

ou

ble

aet_

po

int_

ox

igen

o[3

];d

ou

ble

se

t_p

oin

t_v

elo

cid

ad

[31 ;

ch

ar

en

trad

aa_

plc

[16

] ;

ch

ar

aali

das_

plc

12

4}

;ch

ar

est

ad

os_

vari

os[

20

],-

int

tiem

po

s [1

0];

tim

e_

t ti

em

po

;}

med

idas

;

/•E

str

uctu

ra p

er

para

mètr

es

refe

ren

ts

als

co

ntr

ola

do

rs*

//*

Nom

d

el

co

ntr

ola

do

r*/

/•N

um

ero d

el

co

ntr

ola

do

r *

//*

Valo

r m

esu

rat

de la

v

ari

ab

le*

//•

Valo

r m

esu

rat

de la

v

ari

ab

le*

//*

Valo

r m

esu

rat

de la

v

ari

ab

le*

//•

Valo

r m

esu

rat

de la

v

ari

ab

le*

//•

Valo

r m

esu

rat

de la

v

ari

ab

le*

//'

Valo

r m

esu

rat

de la

v

ari

ab

le*

/

/•T

iem

po d

e la

s v

ari

ab

les*

/

str

uct

cu

art

af

/*

Estr

uctu

ra

para

la

s co

nsi

gn

as

*/

ch

ar

cam

bio

^o

xig

en

o[3

J,cam

bio

_ag

itacio

n[3

],cam

bio

_cau

dale

s[3

],cam

bio

_ti

em

po

s[1

0];

do

ub

le

valo

r_o

xig

en

o[3

1,

va

lor_

ag

ita

cio

nf3

],v

alo

r_cau

dale

s [3

] ;

int

tiem

po

s[1

0];

ch

ar

cam

bio

_y

ari

ab

le[2

0];

do

ub

le

valo

r_v

ari

ab

le[2

0];

}co

nsi

gn

as;

str

uct

qu

inta

f /*

E

stru

ctu

ra p

ara

lo

s an

ali

zad

ore

s *

/d

ou

ble

n

itra

tos;

tim

e_

t t_

nit

rato

s;

do

ub

le n

itrit

os;

APÉN

DICE

S A

-19

1

DESA

RROL

LO E

IMPL

EMEN

TAQ

ON

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

OE

EOAR

tim

e_

t t_

nit

rit

os;

do

ub

le

am

on

io;

tim

e_

t t_

am

on

io;

}a

na

lisis

[5];

str

uct

de_

los_

ind

ices{

icp

_in

t m

_p

h[3

];

/*

índ

ices

icp

_in

t m

_te

mp

era

tura

[31 ;

/*

índ

ices

icp

_in

t m

_p

ote

ncia

l [3

];

/*

índ

ices

icp

_in

t m

_o

xig

en

o[3

];

/*

índ

ices

icp_in

t m

_m

A[3

];

/*

índ

ices

icp

_in

t m

_v

elo

cid

ad

[3];

/*

ín

dic

es

icp

_in

t m

_n

itra

tos[5

];

/•

índ

ices

icp

_in

t m

_n

itri

tos[5

];

/*

índ

ices

icp

_in

t m

am

on

io[S

I;

/•

índ

ices

icp

_in

t m

_sp

_o

xig

eno [

3];

/*

ín

dic

es

icp

_in

t m

_sp

_v

elo

cid

ad

[3];

/*

icp

_in

t m

_c

au

da

les(

3J;

/*

ín

dic

es

icp

_in

t m

_en

trad

as_

plc

[16

];

/*ic

p_

int

m_

sali

daa_

plc

[24

];

/*ic

p_

int

m_

est

ad

os_

vari

os

[20

J;

/*

índ

ices

icp

_in

t m

_ti

em

po

s[1

0J;

/•

ín

dic

es

icp

_in

t m

_v

ari

ab

le [

20

] ,-

/*

índ

ices

icp

_in

t c

_o

xig

en

o[3

J;

/*

índ

ices

icp

_in

t c_

_v

elo

cid

ad [

3} ;

/*

ín

dic

es

icp

_in

t c_

cau

dale

s [3

];

/*

índ

ices

icp

_in

t c_

tiem

po

s[1

0];

/*

ín

dic

es

icp

_in

t c_

vari

ab

le[2

0];

/*

ín

dic

es

icp

_in

t m

_p

lc[2

];

/*

índ

ices

}indice;

medida de ph */

medida temperatura */

medida redox •/

medida oxigeno */

medida miliamperios •/

medida velocidad */

medida nitratos */

medida nitritos */

medida amonio */

medida consigna oxigeno */

índices medida consigna agitación */

medida caudales */

índices medida entradas pie */

índices medida salidas pie */

medida estados */

medida t i empos */

medida variables •/

consigna oxigeno */

consigna agitación */

consigna caudales */

consigna tiempos */

variables varias •/

E/S PLC */

/* 0,1,2 Reactores 1,2,3; 3 -> salida; 4 -> anaerobio */

}var;

double variable[20];

time_t t_variable[20];

int semidl,

semíd2,

semidS;

int shmidl,

shmid2,

shmid3;

char *direccionl,

*direccion2,

*direccion3 ;

/* Devuelve el puerto a utilizar en la comunicación G2 <--> GSI

gsi_int gsi_get_tcp_portO

return(TCPIP PORT NUMBER);

/* Inicializa el sistem externo, buffers, contadores, variables comunes..

gsi_int gsi_initialize_context(remote_process_init_string, length)

char

*remote_process_init_string;

gsi int

length;

í if ( {shmidl=shmget(SHMKEY1, TAMANY_SM1Í PERMS)) <0)

err_sys("gsi_jb: No puedo obtener la memoria compartida l\nn);

if ( (direccionl=(char *)shmat(shmidl. O, O» == (char *)-!)

err_sys("gsi_jb: No puedo unirme a la memoria compartida l\nn);

if ( (shmid2=shmget(SHMKEY2, TAMAKY_SM2, PERMS }) <0)

err_sys("gsi_jb: No puedo obtener la memoria compartida 2\n"J;

if í (direccion2=(char *)ahmat(shmid2. O, O)) == (char *)-!)

err_sys(ngsi_jb: No puedo unirme a la memoria compartida 2\n");

if ( (shmid3ashmget(SHMKEY3, TAMANY_SM3, PERMS )) <0)

err_sys("Migsi: No puedo obtener la memoria compartida 3\nn);

if ( (direccion3=(char •)ahmat(shmid3. O, 0)) == (char •)-!)

A-192

APÉNDICES

Page 154: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. COM

UNICACIÓN

GS

I - SERVIDOR

DE DATOS

err_ays("Migai: No puedo unirme a la memoria compartida 3\n"í;

if ((ahmidl==-l) || (shmid2==-l) || (ahmid3==-l)) return(GSI_FAIL);

3emidl=sem_open(SEMKEYl);

semid2=aem_open(SE«KEY2);

aemid3=3em_open(SEMKEY3)

,-

if ( {aemidl

semid2 == -l) || (semid3

== -1) ) return(GSI_FAIL)¡

mernset (¡.indicé.

O, sizeof (índice) ) ;

memaet í&conaignaa,0,sizeof(consignas));

ffífdef DEBUG

printf ("gsi_initialize_context in context *d\n",current_context);

ffendif

return (GSI SUCCESS);

/* GSI llama a la función cuando se define o actualiza un objeto, antes de

ser utlizado por primera vez. Se regiatra el índice de la variable.

*/

gsí_int gsi_def_obj(obj_def_ptr, unused)

obj_def_type

*obj_def_ptr, *unused;

int i=0;

char parámetro!]="REACTOROn;

/*printf("Entrando en gsi_def_obj\n");*/

if ((obj_def_ptr->param_l.p_type!=3) || (obj_def_ptr->param_2.p_type!=3)

II (obj_def_ptr->param_3.p_typel*3)) return (GSI_FAIL);

/*printf("tipo paraml %i\n", obj_def_ptr->param_l.p_type);*/

/*printf{"Paraml: %s\n",gsi_str_of(obj_def_ptr->param_l));*/

#ifdef DEBUG

printf("%s\n", obj_def_ptr->param_l.p_value.symbolj?);

printf("%s\nB, obj_def_ptr->param_2-p_value.aymbol_p);

printf("%s\n", obj_def_ptr->param_3.p_value.symbol_p);

«endif

/* Reactores 1-3 */

for (ioO;i<3;i++>

íparámetro [7J =

49+i;

if(!strcmp(obj_def_ptr->param_l.p_value.symbol_p,parámetro)}

i f(!strcmp(obj_def_ptr->param_2.p_value.aymbol_p,"HEDIDA"))

if{!strcmp(obj_def_ptr->param_3.p_value.aymbol_p,"PH"))

indice.m_ph[i]=obj_def_ptr->obj_index;

goto bien,-

}if(!strcmp(obj_def_ptr->param_3.p_value.symbol_p,"T"))

índice.m_temperatura [i] =obj_def_ptr->obj__index;

goto bien;

}if(istrcmp(obj_def_ptr->param_3.p_value.symbol_p,"MV"))

indice.m_potencial[i]=obj_def_ptr->obj_index;

goto bien;

}if(lstrcmp{obj_def_ptr->param_3.p_value.symbol_p,"02"))

indice.m_oxigeno[i]=obj_def_ptr->obj_index;

goto bien;

}if(¡strcmp(obj_def_ptr->param_3.p_value.symbol_p,"MA"))

indice.m_mA[i J =

obj_def_ptr->obj_index;

APÉNDICES A

-19

3

DESARROLLO E IM

PIÉMENTACIÓ

N DE UN

SISTEMA SUPERVISOR

PARA LA GESTIÓ

N Y CONTROL DE E

DA

R

go

to b

ien

;iif {!

strcmp (ob

j_def _ptr->param_3 .p_value.symbol_p, "VELOCIDAD") )

(indice.m_velocidad[i]=obj_def_ptr->obj_index;

goto bien;

iif ( ¡strcmp (obj_def_ptr->param_3 ,p_value .svtnbol_p,

"NITRATOS" ) )

íindice.m_nitratos [i-t-1] =

obj_def_ptr->obj_index;

goto bien;

ïif ( latrcmp(obj_def_ptr->param_3.p_value.symbol_p,"NITRITOS"))

{Índice.m_nitritos[i+1]=obj_def_ptr->obj_index;

goto bien;

iif(¡strcmp(obj_def_ptr->param_3.p_yalue.aymbol_p,"AMONIO"))

{ind

ice

.m_

am

on

io[i+

l]=o

bj_

de

f_p

tr->o

bj_

ind

ex

;g

oto

b

ien,-

>if ( ! strcm

p (obj_def_ptr->param

_3.p_value.synibol_p, "SPOX

IGEN

O") }

(índice.m_ap_oxigeno[i]=obj_def_ptr->obj_index;

goto bien;

tif(!atrcmp(obj_def_ptr->

param_3.p_value.sym

bol_p,"SP

VE

LO

CID

AD

")){índice.m_sp_velocidad[i]=obj_def_ptr->obj_index;

goto bien;

iif(!strcmp(obj def_ptr->param_2.p_value.aymbol_p,"CONSIGNA"))

{if ( ¡atrcmp (obj_def_ptr- >param_3 .p_value. symbol__p, "O2") )

índice.c^oxigeno[iJ =obj_def_ptr->obj_index;

goto bien;

}if(¡strcmp(obj_def_ptr->param_3.p_value.symbol_p,"AGITACIÓN"))

Índice.c_veloeidad [i}

=obj_def_ptr->obj__index;

goto bien;

/* Salida del sedimentador*/

if(¡strcmp(obj_def_ptr->param_l.p_value.aymbol_p,"SALIDA"))

if ( 1 strcm

p (ob

j def_jptr->param

_2 .p_

valu

e.sym

bo

l_p

, "MED

IDA

" ) )tif

í ¡strcm

p (o

bj _

de

f_p

tr->p

ara

m_

3 .p

_v

alu

e. ay

mb

ol_

p, "N

ITR

AT

OS

") ){in

dic

e.m

_n

itrato

a[4

]=o

bj_

de

f_p

tr->o

bj_

ind

ex

;g

oto

b

ien

;.

iif(!strcmp(obj_def_ptr->param_3.p_value.symbol_p,"NITRITOS"))

indice.m_nitritoa[4]=obj_def_ptr->obj_index;

goto bien;

iif(!strcmp(obj_def_ptr->param_3.p_value.symbol_p,"AMONIO"))

índice.m_amonio[4]=obj_def_ptr->obj_index;

goto bien;

}

}/* Reactor anoxico */

if(¡strcmp(obj_def_ptr->param_l.p_value.symbol_p,"REACTORO"))

if(! stremp(obj def_ptr->param_2.p_value.3ymbol_p,"MEDIDA"))

• ( "

• • -

if(!strcmp(obj_def_ptr->param_3.p_value.aymbol_p,"NITRATOS"))

A-194

APÉNDICES

Page 155: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. C

OMUN

ICAC

IÓN

GS!

- SER

VIDOR

DE

DATO

S

indice.m^nitratos[0]=obj^def_ptr->obj_index;

goto bien;

)if

(¡st

rcm

p(o

bj_

de

f_p

tr->

pa

ram

_3

,p_

va

lue

.sy

mb

ol_

p,"

NIT

RIT

OS

"))

i ind

ice

.m_

nit

rito

s[0

]=o

bj_

de

f_p

tr->

ob

j_in

de

x;

go

to

bie

n;

(if(¡strcmp(obj_def_ptr->param_3.p_valúe.symbol jp,"AMONIO"))

indice.m__amonio [OJ =obj_def_ptr->obj_index;

goto bien;

/* PLC*/

me

mse

t(p

ará

me

tro

,O,s

ize

of(

pa

rám

etr

o))

;

if(!

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

l.p

_v

alu

e.s

ym

bo

l_p

,"P

LC

"))

if(¡strcmp(obj__def_ptr->param_2.p_value.symbol_p,"ENTRADA"})

parámetro loj »'E1;

for (i=0;i<10;i++)

{ pará

metr

o [

1]=

48

+i;

if(¡

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

3-p

_v

alu

e.s

ym

bo

l_p

,pa

ram

etr

o)}

ind

ice.m

_en

trad

as_

plc

[ij

=o

bj_

def_

ptr

->o

bj_

ind

ex

;g

oto

b

ien

;i

pa

rám

etr

o[1

]='1

';fo

r (i

= 1

0;i

<1

6;i

+ -O

í pa

rám

etr

o[2

]=4

8+

i-1

0;

if(1

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

3-p

_v

alu

e.s

ym

bo

l_p

,pa

rám

etr

o))

ind

ice

,m

_en

trad

as_

plc

ti]

=>

ob

j_d

ef_

ptr

->o

bj_

ind

ex

;goto

b

ien

;}

}

if(¡

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

2.p

_v

alu

e.s

ym

bo

l_p

,"S

AL

IDA

"))

pa

rám

etr

o[0

]='S

';fo

r

(i.

0;i<

10

;l+

+)

{ pará

metr

o [

1]=

48

+ i;

if(!

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

3.p

_v

alú

e.s

ym

bo

l_p

,pa

rám

etr

o))

índ

ice.m

_aali

das_

plc

[i]=

ob

j_d

ef_

ptr

->o

bj_

ind

ex

;g

oto

bie

n;

Î

pa

rám

etr

o[1

]='1

';fo

r (i

=1

0;i

<2

0;i

++

)í pa

rám

etr

o[2

J =

48

+i-

10

;if

(!st

rcm

p(o

bj_

de

f_p

tr->

pa

ram

_3

.p_

va

lue

.sy

mb

ol_

p,p

ará

me

tro

)}

ind

ice. m

_sa

lid

as_

plc

[i]

=o

bj_

def_

ptr

->o

bj_

ind

ex

,-g

oto

b

ien

,-

pa

rám

etr

o[1

]='2

';fo

r

<i=

20

;i<

24

;i+

+)

í pará

metr

o[2

J =

48

+i-

20

;if

(¡st

rcm

p(o

bj_

de

f_p

tr->

pa

rara

_3

.p_

va

lue

.sy

mb

ol_

p,p

ará

me

tro

ind

ice.m

_sali

das_

plc

[i]

=o

bj_

def_

ptr

->o

bj_

ind

ex

;g

oto

bie

n;

APÉN

DICE

S A

-1

95

DESA

RROL

LO E

IMPL

EMEN

TAQO

N DE

UN

SISTE

MA S

UPER

VISOR

PAR

A LA

GES

TIÓN

Y CON

TROL

DE E

DAR

if(¡strcmp(obj_def_ptr->param_2.p_value.symbol_p,"HEDIDA"}}

íf(¡strcmp(obj_def_ptr->param 3-p_value.symbol_p,"ENTRADAS"))

{ indice.m_plc [O] =obj_def_ptr->obj_index,-

goto bien;

iif ( ! strcmp (obj_def__ptr->param_3 ,p_value. symbol_p, "SALIDAS" ) )

{ índice.m__plc [1] =obj_def_ptr->obj_index;

goto bien;

}

1

/* VARIOS PLANTA*/

memset(parámetro,O,sizeof(parámetro)) ;

if(¡

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

l,p

_v

alu

e.s

ym

bo

l_p

,"P

LA

NT

A")

){ if

(!st

rcm

p(ob

j_de

f_pt

r->

para

m_2

.p_v

alue

.sym

bol_

p,"M

ED

IDA

_CA

UD

AL

"))

{ pa

rám

etr

o[0

]='C

';fo

r (i

=0

;i<

3;i

++

)í pa

ram

etr

otl

]=4

8+

i;if

(!st

rcm

p(o

bj_

de

f_p

tr->

pa

ram

_3

.p_

va

lue

.sy

mb

ol_

p,p

ará

me

tro

))

ind

ice

.m_

ca

ud

ale

s[i]

=o

bj_

de

f_p

tr->

ob

j_in

de

x;

go

to b

ien

;

1

if(¡

atr

cm

p(o

bj_

de

f_p

tr->

pa

ram

_2

.p_

va

lue

.ay

mb

ol_

p,"

SP

_C

AU

DA

L")

)

pa

rám

etr

o[0

]»'C

1;

for

(i=

D;i

<3

;i+

+)

í pa

ram

etr

otl

] =

48

+i;

if(í

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

3.p

_v

alu

e.s

ym

bo

l_p

,pa

rám

etr

o))

ind

ice.c

_cau

dale

s[i)

=o

bj_

def_

ptr

->o

bj_

ind

ex

;g

oto

b

ien

;

ï

if(!

strc

mp

(ob

j_d

ef_

ptr

->p

ara

m_

2.p

_v

alu

e.s

ym

bo

l_p

,"E

ST

AD

OS

_V

AR

IOS

"))

pa

rám

etr

o[0

]='E

';fo

r (i

=0

;i<

10

;i+

+)

pa

rám

etr

o[1

]=4

8+

i;if

(!st

rcm

p(o

bj_

de

f_p

tr->

pa

ram

_3

.p_

va

lue

.sy

mb

ol_

p,p

ará

me

tro

))

ind

ice.m

_est

ad

os_

vari

o3

[iJ=

ob

j_d

ef_

ptr

->o

bj_

ind

ex

;g

oto

b

ien

;

} pa

ram

etr

otl

)='1

';fo

r

(Ía

lO;Í

<2

0;Í

++

)

í para

metr

o[2

]=4

8+

i-1

0;

if(!

stre

mp

(ob

j_d

ef_

ptr

->p

ara

m_

3.p

v

alu

e.s

ym

bo

l_p

,pará

metr

o)>

ind

ice

.m_

est

ad

os_

va

rio

s[i]

=o

bj_

de

f_p

tr->

ob

j_in

de

x;

goto

b

ien

;

if(!

Str

cm

p(o

bj_

de

f_p

tr->

pa

ram

_2

.p_

va

lue

.sy

mb

ol_

p,"

ME

DID

A_

TIE

MP

OS

"))

pa

rám

etr

o[O

J =

'T';

for

(i=

0;i

<1

0;i

++

)

A-1

96AP

ÉNDI

CES

Page 156: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. COM

UNICACIÓN

GSI - SERVIDO

R DE DATO

S

pa

ram

etro

[l]=4

8+

i;if(!strc

mp

(ob

j_d

ef_

ptr->

pa

ram

_3

.p_

va

lue

.sym

bo

l_p

,pa

ram

etro

))

índice.tn_t lempos [i] =obj_def_ptr->obj_index;

goto bien;

ii

if(!strcm

p(o

bj_

de

f__

ptr->

pa

ram

_2

.p_

va

lue

.ay

mb

ol_

p, nS

P_

TIE

MP

OS

"))

pa

rám

etro

[0]=

'T';

for

(i=0

;i<1

0;i+

+)

{pa

rám

etro

[1]=

48

ti;if(!strc

mp

(ob

j_d

ef_

ptr->

pa

ram

_3

.p_

va

lue

.sym

bo

l_p

,pa

rám

etro

))

ind

ice.c

^tie

mp

os[i]=

ob

j_d

ef_

ptr->

ob

j_in

dex

;g

oto

b

ien

;}

iif(!strc

mp

(ob

j_d

ef_

ptr->

pa

ram

_2

.p_

va

lue

.sym

bo

l_p

,"VA

RIA

BL

E"))

para

metro

[0] =

'V •

for

(i«0

;i<1

0;i+

+)

ípa

rám

etro

[Ij =4

8+

i;if(!strc

mp

(ob

j_d

ef_

ptr->

pa

ram

_3

.p_

va

lue

.sym

bo

ljp,p

ara

me

tro))

índ

ice, in

varia

ble

[i]=o

bj_

def_

ptr->

ob

j_in

dex

;g

oto

b

ien

;

pa

rám

etro

[1]=

'1';

for

(i=1

0;l<

20

;i++

)

pa

rám

etro

[2]=

48

+i-1

0;

if(!strcm

p(o

bj_

de

f_p

tr->p

ara

m_

3.p

_v

alu

e.sy

mb

ol_

p,p

ará

me

tro))

índ

ice.m

_v

aria

ble

[i]=o

bj_

def_

ptr->

ob

j_in

dex

;g

oto

b

ien

;

if(!strcm

p(o

bj_

de

f_p

tr-:>p

ara

m_

2.p

_v

alu

e.sy

mb

ol_

p,"S

P_

VA

RIA

BL

E"))

pará

metro

[0] = ' V

;fo

r (Í=

0;Í

<1

0;Í

++

)

{pará

metro

[1] =

48

+i;

if ( !strcm

p(o

bj_

def_

jptr->

para

m_

3 .p

_v

alu

e.sy

mb

ol_

p, p

ará

metro

) )

ind

ice . c

_v

aria

ble

[i] =o

bj_

def_

ptr->

ob

j_in

dex

;•g

oto

b

ien

;i

parámetro [1]

='!' ;

for (i°iO;i<20;itt)

if ( istrcmp (obj_def_ptr->param_3 .p_value. symbol_p, parámetro) )

indice.c_variable [i J =

obj_def_ptr->obj_index;

go

to b

ien

;J

ftifdef DEBUG

printf {ngsi_de£_obj FAIL in context %d\n",current_context);

Sendif

return(GSI FAIL);

APÉNDICES A

-19

7

DESARROLLO E IM

PLEMENTAQ

ÓN

DE UN SISTEM

A SUPERVISOR

PARA LA GESTIÓ

N Y CO

NTROL DE EDAR

bien

:

Sifdef DEBUG

printf ("gsi_def_obj in context %d\n",current^context) ;

printf ("

%s, a %s registered with index %d\n",name_of(obj_def_ptr),

class_of(obj_def_ptr), obj_def_ptr->obj_index);

tfendif

return (GSI SUCCESS); '

}/***.***********.****.*********.

*

*..*,*. „.************/

/* GSI proporciona una lista de variables de las que se requieren valores.

La funciona toma los valores del sistema externo y los devuelve de la

forma en que GSI los entiende */

gsi_int gsi_get_data(obj_list, count)

°bj_type *obj_list;

gsi_int

count ;

{TIMB_ARGJTYPE argumentos[25];

struct tm *mihoral, *mihora2;

int i,j;

time_t mihora;

long int chequeo=0;

memset(argumentos,O,sizeof(argumentos));

sem_wait(semidl);

/* Esperando el semáforo 1 */

memcpy(&medidas,direccionl,sizeof(medidas));

for (i = 0,-i<200;i

+ + ) chequeo+=direccionl [ij

;memcpy(&var, &direccionl[700], sizeof(var));

sem_signal (semidl)

,- /* Deja el semáforo l*/

if (chequeo==0) return(GSI_FAILÍ;

chequeo=0;

sem_wait(semid3);

/* Esperando el semáforo 3 */

memcpy (análisis, direccions , sizeof (análisis) )

,-for (i = 0;i<200; i + + ) chequeo*=direccion3[i];

sem_signal(semid3);

/* Deja el semáforo 3*/

for

(i=0 ; i<

co

un

t ; i+-f )

{m

iho

ra=

med

idas.tie

mp

o;

mih

ora

l=lo

caltitn

e (

imih

ora

) ;a

rgu

me

nto

s[i].o

bj_

ind

ex

=o

bj_

list[i].o

bj_

ind

ex

;arg

um

en

tos[i].v

alu

é.p

_ty

pe=

FL

OA

T6

4_

TA

G;

arg

um

en

tos[ij.d

ate

.ye

ar=

(icp

_in

t)(19

00

L+

mih

ora

l->tm

_y

ea

r);arg

um

en

tos [ij .d

ate

.mo

nth

= (ic

p^

int) (lL

+tn

iho

ral->tm

_m

on

) ;arg

um

en

tos ti].d

ate

.da

y=

(icp

_in

t) (mih

ora

l->tm

_m

da

y);

arg

um

en

tos[ij,d

ate

.ho

ur=

(icp

_in

t)(mih

ora

l->tm

_h

ou

r);arg

um

en

tos[i].d

ate

.min

ute

=(ic

p_

int)(m

ino

rai->

tm_

min

);a

rgu

me

nto

s[i).d

ate

.se

co

nd

=(ic

p_

int)(m

ino

rai->

tm_

se

c);

for

(j=0

;j<3

;j++

){if

(ob

j_lia

t[i].ob

j_in

de

x=

oin

dic

e.m

_p

h[j])

arg

um

en

tos[iJ

.va

lué

.p_

va

lue

.floa

t_p

=m

ed

ida

s.p

h[j);

go

to b

ien

;}

if (o

bj_

list (i] .o

bj_

ind

ex

=s=

ind

ice.m

_te

mp

era

tura [ j

j )iarg

um

en

tos[i].v

alu

é.p

_v

alu

e.flo

at_

p=

me

did

as.te

mp

era

tura

[j];g

oto

b

ien

;}

if (o

bj_

list[i].o

bj_

ind

ex

==

ind

ice

.m_

po

ten

cia

l[j])

arg

um

en

tos[i] .v

alu

é.p

_v

alu

e.flo

at_

p=

med

idas.p

ote

ncia

l tj 1 ;

go

to b

ien,-

(if

(ob

i_lis

tli).ob

j_in

de

x=

=in

dic

e.m

o

xig

en

oljl)

{arg

um

en

tos[i].v

alu

é.p

_v

alu

e.flo

at_

p=

me

did

as.o

xig

en

o[j];

A-1

98

APÉNDICES

Page 157: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. C

OM

UNIC

ACIÓ

N G

SI -

SER

VIDO

R D

E D

ATO

S

go

to b

ien

;

if

(ob

j_li

at{

i] .

ob

j__

ind

ex=

=in

dic

e.m

_m

A[j

])

arg

um

en

tos[

i].v

alu

e.p

_v

alu

e.f

loa

t_p

=m

ed

ida

s.m

A[j

];g

oto

b

ien

;

if

(ob

j_li

at[

i].o

bj_

ind

ex

==

ind

ice

.m_

ve

loc

ida

d[j

])

arg

um

en

tos

[i]

. valu

e .p

_v

alu

e. f

lo

at_

p=

smed

idas

.v

elo

cid

ad

l j]

;g

oto

b

ien

;

if

(ob

j_li

at

[i]

.ob

j in

dex

==

ind

ice.m

sp

o

xig

en

olj

])c arg

um

en

tos

[i]

.valu

e.p

_v

alu

e. f

lo

at_

p=

med

idas.

set_

_p

oin

t_o

xig

en

o [

jî ;

go

to b

ien

;

if

(ob

j_li

st[

i].

ob

j_in

de

x=

s=in

dic

e.m

_sp

_v

elo

cid

ad

[j])

arg

um

en

tos

[i]

.valu

e.p

_v

alu

e.f

loat_

p=

med

idas.

set_

j?o

int_

velo

cid

ad

tj]

;g

oto

b

ien

' -

if

(ob

j_li

st[

i].o

bj_

ind

ex

==

ind

ice

.m_

ca

ud

ale

s[j

]}

arg

um

en

tos

[i}

.va

lue

.p_

va

lue

.flo

at_

p=

me

did

as.c

au

da

les[j

];g

oto

b

ien

;

for

tj

if

=0

;j<

16

;j+

+)

(ob

j_lÎ

3t(

i].o

bj_

ind

ex

==

ind

ice

,m_

en

tra

da

s_p

lc[j

])

arg

um

ento

s[i]

.val

ue.

p_

typ

e=IN

TE

GE

R_

TA

G;

if

(me

did

as.

en

tra

da

s_p

lc[j

]==

49

)a

rgu

me

nto

s[i

].v

alu

e.p

_v

alu

e.i

nte

ge

r_p

=l;

els

e

arg

um

en

tos[

i].v

alu

e.p

_v

alu

e.i

nte

ge

r_p

=0

;g

oto

b

ien

;i

for (j=0;j<24;j

íf(o

bj_

list[

ij.o

bj_

ind

ex

==

ind

ice

.m_

sa

lid

as_

plc

[j])

arg

um

ento

s[i]

.val

ue.

p_

typ

e=IN

TE

GE

R_

TA

G;

if

(me

did

as.

sali

da

s_p

lc{

jj =

=4

9)

arg

um

en

tos[i

].v

alu

e.p

_v

alu

e.i

nte

ger_

p=

l;els

e ar

gum

ento

s [i

] .v

alu

e .p

_v

alu

e. in

teg

er_

_p

=0

;g

oto

b

ien

;

j_list(i].obj_index==indice.m_plc[0])

int k;

int valor=0;

argumentos[i].valué.p_type=INTEGER_TAG;

for (k=0;k<16;k++)

{ if {medidas.entradas_plc(kl==49)

valor=valor ¡ (IL « k);

argumentos ti).valué.p_value.integer_p=valor;

goto bien;

ij_list[i].obj_index==indice.m_plc[li)

int k;

int valor=0;

argumentos [i) .valué.p_type=INTEGER_TAG;

for (k=0;k<24;k++)

f if (medidas.salidas_plc[kj==49Í

valor=valor | (IL « k);

}argumentos[i).value.p_value.integer_p=valor;

APÉN

DICE

S A

-199

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN

DE

UN S

ISTC

MA

SUPE

RVIS

OR P

ARA

LA G

ESTI

ÓN

Y C

ONTR

OL D

E ED

AR

go

to b

ien

;

for

(j.0

;j<

20

,-jt

<.|

{ if

(ob

j_li

st[

i] .

ob

j_in

dex

= =

ind

ice.m

_est

ad

os

vari

os

[jl)

i arg

um

en

tos

[i]

.valu

é ,

p_ty

pe=

IKT

EG

ER

__T

AG

;arg

um

en

tos

[i]

.valu

é .p

_v

alu

e. in

teg

er_

p=

med

idas

.est

ad

os_

vari

os

[ j]

-48

;g

oto

b

ien

;

for

(j=

0; j

<1

0; j

-t-O

( if

(ob

j_li

st[

i].o

bj_

ind

ex

==

ind

ice

.m

tie

mp

os

(jjï

{ arg

um

en

tos

[i]

.val

ué.

p_

typ

e=IN

TE

GE

R_

_T

AG

;arg

um

en

tos[

i] .

valu

é.p

_v

alu

e.i

nte

ger_

p=

med

idas.

tiem

po

s[j1

;g

oto

b

ien

;}

for

(j=

0;j

<2

0;j

++

>{ if

(o

bj_

list[

i].o

bj_

ind

ex

==

ind

ice

.m_

va

ria

ble

[j]}

{ if

(var.

t_v

ari

ab

le [

j] =

.=.0

) /*

N

o e

xis

te

med

ida

*/

( arg

um

en

tos[

i].e

rro

r_cd

=1

0;

arg

um

en

tos(

i].v

alu

é.p

_ty

pe=

NU

LL

_T

AG

;g

oto

b

ien

;>

arg

um

en

tos[i

j.v

alu

é.p

_v

alu

e.f

loa

t_p

=v

ar.

va

ria

ble

(j];

mih

ora

2=

localt

ime(

&(v

ar.

t_v

ari

ab

le[j

])

) ;

arg

um

en

tos[

iJ.v

alu

é.p

_ty

pe

=F

LO

AT

64

_T

AG

;a

rgu

me

nto

s[i]

.da

te.y

ea

r=(i

cp

_in

t)(l

90

0L

+m

iho

ra2

->tm

_y

ea

r)a

rgu

me

nto

s[ij

.da

te.m

on

th=

(ic

p_

int)

(lL

+m

iho

ra2

->tm

_m

on

);a

rgu

me

nto

s[i]

.da

te.d

ay

=(i

cp

_in

t)(m

iho

ra2

->tm

_m

da

y);

arg

um

en

tos[

i],d

ate

.ho

ur=

(ic

p_

int)

(mih

ora

2->

tm_

ho

ur)

;a

rgu

me

nto

s[i]

.da

te.m

inu

te=

(ic

p_

int)

(mih

ora

2->

tm_

min

);a

rgu

me

nto

s[i]

.da

te.s

ec

on

d=

(ic

p_

int)

(mih

ora

2->

tm_

sec

);g

oto

b

ien

;

for (j=0; j<5; j++)

f if (obj_list[i].obj_index==indice.m_nitratos [j])

i if (análisis[j].t_nitratos=°0) /* No existe medida */

{ arg

um

en

tos[

i].e

rro

r_cd

=1

0;

arg

um

en

tos[

i].v

alu

é.p

_ty

pe=

NU

LL

_T

AG

;g

oto

b

ien

;}

arg

um

en

tos[i

].v

alu

e.p

_v

alu

e.f

loa

t_p

=a

na

lisis

(j].

nit

rato

s;

mih

ora

2=

localt

ime(

&(a

na

lisis

[j].

t_n

itra

tos)

};

arg

um

en

tos[

i].v

alu

é.p

_ty

pe=

FL

OA

T6

4JT

AG

;a

rgu

me

nto

s[il

.da

te.y

ea

r=(i

cp

_in

t)(1

90

0L

+m

iho

ra2

->tm

_y

ea

r);

arg

um

en

tos

[il

.date

.mo

nth

=>

(icp

_in

t) (

lL'+

mih

ora

2->

ttn

_m

on

) ;

arg

um

en

tos[

i].d

ate

.da

y=

(ic

p_

int)

(mih

ora

2->

tm

md

ay

);a

rgu

me

nto

s[i]

.da

te.h

ou

r=(i

cp

_in

t)(m

iho

ra2

->tm

_h

ou

r);

arg

um

en

tos[

i].d

ate

.min

ute

=(i

cp

_in

t)(m

iho

ra2

->tm

_m

in);

arg

um

en

tos[

i].d

ate

.se

co

nd

=(i

cp

_in

t)(m

iho

ra2

->tm

_se

c);

go

to b

ien

;i

if

(ob

j_li

st[

i].o

bj_

ind

ex

==

ind

ice

.m

nit

rit

os(j]

ïi if (análisis[j].t nitritos==0) /• No existe medida •/

{ argumentos[i].error_cd=10;

argumentos(ij.valué.p_type=KULL_TAG;

goto bien;

A-2

00

APÉN

DICE

S

Page 158: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉND

ICES. C

OM

UN

ICAC

IÓN

GS

I - SERVID

OR

DE

DATOS

arg

um

en

tos[i).v

alu

é.p

_v

alu

e.flo

at_

p=

an

alis

ig[jj.n

itritos;

mih

ora

2=

localtim

e(

&(a

na

lisis

[j]

.t_n

itrito

s)

);

arg

um

en

tos[i].v

alu

é.p

_ty

pe=

FL

OA

T6

4_

TA

G;

arg

um

en

tos[i].d

ate

.ye

ar=

(icp

_in

t)(19

00

L+

mih

ora

2->

tm_

ye

ar);

arg

um

en

tos[i].d

ate

.mo

nth

=(ic

p_

int)(lL

+m

iho

ra2

->tm

_m

on

);arg

um

ento

s [i] .date

.day

s(ic

p_

int) (m

iho

ra2

->tm

_m

day

) ;arg

um

en

tos [ij .d

ac

e.h

ou

r=(ic

p_

int) (m

iho

ra2->

tm_

_h

ou

r) ;a

rgu

me

nto

s[ij.d

ate

.min

ute

=(ic

p^

int)(m

iho

ra2

->tm

_m

in);

arg

um

en

tos[i].d

ate

.aeco

nd

=(ic

p_

int)(m

iho

ra2

->tro

_sec);

goto

b

ien

;}

if (o

bj_

list[i].o

bj_

ind

ex

==

ind

ice.m

_am

on

ioíjj)

if (a

lisis

[j].t_a

mo

nio

==

0)

/*

No

ex

iste

m

ed

ida

*/

íarg

um

en

tosti].e

rror_

cd

=1

0;

arg

um

en

tos [ij .v

alué.p

_ty

pe=

NU

LL

JTA

G;

go

to b

ien

,-}

arg

um

en

tos [i] . v

alu

e.p

__

valu

e.f lo

at_

_p

=an

alisis tj] .a

mo

nio

;m

iho

ra2

=lo

ca

ltíme

( tla

na

lisis

[j].t_a

mo

nio

) );

arg

um

en

tos[i].v

alu

é.p

_ty

pe=

FL

OA

T6

4_

TA

G;

arg

um

en

tos [i] .d

ate

.year=

(icp

_in

t) (19

00

L+

mih

ora2

->tm

__

year) ;

arg

um

en

tos [i] -d

ate

.mo

nth

= (ic

p_

int) (lL

-t-mih

ora2

->tm

__

mo

n) ;

arg

um

en

tosti],d

ate

.da

y=

(icp

_in

t)(mih

ora

2->

tm

md

ay

);arg

um

en

tosIi].d

ate

.ho

ur=

(icp

_in

t)(mih

ora

2->

tm_

ho

ur);

arg

um

en

tos [i]

.da

te.m

inu

te=

(icp

_in

t) (mih

ora

2->

tm_

min

) ,-a

rgu

me

nto

s[i].d

ate

.se

co

nd

a(ic

p_

int)(m

iho

ra2

->tm

_se

c);

goto

bie

n;

tfifdef D

EB

UG

prin

tf ("g

si__

get_

data

FA

IL

in co

nte

xt

%d

\n", c

urre

nt_

co

nte

xt)

;

tfen

dif

retu

rn(G

SI_

FA

IL);

bie

n:

ftifdef DEBUG

ííendif

Sifd

ef

DE

BU

Gfo

r (i=

0; i<

cou

nt; i+•-*•)

prin

tf("O

bj:

%i

Ho

ra:

%2

i %

2i

%2i

Valo

r: *

f\n"

,arg

um

en

tosti].o

bj_

ind

ex

, a

rgu

me

nto

s[il.d

ate

.ho

ur,

arg

um

en

tosti]-d

ate

-min

ute

, arg

um

en

tos[i].d

ate

.seco

nd

,a

rgu

me

nto

sti].v

alu

e.p

^v

alu

e.flo

atjp

);

prin

tf ("

gsi

get_

data

in

conte

xt

%d

\n",c

urre

nt_

co

nte

xt);

ffend

if

gsi ret_tvals(argumentos,count);

return (GSI_SUCCESS);

/***********.*****»**•******•***********»,A****»**»**************»**********/

/* GSI proporciona una lista de consignas. La función debe comunicarse con

gsi_int gsi_set_data(obj_list( count)

~obj_type *obj_list;

gsi_int

count;

íint i,j;

sem_wait(semid2);

/* Esperando el semáforo 2 */

memcpy(&consignas/direccion2,sizeof(consignas));

sem_signal(semid2);

/* Deja el semáforo 2*/

for

(i = 0

; i<co

un

t; Í+-O

i ___

.......... - --

- - - -

- --

-APÉNDICES A

- 201

DESARROLLO

E IM

PLEMEN

TACIÓ

N D

E U

N SISTEM

A SU

PERVBO

R PARA LA

GESTIÓ

N i C

ow

reot D

E E

DA

R

if (o

bj_

list[

i].o

bj

ind

ex

==

ind

ice

.c

ox

ige

no

(jl){co

nsig

nas.c

am

bio

_o

xig

en

o íj]

='1

'; * -

-

if (o

bj_

list[i].va

lué

.p_

typ

e=

=F

LO

AT

64

_T

AG

)co

nsig

nas.v

alo

r_o

xig

en

o íj] =

ob

j_lis

t(i].vaíu

e.p

_v

alu

e.flo

at_

p;

if {

ob

j_list[i].v

alu

e.p

_ty

pe=

=IN

TE

GE

R_

TA

co

nsig

nas.v

alo

r_o

xig

en

o[j]=

(do

ub

le) o

bj_

list [i] . v

alu

é.p

_v

alu

e . in

teg

er_

_p

;g

oto

b

ien

;}

if (o

bj

listfi]-o

bj_

ind

ex

==

ind

ice.c

_v

elo

cid

ad

[j))

{co

nsig

na

s.c

am

bio

_a

gita

cio

n[j]=

'1';

if ío

bj_

list [ij .v

alu

é.p

_ty

pe«F

i-OA

T64_T

AG

)co

nsig

nas. v

alo

r_ag

i t ació

n [j] =

ob

j lis

tfi]

.va

lué

.p

valu

e.flo

at_

p;

if (o

bj_

list [i7

.valu

e.p_ty

pe=

="ÍN

TE

GE

R_T

AG

)co

nsig

nas.v

alo

r_ag

itacio

n[j]=

(do

ub

le)o

bj_

lÍ3t [i] . v

alu

é.p

_v

alú

e. in

teg

er_

_p

;goto

bie

n;

}if

(ob

j_lis

t[i].ob

j_in

de

x=

=in

dic

e.c

_c

au

da

les[j])

{co

nsig

na

s.c

am

bio

_c

au

da

les[j]=

'1';

if (o

bj_

list[i].valu

é.p

_ty

pe=

=F

LO

AT

64

_T

AG

)co

nsig

nas.v

alo

r_cau

dale

s [j] =o

bj_

list[i].v

alu

e.p

_v

alu

e.flo

at_

p;

if (o

bj_

list[

i] .valu

é.p_

typ

e==

INT

EG

ER

__

TA

G)

co

nsig

nas.v

alo

r_cau

dale

s[j J =

(do

ub

le)o

bj_

list[i].v

alu

é.p

_v

alu

e.in

teg

er_

p;

go

to b

ien

;)

jfo

r (j«

0:j<

lo,-j+

i.)(if

(ob

j lis

t[i].ob

j_in

de

x=

=in

dic

e.c

tie

mp

os[j])

( ~

co

nsig

na

s.c

am

bio

_tie

mp

os[j]=

'i';

if (o

bj_

list[i].va

lué.p

_ty

pe=

=F

LO

AT

64

_T

AG

)co

nsig

nas.tie

mp

os[j] = (

int)

ob

j_lis

t [i] .v

alu

é.p

_v

alu

e.flo

at_

p;

if Ío

bj_

li3t[ij.v

alu

é.p

_ty

pe

==

INT

EG

ER

_T

AG

)co

nsig

nas.tie

mp

os[jj =

ob

j_lis

t[ij.valu

é.p

_v

alu

e.in

teg

er_

p;

go

to b

ien

;}

for

ij.0;j<

20

;j**

){if

(o

bj_

list[

ij.ob

j in

dex

«=

ind

ice.c

_v

aria

ble

[j])

{ -

'co

nsig

nas .c

am

bio

_v

aria

ble

[j] = ' l ' ;

if (o

bj_

list[i].va

lué

.p_

typ

e=

=F

LO

AT

64

_T

AG

)co

nsig

nas.v

alo

r_v

aria

ble

[j]=o

bj_

list[i].v

alu

e.p

_v

alu

e.flo

at_

p;

if [o

bj_

list[i].valu

é.p

_ty

pe=

=IN

TE

GE

RJT

AG

)co

nsig

nas, v

alo

r__

varia

ble

[j] =(d

ou

ble

)ob

j_lis

tIi].va

lué

.p_

va

lue

.inte

ge

r_p

;goto

b

ien

;

sem_wait(semid2);

/* Esperando el semáforo 2 */

memcpy (direccion2, Sconsignas, sizeof (c_onsignas) ) ; . . .

sem_signal (semíd2) ;"'

/'Deja el semáforo 2*/

A-202

APÉNDICES

Page 159: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

AP

ÉN

DIC

ES

. C

OM

UN

ICA

CIÓ

N G

SI

- S

ER

VID

OR

DE

DA

TOS

ttifd

ef

DEB

UG

pri

ntf

("

gsi_

set_

data

in

co

nte

xt

%d

\n",c

urr

en

t_c

on

tex

t);

flen

dif

retu

rn

(GS

I S

UC

CE

SS

);

/**••***•***•** ............... ************ ..... *..*, ........................ /

/* Función que ejecuta GSI para que el sistema externo deje de obtener datos

para enviárselos a G2 */

gsi_int gsi_pause_context ()

ítifdef DEBUG

printf ("gsi_pause_context in context %d\n" , current_context ) ;

ftendifreturn (GSI_SUCCESS) ;

/* Función que ejecuta GSI para que el sistema externo vuelva a obtener datos

para enviárselos a G2 */

gsi_int g3i_resume_context ()

í Bifdef DEBUG

printf ("gsi_resume_context in context %d\n" , current_context) ;

Sendif return (GSI_SUCCBSS) ;

} /***'»*** .............. ***** ......... *****.***..*..* .............. **********/

/* Función que GSI utiliza para que el sistema externo deje de adquirir datos

y para realizar las acciones necesarias para finalizar este programa */

gsi_int gsi_shutdown_context ()

{ if (shmdt (direccionl) < 0)

err_sys { "gsi_jb: No puedo soltar la memoria compartida l\n");

if (shmdt (direccion2) < 0)

err_sys("gsi_jb: NO puedo soltar la memoria compartida 2\n");

if (shmdt (direccions) <

0)

err_sya ("Migsi ; No puedo soltar la memoria compartida 3\n") ;

sem_close (semidl) ;

sem_close (setnid2) ;

sem_close (semid3) ;

ítifdef DEBUG

printf ("gsi_shutdown_context in context %d\n" , current_context) ;

ttendifreturn (GSI_SUCCESS) ;

/* Función llamada anteriormente "gsi_accept_data ( ) " .

Es utilizada por GSI para mandar a G2 datos no solicitados. */

gsi_

int

gsi_

g2

_p

oll

{)

{ ch

ar

men

saje

_cl

ien

te[T

AM

AN

Y_

M] ;

int

i =

O ;

sem_wait (semidl)

,-

/* Espera el semáforo 1 */

memcpy ( mensaje_cliente, &direccionl (500] , sizeof (mensaje_cliente) ) ;

sem_signal (semidl) ;

/* Deja el semáforo 1 */

if (mensaje_cliente [O] í=0)

{ while (mensaje_cliente [ij 1=10 4& i< (TAMANY_M-2> ) Í++-;

mensaje_cliente fi+1) =0;

gsi_ret_msg(mensaje_cliente, sizeof (mensaje_cliente) ) ;

sem_wait (semidl) ;

/* Espera el semáforo 1 */

memset (tdireccionl [500] , O, sizeof (mensaje_cliente> ) ;

sem_signal (semidl) ;

/* Deja el semáforo 1 */

APÉN

DICE

S A

- 2

03

DESA

RRO

LLO

E IM

PLEM

ENTA

CIÓ

N D

E UN

SIS

TEM

A S

UPER

VISO

R P

ARA

LA G

ESTI

ÓN

Y C

ONT

ROL

DE E

DA

R

ififdef DEBUG

printf ("\ngsi_g2_poll in context %d\n" ,current_context) ;

Sendif

..

..

..

return (GSI SUCCESS) ;

/* GSI utiliza esta función para que el sistema externo deje de tomar datos

de una variable, cuando cambia sus características o deja de existir */

gsi_int gsi_stop_data(obj_lÍ3t, count)

obJ_type *obj_list; ~

gsi int

count;

{ ífifdef DEBUG

printf ( "gsi_stop_data in context %d\n" ,current_context) ;

Jfendifreturn (GSI_SUCCESS) ;

/* Función llamada anteriormente "gsi_rd_txt () " .

Cuando G2 manda un mensaje a GSI, esta función debe encargarse de

redirigirlo al sistema externo */

gsi_int gsi_send_message (message, length, obj_index)

char

'message ;

gsi int

length;

gsi_int

obj_index;

{ Sifdef DEBUG

printf ("gsi_send_message in context %d\n" ,current_context) ;

printf ("G2 says: %s\n" .message) ;

itendifreturn (GSI_SUCCESS) ;

} /********** ......... *...**.*.*.**.***.********..************ ....... **.,.**.*/

/* GSI llama 50 veces por segundo a esta función para realizar tareas si

*DO_EXT_PROC es TRUE */

gsi_int allow_ext_proc ()

8ifdef DEBUG

printf ( "allow_ext_proc in context %d\n" , current_contextï ;

ífendifreturn (GSI_SUCCESS) ;

/* Función que registra las funciones RPC que G2 puede pedir a GSI •/

gsi_int InitUsrRpcs()

return(GSI SUCCESS);

Î /* rpc definido para lanzar una alarma en la SUN */

gsi_int alarma(arguments, count, call_index)

rpc_arg_type "arguments ;

gsi int count, call_index;

{ Sifdef DEBUG

printf ("rpc alarma in context %d\n",current context);

tfendif

system(Bamp /quantum/juan/mp3/Van* &");

return(GSI SUCCESS);

A-204

APÉNDICES

Page 160: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. COM

UNICACIÓN

GSI - SERVIDO

R D

E DATO

S

gsi_main.c

-- Sample main function to link with GSI toolkit.

This is a functional main which is used to link with skeleton.c and other

GSI example programs. Feel free to use this main as is, or modified to

suit your needs.

Although this software has been extensively tested, Gensym cannot

guarantee error-free performance in all applications.

Accordingly,

use of the software is at the customer's sole risk.

29jul93

!

*/

Sinelude "gsi.h"

/* Note, icp.h is included by gsi.h. */

extern gsi_int alarma() ;

main(argc, argv)

int

argc;

char *argv [] ;

(gsi_int status;

/** Specify GSI run-time options, if any...

** Unless specified otherwise, GSI uses D floats under VAX/VMS, and

*

IEEE floats under Alpha/OpenVMS, in both VMS systems, G floats may

* be specified as a run-time option.

In the code below the selection

* of floating point format is automated for VMS platforms via the use

* of the symbol CCSgfloat. CC$gfloat is set on VAXen when this file

* has been compiled with the /G_FLOAT option, and is set by default on

* Alphas (we have chosen IEEE as the default in all GSI example code).

* Although off by default, GSI_ONE_CYCLB is explicitly reset to

* demonstrate how options are turned off.

*/

8

ifdef vms

ft

if CCSgfloat

gsi set_option(GSI USE_GFLOATS)

,-8

endif

8

endif

gsi_reset_option(GSI_ONE_CYCLE) ;

/* gsi_reset option (ICP_USE RPCS)

,-/* gsi_set_option(ICP_RPC_ARRARGSÏ;

Por ahora no hay RPCs */

Nuevo modo G2-GSI RPC */

Set the version control variables to the values defined in gsi.h

Though optional, this is recommended to ensure version consistency

between the GSI object libraries, and the GSI and ICP include

files used to compile your application code.

gai_include_file_major_version

gsi_include_file_minor_ver3ion

icp_include_file_major_ver9ion

icp_include2file_minor_yergion

GSI_INCLUDE_MAJ_VER_NUM;

GSI_INCLUDE_MIN_VER_NUM;

ICP_INCLUDE_MAJ_VER_NUM;

ICP_INCLUDE_MIN_VER_NUM;

/* Registro de las RPC declaradas en gsi_jb */

if ( gsi_rpc_declare_local ( alarma, "ALARMA") !=

GSI_SUCCESS)

exit(l);

* Initialize GSI and enter the event handler loop.

*/status

gsi_start(argc, argv);

Since the GSI_ONE__CYCLE option is not set, gsi__start() never returns.

If GSI_ONE_CYCLE were set, gsi_start() would return after setup

and one iteration of the GSI event loop. When using the GSI_ONE_CYCLE

option, subsequent calls to gsi_run_loop() are required after the initial

call to gsi start() in order to allow GSI to react to messages from

G2 and to make calls to the user code funcitons. An example implementation

APÉNDICES A

- 205

DESARROLLO E IM

PLEMENTAQ

ON

DE UN SISTEM

A SUPERVISO

R PARA LA G

ESTIÓN

Y CONTRO

L DE EDAR

* is provided below (commented out). The function scan_and_react() is a

* hypothetical function that interacts with some other process and GSI.

*//* do {status « gsi_run_loop();

status = scan_and_react(status);

} while (status «- GSI_SUCCESS);

*/return 0 ;

} /* end main */

A-206

APÉNDICES

Page 161: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

••••••••••••••••••••••••••••<

/*

Mis

cell

an

eo

us

mac

ros

«d

efi

ne

max

(A

, B

) ((

A)

>

{B)

? (A

) :

(B)

)

«if

nd

ef

min

«d

efi

ne

min

(A,.

B

) í

(A)

>

(B)

? (B

) :

(A))

.

.it

en

dif

/*

Mo

st

of

the

foll

ow

ing

typ

ed

efs

an

d d

efi

nes

sup

po

rtth

e

old

n

amin

g co

nv

en

tio

ns

for

the

data

str

uctu

res

defi

ned

ab

ov

e.

Som

e p

rov

ide ali

ases

for

mu

lti-

pu

rpo

se s

tru

ctu

res

typ

ed

ef

ob

j d

ef

typ

e

*o

bj_

def_

ptr

_ty

pe;

typ

ed

ef

ob

j v

alu

e

typ

e

arr

ay

_v

alu

e_

typ

e;

typ

ed

ef

icp

valu

e u

nio

n

ICP_

VA

LU

E;

typ

ed

ef

ob

j_ty

pe

TE

MP_

AR

G_T

YPE

;ty

ped

ef

ob

j_v

alu

e_

typ

e

TE

MP_

PAR

AM

;ty

ped

ef

ob

j_v

alu

e_

typ

e att

r_v

alu

e_

typ

e;

typ

ed

ef

ob

j v

alu

e t

yp

e

rpc_

ar9

_ty

pe;

typ

ed

ef

icp

valu

e u

nio

n

TE

MP_

VA

LU

E;

typ

ed

ef

tim

ed

_o

bj_

typ

e T

IME

_AR

GJT

YPE

;ty

ped

ef

att

r_ty

pe

V

EC

TO

RJT

YPE

;ty

ped

ef

t im

ed

_att

rety

pe

T

_VE

CT

OR

_TY

PE;

typ

ed

ef

icp

ti

mest

am

p_

typ

e T

IME

STA

MP;

typ

ed

ef

vo

id

*u

ser_

def_

typ

e;

typ

ed

ef

vo

id

*u

ser_

ptr

ty

pe;

typ

ed

ef

icp

in

t o

bj

ind

ex ty

pe,

tag

_ty

pe ,

sta

tus_

typ

e,

inte

rval_

typ

e ;

APÉN

DICE

S A

-21

1

'11 • • •:*;• • • • • • • • • •••••••••••••••

ex

tern

v

oid

g

si_

s t_

att

r{)

;ex

tern

v

oid

g

si

s t

ob

j in

de

xí)

;ex

tern

v

oid

g

si

s t

sta

tus

() ;

ex

tern

vo^

9

si_

s t_

att

r na

m u

.

ex

tern

v

oid

g

si

s t

att

r ti

me

O;

ex

tern

v

oid

g

si

s t

typ

e (

) ;

ex

tern

v

oid

g

si

s t_

int

( ) ;

ex

tern

v

oid

_

gsi

_s

t_lo

g()

;ex

tern

v

oid

g

si

s t

flt

()

;ex

tern

v

oid

g

si_

s t_

sym

() ;

ex

tern

void

g

si_

s t_

str

();

ex

tern

b

oo

lean

gsi

_co

nte

xt_

receiv

ed

_d

ata

t) ;

/*

Th

e f

oll

ow

ing

defi

nes

all

ow

y

ou t

o

use

th

e

- */

«d

efi

ne

flu

sh_

po

int

icp

_f

lush

jpo

int

«d

efi

ne

DO

_EX

T_P

RO

C

do

_ex

t_p

roc

*

«d

efi

ne

Set

lcp

Mo

de

(x)

(icp

_o

pti

on

s =

icp

_o

pti

on

s |

x)

«d

efi

ne

Rese

tlcp

Mo

de(x

) (i

cp

_o

pti

on

s = ic

p_

op

tio

ns

&

(-x

) )

«d

efi

ne

Test

lcp

Mo

de(x

) {ic

p o

pti

on

s &

x)

«d

efi

ne

ENA

BLE

E

XT

PR

OC

O

*do

ex

t_p

roc

*

TR

UE

«d

efi

ne

CO

RR

J3B

JJT

YP

E

Co

r_

ob

j_ty

pe

«d

efi

ne

str

_p

tr_

of

(x)

gs

_st

r_o

f (x

defi

ne

sym

_p

tr_

of

(x)

gs

_sy

m_

(x)

«d

efi

ne

gsi

_u

ser_

def_

of

(x,y

) ,

gs

_u

ser_

ptr

_o

f (x

,y)

«d

efi

ne

gsi

se

t u

ser

de

f{x

,y,z

) gs

_set_

user_

ptr

(x

,y,

2)

/*

Th

e f

oll

ow

ing

d

efi

ne

s all

ow

sh

ort

er

(wit

ho

ut

'gsi_

' p

refi

x)

nam

esfo

r access

fu

ncti

on

s to

b

e u

sed

. P

refi

xes

were

ad

ded

to

p

rote

ct

ag

ain

st

nam

e co

llis

ion

s

whe

n li

nk

ing

w

ith th

ird

p

art

y

pro

du

cts

.

«d

efi

ne

typ

e

of(

x)

gsi

ty

pe

o

f (x

defi

ne

nam

e o

f (x

) g

si_

nam

e_o

f (x

A-

212

APÉN

DICE

S

APÉN

DICE

S. C

OM

UNIC

ACIÓ

N G

SI -

SER

VIDO

R D

E D

ATO

S

File name:

Owner:

Purpose :

This file depends on:

Dependent files :

Legal Notice:

History:

gsi .h

Peter Pandel

This include file serves to define the various

structure types and contants required by GSI user

applications.

icp. h

All GSI modules and their end-user applications.

Copyright (C) 1993, Gensym Corp.,

125 CambridgePark Drive, Cambridge MA 02140

All rights reserved.

18feb93

PAF Created

Olfeb95 PAF Simplified version numbering system.

23mar95

PAF Added alias for icp tiraestamp_type

«include "icp.h"

/* These declarations are used for optional version control.

«define GSI_INCLUDE_MAJ_VER_NUM

«define GSI INCLUDE MIN VER NUM

3L2L

extern gsi_int gsi_include_file_major_version;

extern gsi_int gsi_include_f ile_minor_version,-

/* Maximum size for a local function name being exported to G2.

«define MAX LOCAL FUNC_NAME

128L

DESA

RROL

LO E

IMPL

EMEN

TAQ

ÓN

DE

UN S

ISTE

MA

SUPE

RVIS

OR P

ARA

IA G

ESTI

ON

Y C

ONT

ROL

DE E

DAR

«define

«define

«define

«define

«define

«define

«define

«define

«define

«define

«define

«define

LoadUsrRpc{x,y, z)

g2_start_rpc(x, y, z)

g2__call_rpc (x,y, z)

getgsiport()

gsi_init_ds(x,y)

gsi_pause_ds()

gsi_resume_ds() .

gsi_shutdown()

gsi_accept_data()

gs i_rd_txt(x,y,z)

GSI_FAIL

GSI PORT NUM

gsi_rpc_declare_local(x,y)

gsi_rpc_start(x,y,gsi_current_context)

gsi_rpc_call(x,y,gsi_current_context)

gsi_get_tcp_port()

gsi_initialize_context(x,y)

gsi_pause_context()

gsi_resume^context()

gsi_3hutdown_context()

gsi_g2_poll()

gsi_send_message(x,y,z)

GSI_FAILURE

OL

Page 162: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

typedef icp_int gspan int;

/* These declarations are used for optional version control.

*/«define ICP_INCLUDE MAJ VER HUM

3L

«define ICP_INCLUDE_MIN_VER_NUM

2L

extern icp_int icp_include__f ile__major_version;

extern icp_int icp_include_f ile_minor_version;

«define NULL TAG

OL

«define INTEGER TAG

OxOlL

«define SYMBOL_TAG

Ox03L

«define STRING TAG

OxD4L

«define LOGICAL_TAG

OxOSL

«define FLOAT64_TAG

Ox06L

«define ITEMJTAG

OxOSL

«define MAX_TYPE_TAG

OxOSL

«define NO ERR

OL

«define MAX_ATTR_NAME_SIZE

256L

«define ICP TRUE

1000L

«define ICP_FALSE

-1000L

«define MIN_G2_INTEGER

-536870912L

«define VOID_INDEX

-IL

«define ICP_PORT_NUM

22041L

«define UNDEFINED CONTEXT

OxFFFFFFFFL

«ifdef HSDOS

«

define MAX CONTEXTS

10L

«else

«

define MAX CONTEXTS

50L

«endif

APÉNDICES A - 209

obj_value_type param_5;

obj_value_type param_6 ;

icp_int

. interval;

} obj_def_type;

typedef struct {

obj_def_type *obj_ptr;

union {

icp__int user_long;

void

*user_ptr;

} user_def ;

icp_int tag;

} corr_obj_type;

typedef struct {

icp_int

obj_index;

icp_int

error_cd;

icp_int

interval;

obj_value_type value;

ï obj_type;

typedef struct {

icp int year;

icp int month;

icp int:

hour;

icp_int minute;

icp int second;

} icp timestamp_type;

typedef struct at {

char

attribute [MAX_ATTR_NAME_SIZE] ;

obj_value^type value;

} attr_type;

typedef struct {

char

attribute [MAX_ATTR_NAME_SIZE] ;

obj_value_type

value;

A - 210 APÉNDICES

«d

efin

e le

ng

th_

of(x

de

fine

set

typ

e(x

,y)

«d

efin

e

int

of(x

defin

e lo

g

of (x

de

fine

f lt_o

f (x)

«d

efin

e sym

_of (x)

«d

efin

e str_

of (x

de

fine

se

t_in

t(x,y

de

fine

set

log

(x,y

de

fine

se

t_flt{

x,y

de

fine

set_

sytn

(x, y

de

fine

se

t_str(x

,y)

«d

efin

e o

bj_

ind

ex

_o

f (x)

«d

efin

e se

t_o

bj_

_in

de

x(x

,y)

«d

efin

e st

tus

of (x

defin

e

se _

st tu

s(x

,y)

«d

efin

e in

erv

l_

of (x

defin

e se

_

in

erv

al(x

,y>

«d

efin

e d

e at

1 o

f (x)

«d

efin

e d

ef

at

2 o

f (x)

«d

efin

e d

ef

at

3

of(x

defin

e d

ef at

4

of (x

defin

e d

ef

at

5 o

f (x)

«d

efin

e d

ef

attr

6

of (x

defin

e o

bj_

of(x

defin

e v

alu

e_

of(x

)

-

- -

«d

efin

e attr_

of (x

defin

e set_

attr (x

,y)

«d

efin

e a

ttr n

ame

of (x

defin

e se

t_attr_

nam

e (x

,y)

«d

efin

e tim

e o

f (x)

«d

efin

e attr_

time_

of (x

)

«d

efin

e

set

is_tim

ed

(x,y

)

APÉNDICES. COMUNICACIÓN GSI - SERVIDOR DE DATOS

gsi

cla

ss_o

f(x)

gsi_

len

gth

_o

f (x)

gsi_

set_

typ

e (x

, y)

gsi_

int_

of (x

)gsi

log

o

f(x)

gsi_

flt_o

f (x

)g

si_sy

m_

of (x

)g

si_

st

_o

f (x)

gsi

se

int

x,y

)g

si__

se _

log

(x,y

)g

si_se

_

flt (x

,y)

gsi_

se

_sy

m(x

,y}

gsi

se _

str(x

,y)

gsi_

ob

j_in

dex

_o

f (x)

gsi_

set_

ob

j_in

dex

{x, y)

gsi_

statu

s_o

f (x)

gsi

set_

sta

u

s(x

,y)

gsi_

inte

rva

_

of (x

)g

si_

set_

int

rva

ltx.y

)

gsi

def

att

2

of (x

)

gsi

def

att

4 o

f (x)

gsi_

def_

att

S_

of{

gsi

def

att

6 o

f (x)

gsi_

ob

j_o

f( )

gai

valu

e

of (x

)

gsi_

attr_

of (x

)g

si_

set_

attr (x

, y)

gsi_

attr_

nam

e_

of (x

)g

si_

set_

attr

name (x

, y)

gsi

time

of (x

)

gsi_

attr_

time_

of (x

)

gsi_

set_

is

timed

(x^l -

^^

^.-

^-

^^

-^ .^

^.

DESARROLLO E IMPLEMENTAQÓN DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

SEM

ÁFO

RO

. C

- FU

NC

ION

ES

PAR

A

LA

UT

ILIZ

AC

IÓN

D

E SEM

ÁFO

RO

S

UL

TIM

A

RE

VIS

ION

: S/6

/97

«in

clu

de

<std

io.h

inclu

de

<sy

s/typ

es.h

inclu

de

<sy

s/ipc

.h>

«in

clu

de

<sy

s/sem

.h>

«in

clu

de

<errn

o.h

>

/•«d

efin

e

SEMK

EY

((key

t) 4

22

33

53

L) *

de

fine

PERM

S 0

64

de

fine

err_

sys (A

) p

rintf

(A "

\n")

«d

efin

e B

IGC

OU

NT

lO

OO

O

int

sem

_cre

ate

( k

ey

_t

key

, in

t in

itval) ;

vo

id

sem

rm(in

t id

) ;v

oid

sem

clo

se (in

t id

);v

oid

se

m_

wa

it(int

id);

-.

-.

..

._

-void

se

m s

ign

al (in

t id

) ;void

se

m o

piin

t id

, in

t v

alu

e);

int

errn

o;

Page 163: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

AP

ÉN

DIC

ES

. C

OM

UN

ICA

CIÓ

N G

SI

- S

ER

VID

OR

DE

DA

TO

S

int

sem

_cre

ate

( k

ey

_t

key

, in

t in

itv

al)

{

-

reg

iste

r in

t id

, se

mv

al;

un

ion

se

raun

í int

val;

struct seraid_d3

*buf ;

ushort

*array;

} semctl_arg;

if (key « IPC_PRIVATE) return (-1);

else if (key == (key_t) -1) return (-1);

ag

ain

:if

(

(id

= s

em

ge

ttk

ey

, 3

,.P

ER

MS

| IP

C_C

RE

AT

))

< 0

)re

turn

(-

1);

if

(sem

op

iid

, &

op

loc

kfO

],

2)

<

0)

{ if (errno

== EINVAL) goto again;

err_sys("can't lock"};

Î

if

( (s

emv

al

= a

em

ctl

fid

, 1,

G

ET

VA

L,

0))

<

0

)e

rr_

sy

s(n

ca

n't

G

ET

VA

L")

;if

(s

em

val

==

0)

í sem

ctl

_arg

.val

= i

nit

va

l;if

(s

em

ctK

id,

0,

SET

VA

L,

sem

ctl

_arg

) <

0)

err

_sy

s("c

an

S

ET

VA

LfO

]");

sem

ctl

_arg

.val

= B

IGC

OU

NT

;if

(s

em

ctK

id,

1,

SET

VA

L,

sem

ctl

_arg

) <

0)

err

_sy

s{"c

an

S

ET

VA

L[1

]");

)if (semopfid, &op_endcreate[0], 2) < 0)

err_sys("can1t end create");

/* Abre un semáforo que ya existe.

Devuelve la identidad del semáforo.

int aem_open (key_t key)

í register int

id;

if (key == IPC^PRIVATE) return (-1);

else if (key ==

(key_t) -1) return (

if ( (id = semgetfkey, 3, 0)) < 0)

return (-1);

if (semopiid, &op_open[0], 1) < 0)

err_sys("can1t open");

return (id);

/* Elimina un semáforo.

Debe ser llamada por el servidor.

void sem_rm(int id)

if (semctKid, O ,IPC_RMID, 0) < 0)

err_sys(dcan't IPC_RHID"};

/* Cierra un semáforo. */

void sem close(int id)

AP

ÉN

DIC

ES

A-2

15

DESA

RRO

LLO

E IM

PLEM

ENTA

CIÓ

N D

E UN

SIS

TEM

A SU

PERV

ISOR

PAR

A LA

GES

TIÓ

N Y

CO

NTRO

L DE

ED

AR

register int semval;

if (semop(id, &op_close[0], 3) < 0)

err_sys("can1t semop");

if (semval=semctl(id, 1, GETVAL, 0) < 0)

err_sys("can't GETVAL");

if (semval > BIGCOUNT)

err_sys("sem[l] > BIGCOUNT");

else if (semval == BIGCOUNT)

sem_rm(id);

else

if (semop(id, &op_unlock[0], 1) < 0}

err_sys("can't unlock");

/***.„..**•.****.*****************•****.*****.******.*/

/" Espera hasta que el semáforo es mayor que cero.

Después le resta l y vuelve */

void sem_wait(int id)

sem_op(id,-1);

} /***..********.*********.*****.******..*.************./

/* Incrementa un semáforo en l */

void sem_signal(int id)

sem_op(id,1);

} y**.**.*.*******..*****»***....*.**,****,,....*.******/

/* Operación general sobre un semáforo.

*/

void sem__op(int id, int valué)

if ( (op_op[0]-sem_op = valué) =

err_sys("can1t have value

if

{se

mo

pfi

d,

&o

p_

op

lO],

1

) <

0)

err_

sys

{"se

m_o

p e

rro

r"),

-

0) = O

") ;

A-216

APÉNDICES

Page 164: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

f. *SISTEMl-.-Ëv f

Page 165: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉN

DICE

S. S

ISTEM

A EX

PERT

O

JERARQUÍA DE OBJETOS EN EL SISTEMA EXPERTO DESARROLLADO

write to the file "/quantum/juan/bmp/hierarchy"

the class hierarchy

** Results follow this line:

ITEM KB-WORKSPACE -- 242 instances

SYSTEM-TABLE

DEBUGGING-PARAMETERS --9 instances

PRINTER-SETUP --9 instances

FONTS -- 9 instances

DRAWING-PARAMETERS -- 9 instances

TIMING-PARAMETERS --9 instances

LOGBOOK-PARAMETERS -- 9 instances

MESSAGE-BOARD-PARAMETERS -- 9 instances

LOG-FILE-PARAMETERS --9 instances

MENU-PARAMETERS -- 9 instances

LANGUAGE-PARAMETERS -- 9 instances

COLOR-PARAMETERS --9 instances

EDITOR-PARAMETERS --9 instances

MODULE-INFORMATION --9 instances

SAVING-PARAMETERS --9 instances

INFERENCE-ENGINE-PARAMETERS -- 9 instances

DATA-SERVER-PARAMETERS --9 instances

SIMULATION-PARAMETERS -- 9 instances

KB-RESTRICTIONS

| KB-CONFIGURATION -- 9 instances

MISCELLANEOUS-PARAMETERS -- 9 instances

ONNECTION

NETWORK-WIRE

j TCP-IP

DIGITAL

SERIAL

I RS232

j RS485

ELECTRICAL

PROBE-SIGNAL

ON-OFF -- 8 instances

| 220V --10 instances

j 24V

-- 26 instances

4-20MA -- 6 instances

TRIPHASE

NEUMATIC

3-15PSI

CONSTANT-PRESSURE

AERATION

HYDRAULIC

TAP-WATER

PROCESS-STREAM

| CONNECTION-STREAM

j INFLUENT

| INTERNAL-RECYCLE

| EXTERNAL-RECYCLE

j FINAL-EFFLUENT

CONCENTRATE

| N-CONCENTRATE

j C-CONCENTRATE

MANRESA-CONNECTION

LINIA-AIGUA-LINE

[ ENT-PLANTA-LINE

| ENT-BASSA-LINE

APÉN

DICE

S A

- 2

17

DESA

RROL

LO E

IMPL

EMEN

TACI

ÓN D

E UN

SIST

EMA

SUPE

RVISO

R PA

RA LA

GES

TIÓN

Y CO

NTRO

L DE

EDAR

SORT-BAS SA-LINE

FANGS-LINE

. .

._SORT-PLANTA-L·INE

SORRA-LINE

IN -- 17 instances

OBJ CTEFAULT-JUNCTION --2 instances

JUNCTION-BLOCK-FOR-ENT-PLANTA-LINE

JUNCT ION-BLOCK-FOR-ENT-BASSA-LINE

JUNCTION-BLOCK-FOR-SORT-BASSA-LINE

JUNCTION-BLOCK-FOR-FANGS-LINE

JUNCTION-BLOCK-FOR-SORT-PLANTA-LINE

JUNCTION-BLOCK-FOR-SORRA-LINE

JUNCTION-BLOCK-FOR-RS485 -- 4 instances

JUNCTION-BLOCK-FOR-SERIAL

JUNCTION-BLOCK-FOR-220V

JUNCTION-BLOCK-FOR-TCP-IP

JUNCTION-BLOCK-FOR-TAP-WATER

JUNCTION-BLOCK-FOR-CONCENTRATE

JUNCTION-BLOCK-FOR-PROCESS-STREAM -- 3 instances

JUNCTION-BLOCK-FOR-PNEUMATIC

JUNCTION-BLOCK-FOR-3-15PSI

JUNCTION-BLOCK-FOR-CONSTANT-PRESSURE -- 6 instanc

JUNCTION-BLOCK-FOR-AERATION

JUNCTION-BLOCK-FOR-INFLUENT

JUNCTION-BLOCK-FOR-INTERNAL-RECYCLE

JUNCTION-BLOCK-FOR-EXTERNAL-RECYCLE

JUNCTION-BLOCK-FOR-CONNECTION-STREAM

JUNCTION-BLOCK-FOR-FINAL-EFFLUENT

JUNCTIOS-BLOCK-FOR-DIGITAL

JUNCTION-BLOCK-FOR-ELECTRICAL

JUNCTION-BLOCK-FOR-RS232

JUNCTION-BLOCK-FOR-ON-OFF -- 1 instance

JUNCTION-BLOCK-FOR-24V -- 1 instance

JUNCTION-BLOCK-FOR-4-20MA

JUNCTION-BLOCK-FOR-TRIPHASE

JUNCTION-BLOCK-FOR-PROBE-SIGNAL

JUNCTION-BLOCK-FOR-LIN -- 2 instances

CONNECTION-POST -- 9 instances

2-EXTENSION

G2-WINDOW -- 1 instance

2-LIST

ITEM-LIST

| UIL-NO-DUPLICATE-ITEM-LIST

VALUE-LIST

SYMBOL-LIST

TEXT-LIST

TRUTH-VALUE-LIST

QUANTITY-LIST

| FLOAT-LIST

j INTEGER-LIST

2-ARRAY

TEM-ARRAY -- 5 instances

VALUE-ARRAY

SYMBOL-ARRAY --2 instances

TEXT-ARRAY --13 instances

TRUTH-VALUE- ARRAY

QUANTITY-ARRAY

| FLOAT-ARRAY --32 instances

I INTEGER-ARRAY -- 110 instances

VARABLE-OR-PARAMETER

VARIABLE

G2-VARIABLE

| LOGICAL-VARIABLE --20 instances

| QUANTITATIVE-VARIABLE -- 163 instances

|

FLOAT-VARIABLE -- 239 instances

j | G2-G2 -- 11 instances

j INTEGER-VARIABLE -- 86 instances

|

GSI-VARIABLE

j | GSI-SBTPOINT -- 22 instances

) |

GSI-MEASURE -- 58 instances

' |

SYMBOLIC-VARIABLE --25 instances

j TEXT-VARIABLE --4 instances

SENSOR

GFI-DATA-SERVICE

j | GSI-VARIABLE

A-218

APÉNDICES

Page 166: Desarrollo de implementación de un sistema supervisor para ... · PDF fileN-N02- 0.285 N total 1.728 Eliminación de nitrógeno Eliminación de N (g/d) ... mgN-NH4 +salida/gSSVd mg

APÉNDICES. SISTEMA EXPERTO

jj

ll

ll

GSI-SETPOINT -

- 2

2 instances

) |

j

j I |

GSI-MEASURE -- 58 instances

G2-TO-G2-DATA-SERVICE

| G2-G2 --11 instances

G2-METER-DATA-SERVICE

PARAMETER

LOGICAL-PARAMETER -- 17 instances

QUANTITATIVE-PARAMETER --10 instances

| INTEGER-PARAMETER -- 6 instances

j FLOAT-PARAMETER --9 instances

j SYMBOLIC-PARAMETER -- 16 instances

|

TEXT-PARAMETER

GFI-OUTPUT-INTERFACE --4 instances

GFI-INPUT-INTERFACE

GSI-INTERFACE

1 GSI-BRIDGE -- 1 instance

02-TO-G2-DATA-INTERFACE -- 1 instance

UIL-OBJECT

UIL-GROBJ

UIL-BUTTON

I UIL-ICON-BUTTON

j | UIL-SELECTION-BUTTON

j j

UIL-WORKSPACE-BUTTON

j j

" UIL-NAVIGATION-BUTTON

UIL-GOTO-WORKSPACE-BUTTON -- 141 instances

UIL-GOTO-SUPERIOR-BUTTON -- 14 instances

UIL-GOTO-NEXT-BUTTON

UIL-GOTO-PREVIOUS-BUTTON

j ¡

UIL-HIDE-BUTTON -- 132 instances

I j

j UIL-HELP-BUTTON

j j

UIL-WORKSPACE-OPERATION-BUTTON

; |

| UIL-PRINT-WORKSPACE-BUTTON

j UIL-DIALOG

UIL-S ELECTION-BOX

UIL-CHECK-BOX

UIL-RADIO-BOX

| UIL-CONFIGURATION-CLASS

|

UIL-NAVIGATION-BUTTON-CONFIGURATION-CLASS --2 instance

j UIL-TEXT-CONFIGURATION-CLASS

GUIDE-ROOT

| GUIDE-BUTTON-TEMPLATE

GUIDE-NAVIGATION-BUTTON-TEMPLATE

| GUIDE-GOTO-WORKSPACE-BUTTON-TEMPLATE

j GUIDE-GOTO-SUPERIOR-BUTTON-TEMPLATE

| GUIDE-GOTO-NEXT-BUTTON-TEMPLATE

| GUIDE-GOTO-PREVIOUS-BUTTON-TEMPLATE

j GUIDE-HIDE-BUTTON-TEMPLATE

j GUIDE-HELP-BUTTON-TEMPLATE

j GUIDE-PRINT-WORKSPACE-BUTTON-TEMPLATË

| GUIDE-GARBAGE-PAIL

STAR-ICON -- 1 instance

ITEM-PROFILE-INFORMATION

ACTIVITY-PROFILE-INFORMATION

SYSTEM-PROFILE-INFORMATION

OBJ-SUBWS-DEACTIV -- 4 instances

INFORMADORS --73 instances

PLANT -- 1 instance

PROCESS_UNIT

| WASTE -- 1 instance

| REACTOR

j | AEROBIC-REACTOR --2 instances

j j

ANOXIC-REACTOR --

1 instance

j ANAEROBIC-REACTOR -- 1 instance

j VESSEL

j | VESSEL-N -- 1 instance

j j

VESSEL-C --

1 instance

| SETTLER -- 1 instance

j TAP

-- 1 instance

j JUNCTION-BOX --

1 instance

j AIR-SUPPLY --3 instances

| PURGE -- 1 instance

I JUNCTION-OUTLET -- 1 instance

INSTRUMENTATION

| PLC -- 1 instance

OLD-PLC

TRANSDUCER

...

j | I-PJTRANSDUCER --4 instances

APÉNDICES A

- 219

DESARROLLO E IMPLEMENTAQON DE UN SISTEMA SUPERVISOR PARA LA GESTIÓN Y CONTROL DE EDAR

| I-V_TRANSDUCER -- 3 instances

VALVEELECTROVALVE-3-WAYS -- 1 instance

ELECTROVALVE-OM_OFF --2 instances

CONTROL-VALVE

| CONTROL-VALVE-LIQUID -- 1 instance

| CONTROL-VALVE-AIR -- 3 instances

MEASURING-DEVICE

DETECTOR

| LEVEL-DETECTOR -- 4 instances

| LEAK-DETECTOR -- 2 instances

PROBE

| ORP-PROBE --3 instances

| PH-PROBE --3 instances

j T-PROBE --

3 instances

| DO-PROBE -- 3 instances

CONTROLLER

PHROCON-1B -- 3 instances

FREQUENCY-CONVERTER -- 3 instances

TIRRER -- 3 instances

PUMPVARIABLE-DOSING-PUMP -- 2 instances

PERISTALTIC-PUMP --2 instances

FIXED-DOSING-PUMP -- 2 instances

ELECTRIC-FLOJET

AIR_FLOJET -- 2 instances

ANALYSER

NO3-ANALYSER --

1 instance

N02-ANALYSER -- 1 instance

NH4-ANALYSER -- 1 instance

PO4-ANALYSER

LUDGE --

1 instance

OMPUTER-INTERFACE

RS232-RS485_CONVERTER -- 2 instances

OMPUTER

PROCESS-COMPUTER -- 1 instance

ANALYZER-COMPUTER -- 1 instance

G2-COMPUTER -- 1 instance

MICROORGANISM

MICROFAUNA

OTHER-MICRO FAUNA

ACINERA-UNCINATA -- 1 instance

TRACHELOPHYLLUM -- 1 instance

DREPANOMONAS -- 1 instance

OTHER-OTHER-MICROFAUNA -- 1 instance

ROTOZOA

CILIATES

SWIMMING-CILIATES

OTHER-SWIMMING-CILIATES -- 1 instance

CINETOCHILUM-MARGARITACEUM -- 1 instance

COLPIDIUM -- 1 instance

CYCLIDIUM -- 1 instance

GLAUCOMA -- 1 instance

PARAMECIUM-CAUDATOM --

1 instance

TETRAHYMENA -- 1 instance

URONEMA -- 1 instance

SATHRQPHILUS -- 1 instance

ATTACHED-CILIATES

SPIROSTOMUM -- 1 instance

VORTICELLA-CONVALLARIA --

1 instance

VORTICELLA-AQUADULCIS --

1 instance

VORTICELLA-MICROSTOMA -- 1 instance

CARCHESIUM -- 1 instance

ZOOTHAMNIUM --

1 instance

OPERCULARIA -- 1 instance

EPISTYLIS -- 1 instance

VAGINICOLA -- 1 instance

STENTOR --

i instance

OTHER-ATTACHED-CILIATES -- 1 instance

CRAWLING-CILIATES

OTHER-CRAWLING-CILIATES -- 1 instance

ASPIDÏSCA-CICADA -- 1 instance

ASPIDISCA-LYNCEUS --

1 instance

EUPLOTES-AFFINIS -- 1 instance

EUPLOTES-PATELLA --

1 instance

STYLONYCHIA -- 1 instance

TROCHILIA -- 1 instance

A-220

APÉNDICES