Está en la página 1de 151

INSTITUTO TECNOLÓGICO DE MORELIA

DIVISIÓN DE ESTUDIOS PROFESIONALES


DEPARTAMENTO DE INGENIERÍA MECÁNICA

INSTITUTO NACIONAL DE INVESTIGACIONES


NUCLEARES
DEPARTAMENTO DE SISTEMAS NUCLEARES

TESIS

SIMULACIÓN DEL CICLO


TERMODINÁMICO DE UNA CENTRAL
NUCLEAR CON UN REACTOR TIPO BWR
QUE PARA OBTENER EL TÍTULO DE:

INGENIERO MECÁNICO

PRESENTA:

FELIPE DE JESÚS PAHUAMBA VALDEZ

ASESORES:

M. C. JOSÉ VICENTE XOLOCOSTLI MUNGUÍA

M. I. MOISÉS GARCÍA MONROY

MORELIA, MICHOACÁN ENERO DE 2017


Dedicatoria

A mi madre, Herlinda Valdez Estrada

Con profundo cariño

A mis hermanos, Berenice y Enrique

De quienes he aprendido mucho

In memoriam, Rafael Pahuamba, mi padre

Enriqueta Estrada, mi abuelita

De quienes tengo gratos recuerdos


Agradecimientos

A mí familia por acompañarme y apoyarme durante esta meta de mi vida.

Al Instituto Tecnológico de Morelia.

A los profesores de Ingeniería Mecánica por sus conocimientos y experiencias compartidas.

A mi tía Josena Valdez Estrada, por el apoyo, cuidado y consejos brindados durante mí

estadía en Toluca.

A mis compañeros de la carrera de Ing. Mecánica, con quienes compartí excelentes mo-

mentos durante nuestros estudios.

Al M. C. Vicente Xolocostli Munguía, por motivarme a realizar este proyecto y por su

adecuada asesoría.

Al M. I. Moisés García Monroy, por sus enseñanzas y por su asesoría en este proyecto.

AT X.
A Guillermo Ibarra, por ayudarme con mis errores y dudas con Python y L E

A los miembros del cubículo 16, Sam y Robert, por sus ocurrencias.

Al Dr. Arturo Delfín Loya y al Dr. Armando Gómez Torres, por su apoyo.

Al Instituto Nacional de Investigaciones Nucleares, por las facilidades brindadas.

Se agradece el apoyo nanciero recibido del proyecto estratégico No. 212602 (AZTLAN

Platform), del Fondo Sectorial de Sustentabilidad Energética SENERCONACYT.


La motivación para llevar a cabo este proyecto nace del proyecto AZTLAN platform que

es una iniciativa nacional liderada por el Instituto Nacional de Investigaciones Nucleares,

que reúne a las principales casas públicas de estudios superiores de México como son el

Instituto Politécnico Nacional, la Universidad Nacional Autónoma de México y la Univer-

sidad Autónoma Metropolitana en un esfuerzo por dar un paso signicativo rumbo a la

autonomía de cálculo y análisis que busca situar a México en el mediano plazo en un nivel

internacional competitivo en temas de software para análisis de reactores nucleares.

En este proyecto se modernizan, mejoran e integran los códigos neutrónicos, termohidráuli-

cos y termomecánicos, desarrollados en las instituciones mexicanas, en una plataforma

integrada, desarrollada y mantenida por expertos mexicanos, que utiliza las nuevas tec-

nologías de cómputo de alto rendimiento (HPC, del inglés High Performance Computing)

a efecto de reducir los tiempos en el proceso de cálculos numéricos [1]


1.

1 Para más información, visitar http://www.aztlanplatform.mx


Índice general

Índice de guras iii

Índice de tablas v

Nomenclatura vi

Resumen vii

Objetivos viii

Introducción ix

1. Fundamentos de termodinámica 1
1.1. Sistemas termodinámicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Propiedades termodinámicas . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1. Presión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2. Temperatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Estado, fase, calidad, proceso y ciclo . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2. Fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.3. Calidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.4. Proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.5. Ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4. Sustancia pura y sus propiedades . . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Calor y trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6. Primera ley de la termodinámica . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.1. Primera ley para sistemas cerrados . . . . . . . . . . . . . . . . . . 11
1.6.2. Primera ley para sistemas abiertos . . . . . . . . . . . . . . . . . . 12
1.7. Segunda ley de la termodinámica . . . . . . . . . . . . . . . . . . . . . . . 14
1.7.1. Máquinas térmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7.2. Entropía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7.3. Eciencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2. Ciclos termodinámicos 17
2.1. El ciclo de gas de Carnot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

i
ÍNDICE GENERAL ii

2.2. El ciclo de vapor de Carnot . . . . . . . . . . . . . . . . . . . . . . . . . . 20


2.3. El ciclo Otto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4. El ciclo Diesel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5. El ciclo Brayton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6. El ciclo Rankine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3. El ciclo Rankine 26
3.1. Análisis de energía del ciclo Rankine . . . . . . . . . . . . . . . . . . . . . 27
3.2. Disminución de la presión de la turbina . . . . . . . . . . . . . . . . . . . . 29
3.3. El ciclo Rankine con sobrecalentamiento . . . . . . . . . . . . . . . . . . . 31
3.4. El ciclo Rankine con recalentamiento . . . . . . . . . . . . . . . . . . . . . 32
3.5. El ciclo Rankine regenerativo . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5.1. El ciclo Rankine regenerativo con calentadores abiertos de agua de
alimentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5.2. El ciclo Rankine regenerativo con calentadores cerrados de agua de
alimentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4. Descripción de una central nucleoeléctrica 37


4.1. Componentes de un reactor nuclear . . . . . . . . . . . . . . . . . . . . . . 38
4.2. La sión nuclear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.3. Descripción de los reactores de potencia . . . . . . . . . . . . . . . . . . . 41
4.3.1. Reactor de agua a presión (PWR) . . . . . . . . . . . . . . . . . . . 43
4.3.2. Reactor de agua en ebullición (BWR) . . . . . . . . . . . . . . . . . 45

5. Desarrollo del simulador del ciclo termodinámico 47


5.1. Cálculo de las propiedades termodinámicas del agua . . . . . . . . . . . . . 47
5.1.1. Presión de saturación en función de la temperatura . . . . . . . . . 48
5.1.2. Temperatura de saturación en función de la presión . . . . . . . . . 48
5.1.3. Líquido saturado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.4. Vapor saturado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.5. Líquido comprimido . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.6. Vapor sobrecalentado . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2. Diseño de la interfaz gráca del simulador . . . . . . . . . . . . . . . . . . 53
5.3. Generación del ejecutable . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6. Aplicación del simulador del ciclo termodinámico del BWR 63


6.1. Simulación del ciclo Rankine simple . . . . . . . . . . . . . . . . . . . . . . 64
6.2. Simulación del ciclo Rankine regenerativo con calentador de agua de ali-
mentación cerrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.3. Aumento de la eciencia térmica . . . . . . . . . . . . . . . . . . . . . . . . 73

Conclusiones y recomendaciones 75
Apéndice A. Programación en Python y Qt Designer del simulador 79
Apéndice B. Solución completa de los problemas de referencia 120
Índice de guras

1.1. Sistema abierto, sistema cerrado y sistema aislado. . . . . . . . . . . . . . 2


1.2. Presión absoluta, manométrica y de vacío. . . . . . . . . . . . . . . . . . . 4
1.3. Presión hidrostática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4. Diagramas de los diferentes estados. . . . . . . . . . . . . . . . . . . . . . . 7
1.5. Máquina térmica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1. Diagrama P-v para el ciclo de gas de Carnot. . . . . . . . . . . . . . . . . . 19


2.2. Diagrama T-s para el ciclo de vapor de Carnot. . . . . . . . . . . . . . . . 21
2.3. Diagrama P-v para el ciclo Otto. . . . . . . . . . . . . . . . . . . . . . . . 22
2.4. Diagrama P-v para el ciclo Diesel. . . . . . . . . . . . . . . . . . . . . . . . 23
2.5. Diagramas P-v y T-s para el ciclo Brayton. . . . . . . . . . . . . . . . . . . 25

3.1. Diagrama T-s del ciclo Rankine ideal simple. . . . . . . . . . . . . . . . . . 27


3.2. Diagrama T-s del ciclo Rankine ideal simple. . . . . . . . . . . . . . . . . . 29
3.3. Efecto que provoca disminuir la presión en la salida de la turbina. . . . . . 30
3.4. Diagrama T-s del ciclo Rankine con sobrecalentamiento. . . . . . . . . . . 31
3.5. Diagrama T-s del efecto que produce incrementar la presión de la caldera
en el ciclo Rankine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.6. Diagrama T-s del ciclo Rankine con recalentamiento. . . . . . . . . . . . . 33
3.7. Esquema y diagrama T-s del ciclo Rankine regenerativo con calentador de
agua de alimentación abierto. . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.8. Esquema y diagrama T-s del ciclo Rankine regenerativo con calentador de
agua de alimentación cerrado. . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.1. Fisión nuclear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40


4.2. Evolución de los reactores. . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Esquema de una central nucleoeléctrica con un reactor tipo tipo PWR. . . 44
4.4. Esquema de una central nucleoeléctrica con un reactor tipo tipo BWR. . . 46

5.1. Ventana principal, pestaña Inicio. . . . . . . . . . . . . . . . . . . . . . . 55


5.2. Ventana principal, pestaña Acerca de. . . . . . . . . . . . . . . . . . . . . 56
5.3. Ventana secundaria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4. Circuito termodinámico en el Sistema Internacional de Unidades. . . . . . 58
5.5. Circuito termodinámico en el Sistema Inglés de Ingeniería. . . . . . . . . . 58
5.6. Proceso realizado para generar la herramienta SICTER. . . . . . . . . . . . 62

iii
ÍNDICE DE FIGURAS iv

6.1. Esquema del ciclo Rankine diseñado para el SICTER. . . . . . . . . . . . . 64


6.2. Introducción de datos en el esquema del SICTER para el ciclo Rankine simple. 65
6.3. Introducción de datos para el ciclo Rankine simple en el SICTER. . . . . . 66
6.4. Parámetros de entrada del ciclo Rankine simple para el SICTER. . . . . . 66
6.5. Valores de salida del ciclo Rankine simple del SICTER. . . . . . . . . . . . 67
6.6. Archivo de salida del ciclo Rankine simple del SICTER. . . . . . . . . . . . 67
6.7. Activación del ciclo Rankine regenerativo en el SICTER. . . . . . . . . . . 69
6.8. Introducción de datos en el esquema del SICTER para el ciclo Rankine
regenerativo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.9. Introducción de datos para el ciclo Rankine regenerativo en el SICTER. . . 71
6.10. Parámetros de entrada del ciclo Rankine regenerativo para el SICTER. . . 71
6.11. Valores de salida del ciclo Rankine regenerativo del SICTER. . . . . . . . . 72
6.12. Archivo de salida del ciclo Rankine regenerativo del SICTER. . . . . . . . 72

B1. Ciclo Rankine simple.(Cortesía curso nuclear básico) . . . . . . . . . . . . 121


B2. Diagrama T-s del ciclo Rankine simple. . . . . . . . . . . . . . . . . . . . . 121
B3. Ciclo Rankine regenerativo.(Cortesía curso nuclear básico) . . . . . . . . . 128
B4. Diagrama T-s del ciclo Rankine regenerativo. . . . . . . . . . . . . . . . . . 129
Índice de tablas

1.1. Características de las fases de la materia. . . . . . . . . . . . . . . . . . . . 8

4.1. Clasicación de los reactores. . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.1. Coecientes para calcular la presión de saturación. . . . . . . . . . . . . . . 48


5.2. Coecientes para calcular la temperatura de saturación. . . . . . . . . . . . 49
5.3. Coecientes para calcular la entalpía especíca de líquido saturado. . . . . 49
5.4. Coecientes para calcular la entropía especíca de líquido saturado. . . . . 50
5.5. Coecientes para calcular la entalpía especíca de vapor saturado. . . . . . 50
5.6. Coecientes para calcular la entropía especíca de vapor saturado. . . . . . 51

6.1. Aumento de la eciencia térmica. . . . . . . . . . . . . . . . . . . . . . . . 73

v
Nomenclatura

SICTER Simulador de un ciclo termodinámico Rankine


abs absoluta
atm atmosférica
man manométrica
vac vacío
hid hidrostática
sat saturación
ent entrada
sis sistema
rev reversible
PMI Punto muerto inferior
PMS Punto muerto superior

vi
Resumen

En este trabajo se proporciona una herramienta de cómputo que sea capaz de simular el

ciclo termodinámico Rankine para un reactor nuclear tipo BWR de manera simplicada,

es decir, que contenga los elementos básicos del ciclo como son la caldera, la turbina, el

condensador y la bomba, así mismo se tenga la opción de añadir un pre-calentador del

agua de alimentación, tal y como se tiene en algunas centrales, como la que se analiza, por

lo que en el presente trabajo se muestra y describe el desarrollo del programa de cómputo

que simula el ciclo termodinámico Rankine, siendo capaz de simular problemas de ciclos

Rankine que se encuentran en la literatura. El desarrollo de la herramienta de cómputo

comprende tres partes, la primera, comprende el conocer a detalle la fenomenología de una

central nuclear, principalmente la terminología empleada en termodinámica y sus funda-

mentos, así como las características de los diferentes ciclos termodinámicos que se tienen;

la segunda, comprende el diseño y generación del simulador para lo cual se utilizaron di-

ferentes programas de software libre basados en el lenguaje Python, para la programación

de la interfaz se utilizaron correlaciones para los diferentes estados termodinámicos desde

líquido comprimido hasta vapor sobrecalentado. La tercera y última parte, corresponde a

la aplicación de la interfaz gráca del simulador a diferentes opciones del ciclo termodiná-

mico con o sin pre-calentador, así como diversos problemas tipos que se encuentran en la

literatura.

vii
Objetivos

El objetivo general del presente trabajo es generar una herramienta de cómputo, del tipo

independiente, capaz de simular un ciclo termodinámico Rankine para una central nuclear

con un reactor tipo BWR, la cual incluya funciones capaces de calcular las propiedades

termodinámicas del agua en sus diferentes estados (Líquido comprimido, líquido saturado,

vapor saturado y vapor sobrecalentado) y se acoplen en una interfaz gráca de usuario

para facilitar el uso de dicha herramienta.

Objetivos especícos

1. Familiarizarse con el ciclo termodinámico de una central nuclear.

2. Programar el modelo matemático para calcular las propiedades termodinámicas del

agua en diferentes sistemas de unidades.

3. Elaborar la interfaz gráca de usuario del simulador.

4. Acoplar la interfaz gráca de usuario con las propiedades termodinámicas del agua.

5. Programar los balances de energía correspondientes.

6. Generar el archivo ejecutable, a partir del código fuente.

viii
Introducción

En la generación de electricidad, una de las principales formas de producirla a gran es-

cala es generando vapor para mover una unidad turbogeneradora a partir de quemar un

combustible fósil (carbón, gas o combustóleo), o en su caso aprovechar el calor de la sión

nuclear en la centrales nucleares, siendo de vital importancia conocer el comportamiento

del ciclo termodinámico involucrado en el proceso, en este caso el llamado ciclo Rankine,

por lo que se hace necesario conocer los fundamentos termodinámicos del sistema bajo

estudio.

La termodinámica es la ciencia que dicta lo que ocurre en la naturaleza, lo que no y por

qué. Así que, para entender mejor a la naturaleza, las implicaciones del uso de la energía

sobre el medio ambiente y la sostenibilidad de la que disfrutamos hoy en día, tenemos que

estudiar la termodinámica.

Conocer el ciclo termodinámico a detalle es fundamental para poder simularlo de manera

precisa puesto que los simuladores que ya existen no contemplan una buena precisión

al estar cerca de la zona del punto crítico, además de no tener mayor versatilidad para

analizar problemas de la literatura.

El desarrollo de este trabajo comienza con los fundamentos de la termodinámica, como se

mostrará en el capítulo uno.

En el capítulo dos se describen los diferentes ciclos termodinámicos que existen.

ix
INTRODUCCIÓN x

En el capítulo tres se describe a detalle el ciclo Rankine, y las variantes que se tienen del

mismo.

En el capítulo cuatro se muestra el funcionamiento de una central nucleoeléctrica, así como

algunas generalidades sobre la energía nuclear.

En el capítulo cinco se describe el desarrollo del simulador del ciclo termodinámico, así

como el proceso de implementación de las correlaciones para calcular las propiedades

termodinámicas del agua.

En el capítulo seis se analiza los resultados obtenidos con el Simulador para una central

nuclear con un reactor tipo BWR (SICTER), respecto a los valores que se tienen de

referencia, y que se tienen a detalle en el Apéndice B.

Finalmente, se presenta un apartado que contiene las conclusiones.

En los Apéndices A y B, se proporciona la secuencia de los archivos de programación en

Python y Qt del simulador, así como la solución completa de los problemas de referencia,

respectivamente.
Capítulo 1
Fundamentos de termodinámica

La termodinámica es una rama de la física que se ocupa del estudio de las transformaciones

e interacciones de la energía en forma de calor (Q) y trabajo (W ); la termodinámica clásica

se ocupa del mundo macroscópico mientras que la termodinámica estadística se ocupa del

nivel micróscopico de la materia.

Los campos de aplicación de la termodinámica clásica en ingeniería mecánica son la ge-

neración de potencia y los sistemas de calefacción (ventilación, refrigeración y acondi-

cionamiento de aire). En ingeniería nuclear la termodinámica es parte fundamental, ya

que los parámetros termohidráulicos y los parámetros neutrónicos se retroalimentan entre

sí, para realizar poder realizar el análisis del núcleo del reactor nuclear.

En este capítulo se explicarán algunos conceptos básicos de la termodinámica, así como

las leyes que forman parte de ella.

1.1. Sistemas termodinámicos

Un sistema termodinámico es una porción del espacio o cantidad de materia que se selec-

ciona para realizar un análisis termodinámico. La masa o región fuera del sistema se conoce

como alrededores. La supercie real o imaginaria que separa al sistema de sus alrededores

1
1.2. Propiedades termodinámicas

se conoce como frontera [2]. Los sistemas termodinámicos se clasican en:

Sistema cerrado: Es un sistema en el cual solo existe intercambio de energía pero no

hay transferencia de masa con sus alrededores.

Sistema aislado: Es un sistema en el cual no hay transferencia de masa, ni de energía a

través de la frontera.

Sistema abierto: Es un sistema en el cual existe intercambios de energía y masa.

En la gura 1.1 se muestran los sistemas termodinámicos descritos anteriormente.

Figura 1.1: Sistema abierto, sistema cerrado y sistema aislado.

1.2. Propiedades termodinámicas

Una propiedad termodinámica es cualquier característica observable y medible de un sis-

tema [3]. Las propiedades termodinámicas pueden ser:

Propiedades extensivas: Son aquellas cuyos valores dependen del tamaño o extensión

de un sistema, la masa total, volumen total y la cantidad de movimiento total son

algunos ejemplos de propiedades extensivas.

Propiedades intensivas: Son aquellas independientes de la masa de un sistema, como

2
Capítulo 1. Fundamentos de termodinámica

temperatura, presión y densidad.

Las propiedades extensivas pueden expresarse por unidad de masa, y se llaman propiedades

especícas.

1.2.1. Presión

La presión se dene como la fuerza normal que ejerce un uido por unidad de área. Cuando

se habla de presión se hace referencia a un gas o un líquido, mientras que para los sólidos se

habla de esfuerzo normal, ya que es la fuerza que actúa perpendicularmente a la supercie

por unidad de área [4].

La presión atmosférica varía de un punto a otro del planeta y según las condiciones

meteorológicas. Se ha convenido en tomar como condición estándar la presión de 101.325

kPa a nivel del mar.

La presión medida respecto al vacío absoluto se llama presión absoluta. La mayoría de


los dispositivos para medir la presión se calibran a cero en la atmósfera, por lo que estos

dispositivos muestran la diferencia entre la presión atmosférica local y la presión absoluta,

a esta diferencia se le conoce como presión manométrica (gura 1.2).

Los dispositivos medidores de vacío son capaces de medir presiones por debajo de la

presión atmosférica local, a estas presiones se les conoce como presiones de vacío, las

cuales indican la diferencia entre las presiones atmosférica y absoluta (gura 1.2) [4]. A

continuación se muestra como se relacionan las presiones absoluta, manométrica y de vacío

entre sí:

Pman = Pabs Patm (1.1)

Pvac = Patm Pabs (1.2)

3
1.2. Propiedades termodinámicas

Figura 1.2: Presión absoluta, manométrica y de vacío.

Un uido, ya sea gas o líquido, ejerce presión no sólo en el fondo del recipiente que lo

contiene, también en las paredes del mismo, es decir, ejerce presión en todas direcciones,

a esta presión se le conoce como presión hidrostática.

Cuando se calcula la presión hidrostática, la fuerza aplicada no depende del área del

recipiente con el que el uido tiene contacto, sino de la altura (profundidad) que tenga.

Phid = gh (1.3)

donde:

 densidad del uido.

g aceleración de la gravedad.

h altura.

Figura 1.3: Presión hidrostática.

La unidad de presión en el Sistema Internacional de Unidades es el Pascal (P a), el cual

4
Capítulo 1. Fundamentos de termodinámica

se dene como la fuerza que un Newton (N ), ejerce sobre el área de un metro cuadrado

2 2
(m ). En el Sistema Inglés de Ingeniería es la libra fuerza por pulgada cuadrada (lbf =in ),

la cual es conocida como psi (por sus siglas en inglés: pound-force per square inch). Las

equivalencias con otras unidades son:

1 bar = 105 Pa = 0:1 MPa

la atmósfera estándar, donde:

1 atm = 101:325 kPa = 14:696 lbf

in
2

los kilogramos fuerza por centímetro cuadrado, donde:

1 kgf

cm2
= 9:807  104 Pa

y los milímetros de mercurio, donde:

760 mmHg =1 atm

1.2.2. Temperatura

La temperatura puede denirse desde el punto de vista microscópico como la energía

cinética promedio de las moléculas [5]. El fundamento de la medición de la temperatura

se basa en la ley cero de la termodinámica que enuncia lo siguiente:

"Dos cuerpos en equilibrio térmico con un tercer cuerpo, están en equilibrio térmico

entre sí, incluso sino están en contacto."

Las escalas de temperatura usadas en el Sistema Internacional de Unidades son la escala

Celsius ( C ) y la escala Kelvin (K ) que es una escala independiente de las propiedades


de cualquier sustancia o sustancias.

Las escalas de temperatura usadas en el Sistema Inglés de Ingeniería son la escala Fahren-
heit ( F ) y la escala Rankine (R) que es una escala independiente de las propiedades de

5
1.3. Estado, fase, calidad, proceso y ciclo

cualquier sustancia o sustancias.

La escala Kelvin se relaciona con la escala Celsius mediante:

T K( ) = T (C ) + 273:15 (1.4)

La escala Rankine se relaciona con la Fahrenheit mediante:

( ) = T (F ) + 459:67
T R (1.5)

Las escalas de temperatura en los dos sistemas de unidades se relacionan mediante:

( ) = 1:8 T (K )
T R (1.6)

T ( F ) = 1:8 T ( C ) + 32 (1.7)

1.3. Estado, fase, calidad, proceso y ciclo

Se sabe que el agua comienza a evaporar, a 100


 C, pero lo hace a esa temperatura porque

la presión a la que se encuentra es la presión atmosférica al nivel del mar.

La temperatura a la cual una sustancia pura comienza a cambiar de fase (en éste caso el

agua), bien sea comenzando a transformarse de líquido a vapor (líquido saturado) o de

vapor a líquido (vapor saturado), se llama temperatura de saturación, y esta temperatura

de saturación siempre va a tener relacionada una presión que se conoce como presión de

saturación.

En resumen, temperatura de saturación es la temperatura de ebullición para una presión

determinada y presión de saturación es la presión de ebullición para una temperatura

determinada.

1.3.1. Estado

Un estado termodinámico es una condición determinada de una sustancia que se encuentra

denida por dos propiedades termodinámicas entre sí [3].

6
Capítulo 1. Fundamentos de termodinámica

Líquido comprimido: En este estado el líquido está a una presión mayor que la presión

de saturación (P > Psat ), a una temperatura dada, o en términos de temperatura se

dice que el líquido está a una temperatura menor que la temperatura de saturación

(T < Tsat ) para una presión dada. Este estado puede ser cualquier punto desde 1-2

de la gura 1.4.

Líquido saturado: Es aquel líquido que está a punto de ebullir. Este estado se encuentra

justo en el punto 2 de la gura 1.4.

Mezcla líquido-vapor: Este estado puede ser cualquier punto desde 2-4 de la gura 1.4.

Vapor saturado: Es aquel vapor que está a punto de condensarse. Este estado se en-

cuentra justo en el punto 4 de la gura 1.4.

Vapor sobrecalentado: En este estado el vapor está a una presión menor que la presión

de saturación (P < Psat ), a una temperatura dada, o en términos de temperatura se

dice que el vapor está a una temperatura mayor que la temperatura de saturación

(T > Tsat ) para una presión dada. Este estado puede ser cualquier punto desde 4-5

de la gura 1.4.

(a) Diagrama T-v (b) Diagrama P-v

Figura 1.4: Diagramas de los diferentes estados.

7
1.3. Estado, fase, calidad, proceso y ciclo

1.3.2. Fase

Es una cantidad de materia con la misma estructura molecular en toda su extensión.

Cuando una sustancia existe en más de una fase, se separa de las demás fases por medio de

fronteras fácilmente identicables. En la tabla 1.1 se muestran algunas de las características

de las fases de la materia [3].

Fase Características
Las moléculas se encuentran apartadas unas de otras.
No existe orden molecular.
Gaseosa
Las moléculas se mueven aleatoriamente.
Existe mayor nivel energético.
Las moléculas no tienen posiciones jas.
Líquida Existe mayor espacio entre moléculas que en los sólidos.
Existe orden molecular.
Las moléculas están más próximas entre sí.
Las fuerzas moleculares son más fuertes.
El patrón de arreglo es tridimensional.
Sólida
Existe orden molecular.
Las posiciones de las moléculas son jas.
Las moléculas oscilan en torno a su posición de equilibrio.

Tabla 1.1: Características de las fases de la materia.

1.3.3. Calidad

La calidad de vapor (x) es una propiedad que sirve para analizar una mezcla de vapor

húmedo, es decir, una mezcla de líquido saturado y vapor saturado, y es la razón entre la

masa de vapor y la masa total de la mezcla [4].

x = mvapor
mtotal
(1.8)

1.3.4. Proceso

Un proceso termodinámico se dene como la serie de estados, los cuales denen la trayec-

toria, por los que pasa un sistema cuando experimenta un cambio de estado.

8
Capítulo 1. Fundamentos de termodinámica

Un proceso queda totalmente denido cuando se conocen los estados inicial y nal, la

trayectoria seguida y las interacciones con los alrededores [3].

1.3.5. Ciclo

Cuando un sistema se somete a una serie de procesos y el estado inicial y nal son idénticos,

se entiende que el sistema ha sido sometido a un ciclo [3].

1.4. Sustancia pura y sus propiedades

Una sustancia pura es aquella que tiene la composición química homogénea en cualquier

parte, el agua, el nitrógeno, el helio y el dióxido de carbono, son ejemplos de sustancias

puras [4].

1.5. Calor y trabajo

Las formas de energía que pueden cruzar la frontera de un sistema termodinámico cerrado

son: calor (Q) y trabajo (W ).

El calor se dene como la forma de energía que, a una temperatura dada, se transere
a través de los límites de un sistema a otro sistema (o a su entorno) que está a una
menor temperatura y que sucede en virtud de la diferencia de temperatura entre los
dos sistemas [6].

El calor tiene unidades de energía, en el Sistema Internacional de Unidades, la unidad

de medida es el Joule (J ) y en el Sistema Inglés de Ingeniería, la unidad de medida es el

Btu. La transferencia de calor de un sistema por unidad de masa se denota como (q ) y se

9
1.6. Primera ley de la termodinámica

determina a partir de:

q = Q
m
( kJ/kg )o( )
Btu/lbm (1.9)

La cantidad de calor transferida por unidad de tiempo, es decir, el ujo de calor, se

expresa como _
Q, siendo sus unidades el Watt (W ) y el Btu/h, en el Sistema Internacional

de Unidades y en el Sistema Inglés de Ingeniería, respectivamente. Por otra parte, sobre

el trabajo desde el punto de vista de la mecánica, se tiene lo siguiente:

Un sistema realiza trabajo si el único efecto sobre el entorno (todo lo que es externo
al sistema) podría ser la elevación de un peso [6].

En termodinámica el concepto de trabajo es una generalización de la correspondiente

denición de trabajo en mecánica, y se puede denir como la cantidad de energía trans-

ferida de un sistema a otro mediante una fuerza cuando se produce un desplazamiento,

que se puede manifestar como un cambio de volumen en el sistema. El trabajo es también


una forma de energía como el calor y por lo tanto tiene unidades de energía, en el Sistema

Internacional de Unidades, la unidad de medida es el Joule (J ) y en el Sistema Inglés de

Ingeniería, la unidad de medida es el Btu. El trabajo por unidad de masa de un sistema

se denota mediante (w ) y se expresa como:

w = W
m
( kJ/kg )o( Btu/lbm ) (1.10)

La potencia es el trabajo realizado por unidad de tiempo, se denota como W_ , siendo sus
unidades el Watt (W ) y el Btu/h, en el Sistema Internacional de Unidades y en el Sistema

Inglés de Ingeniería, respectivamente.

1.6. Primera ley de la termodinámica

La primera ley de la termodinámica, brinda una base sólida para estudiar las relaciones

entre las diferentes formas de interacción de energía. A partir de observaciones experimen-

tales, el principio de la conservación de la energía, se establece [4]:

10
Capítulo 1. Fundamentos de termodinámica

La energía no se puede crear ni destruir durante un proceso; sólo puede cambiar de

forma.

Un sistema que sufre una serie de procesos adiabáticos (sin transferencia de calor) desde
un estado especíco 1 a otro estado 2, no involucran transferencia de calor, pero sí involu-

cran varías clases de interacción de trabajo. Las mediciones realizadas cuidadosamente

durante el experimento, constatan el siguiente enunciado [4]:

Para todos los procesos adiabáticos entre dos estados determinados de un sistema

cerrado, el trabajo neto realizado es el mismo sin importar la naturaleza del sistema

cerrado ni los detalles del proceso.

El enunciado anterior, basado en los experimentos llevados a cabo por James Prescott

Joule en la primera mitad del siglo XIX, no puede derivarse de ningún otro principio

físico, es conocido como principio fundamental o primera ley de la termodinámica.

En términos matemáticos la primera ley puede enunciarse para un sistema que sigue un

ciclo así:
I I
Q = W (1.11)

1.6.1. Primera ley para sistemas cerrados

De la ecuación 1.11, puede llegarse fácilmente a la primera ley de la termodinámica para

un sistema cerrado:

E = Q W (1.12)

donde:

E cambio en la energía total del sistema y puede calcularse de la siguiente manera:

E = U + EC + EP (1.13)

11
1.6. Primera ley de la termodinámica

donde:

U = U2 U1 cambio de la energía interna entre el estado inicial y el nal.

EC = m2 (V22 V12) cambio de la energía cinética entre el estado inicial y el nal.

EP = mg(z2 z1) cambio de la energía potencial entre el estado inicial y el nal.

En los sistemas estacionarios, es posible despreciar los cambios de velocidad ( energía


cinética) y los cambios de altura (energía potencial), y para estos sistemas la ecuación
de la primera ley se reduce a:

Q W = U = U2 U1 = (
m u2 u1 ) (1.14)

En un ciclo termodinámico la variación de las propiedades alrededor del ciclo es cero,

entonces la primera ley para un sistema cerrado que se somete a un ciclo es:

Q W =0 (1.15)

1.6.2. Primera ley para sistemas abiertos

La primera ley de la termodinámica para sistemas abiertos, puede deducirse a partir de la

primera ley para sistemas cerrados, puede expresarse como:


X X
Q W + Eent Esal = Esis (1.16)

donde:

E variación de la energía dentro del volumen de control.

Para que la masa uya dentro y fuera del sistema, es necesario realizar un trabajo, conocido

como trabajo de ujo:


Wujo = F L = P AL (1.17)

F es la fuerza necesaria para que la sustancia uya una distancia L, conociendo la relación

entre (F ) y la presión (P ), se llega a la denición de trabajo que puede expresarse por

unidad de masa:

wujo = P v (1.18)

12
Capítulo 1. Fundamentos de termodinámica

Por denición la entalpía (h) se dene como: h = u + P v entonces la ecuación de primera


ley para un sistema abierto puede expresarse:
X X
Q W = ( + ecsal + epsal)
msal hsal (
ment hent + ecent + epent)+(E2 )
E1 sis (1.19)

En los sistemas abiertos la masa varía con el tiempo, por lo cual debe cumplirse la con-

servación de la masa, mejor conocida como ecuación de continuidad:


X X
ment msal = (m2 )
m1 sis (1.20)

Las ecuaciones anteriores son aplicables para sistemas abiertos, tanto como para sistemas

cerrados, en el caso de los sistemas cerrados los términos que involucran masa entrante

(ment ) y masa saliente (msal ) se hacen cero.

Los sistemas abiertos pueden modelarse de dos formas:

1. Procesos de ujo permanente, en los cuales se asume que:

a) El estado del volumen de control permanece constante durante el proceso.

b) Las propiedades termodinámicas de las masas que entran y salen del volumen

de control permanecen constantes en el tiempo, y pueden ser diferentes entre

cada entrada y salida.

c) Las interacciones de energía en forma de calor (Q) y trabajo (W ) entre el

volumen de control y los alrededores permanecen constantes en el tiempo.

Con estas características las ecuaciones de energía y continuidad para un proceso de ujo

permanente, se calcula de la siguiente manera:


X X
Q _ _ =
W _ (
msal hsal
v
2
+ 2sal + gzsal) _ (
ment hent
2
+ 2ent + gzent)
v
(1.21)
X X
_ ent =
m _
msal (1.22)

donde:

Q_ tasa de transferencia de calor en el tiempo.

_
W potencia generada por el volumen de control.

m_ ujo de masa en la entrada o en la salida.

13
1.7. Segunda ley de la termodinámica

Cuando hay una sola masa que entra y sale del control y es posible despreciar los cambios

de energía cinética y potencial, la ecuación 1.21 se reduce a:

Q_ W _ = m_ (hsal hent ) (1.23)

2. Procesos de ujo no permanente, en los cuales se asume que:

a) El estado del volumen de control cambia uniformemente con el tiempo durante

el proceso.

b) Las propiedades termodinámicas del uido en cada una de las entradas y salidas

permanecen constantes en el tiempo.

Con estas características las ecuaciones de energía y continuidad para un proceso de ujo

no permanente, se calcula de la siguiente manera:


X X
Q W = (
msal hsal + 2
vsal + gzsal) (
ment hent + 2
vent + gzent) (1.24)
X X
ment msal = (m2 )
m1 sis (1.25)

Cuando es posible despreciar los cambios de energía cinética y potencial, para las masas

uyendo, la ecuación 1.24 se reduce a:


X X
Q W = msal hsal ment hent + (m2u2 )
m1 u1 sis (1.26)

1.7. Segunda ley de la termodinámica

La segunda ley de la termodinámica se encarga de restringir la dirección en que ocurren los

procesos. Existen dos enunciados de la segunda ley, los cuales se mencionan a continuación:

Enunciado de Kelvin-Planck: Es imposible construir un aparato que funcione en

un ciclo y no produzca otro efecto que la elevación de un peso y el intercambio de

calor con un depósito simple [6].

Enunciado de Clausius: Es imposible construir un dispositivo que opere en un ciclo

y no produzca otro efecto que la transmisión de calor de un cuerpo frío a un cuerpo

14
Capítulo 1. Fundamentos de termodinámica

caliente [6].

1.7.1. Máquinas térmicas

Es un dispositivo que funciona en un ciclo termodinámico y que realiza cierta cantidad

de trabajo neto positivo (Wneto ) a través de la transferencia de calor desde un cuerpo a

temperatura elevada (QH ) y hacia un cuerpo a baja temperatura (QC ) [6].

Figura 1.5: Máquina térmica.

1.7.2. Entropía

La necesidad de contar con una propiedad de estado del sistema que permita medir el

grado de irreversibilidad que tiene un proceso y otras características relacionadas con la

segunda ley de la termodinámica obligó a denir una serie de funciones diseñadas para tal

n. La primera de ellas fue la entropía [5].

La entropía se dene a partir de la desigualdad de Clausius, que es una consecuencia de


la segunda ley aplicada a un ciclo:
I
Q
T
0 (1.27)

15
1.7. Segunda ley de la termodinámica

donde:
I

T
Q
=0 Para procesos reversibles. (1.28)
I
Q
T
< 0 Para procesos irreversibles. (1.29)

Q
Es posible demostrar que la cantidad no depende de la trayectoria seguida por un
T
proceso sino de los estados inicial y nal por lo tanto representa una propiedad termo-

dinámica que se dene como la entropía [3].


Z 2
S1 S2 = Q
T
(1.30)
1

1.7.3. Eciencia

Este término es muy utilizado en termodinámica, ya que indica que tan bien se realiza

un proceso de conversión o transferencia de energía. En una máquina térmica, se puede

decir que, la eciencia es la relación de la energía que se busca (trabajo) y la energía de

la fuente de alta temperatura (calor) [6].

térmica = W(energía deseada)


QH(energía requerida)
(1.31)

16
Capítulo 2
Ciclos termodinámicos

Como se mostró anteriormente el estudio de la termodinámica es muy importante para

dos aplicaciones muy utilizadas en la vida diaria, una de ellas es la generación de poten-

cia y la otra es la refrigeración. Estas aplicaciones se llevan a cabo utilizando un ciclo

termodinámico.

Los dispositivos utilizados para producir una salida de potencia neta, usualmente llamadas

máquinas térmicas, los cuales son empleados en los ciclos de potencia. Los dispositivos

utilizados para producir un efecto de refrigeración, usualmente son llamados refrigeradores,

bombas térmicas o acondicionadores de aire, los cuáles son empleados en los ciclos de

refrigeración.

Dentro de los ciclos termodinámicos existen varias clasicaciones, una de ella depende de

la fase en la que se encuentra el uido de trabajo (gas y vapor). La característica que

identica a los ciclos de gas, es que el uido de trabajo permanece en la fase gaseosa

durante todo el proceso, mientras que la característica que identica a los ciclos de vapor,

es que el uido de trabajo, durante una parte del proceso, permanece en la fase vapor y

en la otra parte permanece en la fase líquida.

Los ciclos termodinámicos también se pueden clasicar como ciclos cerrados y abiertos,

que se basan en la manera en cómo circula el uido de trabajo. Los ciclos cerrados, se

17
2.1. El ciclo de gas de Carnot

identican, porque existe recirculamiento del uido de trabajo, ya que este vuelve a su

estado inicial al nal del proceso, por otro lado, los ciclos abiertos, se identican, porque

el uido de trabajo se renueva al nal del proceso.

Otra clasicación existente dentro de los ciclos de potencia, especícamente en las máquinas

térmicas, es la forma de suministrar el calor al uido de trabajo. Las máquinas de com-

bustión externa, se caracterizan por suministrar el calor al uido de trabajo desde una

fuente externa que puede ser una caldera, un pozo geotérmico o un reactor nuclear. Las

máquinas de combustión interna, se caracterizan por suministrar el calor al uido de tra-

bajo dentro de los límites del sistema.

En este capítulo se abordaron los ciclos de potencia más conocidos, ya que el objetivo

principal es analizar el ciclo termodinámico de una central nucleoeléctrica en la cual el

uido de trabajo es el agua en fase líquida y fase vapor.

2.1. El ciclo de gas de Carnot

Este ciclo puede funcionar como sistema cerrado o sistema de ujo en régimen estacionario,

el cual está compuesto por dos procesos a temperatura constante (isotérmicos) e interna-

mente reversibles y dos procesos sin transferencia de calor (adiabáticos) e internamente

reversibles [7].

Expansión isotérmica (2-3): La temperatura del uido de trabajo T , en este caso gas,

y el fondo del cilindro está en contacto con una fuente de calor de gran capacidad para

que la temperatura T del gas se mantenga constante durante el proceso. Cuando el

gas se expande lentamente, la temperatura tendería a disminuir T T , donde T


tiende a ser 0, condición necesaria para que el proceso sea reversible. La cantidad de

calor total transferido al gas durante el proceso 2-3 es Q23 .

Expansión adiabática (3-4): La fuente de calor se elimina y se aísla el fondo del cilindro

18
Capítulo 2. Ciclos termodinámicos

de manera que el proceso sea adiabático. El gas continúa expandiéndose y realiza

trabajo sobre los alrededores hasta que su temperatura disminuye hasta Tc . El émbolo

no experimenta fricción, de modo que el proceso es reversible y adiabático.

Compresión isotérmica (4-1): Se retira el aislamiento del fondo del cilindro y el sis-

tema se pone en contacto con una fuente fría también de gran capacidad y, por tanto,

de temperatura constante Tc . El calor uye del gas a la fuente fría durante el proceso

4-1 y a medida que el gas se comprime su temperatura tiende a incrementarse, pero

al estar en contacto con la fuente fría, esto no ocurre. El proceso será reversible

porque también ahora T tiende a ser cero. La cantidad de calor rechazado del gas

durante el proceso es Q41 .

Compresión adiabática (1-2): Se retira la fuente de baja temperatura, se aísla el sis-

tema a través del fondo del cilindro y se comprime el gas de manera reversible, de

esta forma el gas vuelve a su estado inicial T , de esta manera se completa el ciclo.

Figura 2.1: Diagrama P-v para el ciclo de gas de Carnot.

La eciencia térmica de este ciclo se expresa como:

t = T
T
Tc
(2.1)

19
2.2. El ciclo de vapor de Carnot

2.2. El ciclo de vapor de Carnot

Este ciclo teóricamente podría realizarse mediante dos procesos isotérmicos y dos procesos

isentrópicos. En un ciclo de Carnot de ujo estacionario que tiene lugar dentro de la curva

de saturación de una sustancia pura, el uido de trabajo se calienta a temperatura cons-

tante en una caldera (1-2); se expande isentrópicamente en una turbina (2-3); se condensa

a temperatura constante en un condensador (3-4) y se comprime isentrópicamente hasta

su estado inicial (4-1) [7]. Estas consideraciones asocian diversas situaciones imprácticas,

las cuales son:

1. Restringir los procesos de transferencia de calor a sistemas de dos fases limita la tem-

peratura máxima que puede utilizarse en el ciclo (tiene que permanecer debajo del

valor del punto crítico, el cual es de 374


 C para el agua) y restringir la temperatura

máxima en el ciclo afecta la eciencia térmica [4].

2. El proceso de expansión isentrópica (2-3) puede aproximarse bastante mediante una

turbina bien diseñada. Sin embargo, la calidad del vapor disminuye durante este

proceso (gura 2.2). Por lo tanto, la turbina tiene que manejar vapor con baja

calidad. El choque de gotas líquidas sobre los álabes de la turbina produce erosión

y es una de las principales fuentes de desgaste [4].

3. El proceso de compresión isentrópica (4-1) implica la compresión de una mezcla de

líquido y vapor hasta un líquido saturado. Hay dos dicultades asociadas con este

proceso: primero, no es fácil controlar el proceso de condensación de manera tan

precisa como para obtener nalmente la calidad deseada en el estado 4; y segundo,

no es práctico diseñar un compresor que maneje dos fases [4].

20
Capítulo 2. Ciclos termodinámicos

Figura 2.2: Diagrama T-s para el ciclo de vapor de Carnot.

La eciencia térmica de este ciclo se expresa como:

t = (h3 h4
h3
) (h2
h2
h1 ) (2.2)

2.3. El ciclo Otto

Nicolaus Otto fue un ingeniero alemán que, a mediados del XIX, diseñó el motor que

lleva su nombre, generalmente, este ciclo es utilizado en los motores a gasolina de cuatro

tiempos [8].

Primer tiempo admisión: Es un proceso a presión constante (0-1), en este instante el

pistón se encuentra en el PMS, se abre la válvula de admisión y se inicia el descenso

del pistón hacia el PMI, entrando en el cilindro la mezcla comburente-combustible.

Segundo tiempo compresión: Es un proceso en el cual no existe transferencia de calor

(1-2), cuando el pistón llega al PMI, se cierra la válvula de admisión y el pistón inicia

su ascenso hasta el PMS comprimiendo la mezcla, a través de un trabajo negativo.

Tercer tiempo combustión-expansión: Es un proceso a volumen constante (2-3) y

sin transferencia de calor (3-4), cuando el pistón se encuentra próximo al PMS,

se produce una chispa, inamando la mezcla y aumentando considerablemente la

21
2.4. El ciclo Diesel

presión dentro del cilindro. En este momento se inicia la carrera del pistón del PMS

al PMI.

Cuarto tiempo expulsión o escape: Es un proceso a volumen constante (4-1) y a pre-

sión constante (1-0), cuando el pistón llega de nuevo al PMI se abre la válvula de

escape provocando la evacuación de los gases quemados a la átmosfera, el resto de

los gases son expulsados por el pistón en su ascenso al PMS. Cuando llega al PMS

se cierra la válvula de escape y se abre la de admisión iniciándose un nuevo ciclo con

el descenso del pistón.

Figura 2.3: Diagrama P-v para el ciclo Otto.

La eciencia térmica de este ciclo se expresa como:

t = W
Q1
(2.3)

2.4. El ciclo Diesel

Rudolf Diesel fue un ingeniero alemán que, a nales del siglo XIX, diseño el motor que

lleva su nombre, generalmente, este ciclo es utilizado en los motores a gasóleo o diesel de

cuatro tiempos [8].

Primer tiempo admisión: Es un proceso a presión constante (0-1), en este momento, el

22
Capítulo 2. Ciclos termodinámicos

pistón se encuentra en el PMS, se abre la válvula de admisión y se inicia el descenso

del pistón hacia el PMI, entrando en el cilindro sólo comburente.

Segundo tiempo compresión: Es un proceso en el cuál no existe transferencia de calor

(1-2), cuando el pistón llega al PMI, se cierra la válvula de admisión y el pistón

inicia su ascenso hacia el PMS comprimiendo el comburente, lo que conlleva a una

elevación considerable en la temperatura de este.

Tercer tiempo combustión-expansión: Es un proceso a volumen constante (2-3) y sin

transferencia de calor (3-4), cuando el pistón se encuentra próximo al PMS, se intro-

duce el combustible a gran presión, produciendo una explosión como consecuencia

del calor desprendido en el roce del aire con el combustible, aumentando la presión

dentro del cilindro. En este momento se inicia la carrera del pistón del PMS al PMI.

Cuarto tiempo expulsión o escape: Es un proceso a volumen constante (4-1) y a pre-

sión constante (1-0), cuando el pistón llega de nuevo al PMI se abre la válvula de

escape provocando la evacuación de los gases quemados hacia la atmósfera. El resto

de los gases son expulsados por el pistón en su ascenso al PMS. Cuando llega al PMS

se cierra la válvula de escape y se abre la admisión iniciándose un nuevo ciclo con el

descenso del pistón.

Figura 2.4: Diagrama P-v para el ciclo Diesel.

23
2.5. El ciclo Brayton

La eciencia térmica de este ciclo se expresa como:

t = W
Q1
(2.4)

2.5. El ciclo Brayton

El ciclo de Brayton es un modelo utilizado para evaluar los trabajos en las máquinas

térmicas de presión constante que utilizan un gas como uido de trabajo. Este tipo de

máquinas pueden ser utilizadas como elemento motriz para impulsar un generador en

centrales eléctricas.

Si bien el ciclo se emplea en circuitos abiertos, con expulsión de los gases de escape de

la turbina a la atmósfera, se considera en forma teórica que los mismos son reutilizados

a la entrada del proceso [9]. Los procesos que integran un ciclo ideal de Brayton son los

siguientes:

Compresión isentrópica (1-2): Se comprime el aire que ingresa al sistema, se genera

un aumento en la presión y en la temperatura.

Combustión de la mezcla (2-3): El uido comprimido inicia la combustión, median-

te la incorporación de combustible y la ignición de la mezcla.

Expansión isentrópica (3-4): El uido de trabajo se expande en la turbina donde se

entrega energía mecánica al eje de la máquina.

Rechazo de calor (4-1): El uido de trabajo rechaza calor para su reutilización. En la

práctica, el gas es expulsado a la atmósfera y se ingresa al sistema aire fresco.

24
Capítulo 2. Ciclos termodinámicos

Figura 2.5: Diagramas P-v y T-s para el ciclo Brayton.

La eciencia térmica de este ciclo se expresa como:

t =1 T1
T2
(2.5)

2.6. El ciclo Rankine

El ciclo de Rankine es el ciclo que sirve de base al funcionamiento de las centrales térmi-

cas con turbinas de vapor, las cuales producen actualmente la mayor parte de la energía

eléctrica que se consume en el mundo. La evolución de las centrales térmicas ha estado

condicionada por la búsqueda de mejoras en el rendimiento térmico del ciclo termodiná-

mico, ya que incluso pequeñas mejoras en el rendimiento signican grandes ahorros en los

requerimientos del combustible, impactando en la economía de la generación de energía.

25
Capítulo 3
El ciclo Rankine

Como se habló anteriormente, el ciclo de Carnot de vapor presenta algunos aspectos im-

prácticos, los cuáles pueden eliminarse, haciéndolo más real. Por eso se desarrolló otro

ciclo que pudiera eliminar los inconvenientes que presenta el ciclo de Carnot. El resultado

fue el ciclo Rankine, que se considera el mejor ciclo para las centrales eléctricas de vapor

[4].

El ciclo Rankine ideal no incluye ninguna irreversibilidad interna y se compone por los

siguientes procesos:

1. Compresión isentrópica en una bomba (4-1).

2. Adición de calor a presión constante en una caldera (1-2).

3. Expansión isentrópica en una turbina (2-3).

4. Rechazo de calor a presión constante en un condensador (3-4).

26
Capítulo 3. El ciclo Rankine

Figura 3.1: Diagrama T-s del ciclo Rankine ideal simple.

3.1. Análisis de energía del ciclo Rankine

Los componentes del ciclo Rankine (bomba, caldera, turbina y condensador) son disposi-

tivos de ujo estacionario. Los cambios en la energía cinética y potencial del vapor suelen

ser pequeños respecto de los términos de trabajo y de transferencia de calor y, por con-

siguiente, casi siempre se ignoran [4].

Para la caldera:

qent= h2 h1 por unidad de masa (3.1)

_
Qent = m_ (h2 h1 ) por unidad de tiempo (3.2)

Para la turbina:

wturb= h2 h3 por unidad de masa (3.3)

_
Wturb = m_ (h2 h3 ) por unidad de tiempo (3.4)

Para el condensador:

qsal= h4 h3 por unidad de masa (3.5)

_
Qsal = m_ (h4 h3 ) por unidad de tiempo (3.6)

27
3.1. Análisis de energía del ciclo Rankine

Para la bomba:

wbom = h4 h1 por unidad de masa (3.7)

_
Wbom = m_ (h4 h1 ) por unidad de tiempo (3.8)

En el ciclo real se consideran las irreversibilidades en diversos componentes. La fricción

del uido y las pérdidas de calor indeseables hacia los alrededores son las dos fuentes más

comunes de irreversibilidades.

De particular importancia son las irreversibilidades que suceden dentro de la bomba y la

turbina. Una bomba requiere una entrada de trabajo mayor, y una turbina produce una

salida de trabajo más pequeña como consecuencia de las irreversibilidades. En condiciones

ideales, el ujo por estos dispositivos es isentrópico. La desviación de las bombas y turbinas

reales de las isentrópicas se compensa exactamente empleando eciencias adiabáticas [4].

Para la bomba:
_i
bom = W
_r =
W h1i
h1r
h4
h4
(3.9)

Para la turbina:
_r
turb
_i =
= W
W
h2
h2
h3r
h3i
(3.10)

Donde los estados 1r y 3r son los estados de salida reales de la bomba y la turbina

respectivamente, 1i y 3i son los estados correspondientes para el caso isentrópico, gura

3.2.

28
Capítulo 3. El ciclo Rankine

Figura 3.2: Diagrama T-s del ciclo Rankine ideal simple.

La eciencia térmica de este ciclo se expresa como:


_ _ _
térmica = WQ_ neto = WturbQ_ Wbom = 1 qsal
qent
(3.11)
ent ent

3.2. Disminución de la presión de la turbina

Cuando se disminuye la presión del vapor a la salida de la turbina del valor P0 al valor P00

se aumenta el trabajo producido por el ciclo (supercie B), con respecto al trabajo que se

produce cuando la presión de salida del vapor es P0 (supercie A).

El calor consumido en la caldera es el mismo, y el calor entregado en el condensador, que

antes era D, se incrementará hasta el área C.

29
3.2. Disminución de la presión de la turbina

Figura 3.3: Efecto que provoca disminuir la presión en la salida


de la turbina.

La disminución de la presión de trabajo del condensador produce benecios pero también

trae problemas. Debido al hecho de que la presión de trabajo es menor que la atmosférica,

resulta prácticamente imposible evitar que penetre aire al interior del sistema por las

pequeñas grietas que se producen en las tuberías, uniones, etc. Se debe tener en cuenta

que una instalación de generación de vapor tiene muchos centenares de metros de tuberías,

que se expanden y contraen cada vez que se abre o cierra el paso del vapor generando

tensiones. Otros factores que inciden son las vibraciones producidas por las bombas, el

ujo de los uidos, y la posible presencia de ujo bifásico que puede producir golpes de

ariete.

Todos estos factores hacen que sea prácticamente imposible mantener estable el sistema. De

ahí que siempre entre algo de aire que se mezcla con el vapor. En los sistemas que emplean

calderas de alta presión e incluso en algunos que usan calderas de media presión, resulta

totalmente intolerable la presencia de dióxido de carbono y de oxígeno en el condensado.

Ambas son sustancias corrosivas, que producen daños muy severos en la caldera y en la

turbina. En consecuencia se debe incluir en el circuito un elemento llamado desaireador

cuya misión es eliminar el aire disuelto en el condensado antes de que este retorne a la

caldera [5].

30
Capítulo 3. El ciclo Rankine

3.3. El ciclo Rankine con sobrecalentamiento

La temperatura promedio a la que el calor se transere hacia el vapor puede ser incre-

mentada sin aumentar la presión de la caldera, gracias al sobrecalentamiento del vapor.

El área sombreada en la gura 3.4 representa el aumento en el trabajo neto, mientras que

el área total bajo la curva del proceso 3 30 representa el aumento en la entrada de calor.

El efecto total es un incremento en la eciencia térmica, porque aumenta la temperatura

promedio a la cual se añade calor.

Figura 3.4: Diagrama T-s del ciclo Rankine con sobrecalentamiento.

El sobrecalentamiento del vapor a temperaturas más altas, disminuye el contenido de

humedad del vapor a la salida de la turbina (la calidad del estado 40 es más alta que la

del estado 4), lo que es un efecto muy conveniente.

La temperatura a la que el vapor se sobrecalienta está limitada debido a consideraciones

metalúrgicas. Cualquier incremento en este valor depende del mejoramiento de los mate-

riales actuales o del descubrimiento de otros nuevos que puedan soportar temperaturas

más altas.

Otra manera de incrementar la temperatura promedio durante el proceso de adición de

calor es aumentar la presión de operación de la caldera, lo cual eleva automáticamente

la temperatura de saturación. Esto a su vez eleva la temperatura promedio a la cual se

31
3.4. El ciclo Rankine con recalentamiento

transere calor al vapor y de ese modo incrementa la eciencia térmica del ciclo [4].

El efecto de aumentar la presión de la caldera en el desempeño de los ciclos de potencia

de vapor se ilustra en un diagrama T-s en la gura 3.5.

Figura 3.5: Diagrama T-s del efecto que produce incrementar la


presión de la caldera en el ciclo Rankine.

Las presiones de operación de las calderas se han incrementado en forma gradual a lo

largo de los años desde 2.7 MPa (400 psia) en 1922, hasta más de 30 MPa (4500 psia) en

la actualidad, generando el suciente vapor para producir una salida neta de potencia de

1000 MW o más en una central eléctrica grande de vapor. Actualmente muchas de estas

modernas centrales operan a presiones supercríticas y tienen eciencias térmicas de 40 por

ciento en el caso de centrales que funcionan con combustibles fósiles y de 34 por ciento

para las nucleoeléctricas.

3.4. El ciclo Rankine con recalentamiento

El recalentamiento es un procedimiento mediante el cual no solamente puede lograrse un

aumento de la eciencia termodinámica de un ciclo de Rankine, sino también una reduc-

ción del grado de condensación en las turbinas. El ciclo con recalentamiento consiste en

permitir que el vapor de la caldera inicialmente sobrecalentado, se expanda primero en

32
Capítulo 3. El ciclo Rankine

una turbina de alta presión hasta una presión a la cual apenas comience la condensación,

luego volver a calentar el vapor mediante un proceso a presión constante, en un equipo

llamado recalentador (generalmente un haz de tubos en el interior de la caldera) y nal-

mente expandirlo hasta la presión del condensador en una turbina de baja presión [10].

Este ciclo se muestra en la gura 3.6.

Figura 3.6: Diagrama T-s del ciclo Rankine con recalentamiento.

La incorporación de un recalentamiento simple en una central eléctrica moderna eleva la

eciencia del ciclo en 4 o 5 por ciento, ya que se incrementa la temperatura promedio a la

cual el calor se transere al vapor.

3.5. El ciclo Rankine regenerativo

Este procedimiento suele sangrar el vapor, extrayéndolo de la turbina en varias etapas,

en cada una de las cuales se usa el vapor sobrecalentado o saturado (en el caso de una

central nuclear) para precalentar el agua condensada que alimenta a la caldera. El cálculo

de la cantidad de vapor extraído en cada etapa se hace por medio de un balance de energía

en cada precalentador, comenzando por el que funciona a mayor presión. Las presiones a

las que se hacen las extracciones se eligen de modo que el calentamiento por cada etapa

tenga igual incremento de temperatura.

33
3.5. El ciclo Rankine regenerativo

La regeneración no sólo mejora la eciencia del ciclo, también proporciona un medio con-

veniente para desairear el agua de alimentación (al eliminar el aire que se ltra al con-

densador) para evitar la corrosión en la caldera. Asimismo, ayuda a controlar el ujo

volumétrico del vapor en las etapas nales de la turbina. Por consiguiente, la regeneración

se utiliza en todas las centrales eléctricas de vapor modernas desde su introducción a

principios de la década de 1920 [5].

3.5.1. El ciclo Rankine regenerativo con calentadores abiertos de


agua de alimentación

Un calentador de agua de alimentación abierto, es una cámara de mezclado, donde el vapor

extraído de la turbina se mezcla con el agua de alimentación.

En un ciclo Rankine ideal regenerativo el vapor entra a la turbina a la presión de la

caldera (estado 5) y se expande isentrópicamente hasta una presión intermedia (estado 6).

Se extrae vapor en este estado y se envía al calentador de agua de alimentación, el vapor

restante continúa su expansión isentrópica hasta la presión del condensador (estado 7).

Este vapor sale del condensador como un líquido saturado a la presión del condensador

(estado 1). El agua condensada, entra luego a una bomba isentrópica, donde se comprime

hasta la presión del calentador del agua de alimentación (estado 2), y se envía al calentador

de agua de alimentación donde se mezcla con el vapor extraído de la turbina.

La fracción del vapor extraído es tal que la mezcla sale del calentador como un líquido

saturado a la presión del calentador (estado 3).

Una segunda bomba elevará la presión del agua hasta la presión de la caldera. El ciclo

concluye con el calentamiento del agua de la caldera hasta el estado de entrada de la

turbina (estado 5) [4].

34
Capítulo 3. El ciclo Rankine

Figura 3.7: Esquema y diagrama T-s del ciclo Rankine


regenerativo con calentador de agua de alimentación abierto.

3.5.2. El ciclo Rankine regenerativo con calentadores cerrados de


agua de alimentación

En este calentador se transere calor del vapor extraído al agua de alimentación sin que

suceda ninguna mezcla. En ese caso los dos ujos pueden estar a presiones diferentes, ya

que no se mezclan.

En un calentador de agua de alimentación cerrado ideal el agua de alimentación se calienta

hasta la temperatura de salida del vapor extraído, que idealmente abandona el calentador

como líquido saturado a la presión de extracción.

En las centrales reales, el agua de alimentación sale del calentador con una temperatura

menor a la de la salida del vapor extraído, debido a que se requiere una diferencia de

temperatura de al menos unos cuantos grados para que se logre una transferencia de calor

efectiva [4].

35
3.5. El ciclo Rankine regenerativo

Figura 3.8: Esquema y diagrama T-s del ciclo Rankine


regenerativo con calentador de agua de alimentación cerrado.

36
Capítulo 4
Descripción de una central
nucleoeléctrica

Una central nuclear es una instalación destinada a la obtención de energía eléctrica uti-

lizando energía nuclear, que es la energía que se obtiene al manipular el núcleo de los

átomos. Su funcionamiento es similar al de una central térmica. La diferencia está en que

la fuente de calor de una central nuclear proviene de la sión nuclear de determinados

átomos mientras que en una central térmica la fuente de calor (energía térmica) proviene

de la combustión de uno o más combustibles fósiles. Al igual que en una central térmica

convencional el calor se utiliza para generar vapor de agua que impulsa una turbina de

vapor conectada a un generador que produce electricidad.

La energía térmica que utiliza la central nuclear para generar energía eléctrica es generada

por un reactor nuclear. Dentro del reactor se producen, de manera controlada, reacciones

de sión en cadena. El elemento que se siona es uranio natural o uranio enriquecido. El

uranio enriquecido es el uranio natural con una proporción mayor del isótopo Uranio-235.

Se suele considerar el tiempo de vida de operación de una central nuclear en unos cuarenta

años, aunque los reactores de tercera generación (ya en funcionamiento) tienen un diseño

de 60 años de vida útil [11].

37
4.1. Componentes de un reactor nuclear

4.1. Componentes de un reactor nuclear

Un reactor nuclear es un dispositivo donde se lleva a cabo la reacción de sión nuclear,

la cual sirve para producir calor a partir de bombardear el núcleo de los átomos con

neutrones. Al escindirse cada núcleo en dos fragmentos de sión, además de liberar calor,

también se emiten neutrones, que a su vez romperán otros núcleos, dando lugar a lo que se

conoce como reacción en cadena. En los reactores nucleares la refrigeración y la seguridad

son muy importantes [12].

Combustible: Formado por un material físil, generalmente un compuesto de uranio, en

el que tienen lugar las reacciones de sión, y por tanto, es la fuente de generación

del calor.

Moderador: Disminuye la energía de los neutrones rápidos, llevándolos a neutrones lentos

o térmicos.

Refrigerante: Remueve el calor que se genera al chocar los productos de sión con los

materiales.

Reector: Puede ser agua, agua pesada, grato o uranio. Reduce el escape de neutrones

y aumenta la eciencia del reactor.

Blindaje biológico: Reduce la fuga de radiación gamma y neutrones rápidos. Puede ser

concreto, plomo, acero o agua.

Material estructural: Proporciona soporte y connamiento al combustible, moderador,

refrigerante y otras partes del reactor.

38
Capítulo 4. Descripción de una central nucleoeléctrica

4.2. La sión nuclear

Dependiendo de la conguración de combustible-moderador-refrigerante se tendrán diver-

sos tipos de reactores nucleares, para el caso de los reactores de agua ligera, contienen el

material nuclear en lo que se conoce como el núcleo del reactor, este consiste de un arreglo

de varios ensambles combustible formados por barras de zircaloy que contienen pastillas

de UO2 en geometría rectangular, en el caso de los reactores de agua ligera en especíco

los reactores BWR, los ensambles combustible tienen arreglos de 8  8 9  9 10  10


, o

barras de zircaloy, estas barras a su vez son las que contienen el combustible cerámico en

forma de pastillas de UO2 en forma de pequeños cilindros de 1 cm de diámetro y 1 cm

de altura.

A lo largo del primer arranque del reactor, junto a los ensambles de combustible, encon-

tramos las fuentes emisoras de neutrones, que son necesarias para iniciar la sión nuclear

por primera vez. Dentro del mismo y cerca de los ensambles de combustible se localizan

las barras de control, las cuales son de Boro o de Cadmio, y al ser desplazadas entre los

ensambles, como su nombre lo indica, sirven para controlar la población de neutrones, ya

que los materiales que contienen son absorbedores de neutrones.

Para comenzar la reacción en cadena es necesario extraer las barras de control, logrando

que los neutrones lleguen a las pastillas de Óxido de Uranio y sean absorbidas por el núcleo

del U-235, entrando a un estado de excitación que le permite partirse o sionarse; una

vez que se produce la reacción de sión, como ya se explicó, se libera una gran cantidad

de energía en forma de calor, además de neutrones que aparecen con una alta energía

(2.5 neutrones en promedio), radiación gamma y usualmente dos productos de sión;

estos contienen energía cinética, los cuales al ir atravesando los materiales de la pastilla

producen fricción, generando calor, el cual trata de conducirse al exterior, incrementando

la temperatura de la pared de Zircaloy. Este calor será extraído por el refrigerante [13].

39
4.2. La sión nuclear

Figura 4.1: Fisión nuclear.

A los neutrones rápidos que surgen en cada sión, es necesario disminuirles su energía o

bien moderarlos de forma tal, que se incremente la probabilidad de sionar a otros núcleos

U-235, y de esta manera poder alcanzar una reacción en cadena.

Si continuamos con el proceso de extracción de barras de control las siones se incremen-

tarán cada vez más, alcanzándose una reacción en cadena estable, es decir, se da un punto,

en que al no extraer más barras de control, la reacción nuclear se autosostendrá y el reactor

habrá adquirido su primera criticidad.

La tabla 4.1 muestra las diferentes clasicaciones de los reactores de acuerdo al uso, tipo

de combustible, tipo de moderador, etc.

40
Capítulo 4. Descripción de una central nucleoeléctrica

Clasicación Área de aplicación o Características


Investigación.
Producción de radioisótopos.
Según su uso Producción de energía eléctrica.
Propulsión naval.
Reproductor de combustible.
Heterogéneos: combustible en barras.
Homogéneos: combustible disuelto en el moderador
Según la disposición
(en forma de sulfato de uranilo UO2 SO4 disuelto
del combustible
en agua liviana actuando de moderador y refrigerante.
Posee grandes problemas tecnológicos y de seguridad).
Uranio natural (99.3 % U238 y 0.7 % U235 ).

Según el tipo de U235 .

combustible U233 .
Pu239 .
H2 O.
D2 O.
Según el moderador Grato.
Berilio.
Compuestos orgánicos (difenilo).
Líquidos: H2 O, D2 O, orgánicos.
Según el uido
Gaseosos: Aire, CO2 , Helio.
refrigerante
Metales fundidos: Na, Aleaciones Na, K, Pb.
Recipiente de presión de acero.
Según el recipiente
Recipiente de presión de hormigón.
del núcleo del reactor
Tubos de presión.
Según el aspecto
neutrónico del reactor Térmicos (con moderador).
(energía de los Rápidos (sin moderador).
neutrones)

Tabla 4.1: Clasicación de los reactores.

4.3. Descripción de los reactores de potencia

Los reactores de potencia se pueden clasicar de acuerdo a la energía de los neutrones con

los cuales se lleva a cabo la sión, de la siguiente manera:

41
4.3. Descripción de los reactores de potencia

8 8
>
> >
<
>
> PWR
>
> Agua Ligera (LWR)
>
> >
>
> : BWR
>
<

Reactores Térmicos
>
> Agua Pesada (PHWR)
>
>
CANDU
>
>
>
> 
>
>
>
: Refrigerado por Gas y moderado por Grato AGR

8 8
>
> >
>
>
> >
>
Monju
>
> >
>
>
< >
< BN-800
Reactores Rápidos Sodio (LMFBR)
>
> >
>
>
> >
> PHÉNIX
>
> >
>
>
: >
: SUPERPHÉNIX

En la gura 4.2 se muestra la evolución de los reactores nucleares a lo largo de las genera-

ciones que se tienen, desde los prototipos hasta la Generación IV.

Figura 4.2: Evolución de los reactores.

42
Capítulo 4. Descripción de una central nucleoeléctrica

Los reactores que se han venido utilizando en mayor medida para la generación de energía

eléctrica desde el inicio, son los reactores de agua ligera, por lo que a continuación se

describirán brevemente algunas características de los reactores tipo PWR y BWR.

4.3.1. Reactor de agua a presión (PWR)

El Reactor de Agua a Presión (PWR, por sus siglas en inglés) se desarrolló para el

equipamiento de los submarinos atómicos del tipo Nautilus; pero fueron tan satisfacto-

rios sus resultados que derivó en ser utilizado en centrales nucleares.

En la gura 4.3 puede observarse un esquema simplicado de una central PWR, la cual

consta de dos circuitos, el primero se conoce como circuito primario dentro del cual el agua

permanece todo el tiempo en fase líquida, esto debido a la alta presión (de ahí su nombre

del reactor) con la cual circula siendo mayor a la presión de saturación, el uido pasa

por una bomba, el reactor (en donde absorbe el calor) y el presurizador que se encarga

de mantener estable el nivel de presión. Del otro lado está el circuito secundario que

también lleva agua pero en este caso aquí si se le permite ebullir, y tiene los elementos

básicos del ciclo Rankine. La única interacción entre los dos circuitos es a través de un

intercambiador de calor cerrado, el cual se conoce como generador de vapor. Debido a que

tiene dos circuitos, la eciencia tiende a ser menor con respecto al tipo BWR, pero una

gran ventaja es que el circuito secundario donde se genera el vapor, es un circuito limpio

completamente. El combustible sigue siendo UO2 con uranio enriquecido al 2 % o 3 %.

43
4.3. Descripción de los reactores de potencia

Figura 4.3: Esquema de una central nucleoeléctrica


con un reactor tipo tipo PWR.

La potencia eléctrica de este tipo de reactores abarca desde los 600 MW hasta 1400 MW

en los reactores de tercera generación [13].

La potencia del reactor es controlada a través de dos medios:

1. Barras absorbedoras, las cuales contienen principalmente carburo de boro como ma-

terial absorbedor.

2. Inyección de ácido bórico disuelto en agua.

La recarga de combustible se lleva a cabo con el reactor apagado, reemplazando anualmente

un tercio de la carga y reordenándose el resto de manera conveniente a n de optimizar el

quemado. El elemento combustible irradiado se deposita en una alberca de enfriamiento,

conocida como alberca de combustible gastado, hasta que descienda lo suciente el calor

de decaimiento, como para permitir que sea reprocesado o almacenado.

44
Capítulo 4. Descripción de una central nucleoeléctrica

4.3.2. Reactor de agua en ebullición (BWR)

El nombre de este reactor se debe a que el agua contenida en el único circuito que posee,

se le permite ebullir. Utiliza uranio enriquecido como combustible con un grado que usual-

mente oscila alrededor del 3 % siendo el agua el uido de trabajo actuando como moderador

y refrigerante a la vez.

Debido a que es un sistema de ciclo directo, el vapor que se genera dentro del reactor

es dirigido a la turbina y desde ahí al condensador. El condensado se dirige luego a un

sistema de puricación conformado por resinas de intercambio iónico de lecho mezclado y

desde ahí es bombeado de manera directa hacia el reactor.

En el reactor, el agua de alimentación se agrega a la mezcla bifásica líquido-vapor que es

obligada a recircular a través del núcleo por las llamadas bombas de recirculación que se

encuentran en la periferia alrededor del mismo. Así mismo se tiene una conguración para

que el ciclo sea del tipo regenerativo.

La conguración del núcleo del reactor (muy parecida al del PWR), consiste en un conjunto

de ensambles combustible agrupados en una conguración cuya periferia tiende a adoptar

la forma cilíndrica.

Cada ensamble combustible posee un arreglo en una matriz cuadrada de 88 99
, o

10  10 barras de zircaloy, el cual contiene en su interior pastillas de UO2 (dióxido de

235
uranio) enriquecido con U .

La vasija es de una forma cilíndrica con base semiesférica, estando fabricado con acero al

carbón, el cual se encuentra recubierto en su interior con una capa de unos 7 mm de acero

inoxidable.

Dentro de la vasija, el agua uye hacia arriba y al atravesar los ensambles se evapora en

forma parcial, constituyendo una mezcla bifásica (líquido-vapor) dejando el núcleo con

una calidad del 12 % aproximadamente, posteriormente, la mezcla de vapor y agua pasa

45
4.3. Descripción de los reactores de potencia

a través de los separadores de vapor donde la parte líquida se separa, quedando vapor

con un poco de humedad, y nalmente se obtiene vapor saturado al pasar después por los

secadores de vapor, saliendo del reactor con una calidad del 99.9 %. Este vapor alimenta

en forma directa la etapa de alta presión de la turbina.

Al igual que en los reactores PWR, cuando se hace la recarga, los combustibles gastados

son llevados a la llamada alberca de combustible gastado, en la cual permanecen hasta

que disminuye el calor de decaimiento, lo suciente como para que puedan ser trasladados

a la planta de reprocesamiento o puestos en algún repositorio [13].

La turbina posee, como en la mayoría de las centrales nucleares, una sección de alta presión

y dos o tres de baja presión.

Figura 4.4: Esquema de una central nucleoeléctrica


con un reactor tipo tipo BWR.

46
Capítulo 5
Desarrollo del simulador del ciclo
termodinámico

En este capítulo se describe el proceso llevado a cabo para el desarrollo del simulador del

ciclo termodinámico para una central nuclear con un reactor tipo BWR.

Una de las primeras tareas en el desarrollo del simulador, fue la de generar u obtener las

correlaciones que se utilizarían en el simulador para calcular las propiedades termodinámi-

cas del agua en diferentes estados, lo cual también se muestra en este capítulo. Por otra

parte, se detalla el diseño de la interfaz gráca, así como el acoplamiento de estas partes

para lograr una herramienta nal que fuera amigable con el usuario.

El simulador se desarrolló en el lenguaje de programación Python 3.4, un lenguaje libre y

de fuente abierta, disponible para los principales sistemas operativos, como son Linux, Mac

2
OS X y Windows . A partir del código fuente de programación se desarrolló un ejecutable.

5.1. Cálculo de las propiedades termodinámicas del agua

Las funciones o correlaciones para calcular las propiedades termodinámicas del agua se

encuentran en función de la presión de saturación a una temperatura dada.

2 Para más información, visitar https://www.python.org

47
5.1. Cálculo de las propiedades termodinámicas del agua

La temperatura de saturación (en función de una presión dada) se calcula para delimitar el

rango donde es válido utilizar las funciones de líquido comprimido o vapor sobrecalentado.

Para simular el ciclo termodinámico de una central nuclear con reactor tipo BWR, se nece-

sitan dos propiedades termodinámicas que son: entalpía especíca y entropía especíca.

5.1.1. Presión de saturación en función de la temperatura

La ecuación 5.1 es válida para un rango de temperatura desde 17.511


C hasta 373
C

y en la tabla 5.1 se indican los valores de los coecientes a, b y c para cada rango de

temperatura [14].

( )=
Ps T
T + a c (5.1)
b

Rango de temperatura ( C)
 a b c
17:511  < 56:275
T 99.2 270.1210 7.4063650
56:275  < 90:880
T 78.2 254.6831 6.4058216
90:880  < 139:781
T 57.0 236.2315 5.6029720
139:781  < 203:662
T 28.0 207.9248 4.7785040
203:662   299:407
T 5.0 185.0779 4.3043760
299:407 < < 355:636
T 16.0 195.1819 4.4608430
355:663   373:000
T 50.0 227.2963 4.9607850

Tabla 5.1: Coecientes para calcular la presión de saturación.

5.1.2. Temperatura de saturación en función de la presión

La ecuación 5.2 es válida para un rango de presión desde 0.002 MPa hasta 21.5 MPa y en

la tabla 5.2 se indican los valores de los coecientes a, b y c para cada rango de presión

[14].

( )=
Ts P aP b +c (5.2)

48
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

Rango de Presión (MPa) a b c


0:00200  < 0:01672
P 270.1210 0.135019 -99.2
0:01672  < 0:07250
P 254.6831 0.156108 -78.2
0:07250   0:35900
P 236.2315 0.1784767 -57.0
0:35900 <  1:67600
P 207.9248 0.2092705 -28.0
1:67600 <  8:51100
P 185.0779 0.2323217 -5
8:51100 < < 17:69000
P 195.1819 0.2241729 -16.0
17:69000   21:500
P 227.2963 0.2015810 -50.0

Tabla 5.2: Coecientes para calcular la temperatura de saturación.

5.1.3. Líquido saturado

El cálculo de las propiedades termodinámicas del agua, como líquido saturado, se en-

cuentran en función de la presión de saturación. La correlación para obtener la entalpía

especíca del líquido saturado (hf ), ecuación 5.3, es válida para un rango de presión de

saturación desde 0.002 MPa hasta 21.5 MPa y en la tabla 5.3 se indican los valores de los

coecientes a, b y c para cada rango de presión de saturación de dicha ecuación, como se

muestra a continuación [14]:

( )=
hf Ps aPs b +c (5.3)

Rango de Presión (MPa) a b c


0:0020  s < 0:0173
P 1128.7770 0.1351960 -413.72
0:0173  s < 0:1028
P 1050.7085 0.1617970 -306.50
0:1028  s < 0:9420
P 912.1779 0.2061637 -150.00
0:9420  s < 4:0200
P 638.0621 0.2963192 125.00
4:0200  s < 9:964
P 373.7665 0.4235532 415.00
9:964  s < 16:673
P 75.38673 0.8282384 900.00
16:673  s < 20:396
P 0.1150827 2.711412 1440.00
20:396  s  21:500
P 9:1417257  10 14
11.47287 1752.00

Tabla 5.3: Coecientes para calcular la entalpía especíca de líquido saturado.

Por otro lado, para calcular la entropía especíca para líquido saturado (sf ) se tiene la

ecuación 5.4, la cual es válida para un rango de presión de saturación desde 0.002 MPa

49
5.1. Cálculo de las propiedades termodinámicas del agua

hasta 21.5 MPa, además en la tabla 5.4 se indican los valores de los coecientes a, b, c y

d para cada rango de presión de saturación, como se muestran a continuación:

( ) = a(Ps + b)c + d
sf Ps (5.4)

Rango de Presión (MPa) a b c d


0:0020  s < 0:0812
P 4.5397665 0.0 0.0829772 -2.449
0:0812  s < 1:6660
P 3.340244 0.0 0.125474 -1.200
1:6660  s < 8:8250
P 1.748203 0.0 0.2275611 0.400
8:8250  s < 16:6600
P 0.2549238 0.0 0.6381866 2.250
16:6600  s  21:500 4:3632383  10
P
5
-0.04 3.153273 3.500

Tabla 5.4: Coecientes para calcular la entropía especíca de líquido saturado.

5.1.4. Vapor saturado

Al igual que para el líquido saturado, las propiedades termodinámicas del vapor saturado se

encuentran en función de la presión de saturación. En este caso para la entalpía especíca

de vapor saturado, la ecuación 5.5 es válida para un rango de presión de saturación desde

0.002 MPa hasta 21.5 MPa y en la tabla 5.5 se indican los valores de los coecientes a, b,

c y d para cada rango de presión de saturación de dicha ecuación [14]:

( ) = a(Ps + b)2 + c(Ps + b) + d


hg Ps (5.5)

Tabla 5.5: Coecientes para calcular la entalpía especíca de vapor saturado.


Rango de Presión (MPa) a b c d
0:0020  s < 0:1379
P Ver Nota 1 Ver Nota 1 Ver Nota 1 Ver Nota 1
0:1379  s < 0:348
P Ver Nota 2 Ver Nota 2 Ver Nota 2 Ver Nota 2
0:348 < s  1:248
P Ver Nota 3 Ver Nota 3 Ver Nota 3 Ver Nota 3
1:248 < s < 2:955
P -7.835986 -3.001 -2.934312 2803.71
2:955  s  6:522
P -1.347244 -2.999 -2.326913 2803.35
6:522 < s < 16:497
P -0.9219176 -9.0 -16.38835 2742.03
16:497  s < 20:193
P -3.532177 -8.0 29.81305 2565.00
20:193  s  21:5
P -22.92521 -18.0 44.23671 2415.01

yNota 1: hg (Psat ) = 529:44008Psat


0:108652
+ 2263:5
yNota 2: hg (Psat ) = 4:0381938  10 6
(3:0 Psat )15:72364 + 2750:0
yNota 3: hg (Psat ) = 0:5767304e 1:66153(Psat 3:2)
+ 2800:0

50
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

De la misma manera para la entropía especíca del vapor saturado, la ecuación 5.6 es

válida para un rango de presión de saturación desde 0.002 MPa hasta 21.5 MPa y en la

tabla 5.6 se indican los valores de los coecientes a, b, c y d para cada rango de presión

de saturación:

( ) = a(Ps + b)c + d
sg Ps (5.6)

Tabla 5.6: Coecientes para calcular la entropía especíca de vapor saturado.


Rango de Presión (MPa) a b c d
0:0020  s < 0:0916
P 16.644669 0 -0.0192733 -10.039
0:0916  s < 1:480
P Ver Nota 1 Ver Nota 1 Ver Nota 1 Ver Nota 1
1:480  s  8:050
P -1.227644 0 0.2481072 7.80
8:050 < s  15:640
P -0.084638514 0 0.9082161 6.30
15:640 < s  20:00
P 3:6897161  10 3
-7.80 2.012466 5.50
20:000 < s  21:5
P -0.042830642 -18.7 1.779526 5.0

yNota 1: sg (Psat ) = 6:58681 0:335924 log(Psat )

5.1.5. Líquido comprimido

Por denición, un líquido comprimido es aquel que se encuentra a mayor presión que la

presión de saturación a una temperatura dada, de acuerdo con lo anterior para el cálculo

de las propiedades termodinámicas del agua en estado de líquido comprimido, se agrega el

efecto que tiene la presión adicional, respecto a la presión de saturación a una temperatura

dada [15].

Las correlaciones para las propiedades termodinámicas especícas de entalpía y entropía

se tienen como sigue:

Entalpía especíca de líquido comprimido o subenfriado:


 
h(P; T ) = hf [Ps (T )] + 1:4
169
369 T (P Ps ) (5.7)

Entropía especíca de líquido comprimido o subenfriado:


 
s(P; T ) = sf [Ps (T )] + 0:0004
0 :325
370 T (P Ps ) (5.8)

51
5.1. Cálculo de las propiedades termodinámicas del agua

5.1.6. Vapor sobrecalentado

Por denición, un vapor sobrecalentado es aquel que se encuentra a mayor temperatura

que la temperatura de saturación a una presión dada, de acuerdo con lo anterior para el

cálculo de las propiedades termodinámicas del vapor sobrecalentado, se agrega el efecto

que tiene la temperatura adicional, respecto a la temperatura de saturación a una presión

dada.

Igualmente, las correlaciones para las propiedades termodinámicas especícas de entalpía

y entropía se tienen como sigue:

Entalpía especíca del vapor sobrecalentado:

(
h P; T ) = hg (Ps(T )) +

p 4:5P + 0:28 0:008(T 162) 100 2:225 (T Ts )
7:4529  10 6T 3 P2
e
T
(5.9)

Entropía especíca del vapor sobrecalentado:

(
s P; T ) = sg (Ps(T )) +
" #
p
0 :004P 1:2 0 :00006
+ p (T Ts )
3:025  10 11(T + 46)5 P 2
(5.10)
P

+ 4:125  10 6T + 0:0053 (T Ts)


Las ecuaciones anteriores no permiten calcular las propiedades termodinámicas cuando

se intentan realizar cálculos cercanos a las condiciones de saturación, debido a que la

diferencia entre la temperatura y presión que existe dentro de la raíz cuadrada en ambas

ecuaciones tiende a ser negativa. Por lo tanto para esta región se utilizaron las tablas de

Vapor Sobrecalentado de la referencia [4], en conjunto con la referencia [16] .


3

3 Descargar en, https://www.nist.gov/sites/default/les/documents/srd/NISTIR5078-Tab3.pdf

52
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

5.2. Diseño de la interfaz gráca del simulador

Para generar el modelo de la interfaz gráca se utilizó Qt, que es una infraestructura digital

multiplataforma orientada a objetos ampliamente usada para desarrollar programas que

emplean interfaz gráca de usuario, así como también diferentes tipos de herramientas

para la línea de comandos y consolas para servidores que no necesitan una interfaz gráca

de usuario. Además Qt es compatible con Python.

Qt Designer es una herramienta de Qt para el diseño y la construcción de interfaces grácas

de usuario (GUI, del inglés Graphical User Interface). Elementos y formas creadas con Qt

Designer se integran a la perfección con el código programado, utilizando señales de Qt,

que le permite asignar fácilmente el comportamiento de los elementos grácos. Todas las

propiedades establecidas en Qt Designer se pueden cambiar dinámicamente dentro del

4
código .

Dentro de la herramienta Qt Designer se tienen varios elementos disponibles para hacer

una interfaz gráca de usuario; a continuación se describen los elementos que se emplearon

en el simulador desarrollado:

Tab Widget: Este elemento permite crear pestañas dentro de una ventana.

Label: Permite insertar texto en una posición determinada de la ventana y también per-

mite insertar imágenes en la posición deseada en una ventana.

Push Button: Este elemento realiza alguna acción requerida por el usuario.

LineEdit: Es una casilla que permite al usuario introducir valores alfanuméricos en una

sola línea.

Radio Buttom: Es un botón de opción que se puede activar (seleccionado) o desactivar

(sin seleccionar). En un grupo de botones de este tipo, sólo un botón se puede selec-

4 Para más información, visitar https://www.qt.io/es/

53
5.2. Diseño de la interfaz gráca del simulador

cionar a la vez; si el usuario selecciona otro botón, el botón seleccionado previamente

se desactiva.

Check Box: Es una casilla de vericación que se utilizan normalmente para representar

las opciones en una aplicación que pueden ser activadas o desactivadas, sin afectar

a las demás opciones.

La interfaz gráca de usuario desarrollada para el SICTER (Simulador de un ciclo termo-

dinámico Rankine), se compone de las siguientes partes:

1. Ventana principal: En la pestaña de Inicio se muestra el nombre y las depen-

dencias correspondientes donde se generó este simulador, así como las opciones de

iniciar y salir del SICTER, gura 5.1.

54
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

Figura 5.1: Ventana principal, pestaña Inicio.

En la pestaña Acerca de , se describe brevemente que es la plataforma AZTLAN y

las instituciones involucradas en este proyecto, gura 5.2.

55
5.2. Diseño de la interfaz gráca del simulador

Figura 5.2: Ventana principal, pestaña Acerca de.

2. Ventana secundaria: Permite seleccionar el sistema de unidades, ya sea el Sistema


Inglés de Ingeniería o el Sistema Internacional de Unidades.

56
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

Figura 5.3: Ventana secundaria.

3. Ventana terciaria: Muestra el esquema del ciclo termodinámico en las unidades

que previamente se seleccionó.

57
5.2. Diseño de la interfaz gráca del simulador

Figura 5.4: Circuito termodinámico en el Sistema Internacional de Unidades.

Figura 5.5: Circuito termodinámico en el Sistema Inglés de Ingeniería.

58
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

Para crear el ejecutable del código, las imágenes dentro del diseño de la interfaz gráca

de usuario, se introducen en formato *.qrc, un archivo basado en XML, que permite la

portabilidad de los recursos asociados a este archivo. A continuación se muestra un ejemplo

de un archivo *.qrc.

<RCC>

<qresource prex=archivoqrcqtpng>

<le>ININ_hor,300p.png</le>

<le>Aztlan1,300p.png</le>

<le>ININ Logo.png</le>

<le>Aztlanver,150p.png</le>

</qresource>

</RCC>

5.3. Generación del ejecutable

PyInstaller es un programa que comprime códigos Python en ejecutables independientes,

bajo Windows, Linux y Mac OS X. Sus principales ventajas sobre otras herramientas

similares son que PyInstaller trabaja con Python 2.7 y 3.3 a 3.5, se crean ejecutables más

pequeños, es completamente multiplataforma y utiliza el soporte del sistema operativo

5
para cargar las bibliotecas dinámicas, lo que garantiza una compatibilidad total .

Uno de los inconvenientes que presenta la herramienta PyInstaller, es que el código que

se desee comprimir (incluyendo la interfaz gráca de usuario y los archivos *.qrc), deben

estar en lenguaje Python, por lo que se tiene que convertir los archivos de Qt Designer

5 Para más información, visitar http://www.pyinstaller.org/

59
5.3. Generación del ejecutable

con extensión *.ui a *.py y los archivos *.qrc a *.py. A continuación se describen los pasos

necesarios para convertir la Interfaz Gráca de Usuario a lenguaje Python:

1. Para convertir el archivo *.qrc, el cual contiene las imágenes png o jpg, a Python

*.py, se utiliza una herramienta de Qt Designer llamada pyrcc, este proceso se realiza

mediante el ambiente de desarrollo de Python, en este caso se utilizó PyCharm.

2. Para convertir los archivos *.ui en *.py, se utiliza una herramienta de Qt Designer

llamada uic, la cual se utiliza en la ventana de comandos de Windows (cmd).

Hasta este punto se ha completado la conversión de la interfaz gráca de usuario, con

sus respectivas imágenes, a lenguaje Python, ahora se debe implementar la lógica de

funcionamiento de los elementos que contiene la interfaz gráca de usuario, mediante

un código desarrollado en Python, en el que se declaran las señales propias de Qt para

indicar qué debe hacer cada elemento, para después acoplar la parte de interfaz gráca de

usuario y el funcionamiento de los botones, con las funciones programadas para calcular

las propiedades termodinámicas.

En esta parte el SICTER sólo es capaz de calcular las propiedades termodinámicas con

los parámetros de entrada que se introduzcan en la interfaz gráca de usuario (Presión y

temperatura). Para analizar los ciclos termodinámicos Rankine, se programan las correla-

ciones respectivas para cada ciclo en las que se llaman a las propiedades termodinámicas

requeridas, este apartado se describe con más detalle en el apéndice Programación en


Python y Qt Designer del simulador.

Una vez terminado el código fuente y habiendo sido vericado su funcionamiento, el paso

siguiente es crear el ejecutable, con la herramienta PyInstaller y mediante la ventana de

comandos de Windows (cmd).

En la ventana de comandos (cmd) se especíca la ruta que aloja el archivo que se desea

comprimir con las características nales que se desea en el ejecutable. Windows comenzará

60
Capítulo 5. Desarrollo del simulador del ciclo termodinámico

la compresión del código, así como de las dependencias necesarias del mismo.

Una vez terminado el proceso, se creará una carpeta con el nombre del código fuente

(*.py) que se comprimió y dentro de ésta habrá una subcarpeta llamada dist en la que

se encontrará el archivo ejecutable (*.exe).

La gura 5.6 muestra todo el proceso que se sigue para la generación del archivo ejecutable

del SICTER.

61
5.3. Generación del ejecutable

Figura 5.6: Proceso realizado para generar la herramienta SICTER.

62
Capítulo 6
Aplicación del simulador del ciclo
termodinámico del BWR

En este capítulo se comparan los análisis realizados y que se muestran a detalle en el

apéndice Solución completa de los problemas de referencia para una central nuclear con

un reactor tipo BWR con respecto al cálculo que realiza la herramienta de simulación

SICTER, tanto para el ciclo Rankine simple como para el ciclo Rankine regenerativo.

En la gura 6.1, se muestran los componentes del ciclo termodinámico Rankine simple y

regenerativo diseñados para el SICTER.

63
6.1. Simulación del ciclo Rankine simple

Figura 6.1: Esquema del ciclo Rankine diseñado para el SICTER.

6.1. Simulación del ciclo Rankine simple

Los datos que se tienen son los siguientes: La presión a la salida del reactor es de 7 MPa,

como vapor saturado. La presión a la salida de la turbina, que tiene una eciencia de

85 %, es de 6.5 kPa. El uido de trabajo sale del condensador como líquido saturado a una

presión de 6.5 kPa. Finalmente, el uido de trabajo sale de la bomba, la cual tiene una

eciencia de 80 %, como líquido comprimido a una presión de 7 MPa y a una temperatura

de 38
 C. El ujo másico dentro del ciclo es de 253 kg/s.

Las guras 6.2, 6.3 y 6.4 muestran la forma en que se introducen los datos dependiendo

de las condiciones dadas.

64
Capítulo 6. Aplicación del simulador del ciclo termodinámico del BWR

Figura 6.2: Introducción de datos en el esquema del SICTER para el ciclo Rankine
simple.

65
6.1. Simulación del ciclo Rankine simple

Figura 6.3: Introducción de datos para el ciclo Rankine simple en el SICTER.

Figura 6.4: Parámetros de entrada del ciclo Rankine simple para el SICTER.

66
Capítulo 6. Aplicación del simulador del ciclo termodinámico del BWR

Las guras 6.5 y 6.6, muestran los datos de salida principales y el archivo de texto con los

datos completos de salida en cada punto analizado del ciclo, respectivamente:

Figura 6.5: Valores de salida del ciclo Rankine simple del SICTER.

Figura 6.6: Archivo de salida del ciclo Rankine simple del SICTER.

67
6.2. Simulación del ciclo Rankine regenerativo con calentador de agua de alimentación
cerrado

6.2. Simulación del ciclo Rankine regenerativo con ca-


lentador de agua de alimentación cerrado

Para la simulación del ciclo Rankine regenerativo, se sigue la misma metodología que para

el ciclo simple, con la diferencia que ahora a la válvula se le cambiará la posición de cerrada

a abierta, quedando habilitado el precalentador. Los datos que se tienen son los siguientes:

la presión a la salida del reactor es de 7 MPa, como vapor saturado. La presión a la salida

de la turbina de alta presión, que tiene una eciencia de 85 %, es de 480 kPa. Parte del

uido de trabajo continua su recorrido hasta el calentador de agua de alimentación de

tipo cerrado (los uidos no se mezclan dentro del mismo), en donde cede energía a presión

constante de 480 kPa, posteriormente, el uido se dirige a la segunda bomba, que tiene

una eciencia de 80 %, la cual eleva su presión hasta 7 MPa. La parte complementaria del

uido de trabajo sale de la turbina de baja presión a una presión de 6.5 kPa. Por otro

lado, el uido de trabajo sale del condensador como líquido saturado a una presión de 6.5

kPa, para después dirigirse a la bomba uno, que tiene una eciencia de 80 % igual que la

bomba dos. Una vez culminado este proceso el uido de trabajo se dirige al calentador de

agua de alimentación, donde recibe la energía transferida de la extracción de la turbina

de alta presión. El ujo másico total del ciclo es de 253 kg/s.

Como se mencionó al principio de este apartado, para activar este análisis dentro del

SICTER, se debe activar la opción de Abierta, la cual aparece abajo de la válvula del

esquema del ciclo Termodinámico, como se muestra en la gura 6.7:

68
Capítulo 6. Aplicación del simulador del ciclo termodinámico del BWR

Figura 6.7: Activación del ciclo Rankine regenerativo en el SICTER.

Igual que para el ciclo simple la introducción de los datos se muestra en las guras 6.8,

6.9 y 6.10:

69
6.2. Simulación del ciclo Rankine regenerativo con calentador de agua de alimentación
cerrado

Figura 6.8: Introducción de datos en el esquema del SICTER para el ciclo Rankine
regenerativo.

70
Capítulo 6. Aplicación del simulador del ciclo termodinámico del BWR

Figura 6.9: Introducción de datos para el ciclo Rankine regenerativo en el SICTER.

Figura 6.10: Parámetros de entrada del ciclo Rankine regenerativo para el SICTER.

71
6.2. Simulación del ciclo Rankine regenerativo con calentador de agua de alimentación
cerrado

Los datos de salida, tanto en la interfaz del SICTER como en el archivo con los datos de

salida, se muestran en las guras 6.11 y 6.12, respectivamente:

Figura 6.11: Valores de salida del ciclo Rankine regenerativo del SICTER.

Figura 6.12: Archivo de salida del ciclo Rankine regenerativo del SICTER.

72
Capítulo 6. Aplicación del simulador del ciclo termodinámico del BWR

Se puede observar que al utlizar un precalentador la eciencia del ciclo aumenta respecto

al ciclo simple en un 3.2 %, de ahí la importancia de utilizar los precalentadores. Por otra

parte, los resultados de referencia que se tienen son: 31.528528 % y 34.724222 % para el

ciclo simple y regenerativo, respectivamente ( ver Apéndice B). Al hacer la comparación

con los obtenidos con el SICTER, se tiene una diferencia de menos del 0.35 %.

6.3. Aumento de la eciencia térmica

Como parte de un ejercicio adicional, se llevó a cabo un análisis, para diferentes condiciones

de presiones y temperaturas en un ciclo simple, considerando turbina y bomba isentrópicas,

variando solamente la presión, a la entrada a la turbina, así como a la salida de la turbina,

y con diferentes temperaturas máximas de entrada a la turbina, así mismo, se considera

que no hay pérdidas en las tuberías. Los resultados se muestran en la tabla 6.1.

Pent en MPa Psal en kPa Tmáx en


C T %

2 10 400 32.32604
2 5 400 34.49542
4 10 400 35.34494
4 5 400 37.33462

2 10 600 35.64077
2 5 600 37.69869
4 10 600 38.40647
4 5 600 40.30919

Tabla 6.1: Aumento de la eciencia térmica.

Considerando los valores de referencia de Pent = 2 MPa, Psal = 10 kPa, y una Tmax = 400

 C, se puede observar lo siguiente:

Es más eciente aumentar la presión a la entrada que reducir el valor de la misma a

la salida, para los dos casos con diferentes temperaturas.

Cualquiera de los casos de aumento o disminución de presión con la temperatura

73
6.3. Aumento de la eciencia térmica

de referencia (siempre y cuando no sea la combinación de ambos), resultan en una

eciencia menor que el caso base pero con la segunda temperatura, que implica

un aumento del 50 % de los grados Celsius de referencia (las presiones se aumen-

taron/disminuyeron al 100 %).

74
Conclusiones y recomendaciones

Se desarrolló un simulador del ciclo Rankine para una central nuclear con un reactor

del tipo BWR (SICTER), el cual al ser una herramienta de cómputo independiente, no

requiere de librerías dinámicas para su funcionamiento, como otros programas, lo cual

reduce los tiempos de cálculo.

En México, la central nucleoeléctrica de Laguna Verde tiene este tipo de reactores, aunque

si se tratase de un reactor del tipo PWR, el SICTER podría simular el circuito secundario

del mismo.

En cuanto al desarrollo del programa SICTER es importante señalar que las correlaciones

que se utilizaron para el cálculo de las propiedades termodinámicas (entalpía y entropía)

fueron ampliamente vericadas, de tal manera que se tuvieran las mínimas diferencias

posibles con los valores tabulados en las tablas ociales de las propiedades termodinámicas.

De esta manera se pudo observar que las correlaciones que se tenían para la región de

vapor sobrecalentado mostraban resultados erróneos para valores cercanos a saturación,

así como para valores cercanos al punto crítico, por lo que se optó por utilizar las tablas

de vapor sobrecalentado ociales.

La siguiente tabla muestra una comparativa de los valores calculados por el SICTER con

los obtenidos en las tablas termodinámicas, en la que se aprecia el error que existe al

calcular las propiedades termodinámicas, considerando los valores de referencia de Pent =

2 MPa, Psal = 10 kPa, y una Tmax = 400


 C.

75
Entalpía Valores SICTER (kJ/kg) Valores de tablas (kJ/kg) Error %

h(2 MPa, 400  C) 3248.4 3248.4 0


hg(10 kPa, isentrópica) 2258.75698852 2258.685993 0.003
hf(10 kPa) 191.92223245727575 191.81 0.0585
hf(10 kPa, isentrópica) 194.29380238950003 191.7828636 1.309

Comparación de las propiedades termodinámicas.

Así mismo, es necesario considerar la originalidad de la interfaz, ya que cada uno de los

componentes que conforman el ciclo (desde las tuberías hasta el reactor nuclear) se hicieron

a escala con programas de diseño asistido por computadora (CAD).

Más aún, el diseño sencillo y directo de la interfaz, dio como resultado un simulador fácil de

utilizar y que es capaz de resolver un ciclo termodinámico Rankine regenerativo para una

central térmica convencional, es decir, tiene la capacidad de simular vapor sobrecalentado

a la salida de la caldera (para el BWR es vapor saturado), lo que lo hace una herramienta

muy versátil para resolver incluso problemas que se encuentran en la literatura, o aquellos

ejercicios que simulan caídas de presión y descenso de temperatura en el túnel de vapor o

con turbinas y bombas que no son adiabáticas.

Para un trabajo futuro, se tiene pensado ampliar y mejorar el programa SICTER, siendo

algunas consideraciones las siguientes:

1. Programar las propiedades termodinámicas en base al modelo que proporciona The

6
International Association for the Properties of Water and Steam , ya sea para uso

general o cientíco (IAPWS-95), o para uso industrial (IAPWS-97).

2. Aumentar el número de calentadores de agua alimentación.

Finalmente, es necesario agregar que el SICTER es una herramienta académica que facilita

la enseñanza y el aprendizaje, al simular el ciclo Rankine en una central generadora, y

puede servir como apoyo al grupo de termohidráulica de la plataforma AZTLAN.

6 Para más información, visitar http://www.iapws.org/

76
Bibliografía

[1] A. M. Gómez Torres, Aztlan platform. http://www.aztlanplatform.mx/acerca-

de/aztlan-platform-desarrollo-de-una-plataforma-mexicana-para-el-analisis-y-diseno-

de-reactores-nucleares/.

[2] M. del Carmen Maldonado Susano, Primera ley de la termodinámica.

[3] J. E. Tibaquirá, Termodinámica.

[4] Y. A. Çengel y Michael A. Boles, Termodinámica. McGraw-Hill, séptima ed., 2012.

[5] J. A. Rodriguez, Introducción a la termodinámica con algunas aplicaciones de inge-

niería..

[6] R. E. Sonntag, C. Borgenakke, and G. J. Van Wylen, Fundamentals of Thermody-


namics. John Wiley & sons, sixth ed., 1983.

[7] S. F. Paredes, Análisis termodinámico de los ciclos rankine. Trabajo Final de Grado,

Abril 2015.

[8] Principios de termodinámica y motores térmicos. https://


tecnologiafuentenueva.wikispaces.com/file/view/Motorestermicos.pdf.

[9] Centrales térmicas de gas ciclo brayton, 2014.

[10] EcuRed, Ciclo de rankine. https://www.ecured.cu/Ciclo_de_Rankine.

[11] Energía nuclear. http://energia-nuclear.net/deniciones/central-nuclear.html.

77
Bibliografía

[12] J. V. Xolocostli Munguía, Clasicación de los reactores y terminología, Octubre

2013.

[13] Centrales eléctricas. http://www.iae.org.ar/archivos/educ6.pdf.

[14] W. J. Garland, R. J. Wilson, J. Bartak, J. Cizek, M. Stasny, and I. Zentrich, Ex-

tensions to the approximation functions for the fast calculation of saturated water

properties, Nuclear Engineering and Design, 1992.

[15] W. J. Garlan and B. J. Hand, Simple functions for the fast approximation of light

water thermodynamic properties, Nuclear Engineering and Design, 1988.

[16] N. I. of Standards and Technology. https://www.nist.gov.

78
Apéndice A

Programación en Python y Qt Designer


del simulador

Lógica de funcionamiento de los botones


import os
import sys
from PyQt4 import QtCore , QtGui
from VS1 import Ui_VS1
from VS2 import Ui_VS2
from VS3SIU import Ui_Widget
from Ventana3 import Ventanaclase
from VS3SI import Ui_WidgetG
from Ventana3G import VentanaclaseG
vct = Ui_Widget
vctG = Ui_WidgetG
ventana1 = Ui_VS1
ventana2 = Ui_VS2
class ultimaventanaclassG ( QtGui . QMainWindow , VentanaclaseG ) :
def __init__ ( self , parent = None ) :
super ( ultimaventanaclassG , self ) . __init__ ( parent )
self . setupUi ( self )
self . RBA . toggled . connect ( self . rba_clicked )
self . RBC . toggled . connect ( self . rbc_clicked )
self . CBP1 . clicked . connect ( self . p1op )
self . CBT1 . clicked . connect ( self . t1op )
self . CBX1 . clicked . connect ( self . x1op )
self . CBP2 . clicked . connect ( self . p2op )
self . CBT2 . clicked . connect ( self . t2op )
self . CBX2 . clicked . connect ( self . x2op )

79
self . CBV3 . clicked . connect ( self . cbv3_clicked )
self . CB1V3 . clicked . connect ( self . cb1v3_clicked )
self . CBP3 . clicked . connect ( self . p3op )
self . CBT3 . clicked . connect ( self . t3op )
self . CBV4 . clicked . connect ( self . cbv4_clicked )
self . CB1V4 . clicked . connect ( self . cb1v4_clicked )
self . CBP4 . clicked . connect ( self . p4op )
self . CBT4 . clicked . connect ( self . t4op )
self . CBP5 . clicked . connect ( self . p5op )
self . CBT5 . clicked . connect ( self . t5op )
self . CBX5 . clicked . connect ( self . x5op )
self . CBV6 . clicked . connect ( self . cbv6_clicked )
self . CB1V6 . clicked . connect ( self . cb1v6_clicked )
self . CBP6 . clicked . connect ( self . p6op )
self . CBT6 . clicked . connect ( self . t6op )
self . CBV7 . clicked . connect ( self . cbv7_clicked )
self . CB1V7 . clicked . connect ( self . cb1v7_clicked )
self . CBP7 . clicked . connect ( self . p7op )
self . CBT7 . clicked . connect ( self . t7op )
self . CBP8 . clicked . connect ( self . p8op )
self . CBT8 . clicked . connect ( self . t8op )
self . CBX8 . clicked . connect ( self . x8op )
self . CBV9 . clicked . connect ( self . cbv9_clicked )
self . CB1V9 . clicked . connect ( self . cb1v9_clicked )
self . CBP9 . clicked . connect ( self . p9op )
self . CBT9 . clicked . connect ( self . t9op )
self . CBV10 . clicked . connect ( self . cbv10_clicked )
self . CB1V10 . clicked . connect ( self . cb1v10_clicked )
self . CBP10 . clicked . connect ( self . p10op )
self . CBT10 . clicked . connect ( self . t10op )
self . BCalcular . clicked . connect ( self . calculos )

class ultimaventanaclass ( QtGui . QMainWindow , Ventanaclase ) :


def __init__ ( self , parent = None ) :
super ( ultimaventanaclass , self ) . __init__ ( parent )
self . setupUi ( self )
self . RBA . toggled . connect ( self . rba_clicked )
self . RBC . toggled . connect ( self . rbc_clicked )
self . CBP1 . clicked . connect ( self . p1op )
self . CBT1 . clicked . connect ( self . t1op )
self . CBX1 . clicked . connect ( self . x1op )
self . CBP2 . clicked . connect ( self . p2op )
self . CBT2 . clicked . connect ( self . t2op )
self . CBX2 . clicked . connect ( self . x2op )
self . CBV3 . clicked . connect ( self . cbv3_clicked )
self . CB1V3 . clicked . connect ( self . cb1v3_clicked )
self . CBP3 . clicked . connect ( self . p3op )
self . CBT3 . clicked . connect ( self . t3op )
self . CBV4 . clicked . connect ( self . cbv4_clicked )
self . CB1V4 . clicked . connect ( self . cb1v4_clicked )
self . CBP4 . clicked . connect ( self . p4op )
self . CBT4 . clicked . connect ( self . t4op )
self . CBP5 . clicked . connect ( self . p5op )
self . CBT5 . clicked . connect ( self . t5op )

80
Apéndice A. Programación en Python y Qt Designer del simulador

self . CBX5 . clicked . connect ( self . x5op )


self . CBV6 . clicked . connect ( self . cbv6_clicked )
self . CB1V6 . clicked . connect ( self . cb1v6_clicked )
self . CBP6 . clicked . connect ( self . p6op )
self . CBT6 . clicked . connect ( self . t6op )
self . CBV7 . clicked . connect ( self . cbv7_clicked )
self . CB1V7 . clicked . connect ( self . cb1v7_clicked )
self . CBP7 . clicked . connect ( self . p7op )
self . CBT7 . clicked . connect ( self . t7op )
self . CBP8 . clicked . connect ( self . p8op )
self . CBT8 . clicked . connect ( self . t8op )
self . CBX8 . clicked . connect ( self . x8op )
self . CBV9 . clicked . connect ( self . cbv9_clicked )
self . CB1V9 . clicked . connect ( self . cb1v9_clicked )
self . CBP9 . clicked . connect ( self . p9op )
self . CBT9 . clicked . connect ( self . t9op )
self . CBV10 . clicked . connect ( self . cbv10_clicked )
self . CB1V10 . clicked . connect ( self . cb1v10_clicked )
self . CBP10 . clicked . connect ( self . p10op )
self . CBT10 . clicked . connect ( self . t10op )
self . BCalcular . clicked . connect ( self . calculos )

class ventanasecundariaclass ( QtGui . QMainWindow , ventana2 ) :


def __init__ ( self , parent = None ) :
super ( ventanasecundariaclass , self ) . __init__ ( parent )
self . setAttribute ( QtCore . Qt . WA_DeleteOnClose )
self . setupUi ( self )
self . BSII . clicked . connect ( self . bsii_clicked )
self . BSIU . clicked . connect ( self . bsiu_clicked )
def bsii_clicked ( self ) :
ventanater = ultimaventanaclassG ( self )
ventanater . show ()
def bsiu_clicked ( self ) :
ventanater = ultimaventanaclass ( self )
ventanater . show ()
class ventanaprincipalclass ( QtGui . QMainWindow , ventana1 ) :
def __init__ ( self , parent = None ) :
QtGui . QMainWindow . __init__ ( self , parent )
self . setupUi ( self )
self . BI . clicked . connect ( self . bi_clicked )
self . BS . clicked . connect ( self . bs_clicked )
def bi_clicked ( self ) :
ventanasec = ventanasecundariaclass ( self )
ventanasec . show ()
def bs_clicked ( self ) :
self . close ()
app = QtGui . QApplication ( sys . argv )
MyWindow = ventanaprincipalclass ( None )
MyWindow . show ()
app . exec_ ()

81
Función programada para calcular las propiedades ter-
modinámicas de líquido comprimido
import math

def lcom (p , t ) :
# Ts
if p >= 0.002 and p < 0.01672:
a =270.1210
b =0.135019
c = -99.2
if p >= 0.01672 and p < 0.07250:
a =254.6831
b =0.156108
c = -78.2
if p >= 0.07250 and p <= 0.35900:
a =236.2315
b =0.1784767
c = -57.0
if p >0.35900 and p <= 1.67600:
a =207.9248
b =0.2092705
c = -28.0
if p > 1.67600 and p <= 8.511:
a =185.0779
b =0.2323217
c = -5.0
if p > 8.511 and p < 17.69:
a =195.1819
b =0.2241729
c = -16.0
if p >= 17.69 and p <= 21.5:
a =227.2963
b =0.2015810
c = -50.0
ts = a * p ** b + c
if t >= 17.511 and t < 56.275:
a =99.2
b =270.1210
c =7.406365
if t >= 56.275 and t < 90.880:
a =78.2
b =254.6831
c =6.4058216
if t >= 90.880 and t < 139.781:
a =57.0
b =236.2315
c =5.6029720
if t >= 139.781 and t < 203.662:
a =28.0
b =207.9248
c =4.7785040
if t >= 203.662 and t <= 299.407:

82
Apéndice A. Programación en Python y Qt Designer del simulador

a =5.0
b =185.0779
c =4.3043760
if t > 299.407 and t < 355.636:
a =16.0
b =195.1819
c =4.4608430
if t >= 355.636 and t <= 373.000:
a =50.0
b =227.2963
c =4.9607850
ps = (( t + a ) / b ) ** c

# Subcooled enthalpy , sublh


if ps >= 0.002 and ps < 0.0173:
a =1128.777
b =0.135196
c = -413.72
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 0.0173 and ps < 0.1028:


a =1050.7085
b =0.161797
c = -306.5
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 0.1028 and ps < 0.9420:


a =912.1779
b =0.2061637
c = -150
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 0.942 and ps < 4.02:


a =638.0621
b =0.2963192
c =125
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 4.02 and ps < 9.964:


a =373.7665
b =0.4235532
c =415
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 9.964 and ps < 16.673:


a =75.38673
b =0.8282384
c =900
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 16.673 and ps < 20.396:


a =0.1150827
b =2.711412
c =1440

83
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

if ps >= 20.396 and ps <= 21.5:


a =9.1417257 e -14
b =11.47287
c =1752
sublh = (( a *( ps ** b ) ) + c ) +((1.4 -(169/(369 - t ) ) ) *( p - ps ) )

# Subcooled entropy , subls


if ps >= 0.002 and ps < 0.0812:
a =4.5397665
b =0.0
c =0.0829772
d = -2.449
subls = (( a *( ps + b ) ** c ) + d ) +((0.0004 -(0.325/(370 - t ) ) *( p - ps ) ) )

if ps >= 0.0812 and ps < 1.6660:


a =3.340244
b =0.0
c =0.125474
d = -1.2
subls = (( a *( ps + b ) ** c ) + d ) +((0.0004 -(0.325/(370 - t ) ) *( p - ps ) ) )

if ps >= 1.6660 and ps < 8.8250:


a =1.748203
b =0.0
c =0.2275611
d =0.4
subls = (( a *( ps + b ) ** c ) + d ) +((0.0004 -(0.325/(370 - t ) ) *( p - ps ) ) )

if ps >= 8.8250 and ps < 16.660:


a =0.2549238
b =0.0
c =0.6381866
d =2.25
subls = (( a *( ps + b ) ** c ) + d ) +((0.0004 -(0.325/(370 - t ) ) *( p - ps ) ) )

if ps >= 16.660 and ps <= 21.5:


a =4.3632383 e -5
b = -0.04
c =3.153273
d =3.5
subls = (( a *( ps + b ) ** c ) + d ) +((0.0004 -(0.325/(370 - t ) ) *( p - ps ) ) )

return sublh , subls , ts , ps

class Bomsal ( object ) :


h_slc = None
s_slc = None
t_slc = None
p_slc = None

def __init__ ( self , temp , pres ) :

84
Apéndice A. Programación en Python y Qt Designer del simulador

self . temp = temp


self . pres = pres
self . calc_prop ()

def calc_prop ( self ) :


self . h_slc , self . s_slc , self . t_slc , self . p_slc = \
lcom ( self . temp , self . pres )

Ejemplo de acoplamiento de la interfaz gráca con las


funciones para calcular las propiedades termodinámicas
import os
import sys
from PyQt4 import QtCore , QtGui
from VS3SIU import Ui_Widget
import ClaseVapSob
import ClaseVapSatP
import ClaseVapSatT
import ClaseLiqCom
import ClaseLiqSatP
import ClaseLiqSatT
import ClaseLiqComPs
import ClaseLiqComTs

from PyQt4 import QtCore , QtGui


from EPfr import Ui_Dialog
from ETfr import Ui_DialogT
from EVP import Ui_DialogEVP
from ECR import Ui_DialogECVR

EvP = Ui_DialogEVP
EP = Ui_Dialog
ET = Ui_DialogT
EcR = Ui_DialogECVR
vct = Ui_Widget

class ErrorECRclass ( QtGui . QMainWindow , EcR ) :


def __init__ ( self , parent = None ) :
super ( ErrorECRclass , self ) . __init__ ( parent )
self . setAttribute ( QtCore . Qt . WA_DeleteOnClose )
self . setupUi ( self )

class ErrorVPclass ( QtGui . QMainWindow , EvP ) :


def __init__ ( self , parent = None ) :
super ( ErrorVPclass , self ) . __init__ ( parent )
self . setAttribute ( QtCore . Qt . WA_DeleteOnClose )
self . setupUi ( self )

class ErrorPclass ( QtGui . QMainWindow , EP ) :


def __init__ ( self , parent = None ) :

85
super ( ErrorPclass , self ) . __init__ ( parent )
self . setAttribute ( QtCore . Qt . WA_DeleteOnClose )
self . setupUi ( self )

class ErrorTclass ( QtGui . QMainWindow , ET ) :


def __init__ ( self , parent = None ) :
super ( ErrorTclass , self ) . __init__ ( parent )
self . setAttribute ( QtCore . Qt . WA_DeleteOnClose )
self . setupUi ( self )

class Ventanaclase ( QtGui . QWidget , vct ) :


def __init__ ( self , parent = None ) :
QtGui . QWidget . __init__ ( self , parent )
self . setupUi ( self )
def rba_clicked ( self , enabled ) :
if enabled :
self . Fluxmas3 . setEnabled ( True )
self . EfiBom2 . setEnabled ( True )
self . P3 . setEnabled ( True )
self . T3 . setEnabled ( True )
self . GB3 . setEnabled ( True )
self . GB7 . setEnabled ( True )
self . CBP8 . setEnabled ( True )
self . CBT8 . setEnabled ( True )
self . CBX8 . setEnabled ( True )
self . GB9 . setEnabled ( True )

def rbc_clicked ( self , enabled ) :


if enabled :
self . Fluxmas3 . setDisabled ( True )
self . EfiBom2 . setDisabled ( True )
self . P3 . setDisabled ( True )
self . T3 . setDisabled ( True )
self . X3 . setDisabled ( True )
self . P7 . setDisabled ( True )
self . T7 . setDisabled ( True )
self . P8 . setDisabled ( True )
self . T8 . setDisabled ( True )
self . X8 . setDisabled ( True )
self . P9 . setDisabled ( True )
self . T9 . setDisabled ( True )
self . GB3 . setDisabled ( True )
self . GB7 . setDisabled ( True )
self . GB9 . setDisabled ( True )
self . CBP3 . setDisabled ( True )
self . CBT3 . setDisabled ( True )
self . CBP7 . setDisabled ( True )
self . CBT7 . setDisabled ( True )
self . CBP8 . setDisabled ( True )
self . CBT8 . setDisabled ( True )
self . CBX8 . setDisabled ( True )
self . CBP9 . setDisabled ( True )
self . CBT9 . setDisabled ( True )
self . CBP3 . setChecked ( False )

86
Apéndice A. Programación en Python y Qt Designer del simulador

self . CBT3 . setChecked ( False )


self . CBV3 . setChecked ( False )
self . CB1V3 . setChecked ( False )
self . CBP7 . setChecked ( False )
self . CBT7 . setChecked ( False )
self . CBV7 . setChecked ( False )
self . CB1V7 . setChecked ( False )
self . CBP8 . setChecked ( False )
self . CBT8 . setChecked ( False )
self . CBX8 . setChecked ( False )
self . CBP9 . setChecked ( False )
self . CBT9 . setChecked ( False )
self . CBV9 . setChecked ( False )
self . CB1V9 . setChecked ( False )
self . EfiBom2 . clear ()
self . P3 . clear ()
self . T3 . clear ()
self . X3 . clear ()
self . P7 . clear ()
self . T7 . clear ()
self . P8 . clear ()
self . T8 . clear ()
self . P9 . clear ()
self . T9 . clear ()

def p1op ( self , clicked ) :


if clicked :
self . P1 . setEnabled ( True )
self . CBX1 . setDisabled ( True )
else :
self . P1 . setEnabled ( False )
self . CBX1 . setDisabled ( False )
self . P1 . clear ()

def t1op ( self , clicked ) :


if clicked :
self . T1 . setEnabled ( True )
self . CBP1 . setDisabled ( True )
else :
self . T1 . setEnabled ( False )
self . CBP1 . setDisabled ( False )
self . T1 . clear ()

def x1op ( self , clicked ) :


if clicked :
self . CBT1 . setDisabled ( True )
else :
self . CBT1 . setDisabled ( False )

def p2op ( self , clicked ) :


if clicked :
self . P2 . setEnabled ( True )
self . CBX2 . setDisabled ( True )
else :

87
self . P2 . setEnabled ( False )
self . CBX2 . setDisabled ( False )
self . P2 . clear ()

def t2op ( self , clicked ) :


if clicked :
self . T2 . setEnabled ( True )
self . CBP2 . setDisabled ( True )
else :
self . T2 . setEnabled ( False )
self . CBP2 . setDisabled ( False )
self . T2 . clear ()

def x2op ( self , clicked ) :


if clicked :
self . CBT2 . setDisabled ( True )
else :
self . CBT2 . setDisabled ( False )

def cb1v3_clicked ( self , clicked ) :


if clicked :
self . CBP3 . setEnabled ( True )
self . CBT3 . setEnabled ( True )
self . CBV3 . setDisabled ( True )
self . P3 . setDisabled ( True )
self . T3 . setDisabled ( True )
self . P3 . clear ()
self . T3 . clear ()
else :
self . CBP3 . setEnabled ( False )
self . CBT3 . setEnabled ( False )
self . CBV3 . setDisabled ( False )
self . P3 . setDisabled ( False )
self . T3 . setDisabled ( False )
self . CBP3 . setChecked ( False )
self . CBT3 . setChecked ( False )
self . P3 . clear ()
self . T3 . clear ()

def cbv3_clicked ( self , clicked ) :


if clicked :
self . CBP3 . setEnabled ( True )
self . CBT3 . setEnabled ( True )
self . P3 . setDisabled ( True )
self . T3 . setDisabled ( True )
self . X3 . setEnabled ( True )
self . CB1V3 . setDisabled ( True )
self . P3 . clear ()
self . T3 . clear ()
self . X3 . clear ()
else :
self . CBP3 . setEnabled ( False )
self . CBT3 . setEnabled ( False )
self . CB1V3 . setDisabled ( False )

88
Apéndice A. Programación en Python y Qt Designer del simulador

self . CBP3 . setChecked ( False )


self . CBT3 . setChecked ( False )
self . P3 . setDisabled ( False )
self . T3 . setDisabled ( False )
self . X3 . setEnabled ( False )
self . P3 . clear ()
self . T3 . clear ()
self . X3 . clear ()

def p3op ( self , clicked ) :


if clicked :
self . P3 . setEnabled ( True )
self . CBT3 . setDisabled ( True )
else :
self . P3 . setEnabled ( False )
self . CBT3 . setDisabled ( False )
self . P3 . clear ()

def t3op ( self , clicked ) :


if clicked :
self . T3 . setEnabled ( True )
self . CBP3 . setDisabled ( True )
else :
self . T3 . setEnabled ( False )
self . CBP3 . setDisabled ( False )
self . T3 . clear ()

def cb1v4_clicked ( self , clicked ) :


if clicked :
self . CBP4 . setEnabled ( True )
self . CBT4 . setEnabled ( True )
self . CBV4 . setDisabled ( True )
self . P4 . setDisabled ( True )
self . T4 . setDisabled ( True )
self . P4 . clear ()
self . T4 . clear ()
else :
self . CBP4 . setEnabled ( False )
self . CBT4 . setEnabled ( False )
self . CBV4 . setDisabled ( False )
self . P4 . setDisabled ( False )
self . T4 . setDisabled ( False )
self . CBP4 . setChecked ( False )
self . CBT4 . setChecked ( False )
self . P4 . clear ()
self . T4 . clear ()

def cbv4_clicked ( self , clicked ) :


if clicked :
self . CBP4 . setEnabled ( True )
self . CBT4 . setEnabled ( True )
self . P4 . setDisabled ( True )
self . T4 . setDisabled ( True )
self . X4 . setEnabled ( True )

89
self . CB1V4 . setDisabled ( True )
self . P4 . clear ()
self . T4 . clear ()
self . X4 . clear ()
else :
self . CBP4 . setEnabled ( False )
self . CBT4 . setEnabled ( False )
self . CB1V4 . setDisabled ( False )
self . P4 . setDisabled ( False )
self . T4 . setDisabled ( False )
self . X4 . setEnabled ( False )
self . CBP4 . setChecked ( False )
self . CBT4 . setChecked ( False )
self . P4 . clear ()
self . T4 . clear ()
self . X4 . clear ()

def p4op ( self , clicked ) :


if clicked :
self . P4 . setEnabled ( True )
self . CBT4 . setDisabled ( True )
else :
self . P4 . setEnabled ( False )
self . CBT4 . setDisabled ( False )
self . P4 . clear ()

def t4op ( self , clicked ) :


if clicked :
self . T4 . setEnabled ( True )
self . CBP4 . setDisabled ( True )
else :
self . T4 . setEnabled ( False )
self . CBP4 . setDisabled ( False )
self . T4 . clear ()

def p5op ( self , clicked ) :


if clicked :
self . P5 . setEnabled ( True )
self . CBX5 . setDisabled ( True )
else :
self . P5 . setEnabled ( False )
self . CBX5 . setDisabled ( False )
self . P5 . clear ()

def t5op ( self , clicked ) :


if clicked :
self . T5 . setEnabled ( True )
self . CBP5 . setDisabled ( True )
else :
self . T5 . setEnabled ( False )
self . CBP5 . setDisabled ( False )
self . T5 . clear ()

def x5op ( self , clicked ) :

90
Apéndice A. Programación en Python y Qt Designer del simulador

if clicked :
self . CBT5 . setDisabled ( True )
else :
self . CBT5 . setDisabled ( False )

def cb1v6_clicked ( self , clicked ) :


if clicked :
self . CBP6 . setEnabled ( True )
self . CBT6 . setEnabled ( True )
self . CBV6 . setDisabled ( True )
else :
self . CBP6 . setEnabled ( False )
self . CBT6 . setEnabled ( False )
self . CBV6 . setDisabled ( False )
self . CBP6 . setChecked ( False )
self . CBT6 . setChecked ( False )
self . P6 . setEnabled ( False )
self . T6 . setEnabled ( False )
self . P6 . clear ()
self . T6 . clear ()

def cbv6_clicked ( self , clicked ) :


if clicked :
self . CBP6 . setDisabled ( True )
self . CBT6 . setDisabled ( True )
self . P6 . setEnabled ( True )
self . T6 . setEnabled ( True )
self . CB1V6 . setDisabled ( True )
else :
self . CBP6 . setEnabled ( False )
self . CBT6 . setEnabled ( False )
self . CB1V6 . setDisabled ( False )
self . P6 . setEnabled ( False )
self . T6 . setEnabled ( False )
self . P6 . clear ()
self . T6 . clear ()

def p6op ( self , clicked ) :


if clicked :
self . P6 . setEnabled ( True )
self . CBT6 . setDisabled ( True )
else :
self . P6 . setEnabled ( False )
self . CBT6 . setDisabled ( False )
self . P6 . clear ()

def t6op ( self , clicked ) :


if clicked :
self . T6 . setEnabled ( True )
self . CBP6 . setDisabled ( True )
else :
self . T6 . setEnabled ( False )
self . CBP6 . setDisabled ( False )
self . T6 . clear ()

91
def cb1v7_clicked ( self , clicked ) :
if clicked :
self . CBP7 . setEnabled ( True )
self . CBT7 . setEnabled ( True )
self . CBV7 . setDisabled ( True )
else :
self . CBP7 . setEnabled ( False )
self . CBT7 . setEnabled ( False )
self . CBV7 . setDisabled ( False )
self . CBP7 . setChecked ( False )
self . CBT7 . setChecked ( False )
self . P7 . setEnabled ( False )
self . T7 . setEnabled ( False )
self . P7 . clear ()
self . T7 . clear ()

def cbv7_clicked ( self , clicked ) :


if clicked :
self . CBP7 . setDisabled ( True )
self . CBT7 . setDisabled ( True )
self . P7 . setEnabled ( True )
self . T7 . setEnabled ( True )
self . CB1V7 . setDisabled ( True )
else :
self . CBP7 . setEnabled ( False )
self . CBT7 . setEnabled ( False )
self . CB1V7 . setDisabled ( False )
self . P7 . setEnabled ( False )
self . T7 . setEnabled ( False )
self . P7 . clear ()
self . T7 . clear ()

def p7op ( self , clicked ) :


if clicked :
self . P7 . setEnabled ( True )
self . CBT7 . setDisabled ( True )
else :
self . P7 . setEnabled ( False )
self . CBT7 . setDisabled ( False )
self . P7 . clear ()

def t7op ( self , clicked ) :


if clicked :
self . T7 . setEnabled ( True )
self . CBP7 . setDisabled ( True )
else :
self . T7 . setEnabled ( False )
self . CBP7 . setDisabled ( False )
self . T7 . clear ()

def p8op ( self , clicked ) :


if clicked :
self . P8 . setEnabled ( True )

92
Apéndice A. Programación en Python y Qt Designer del simulador

self . CBX8 . setDisabled ( True )


else :
self . P8 . setEnabled ( False )
self . CBX8 . setDisabled ( False )
self . P8 . clear ()

def t8op ( self , clicked ) :


if clicked :
self . T8 . setEnabled ( True )
self . CBP8 . setDisabled ( True )
else :
self . T8 . setEnabled ( False )
self . CBP8 . setDisabled ( False )
self . T8 . clear ()

def x8op ( self , clicked ) :


if clicked :
self . CBT8 . setDisabled ( True )
else :
self . CBT8 . setDisabled ( False )

def cb1v9_clicked ( self , clicked ) :


if clicked :
self . CBP9 . setEnabled ( True )
self . CBT9 . setEnabled ( True )
self . CBV9 . setDisabled ( True )
else :
self . CBP9 . setEnabled ( False )
self . CBT9 . setEnabled ( False )
self . CBV9 . setDisabled ( False )
self . CBP9 . setChecked ( False )
self . CBT9 . setChecked ( False )
self . P9 . setEnabled ( False )
self . T9 . setEnabled ( False )
self . P9 . clear ()
self . T9 . clear ()

def cbv9_clicked ( self , clicked ) :


if clicked :
self . CBP9 . setDisabled ( True )
self . CBT9 . setDisabled ( True )
self . P9 . setEnabled ( True )
self . T9 . setEnabled ( True )
self . CB1V9 . setDisabled ( True )
else :
self . CBP9 . setEnabled ( False )
self . CBT9 . setEnabled ( False )
self . CB1V9 . setDisabled ( False )
self . P9 . setEnabled ( False )
self . T9 . setEnabled ( False )
self . P9 . clear ()
self . T9 . clear ()

def p9op ( self , clicked ) :

93
if clicked :
self . P9 . setEnabled ( True )
self . CBT9 . setDisabled ( True )
else :
self . P9 . setEnabled ( False )
self . CBT9 . setDisabled ( False )
self . P9 . clear ()

def t9op ( self , clicked ) :


if clicked :
self . T9 . setEnabled ( True )
self . CBP9 . setDisabled ( True )
else :
self . T9 . setEnabled ( False )
self . CBP9 . setDisabled ( False )
self . T9 . clear ()

def cb1v10_clicked ( self , clicked ) :


if clicked :
self . CBP10 . setEnabled ( True )
self . CBT10 . setEnabled ( True )
self . CBV10 . setDisabled ( True )
else :
self . CBP10 . setEnabled ( False )
self . CBT10 . setEnabled ( False )
self . CBV10 . setDisabled ( False )
self . CBP10 . setChecked ( False )
self . CBT10 . setChecked ( False )
self . P10 . setEnabled ( False )
self . T10 . setEnabled ( False )
self . P10 . clear ()
self . T10 . clear ()

def cbv10_clicked ( self , clicked ) :


if clicked :
self . CBP10 . setDisabled ( True )
self . CBT10 . setDisabled ( True )
self . P10 . setEnabled ( True )
self . T10 . setEnabled ( True )
self . CB1V10 . setDisabled ( True )
else :
self . CBP10 . setEnabled ( False )
self . CBT10 . setEnabled ( False )
self . CB1V10 . setDisabled ( False )
self . P10 . setEnabled ( False )
self . T10 . setEnabled ( False )
self . P10 . clear ()
self . T10 . clear ()

def p10op ( self , clicked ) :


if clicked :
self . P10 . setEnabled ( True )
self . CBT10 . setDisabled ( True )
else :

94
Apéndice A. Programación en Python y Qt Designer del simulador

self . P10 . setEnabled ( False )


self . CBT10 . setDisabled ( False )
self . P10 . clear ()

def t10op ( self , clicked ) :


if clicked :
self . T10 . setEnabled ( True )
self . CBP10 . setDisabled ( True )
else :
self . T10 . setEnabled ( False )
self . CBP10 . setDisabled ( False )
self . T10 . clear ()

def calculos ( self ) :


if self . P1 . isEnabled () and self . T1 . isEnabled () :
try :
Pr1 = float ( self . P1 . text () )
except ValueError :
self . P1 . clear ()
return
try :
Tp1 = float ( self . T1 . text () )
except ValueError :
self . T1 . clear ()
return

if 0 <= Pr1 < 0.002 or Pr1 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P1 . clear ()
return

if Pr1 < 0.0 or Tp1 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P1 . clear ()
self . T1 . clear ()
return

else :
prop1ts = ClaseVapSob . RxsalTs ( Pr1 , Tp1 )
if Tp1 <= prop1ts . t_s or Tp1 > 1300:
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T1 . clear ()
return
else :
prop1h = ClaseVapSob . Rxsalh ( Pr1 , Tp1 )
prop1s = ClaseVapSob . Rxsals ( Pr1 , Tp1 )
h1 = prop1h . h_s
s1 = prop1s . s_s

if self . P1 . isEnabled () and self . CBX1 . isChecked () :


try :

95
Pr1 = float ( self . P1 . text () )
except ValueError :
self . P1 . clear ()
return
if 0 <= Pr1 < 0.002 or Pr1 > 21.5 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P1 . clear ()
return

if Pr1 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P1 . clear ()
return
else :
prop1P = ClaseVapSatP . RxsalVSP ( Pr1 )
h1 = prop1P . h_sP
s1 = prop1P . s_sP

if self . T1 . isEnabled () and self . CBX1 . isChecked () :


try :
Tp1 = float ( self . T1 . text () )
except ValueError :
self . T1 . clear ()
return
if 0 <= Tp1 < 17.511 or Tp1 > 371.8:
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T1 . clear ()
return

if Tp1 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T1 . clear ()
return
else :
prop1T = ClaseVapSatT . RxsalVST ( Tp1 )
h1 = prop1T . h_sT
s1 = prop1T . s_sT

if self . P2 . isEnabled () and self . T2 . isEnabled () :


try :
Pr2 = float ( self . P2 . text () )
except ValueError :
self . P2 . clear ()
return
try :
Tp2 = float ( self . T2 . text () )
except ValueError :
self . T2 . clear ()
return

96
Apéndice A. Programación en Python y Qt Designer del simulador

if 0 <= Pr2 < 0.002 or Pr2 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P2 . clear ()
return

if Pr2 < 0.0 or Tp2 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P2 . clear ()
self . T2 . clear ()
return

else :
prop2ts = ClaseVapSob . RxsalTs ( Pr2 , Tp2 )
if Tp2 <= prop2ts . t_s or Tp2 > 1300:
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T2 . clear ()
return
else :
prop2h = ClaseVapSob . Rxsalh ( Pr2 , Tp2 )
prop2s = ClaseVapSob . Rxsals ( Pr2 , Tp2 )
h2 = prop2h . h_s
s2 = prop2s . s_s

if self . P2 . isEnabled () and self . CBX2 . isChecked () :


try :
Pr2 = float ( self . P2 . text () )
except ValueError :
self . P2 . clear ()
return
if 0 <= Pr2 < 0.002 or Pr2 > 21.5 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P2 . clear ()
return

if Pr2 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P2 . clear ()
return
else :
prop2P = ClaseVapSatP . RxsalVSP ( Pr2 )
h2 = prop2P . h_sP
s2 = prop2P . s_sP

if self . T2 . isEnabled () and self . CBX2 . isChecked () :


try :
Tp2 = float ( self . T2 . text () )
except ValueError :
self . T2 . clear ()
return

97
if 0 <= Tp2 < 17.511 or Tp2 > 371.8:
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T2 . clear ()
return

if Tp2 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T2 . clear ()
return
else :
prop2T = ClaseVapSatT . RxsalVST ( Tp2 )
h2 = prop2T . h_sT
s2 = prop2T . s_sT

if self . P3 . isEnabled () and self . CB1V3 . isChecked () :


try :
Pr3 = float ( self . P3 . text () )
except ValueError :
self . P3 . clear ()
return
if 0 <= Pr3 < 0.002 or Pr3 > 21.5 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P3 . clear ()
return

if Pr3 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P3 . clear ()
return
else :
prop3gP = ClaseVapSatP . RxsalVSP ( Pr3 )
prop3fP = ClaseLiqSatP . BombsalLSP ( Pr3 )
hg3 = prop3gP . h_sP
sg3 = prop3gP . s_sP
hf3 = prop3fP . h_slP
sf3 = prop3fP . s_slP

if self . T3 . isEnabled () and self . CB1V3 . isChecked () :


try :
Tp3 = float ( self . T3 . text () )
except ValueError :
self . T3 . clear ()
return
if 0 <= Tp3 < 17.511 or Tp3 > 371.8 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . T3 . clear ()
return

if Tp3 < 0.0:

98
Apéndice A. Programación en Python y Qt Designer del simulador

ventanaErrorVPP = ErrorVPclass ( self )


ventanaErrorVPP . show ()
self . T3 . clear ()
return
else :
prop3gT = ClaseVapSatT . RxsalVST ( Tp3 )
prop3fT = ClaseLiqSatT . BombsalLST ( Tp3 )
hg3 = prop3gT . h_sT
sg3 = prop3gT . s_sT
hf3 = prop3fT . h_slT
sf3 = prop3fT . s_slT

if self . P3 . isEnabled () and self . CBV3 . isChecked () :


try :
Pr3 = float ( self . P3 . text () )
except ValueError :
self . P3 . clear ()
return
if 0 <= Pr3 < 0.002 or Pr3 > 21.5:
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P3 . clear ()
return

if Pr3 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P3 . clear ()
return
else :
prop3gP = ClaseVapSatP . RxsalVSP ( Pr3 )
prop3fP = ClaseLiqSatP . BombsalLSP ( Pr3 )
hg3 = prop3gP . h_sP
sg3 = prop3gP . s_sP
hf3 = prop3fP . h_slP
sf3 = prop3fP . s_slP

if self . T3 . isEnabled () and self . CBV3 . isChecked () :


try :
Tp3 = float ( self . T3 . text () )
except ValueError :
self . T3 . clear ()
return
if 0 <= Tp3 < 17.511 or Tp3 > 371.8 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . T3 . clear ()
return

if Tp3 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . T3 . clear ()
return

99
else :
prop3gT = ClaseVapSatT . RxsalVST ( Tp3 )
prop3fT = ClaseLiqSatT . BombsalLST ( Tp3 )
hg3 = prop3gT . h_sT
sg3 = prop3gT . s_sT
hf3 = prop3fT . h_slT
sf3 = prop3fT . s_slT

if self . P4 . isEnabled () and self . CB1V4 . isChecked () :


try :
Pr4 = float ( self . P4 . text () )
except ValueError :
self . P4 . clear ()
return
if 0 <= Pr4 < 0.002 or Pr4 > 21.5 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P4 . clear ()
return

if Pr4 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P4 . clear ()
return
else :
prop4gP = ClaseVapSatP . RxsalVSP ( Pr4 )
prop4fP = ClaseLiqSatP . BombsalLSP ( Pr4 )
hg4 = prop4gP . h_sP
sg4 = prop4gP . s_sP
hf4 = prop4fP . h_slP
sf4 = prop4fP . s_slP

if self . T4 . isEnabled () and self . CB1V4 . isChecked () :


try :
Tp4 = float ( self . T4 . text () )
except ValueError :
self . T4 . clear ()
return
if 0 <= Tp4 < 17.511 or Tp4 > 371.8 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . T4 . clear ()
return

if Tp4 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . T4 . clear ()
return
else :
prop4gT = ClaseVapSatT . RxsalVST ( Tp4 )
prop4fT = ClaseLiqSatT . BombsalLST ( Tp4 )
hg4 = prop4gT . h_sT

100
Apéndice A. Programación en Python y Qt Designer del simulador

sg4 = prop4gT . s_sT


hf4 = prop4fT . h_slT
sf4 = prop4fT . s_slT

if self . P4 . isEnabled () and self . CBV4 . isChecked () :


try :
Pr4 = float ( self . P4 . text () )
except ValueError :
self . P4 . clear ()
return
if 0 <= Pr4 < 0.002 or Pr4 > 21.5:
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P4 . clear ()
return

if Pr4 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P4 . clear ()
return
else :
prop4gP = ClaseVapSatP . RxsalVSP ( Pr4 )
prop4fP = ClaseLiqSatP . BombsalLSP ( Pr4 )
hg4 = prop4gP . h_sP
sg4 = prop4gP . s_sP
hf4 = prop4fP . h_slP
sf4 = prop4fP . s_slP

if self . T4 . isEnabled () and self . CBV4 . isChecked () :


try :
Tp4 = float ( self . T4 . text () )
except ValueError :
self . T4 . clear ()
return
if 0 <= Tp4 < 17.511 or Tp4 > 371.8 :
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . T4 . clear ()
return

if Tp4 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . T4 . clear ()
return
else :
prop4gT = ClaseVapSatT . RxsalVST ( Tp4 )
prop4fT = ClaseLiqSatT . BombsalLST ( Tp4 )
hg4 = prop4gT . h_sT
sg4 = prop4gT . s_sT
hf4 = prop4fT . h_slT
sf4 = prop4fT . s_slT

101
if self . P5 . isEnabled () and self . T5 . isEnabled () :
try :
Pr5 = float ( self . P5 . text () )
except ValueError :
self . P5 . clear ()
return
try :
Tp5 = float ( self . T5 . text () )
except ValueError :
self . T5 . clear ()
return

if Pr5 < 0.0 or Tp5 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P5 . clear ()
self . T5 . clear ()
return

if 0 <= Pr5 < 0.002 or Pr5 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P5 . clear ()
return

if Tp5 <= 17.511 or Tp5 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T5 . clear ()
return
else :
prop5 = ClaseLiqCom . Bomsal ( Pr5 , Tp5 )
if Tp5 >= prop5 . t_slc :
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T5 . clear ()
return
else :
prop5 = ClaseLiqCom . Bomsal ( Pr5 , Tp5 )
h5 = prop5 . h_slc
s5 = prop5 . s_slc
ps5 = prop5 . p_slc

if self . P5 . isEnabled () and self . CBX5 . isChecked () :


try :
Pr5 = float ( self . P5 . text () )
except ValueError :
self . P5 . clear ()
return

if 0 <= Pr5 < 0.002 or Pr5 > 21.5 :


ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P5 . clear ()

102
Apéndice A. Programación en Python y Qt Designer del simulador

return

if Pr5 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P5 . clear ()
return
else :
prop5P = ClaseLiqSatP . BombsalLSP ( Pr5 )
h5 = prop5P . h_slP
s5 = prop5P . s_slP
ps5 = Pr5

if self . T5 . isEnabled () and self . CBX5 . isChecked () :


try :
Tp5 = float ( self . T5 . text () )
except ValueError :
self . T5 . clear ()
return

if 0 <= Tp5 <= 17.511 or Tp5 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T5 . clear ()
return

if Tp5 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T5 . clear ()
return
else :
prop5T = ClaseLiqSatT . BombsalLST ( Tp5 )
h5 = prop5T . h_slT
s5 = prop5T . s_slT
ps5 = prop5T . ps_slT

if self . P6 . isEnabled () and self . T6 . isEnabled () :


try :
Pr6 = float ( self . P6 . text () )
except ValueError :
self . P6 . clear ()
return
try :
Tp6 = float ( self . T6 . text () )
except ValueError :
self . T6 . clear ()
return

if Pr6 < 0.0 or Tp6 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P6 . clear ()
self . T6 . clear ()

103
return

if 0 <= Pr6 < 0.002 or Pr6 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P6 . clear ()
return

if Tp6 <= 17.511 or Tp6 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T6 . clear ()
return
else :
prop6 = ClaseLiqCom . Bomsal ( Pr6 , Tp6 )
if Tp6 >= prop6 . t_slc :
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T6 . clear ()
return
else :
prop6 = ClaseLiqCom . Bomsal ( Pr6 , Tp6 )
h6r = prop6 . h_slc
s6r = prop6 . s_slc

if self . P6 . isEnabled () and self . CB1V6 . isChecked () :


try :
Pr6 = float ( self . P6 . text () )
except ValueError :
self . P6 . clear ()
return

if 0 <= Pr6 < 0.002 or Pr6 > 21.5 :


ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P6 . clear ()
return

if Pr6 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P6 . clear ()
return
else :
prop6P = ClaseLiqComPs . BomsalPs ( Pr6 , ps5 , s5 )
h6 = prop6P . h_slcPs

if self . T6 . isEnabled () and self . CB1V6 . isChecked () :


try :
Tp6 = float ( self . T6 . text () )
except ValueError :
self . T6 . clear ()
return

104
Apéndice A. Programación en Python y Qt Designer del simulador

if 0 <= Tp6 <= 17.511 or Tp6 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T6 . clear ()
return

if Tp6 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T6 . clear ()
return
else :
prop6T = ClaseLiqComTs . BomsalTs ( Tp6 , s5 )
h6 = prop6T . h_slcTs

if self . P7 . isEnabled () and self . T7 . isEnabled () :


try :
Pr7 = float ( self . P7 . text () )
except ValueError :
self . P7 . clear ()
return
try :
Tp7 = float ( self . T7 . text () )
except ValueError :
self . T7 . clear ()
return

if Pr7 < 0.0 or Tp7 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P7 . clear ()
self . T7 . clear ()
return

if 0 <= Pr7 < 0.002 or Pr7 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P7 . clear ()
return

if Tp7 <= 17.511 or Tp7 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T7 . clear ()
return

if self . P7 . isEnabled () and self . CB1V7 . isChecked () :


try :
Pr7 = float ( self . P7 . text () )
except ValueError :
self . P7 . clear ()
return

if 0 <= Pr7 < 0.002 or Pr7 > 21.5 :

105
ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P7 . clear ()
return

if Pr7 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P7 . clear ()
return

if self . T7 . isEnabled () and self . CB1V7 . isChecked () :


try :
Tp7 = float ( self . T7 . text () )
except ValueError :
self . T7 . clear ()
return

if 0 <= Tp7 <= 17.511 or Tp7 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T7 . clear ()
return

if Tp7 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T7 . clear ()
return

if self . P8 . isEnabled () and self . T8 . isEnabled () :


try :
Pr8 = float ( self . P8 . text () )
except ValueError :
self . P8 . clear ()
return
try :
Tp8 = float ( self . T8 . text () )
except ValueError :
self . T8 . clear ()
return

if Pr8 < 0.0 or Tp8 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P8 . clear ()
self . T8 . clear ()
return

if 0 <= Pr8 < 0.002 or Pr8 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P8 . clear ()
return

106
Apéndice A. Programación en Python y Qt Designer del simulador

if Tp8 <= 17.511 or Tp8 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T8 . clear ()
return
else :
prop8 = ClaseLiqCom . Bomsal ( Pr8 , Tp8 )
if Tp8 >= prop8 . t_slc :
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T8 . clear ()
return
else :
prop8 = ClaseLiqCom . Bomsal ( Pr8 , Tp8 )
h8 = prop8 . h_slc
s8 = prop8 . s_slc
ps8 = prop8 . p_slc

if self . P8 . isEnabled () and self . CBX8 . isChecked () :


try :
Pr8 = float ( self . P8 . text () )
except ValueError :
self . P8 . clear ()
return

if 0 <= Pr8 < 0.002 or Pr8 > 21.5 :


ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P8 . clear ()
return

if Pr8 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P8 . clear ()
return
else :
prop8P = ClaseLiqSatP . BombsalLSP ( Pr8 )
h8 = prop8P . h_slP
s8 = prop8P . s_slP
ps8 = Pr8

if self . T8 . isEnabled () and self . CBX8 . isChecked () :


try :
Tp8 = float ( self . T8 . text () )
except ValueError :
self . T8 . clear ()
return

if 0 <= Tp8 <= 17.511 or Tp8 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T8 . clear ()

107
return

if Tp8 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T8 . clear ()
return
else :
prop8T = ClaseLiqSatT . BombsalLST ( Tp8 )
h8 = prop8T . h_slT
s8 = prop8T . s_slT
ps8 = prop8T . ps_slT

if self . P9 . isEnabled () and self . T9 . isEnabled () :


try :
Pr9 = float ( self . P9 . text () )
except ValueError :
self . P9 . clear ()
return
try :
Tp9 = float ( self . T9 . text () )
except ValueError :
self . T9 . clear ()
return

if Pr9 < 0.0 or Tp9 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P9 . clear ()
self . T9 . clear ()
return

if 0 <= Pr9 < 0.002 or Pr9 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P9 . clear ()
return

if Tp9 <= 17.511 or Tp9 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T9 . clear ()
return
else :
prop9 = ClaseLiqCom . Bomsal ( Pr9 , Tp9 )
if Tp9 >= prop9 . t_slc :
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T9 . clear ()
return
else :
prop9 = ClaseLiqCom . Bomsal ( Pr9 , Tp9 )
h9r = prop9 . h_slc
s9r = prop9 . s_slc

108
Apéndice A. Programación en Python y Qt Designer del simulador

if self . P9 . isEnabled () and self . CB1V9 . isChecked () :


try :
Pr9 = float ( self . P9 . text () )
except ValueError :
self . P9 . clear ()
return

if 0 <= Pr9 < 0.002 or Pr9 > 21.5 :


ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P9 . clear ()
return

if Pr9 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P9 . clear ()
return
else :
prop9P = ClaseLiqComPs . BomsalPs ( Pr9 , ps8 , s8 )
h9 = prop9P . h_slcPs

if self . T9 . isEnabled () and self . CB1V9 . isChecked () :


try :
Tp9 = float ( self . T9 . text () )
except ValueError :
self . T9 . clear ()
return

if 0 <= Tp9 <= 17.511 or Tp9 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T9 . clear ()
return

if Tp9 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T9 . clear ()
return
else :
prop9T = ClaseLiqComTs . BomsalTs ( Tp9 , s8 )
h9 = prop9T . h_slcTs

if self . P10 . isEnabled () and self . T10 . isEnabled () :


try :
Pr10 = float ( self . P10 . text () )
except ValueError :
self . P10 . clear ()
return
try :
Tp10 = float ( self . T10 . text () )
except ValueError :

109
self . T10 . clear ()
return

if Pr10 < 0.0 or Tp10 < 0.0:


ventanaErrorVP = ErrorVPclass ( self )
ventanaErrorVP . show ()
self . P10 . clear ()
self . T10 . clear ()
return

if 0 <= Pr10 < 0.002 or Pr10 > 21.5:


ventanaErrorP = ErrorPclass ( self )
ventanaErrorP . show ()
self . P10 . clear ()
return

if Tp10 <= 17.511 or Tp10 > 368.9:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T10 . clear ()
return
else :
prop10 = ClaseLiqCom . Bomsal ( Pr10 , Tp10 )
if Tp10 >= prop10 . t_slc :
ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T10 . clear ()
return
else :
prop10 = ClaseLiqCom . Bomsal ( Pr10 , Tp10 )
h10r = prop10 . h_slc
s10r = prop10 . s_slc

if self . P10 . isEnabled () and self . CB1V10 . isChecked () :


try :
Pr10 = float ( self . P10 . text () )
except ValueError :
self . P10 . clear ()
return

if 0 <= Pr10 < 0.002 or Pr10 > 21.5 :


ventanaErrorPPF = ErrorPclass ( self )
ventanaErrorPPF . show ()
self . P10 . clear ()
return

if Pr10 < 0.0:


ventanaErrorVPP = ErrorVPclass ( self )
ventanaErrorVPP . show ()
self . P10 . clear ()
return

if self . T10 . isEnabled () and self . CB1V10 . isChecked () :


try :

110
Apéndice A. Programación en Python y Qt Designer del simulador

Tp10 = float ( self . T10 . text () )


except ValueError :
self . T10 . clear ()
return

if 0 <= Tp10 <= 17.511 or Tp10 > 371.8:


ventanaErrorTF = ErrorTclass ( self )
ventanaErrorTF . show ()
self . T10 . clear ()
return

if Tp10 < 0.0:


ventanaErrorVPT = ErrorVPclass ( self )
ventanaErrorVPT . show ()
self . T10 . clear ()
return

if self . RBC . isChecked () :


try :
fmt = float ( self . FluxmasT . text () )
except ValueError :
self . FluxmasT . clear ()
return
if 0 > fmt :
self . FluxmasT . clear ()
return
try :
nt = float ( self . EficTurb . text () )
except ValueError :
self . EficTurb . clear ()
return
if 0 > nt or nt > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . EficTurb . clear ()
return
try :
nb = float ( self . EfiBom1 . text () )
except ValueError :
self . EfiBom1 . clear ()
return
if 0 > nb or nb > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . EfiBom1 . clear ()
return
# Para Rx
if self . P10 . isEnabled () and self . CB1V10 . isChecked () :
prop10P = ClaseLiqComPs . BomsalPs ( Pr10 , ps5 , s5 )
h10r = prop10P . h_slcPs
s10r = s5
if self . T10 . isEnabled () and self . CB1V10 . isChecked () :
prop10P = ClaseLiqComTs . BomsalTs ( Tp10 , s5 )
h10r = prop10P . h_slcTs

111
s10r = s5
qRx = h1 - h10r
PRx = ( fmt * qRx ) /1000
# Para Turbina
if self . X4 . isEnabled () :
try :
Cx4 = float ( self . X4 . text () )
except ValueError :
self . X4 . clear ()
return
if 0 > Cx4 or Cx4 > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . X4 . clear ()
return
else :
x4 = Cx4 /100
else :
x4 = ( s2 - sf4 ) /( sg4 - sf4 )
h4i = x4 *( hg4 ) +((1 - x4 ) * hf4 )
wti = h2 - h4i
wtr = ( nt /100) * wti
Pwtr = ( fmt * wtr ) /1000
# Para el condensador
h4r = h2 - ( nt /100) *( wti )
qc = h4r - h5
Pc = ( fmt * qc ) /1000
# Para la bomba
if self . P6 . isEnabled () and self . CB1V6 . isChecked () :
wbi = h6 - h5
wbr = wbi /( nb /100)
h6r = wbr + h5
s6r = s5
if self . T6 . isEnabled () and self . CB1V6 . isChecked () :
wbi = h6 - h5
wbr = wbi /( nb /100)
h6r = wbr + h5
s6r = s5
wbr = h6r - h5
Pb = ( wbr * fmt ) /1000
# Eficiencia Termica del ciclo del ciclo
nterc = (( wtr - wbr ) / qRx ) *100
self . EfiCic . setText ( str ( ' {:10.5 f } '. format ( nterc ) ) )
self . Fluxmas4 . setText ( str ( ' {:10.5 f } '. format ( fmt ) ) )
self . PotCal . setText ( str ( ' {:10.5 f } '. format ( PRx ) ) )
self . PotTurb . setText ( str ( ' {:10.5 f } '. format ( Pwtr ) ) )
if self . P6 . isEnabled () and self . P6 . isEnabled () :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) ,( ' Eficiencia de la bomba en % =
' , nb ) , ( 'h en 1 en kJ / kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) , ( 'h
en 2 en kJ / kg = ' , h2 ) , ( 's en 2 en kJ / kg C = ' , s2 ) , ( 's isentropica
en 4 en kJ / kg C = ' , s2 ) ,( ' sf en 4 en kJ / kg C = ' , sf4 ) , ( ' sg en 4 en
kJ / kg C = ' , sg4 ) , ( ' Calidad en 4 en % = ' , x4 *100) , ( ' hf en 4 en kJ / kg
= ' , hf4 ) , ( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg

112
Apéndice A. Programación en Python y Qt Designer del simulador

= ' , h4i ) , ( 'h real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) ,


( 's en 5 en kJ / kg C = ' , s5 ) , ( 'h real en 6 en kJ / kg = ' , h6r ) , ( 's en
6 en kJ / kg C = ' , s6r ) ,( 'h en 10 en kJ / kg = ' , h10r ) , ( 's en 10 en kJ /
kg C = ' , s10r ) ,( ' Calor suministrado en el Reactor en kJ / kg = ' , qRx ) ,
( ' Potencia Calorifica suministrada en el Reactor en MW = ' , PRx ) , ( '
Trabajo Realizado en la Turbina en kJ / kg = ' , wtr ) , ( ' Potencia
Generada en la Turbina en MW = ' , Pwtr ) ,( ' Calor Rechazado en el
Condensador en kJ / kg = ' , qc ) , ( ' Potencia Colorifica Rechazada en el
Condensador en MW = ' , Pc ) ,( ' Trabajo Requerido en la Bomba en kJ / kg = '
, wbr ) , ( ' Potencia Requerida en la Bomba en MW = ' , Pb ) ,
( ' Eficiciencia Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Simple Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()
else :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) ,( ' Eficiencia de la bomba en % =
' , nb ) , ( 'h en 1 en kJ / kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) , ( 'h
en 2 en kJ / kg = ' , h2 ) , ( 's en 2 en kJ / kg C = ' , s2 ) , ( 's isentropica
en 4 en kJ / kg C = ' , s2 ) ,( ' sf en 4 en kJ / kg C = ' , sf4 ) , ( ' sg en 4 en
kJ / kg C = ' , sg4 ) , ( ' Calidad en 4 en % = ' , x4 *100) , ( ' hf en 4 en kJ / kg
= ' , hf4 ) ,( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg
= ' , h4i ) , ( 'h real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) ,
( 's en 5 en kJ / kg C = ' , s5 ) , ( 's isentropica en 6 en kJ / kg C = ' , s5 )
,( 'h isentropica en 6 en kJ / kg = ' , h6 ) , ( 'h real en 6 en kJ / kg = ' ,
h6r ) , ( 's en 6 en kJ / kg C = ' , s6r ) , ( 'h en 10 en kJ / kg = ' , h10r ) , ( 's
en 10 en kJ / kg C = ' , s10r ) , ( ' Calor suministrado en el Reactor en kJ
/ kg = ' , qRx ) , ( ' Potencia Calorifica suministrada en el Reactor en MW
= ' , PRx ) , ( ' Trabajo Realizado en la Turbina en kJ / kg = ' , wtr ) , ( '
Potencia Generada en la Turbina en MW = ' , Pwtr ) , ( ' Calor Rechazado en
el Condensador en kJ / kg = ' , qc ) , ( ' Potencia Calorifica Rechazada en
el Condensador en MW = ' , Pc ) , ( ' Trabajo Requerido en la Bomba en kJ /
kg = ' , wbr ) , ( ' Potencia Requerida en la Bomba en MW = ' , Pb ) , ( '
Eficiciencia Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Simple Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()

if self . RBA . isChecked () :


try :
fmt = float ( self . FluxmasT . text () )
except ValueError :
self . FluxmasT . clear ()
return
if 0 > fmt :
self . FluxmasT . clear ()
return
try :

113
nt = float ( self . EficTurb . text () )
except ValueError :
self . EficTurb . clear ()
return
if 0 > nt or nt > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . EficTurb . clear ()
return
try :
nb1 = float ( self . EfiBom1 . text () )
except ValueError :
self . EfiBom1 . clear ()
return
if 0 > nb1 or nb1 > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . EfiBom1 . clear ()
return
try :
nb2 = float ( self . EfiBom2 . text () )
except ValueError :
self . EfiBom2 . clear ()
return
if 0 > nb2 or nb2 > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . EfiBom1 . clear ()
return
# Para Rx
if self . P10 . isEnabled () and self . CB1V10 . isChecked () :
prop10P = ClaseLiqComPs . BomsalPs ( Pr10 , ps8 , s8 )
h10r = prop10P . h_slcPs
s10r = s8
if self . T10 . isEnabled () and self . CB1V10 . isChecked () :
prop10P = ClaseLiqComTs . BomsalTs ( Tp10 , s8 )
h10r = prop10P . h_slcTs
s10r = s8
qRx = h1 - h10r
# Para Turbina Seccion de Alta presion ( Propiedades )
if self . X3 . isEnabled () :
try :
Cx3 = float ( self . X3 . text () )
except ValueError :
self . X3 . clear ()
return
if 0 > Cx3 or Cx3 > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . X3 . clear ()
return
else :
x3 = Cx3 /100
else :

114
Apéndice A. Programación en Python y Qt Designer del simulador

x3 = ( s2 - sf3 ) /( sg3 - sf3 )


h3i = x3 * hg3 +((1 - x3 ) * hf3 )
wtapi = h2 - h3i
wtapr = ( nt /100) * wtapi
h3r = h2 - (( nt /100) * wtapi )
x3r = ( h3r - hf3 ) /( hg3 - hf3 )
s3r = ( x3r *( sg3 - sf3 ) ) + sf3
# Para Turbina Seccion de Baja Presion ( Propiedades )
if self . X4 . isEnabled () :
try :
Cx4 = float ( self . X4 . text () )
except ValueError :
self . X4 . clear ()
return
if 0 > Cx4 or Cx4 > 100:
ventanaErrorRE = ErrorECRclass ( self )
ventanaErrorRE . show ()
self . X4 . clear ()
return
else :
x4 = Cx4 /100
else :
x4 = ( s3r - sf4 ) /( sg4 - sf4 )
h4i = x4 * hg4 +((1 - x4 ) * hf4 )
h4r = h3r -(( nt /100) *( h3r - h4i ) )
wtbpr = h3r - h4r
# Para el condensador
qc = h4r - h5
# Para la bomba 1 ( Propiedades )
if self . P6 . isEnabled () and self . CB1V6 . isChecked () :
wbIi = h6 - h5
wbIr = wbIi /( nb1 /100)
h6r = wbIr + h5
s6r = s5
if self . T6 . isEnabled () and self . CB1V6 . isChecked () :
wbi = h6 - h5
wbIr = wbi /( nb1 /100)
h6r = wbIr + h5
s6r = s5
wbIr = h6r - h5
# Para la bomba 2 ( Propiedades )
if self . P9 . isEnabled () and self . CB1V9 . isChecked () :
wbIIi = h9 - h8
wbIIr = wbIIi /( nb2 /100)
h9r = wbIIr + h8
s9r = s8
if self . T9 . isEnabled () and self . CB1V9 . isChecked () :
wbIIi = h9 - h8
wbIIr = wbIIi /( nb2 /100)
h9r = wbIIr + h8
s9r = s8
wbIIr = h9r - h8
# Para el Precalentador de Agua
# fm3 * h3r + fm6 * h6r = fm7 * h7 + fm8 * h8

115
# fm3 = fm8 ; fm6 = fm7 ; h7 = h9r
# fm3 * h3r + fm6 * h6r = fm6 * h7 + fm3 * h8
# fm3 * h3r - fm3 * h8 = fm6 * h7 - fm6 * h6r
fm3ad = (( h9r - h6r ) /( h3r - h8 ) )
fm6 = fmt /(1+ fm3ad )
fm3 = fmt - fm6
# Potencia calorifica del reactor
PRx = ( fmt * qRx ) /1000
# Potencia de la Turbina Seccion de Alta Presion
Ptapr = ( fmt * wtapr ) /1000
# Potencia de la Turbina Seccion de Baja Presion
Ptbpr = ( fm6 * wtbpr ) /1000
# Potencia total de la turbina
Ptt = Ptapr + Ptbpr
# Potencia calorifica rechazada en el condensador
Pc = ( fm6 * qc ) /1000
# Potencia Bomba 1
PwbI = ( fm6 * wbIr ) /1000
# Potencia Bomba 2
PwbII = ( fm3 * wbIIr ) /1000
# Eficiencia Termica del ciclo
nterc = (( Ptapr + Ptbpr - PwbI - PwbII ) / PRx ) *100
self . EfiCic . setText ( str ( ' {:10.5 f } '. format ( nterc ) ) )
self . Fluxmas3 . setText ( str ( ' {:10.5 f } '. format ( fm3 ) ) )
self . Fluxmas4 . setText ( str ( ' {:10.5 f } '. format ( fm6 ) ) )
self . PotCal . setText ( str ( ' {:10.5 f } '. format ( PRx ) ) )
self . PotTurb . setText ( str ( ' {:10.5 f } '. format ( Ptt ) ) )
if self . P6 . isEnabled () and self . T6 . isEnabled () and self . P9 .
isEnabled () and self . T9 . isEnabled () :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) ,( ' Eficiencia de la bomba 1 en %
= ' , nb1 ) , ( ' Eficiencia de la bomba 2 en % = ' , nb2 ) , ( 'h en 1 en kJ /
kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) , ( 'h en 2 en kJ / kg = ' , h2 ) , (
's en 2 en kJ / kg C = ' , s2 ) ,( 's isentropica en 3 en kJ / kg C = ' , s2 ) , (
' sf en 3 en kJ / kg C = ' , sf3 ) , ( ' sg en 3 en kJ / kg C = ' , sg3 ) , ( '
Calidad isentropica en 3 en % = ' , x3 *100) , ( ' hf en 3 en kJ / kg = ' , hf3
) , ( ' hg en 3 en kJ / kg = ' , hg3 ) , ( 'h isentropica en 3 en kJ / kg = ' , h3i
) , ( 'h real en 3 en kJ / kg = ' , h3r ) , ( ' Calidad real en 3 en % = ' , x3r
*100) , ( 's real en 3 en kJ / kg C = ' , s3r ) , ( 's isentropica en 4 en kJ /
kg C = ' , s3r ) , ( ' sf en 4 en kJ / kg C = ' , sf4 ) , (
' sg en 4 en kJ / kg C = ' , sg4 ) , ( ' Calidad en 4 en % = ' , x4 *100) , ( ' hf
en 4 en kJ / kg = ' , hf4 ) ,
( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg = ' , h4i ) , ( 'h
real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) , ( 's en 5 en
kJ / kg C = ' , s5 ) , ( 'h en 6 en kJ / kg = ' , h6r ) , ( 's en 6 en kJ / kg C = ' ,
s6r ) ,( 'h en 7 en kJ / kg = ' , h9r ) , ( 'h en 8 en kJ / kg = ' , h8 ) , ( 's en 8
en kJ / kg C = ' , s8 ) ,( 'h en 9 en kJ / kg = ' , h9r ) , ( 's en 9 en kJ / kg C = '
, s9r ) , ( 'h en 10 en kJ / kg = ' , h10r ) , ( 's en 10 en kJ / kg C = ' , s10r ) ,
( ' Calor Suministrado en el Reactor en kJ / kg = ' , qRx ) , ( ' Potencia
Calorifica Suministrada en el Reactor en MW = ' , PRx ) ,( ' Trabajo
Realizado en la Turbina de Alta Presion en kJ / kg = ' , wtapr ) , ( '
Potencia Realizada en la Turbina de Alta Presion en MW = ' , Ptapr ) ,( '
Trabajo Realizado en la Turbina de Baja Presion en kJ / kg = ' , wtbpr ) ,
( ' Potencia Realizada en la Turbina de Baja Presion en MW = ' , Ptbpr ) ,

116
Apéndice A. Programación en Python y Qt Designer del simulador

( ' Potencia Total Generada en la Turbina en MW = ' ,


Ptt ) , ( ' Calor Rechazado en el Condensador en kJ /
kg = ' , qc ) , ( ' Potencia Colorifica Rechazada en el Condensador en MW =
' , Pc ) , ( ' Trabajo Requerido en la Bomba 1 en kJ / kg = ' , wbIr ) , ( '
Potencia Requerida en la Bomba 1 en MW = ' , PwbI ) ,( ' Trabajo Requerido
en la Bomba 2 en kJ / kg = ' , wbIIr ) , ( ' Potencia Requerida en la Bomba 2
en MW = ' , PwbII ) ,( ' Eficiciencia Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Regenerativo Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()
if self . P6 . isEnabled () and self . T6 . isEnabled () and self . P9 .
isEnabled () or self . T9 . isEnabled () and self . CB1V9 . isChecked () :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) , ( ' Eficiencia de la bomba 1 en
% = ' , nb1 ) , ( ' Eficiencia de la bomba 2 en % = ' , nb2 ) , ( 'h en 1 en kJ /
kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) , ( 'h en 2 en kJ / kg = ' , h2 ) , (
's en 2 en kJ / kg C = ' , s2 ) ,( 's isentropica en 3 en kJ / kg C = ' , s2 ) , (
' sf en 3 en kJ / kg C = ' , sf3 ) , ( ' sg en 3 en kJ / kg C = ' , sg3 ) , ( '
Calidad isentropica en 3 en % = ' , x3 *100) , ( ' hf en 3 en kJ / kg = ' , hf3
) , ( ' hg en 3 en kJ / kg = ' , hg3 ) , ( 'h isentropica en 3 en kJ / kg = ' , h3i
) , ( 'h real en 3 en kJ / kg = ' , h3r ) , ( ' Calidad real en 3 en % = ' , x3r
*100) , ( 's real en 3 en kJ / kg C = ' , s3r ) ,( 's isentropica en 4 en kJ /
kg C = ' , s3r ) ,
( ' sf en 4 en kJ / kg C = ' , sf4 ) , ( ' sg en 4 en kJ / kg C = ' , sg4 ) , ( ' Calidad
en 4 en % = ' , x4 *100) , ( ' hf en 4 en kJ / kg = ' , hf4 ) ,
( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg = ' , h4i ) , ( 'h
real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) , ( 's en 5 en
kJ / kg C = ' , s5 ) , ( 'h en 6 en kJ / kg = ' , h6r ) , ( 's en 6 en kJ / kg C = ' ,
s6r ) , ( 'h en 7 en kJ / kg = ' , h9r ) , ( 'h en 8 en kJ / kg = ' , h8 ) , ( 's en 8
en kJ / kg C = ' , s8 ) , ( 's isentropica en 9 en kJ / kg = ' , s8 ) , ( 'h
isentropica en 9 en kJ / kg = ' , h9 ) ,( 'h en 9 en kJ / kg = ' , h9r ) , ( 's en
9 en kJ / kg C = ' , s9r ) , ( 'h en 10 en kJ / kg = ' , h10r ) , ( 's en 10 en kJ /
kg C = ' , s10r ) , ( ' Calor Suministrado en el Reactor en kJ / kg = ' , qRx ) ,
( ' Potencia Calorifica Suministrada en el Reactor en MW = ' , PRx ) ,( '
Trabajo Realizado en la Turbina de Alta Presion en kJ / kg = ' , wtapr ) ,
( ' Potencia Realizada en la Turbina de Alta Presion en MW = ' , Ptapr ) ,(
' Trabajo Realizado en la Turbina de Baja Presion en kJ / kg = ' , wtbpr ) ,
( ' Potencia Realizada en la Turbina de Baja Presion en MW = ' , Ptbpr ) ,
( ' Potencia Total Generada en la Turbina en MW = ' , Ptt ) , ( ' Calor
Rechazado en el Condensador en kJ / kg = ' , qc ) , ( ' Potencia Calorifica
Rechazada en el Condensador en MW = ' , Pc ) , ( ' Trabajo Requerido en la
Bomba 1 en kJ / kg = ' , wbIr ) , ( ' Potencia Requerida en la Bomba 1 en MW
= ' , PwbI ) , ( ' Trabajo Requerido en la Bomba 2 en kJ / kg = ' , wbIIr ) , ( '
Potencia Requerida en la Bomba 2 en MW = ' , PwbII ) , ( ' Eficiciencia
Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Regenerativo Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()

117
if self . P9 . isEnabled () and self . T9 . isEnabled () and self . P6 .
isEnabled () or self . T6 . isEnabled () and self . CB1V6 . isChecked () :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) , ( ' Eficiencia de la bomba 1 en
% = ' , nb1 ) , ( ' Eficiencia de la bomba 2 en % = ' , nb2 ) , ( 'h en 1 en kJ /
kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) ,( 'h en 2 en kJ / kg = ' , h2 ) , ( '
s en 2 en kJ / kg C = ' , s2 ) , ( 's isentropica en 3 en kJ / kg C = ' , s2 ) , (
' sf en 3 en kJ / kg C = ' , sf3 ) , ( ' sg en 3 en kJ / kg C = ' , sg3 ) , ( '
Calidad isentropica en 3 en % = ' , x3 *100) , ( ' hf en 3 en kJ / kg = ' , hf3
) , ( ' hg en 3 en kJ / kg = ' , hg3 ) , ( 'h isentropica en 3 en kJ / kg = ' , h3i
) , ( 'h real en 3 en kJ / kg = ' , h3r ) , ( ' Calidad real en 3 en % = ' , x3r
*100) , ( 's real en 3 en kJ / kg C = ' , s3r ) , ( 's isentropica en 4 en kJ /
kg C = ' , s3r ) ,
( ' sf en 4 en kJ / kg C = ' , sf4 ) , ( ' sg en 4 en kJ / kg C = ' , sg4 ) , ( ' Calidad
en 4 en % = ' , x4 *100) , ( ' hf en 4 en kJ / kg = ' , hf4 ) ,
( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg = ' , h4i ) , ( 'h
real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) , ( 's en 5 en
kJ / kg C = ' , s5 ) , ( 's isentropica en 6 en kJ / kg = ' , s5 ) ,( 'h
isentropica en 6 en kJ / kg = ' , h6 ) , ( 'h en 6 en kJ / kg = ' , h6r ) , ( 's en
6 en kJ / kg C = ' , s6r ) , ( 'h en 7 en kJ / kg = ' , h9r ) , ( 'h en 8 en kJ / kg
= ' , h8 ) , ( 's en 8 en kJ / kg C = ' , s8 ) , ( 'h en 9 en kJ / kg = ' , h9r ) , ( '
s en 9 en kJ / kg C = ' , s9r ) , ( 'h en 10 en kJ / kg = ' , h10r ) , ( 's en 10
en kJ / kg C = ' , s10r ) , ( ' Calor Suministrado en el Reactor en kJ / kg = ' ,
qRx ) , ( ' Potencia Calorifica Suministrada en el Reactor en MW = ' , PRx
) ,( ' Trabajo Realizado en la Turbina de Alta Presion en kJ / kg = ' ,
wtapr ) , ( ' Potencia Realizada en la Turbina de Alta Presion en MW = ' ,
Ptapr ) ,( ' Trabajo Realizado en la Turbina de Baja Presion en kJ / kg = ' ,
wtbpr ) , ( ' Potencia Realizada en la Turbina de Baja Presion en MW = ' ,
Ptbpr ) ,( ' Potencia Total Generada en la Turbina en MW = ' , Ptt ) ,( '
Calor Rechazado en el Condensador en kJ / kg = ' , qc ) , ( ' Potencia
Calorifica Rechazada en el Condensador en MW = ' , Pc ) ,( ' Trabajo
Requerido en la Bomba 1 en kJ / kg = ' , wbIr ) , ( ' Potencia Requerida en
la Bomba 1 en MW = ' , PwbI ) ,( ' Trabajo Requerido en la Bomba 2 en kJ / kg
= ' , wbIIr ) , ( ' Potencia Requerida en la Bomba 2 en MW = ' , PwbII ) ,( '
Eficiciencia Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Regenerativo Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()
if self . P9 . isEnabled () or self . T9 . isEnabled () and self . CB1V9
. isChecked () and self . P6 . isEnabled () or self . T6 . isEnabled () and self .
CB1V6 . isChecked () :
aList = [( ' Flujo masico total en kg / s = ' , fmt ) , ( '
Eficiencia de la turbina en % = ' , nt ) ,( ' Eficiencia de la bomba 1 en %
= ' , nb1 ) , ( ' Eficiencia de la bomba 2 en % = ' , nb2 ) , ( 'h en 1 en kJ /
kg = ' , h1 ) , ( 's en 1 en kJ / kg C = ' , s1 ) ,( 'h en 2 en kJ / kg = ' , h2 ) , ( '
s en 2 en kJ / kg C = ' , s2 ) ,( 's isentropica en 3 en kJ / kg C = ' , s2 ) ,( '
sf en 3 en kJ / kg C = ' , sf3 ) , ( ' sg en 3 en kJ / kg C = ' , sg3 ) , ( ' Calidad
isentropica en 3 en % = ' , x3 *100) , ( ' hf en 3 en kJ / kg = ' , hf3 ) ,( ' hg
en 3 en kJ / kg = ' , hg3 ) , ( 'h isentropica en 3 en kJ / kg = ' , h3i ) , ( 'h
real en 3 en kJ / kg = ' , h3r ) , ( ' Calidad real en 3 en % = ' , x3r *100) ,( '
s real en 3 en kJ / kg C = ' , s3r ) ,( 's isentropica en 4 en kJ / kg C = ' ,

118
Apéndice A. Programación en Python y Qt Designer del simulador

s3r ) ,( ' sf en 4 en kJ / kg C = ' , sf4 ) , ( ' sg en 4 en kJ / kg C = ' , sg4 ) , ( '


Calidad en 4 en % = ' , x4 *100) , ( ' hf en 4 en kJ / kg = ' , hf4 ) ,
( ' hg en 4 en kJ / kg = ' , hg4 ) , ( 'h isentropica en 4 en kJ / kg = ' , h4i ) , ( 'h
real en 4 en kJ / kg = ' , h4r ) ,( 'h en 5 en kJ / kg = ' , h5 ) , ( 's en 5 en
kJ / kg C = ' , s5 ) , ( 's isentropica en 6 en kJ / kg = ' , s5 ) ,( 'h
isentropica en 6 en kJ / kg = ' , h6 ) , ( 'h en 6 en kJ / kg = ' , h6r ) , ( 's en
6 en kJ / kg C = ' , s6r ) , ( 'h en 7 en kJ / kg = ' , h9r ) , ( 'h en 8 en kJ / kg
= ' , h8 ) , ( 's en 8 en kJ / kg C = ' , s8 ) , ( 's isentropica en 9 en kJ / kg
= ' , s8 ) , ( 'h isentropica en 9 en kJ / kg = ' , h9 ) ,( 'h en 9 en kJ / kg = ' ,
h9r ) , ( 's en 9 en kJ / kg C = ' , s9r ) , ( 'h en 10 en kJ / kg = ' , h10r ) , ( 's
en 10 en kJ / kg C = ' , s10r ) , ( ' Calor Suministrado en el Reactor en kJ
/ kg = ' , qRx ) , ( ' Potencia Calorifica Suministrada en el Reactor en MW
= ' , PRx ) ,
( ' Trabajo Realizado en la Turbina de Alta Presion en kJ / kg = ' , wtapr ) , (
' Potencia Realizada en la Turbina de Alta Presion en MW = ' , Ptapr ) , (
' Trabajo Realizado en la Turbina de Baja Presion en kJ / kg = ' , wtbpr ) ,
( ' Potencia Realizada en la Turbina de Baja Presion en MW = ' , Ptbpr ) ,
( ' Potencia Total Generada en la Turbina en MW = ' , Ptt ) ,( ' Calor
Rechazado en el Condensador en kJ / kg = ' , qc ) , ( ' Potencia Colorifica
Rechazada en el Condensador en MW = ' , Pc ) , ( ' Trabajo Requerido en la
Bomba 1 en kJ / kg = ' , wbIr ) , ( ' Potencia Requerida en la Bomba 1 en MW
= ' , PwbI ) , ( ' Trabajo Requerido en la Bomba 2 en kJ / kg = ' , wbIIr ) ,( '
Potencia Requerida en la Bomba 2 en MW = ' , PwbII ) ,( ' Eficiciencia
Termica del Ciclo en % = ' , nterc ) ]
dataFile = open ( ' Ciclo Rankine Regenerativo Sistema
Internacional de Unidades . txt ' , 'w ')
for t in aList :
line = ' '. join ( str ( x ) for x in t )
dataFile . write ( line + '\ n ')
dataFile . close ()

119
Apéndice B
Solución completa de los problemas de
referencia

En este apéndice se abordará a detalle el ciclo termodinámico de una central nuclear con

un reactor tipo BWR (Boiling Water Reactor), el cual se asume es un proceso de ujo y

estado estable, por lo que se aplicará la ecuación 1.23, pero en forma especíca.

Las propiedades termodinámicas empleadas en la solución de los ciclos termodinámicos

se toman del libro de Termodinámica de Yunus A. Çengel y Michael A. Boles séptima

edición.

Análisis del ciclo Rankine simple

En la gura B1 se muestra el ciclo termodinámico Rankine simple de una central nuclear

y en la gura B2 se muestra el diagrama T-s, en el cual la presión a la salida del reactor

es de 7 MPa, como vapor saturado. La presión a la salida de la turbina, que tiene una

eciencia isentrópica de 85 %, es de 6.5 kPa. El uido de trabajo sale del condensador

como líquido saturado a una presión de 6.5 kPa. Finalmente, el uido de trabajo sale de

la bomba, la cual tiene una eciencia isentrópica de 80 %, como líquido comprimido a una

presión de 7 MPa y a una temperatura de 38


 C. El ujo másico del ciclo es de 253 kg/s.

120
Apéndice B. Solución completa de los problemas de referencia

Figura B1: Ciclo Rankine simple.(Cortesía curso nuclear básico)

Figura B2: Diagrama T-s del ciclo Rankine simple.

El calor por unidad de masa para el reactor se calcula mediante la ecuación 3.1:

qRx = h2 h1 (B.1)

donde:

h2 = g(7 MPa)
h

h2 = 2772:6 kJ/kg

Debido a que en la tabla A-7 de agua líquida comprimida no se encuentra una presión de

121
7 MPa, interpolamos entre las presiones 5 y 10 MPa y entre las temperaturas de 20
C y

40
 C para conocer el valor h1 utilizando la siguiente fórmula:

A1 A A2
.
.
B1 C11 . C21
B 

B2 C12 C22


=( ) 11((
C B2 B)+ C12 B( B1 ) +( ) 21((
C B2 )+
B (
C22 B B1 )
1 )( ) 1 )( )
A2 A A A1
A2 A B2 B1 A2 A B2 B1

Sustituyendo los valores de la tabla A-7 en la ecuación anterior, se tiene:

h1 = f (7 MPa, 38 C)
h 

h1 = (10 7) 88:61(40(10 38)5)(40


+ 171:95(38 20)
20)
+ (7 5) 93:28(40(10 38)5)(40
+ 176:37(38 20)
20)
h1 = 165:394 kJ/kg

Sustituyendo h2 y h1 en la ecuación B.1, se tiene:

qRx = (2772:6 165:394) kJ/kg

qRx = 2607:206 kJ/kg

Utilizando la ecuación 3.2, tenemos:

QRx_ = _ m qRx

_ = 253 (2607:206
QRx kg/s kJ/kg )
Q_ Rx = 659623:118 kW

Q_ Rx = 660 MW

Para calcular el trabajo especíco ideal de la turbina se utiliza la ecuación la ecuación 3.3:

wT ur;I = h2 h3 (B.2)

122
Apéndice B. Solución completa de los problemas de referencia

donde:

s3 = 2 s

s2 = g(7 MPa)
s

s2 = 5:8148 kJ/kg K 9
= 6:5 >
=
= h3i
P3 kPa

s3 = 5:8148 K>
;
kJ/kg

h3i = x3hg(6.5 kPa) + (1 x3)hf (6.5 kPa)


x3 = s s3 sf (6.5s kPa)
g(6.5 kPa) f (6.5 kPa)
Para encontrar los valores de hg (6.5 kPa) , hf (6.5 kPa) , sg (6.5 kPa) y sf (6.5 kPa) , se interpola entre

las presiones 5 y 7.5 kPa de la tabla A-5:



= (6:5 5) 8:2501 8:3938 + 8:3938 K
sg (6.5 kPa)
7:5 5 kJ/kg

sg(6.5 kPa) = 8:30758 


kJ/kg K

= (6:5 5) 0:5763 0:4762 + 0:4762 K
sf (6.5 kPa)
7:5 5 kJ/kg

sf (6.5 kPa) = 0:53626 K


kJ/kg

 
hg (6.5 kPa) =
2574 :0 2560:7
(6:5 5) 7:5 5 + 2560:7 kJ/kg
hg(6.5 kPa) = 2568:68 kJ/kg
 
hf (6.5 kPa) =
168 :75 137:75
(6:5 5) 7:5 5 + 137:75 kJ/kg
hf (6.5 kPa) = 156:35 kJ/kg
 
x3 =
5 :8148 0:53626 kJ/kg  K

8:30758 0:53626 kJ/kg  K


x3 = 0:679233386
h3i = [(0:679233386)(2568:68) + (1 0:679233386)(156:35)] kJ/kg

h3i = 1794:885074 kJ/kg

123
wT ur;I = (2772:6 1794:885074) kJ/kg

wT ur;I = 977:714926 kJ/kg

Para calcular el trabajo especíco real de la turbina, se multiplica el trabajo especíco

ideal por la eciencia isentrópica de la misma, entre otras palabras despejando la ecuación

3.10:

wT ur;R = T ur (
wBom;I )
wT ur;R = 0:85(977:714926) kJ/kg

wT ur;R = 831:0576871 kJ/kg

Se obtiene la potencia de la turbina, usando la ecuación 3.4

_
WT ur = _ m wT ur;R

_ = 253 (831:0576871
WT ur kg/s kJ/kg )
_ T ur = 210257:5948
W kW

_ T ur = 210
W MW

De la fórmula de eciencia de la turbina, ecuación 3.10, se despeja la entalpía real (h3r )

para utilizarla posteriormente en el cálculo del calor por unidad de masa rechazado en el

condensador:

T ur = wT ur;R

wT ur;I

T ur = h2

h2
h3r

h3i

T ur = 27722772 :6 3r
h

:6 1794:885074

h3r = 2772:6 0:85(2772:6 1794:885074) kJ/kg

h3r = 1941:542313 kJ/kg

Para calcular el calor por unidad de masa rechazado en el condensador se utiliza la ecuación

124
Apéndice B. Solución completa de los problemas de referencia

3.5:

qCon = h3r h4

qCon = h3r hf (6.5 kPa)

qCon = (1941:542313 156:35) kJ/kg

qCon = 1785:192313 kJ/kg

El ujo de calor rechazo por el condensador, se calcula mediante la ecuación 3.6:

_
QCon = _m qcon

_ = 253 (1785:192313
QCon kg/s kJ/kg )
Q_ Con = 451653:6552 kW

Q_ Con = 451:653 MW

El trabajo especíco ideal para la bomba se calcula mediante la ecuación 3.7:

wBom;I = h1i h4 (B.3)

donde:

s1 = 4 s

s4 = f (6.5 kPa)
s

s4 = 0:53626 kJ/kg K
9
=7 >
=
=
P1 MPa
h1i
s1 = 0:53626 kJ/kg K>
;
Para encontrar el valor de h1i , se interpola entre las presiones 5 y 10 MPa y entre el rango

de entropía correspondiente de la tabla A-7:

Agua líquida comprimida a 5 MPa y s = 0.53626 kJ/kg


 
 K:
hs = (0:53626 0:2954) 0171 :95 88:61
:5705 0:2954
+ 88:61 kJ/kg

hs = 161:5771843 kJ/kg

125
Agua líquida comprimida a 10 MPa y s = 0.53626 kJ/kg
 
 K:
hs = (0:53626 0:2943) 0176 :37 93:28
:5685 0:2943
+ 93:28 kJ/kg

hs = 166:6004099 kJ/kg

Agua líquida comprimida a 7 MPa y s = 0.53626 kJ/kg



 K:

h1i = (7 5) 166 :6004099 161:5771843
+ 161:5771843 kJ/kg
10 5
h1i = 163:5864745 kJ/kg
wBom;I = (163:5864745 156:35) kJ/kg
wBom;I = 7:2364745 kJ/kg
El trabajo real de la bomba, se obtiene mediante la ecuación 3.9:

wBom;R = wBom;I

Bom
wBom;R = 7:2364745
0:8 kJ/kg

wBom;R = 9:045593125 kJ/kg

La potencia utilizada por la bomba, se calcula con la ecuación 3.8

_
WBom = _ m wBom;R

_
WBom = 253 (9:045593125
kg/s kJ/kg )
_ Bom = 2288:535061
W kW

_ Bom = 2:288
W MW

Mediante la fórmula de eciencia isentrópica, ecuación 3.9 para la bomba, se despeja la

h1r :

Bom = h4

h4
h1i

h1r

=
h1r h4
h4r

Bom
h1i

 
= 156:35 156 :35 163:5864745
h1r
0:8 kJ/kg

h1r = 165:3955931 kJ/kg

Con lo anterior se demuestra que la entalpía utilizada en el cálculo de calor por unidad de

126
Apéndice B. Solución completa de los problemas de referencia

masa generado en el Reactor, es adecuada, ya que la diferencia entre la h1 y la h1r es de

0.0015931 kJ/kg. La eciencia térmica del ciclo se calcula mediante la ecuación 3.11:

T =1 qsal

qent

T =1 h3r

h2
h4

h1

T = 1 1941 :542313 156:35


2772:6 165:394
kJ/kg

kJ/kg

T = 0:315285285
T = 31:5285285 %

Análisis del ciclo Rankine regenerativo con calentador de


agua de alimentación cerrado

En la gura B3 se muestra el ciclo termodinámico Rankine regenerativo de una central

nuclear y en la gura B4 se muestra el diagrama T-s, en el cual la presión a la salida del

reactor es de 7 MPa, como vapor saturado. La presión a la salida de la turbina de alta

presión, que tiene una eciencia isentrópica de 85 %, es de 480 kPa. Parte del uido de

trabajo continua su recorrido hasta el calentador de agua de alimentación cerrado, en el

cual cede energía a presión constante de 480 kPa, posteriormente se dirige a la segunda

bomba, que tiene una eciencia iséntropica de 80 %, la cual eleva su presión hasta 7 MPa.

La parte complementaria del uido de trabajo sale de la turbina de baja presión a una

presión de 6.5 kPa. Posteriormente el uido de trabajo sale del condensador como líquido

saturado a una presión de 6.5 kPa, para después dirigirse a la primera bomba, que tiene

una eciencia isentrópica de 80 %, una vez culminado este proceso el uido de trabajo se

dirige al calentador de agua de alimentación, donde recibe energía. El ujo másico total

del ciclo es de 253 kg/s.

Con el n de simplicar los cálculos, se realizan las siguientes suposiciones:

127
 Cada bomba succiona líquido saturado.

 En el punto U de la gura B3 se tienen las mismas propiedades termodinámicas en

todas las corrientes, sólo los ujos másicos son diferentes.

 El calentador de agua de alimentación cerrado está diseñado para condensar el vapor

de extracción.

Figura B3: Ciclo Rankine regenerativo.(Cortesía curso nuclear básico)

128
Apéndice B. Solución completa de los problemas de referencia

Figura B4: Diagrama T-s del ciclo Rankine regenerativo.

Datos:

P2 = 7 MPa

P3 = 480 kPa

P4 = 6.5 kPa

T ur = 85 %

Bom;1 = 80 %

Bom;2 = 80 %

Para resolver este ciclo termodinámico, primero se calculan las propiedades termodinámi-

cas correspondientes y después se sustituyen en los balances de energía correspondientes.

P1 = P2 = P6 = P9 = P8 =7 MPa

P3 = P7 = 480 kPa

P4 = P5 = 6:5 kPa

Del reactor sale vapor saturado a una presión de 7 MPa, con estos datos se buscan los

129
valores de entalpía y entropía en la tabla A-5, que son los siguientes:

h2 = g(7 MPa)
h

h2 = 2772:6 kJ/kg

s2 = g(7 MPa)
s

s2 = 5:8148 kJ/kg K
Para la turbina de alta presión se tiene: 9
= 480 >
=
= 3i
P3 kPa
h
s2 = 3i = 5:8148
s  >
;
kJ/kg K

h3i = 3i g(480 kPa) + (1 3i) f (480 kPa)


x h x h

x3i = 3i s

sg (480
f (480 kPa)
s

sf (480
kPa) kPa)
Para encontrar los valores de hg (480 kPa) , hf (480 kPa) , sg (480 kPa) y sf (480 kPa) , se interpola entre

las presiones 450 y 500 kPa de la tabla A-5:



= (480 450) 6:8207 6:8561 + 6:8561 K
sg (480 kPa)
500 450 kJ/kg

sg(480 kPa) = 6:83486 


kJ/kg K

= (480 450) 1:8604 1:8205 + 1:8205 K
sf (480 kPa)
500 450 kJ/kg

sf (480 kPa) = 1:84444  kJ/kg K

2748:1 2743:4 + 2743:4


g(480 kPa) = (480 450)
h
500 450 kJ/kg

hg(480 kPa) = 2746:22 kJ/kg



640:09 623:14 + 623:14
f (480 kPa) = (480 450)
h
500 450 kJ/kg

hf (480 kPa) = 633:31 kJ/kg

130
Apéndice B. Solución completa de los problemas de referencia


= 5:8148 1:84444   kJ/kg K
x3i
6:83486 1:84444  kJ/kg K

x3i = 0:795596362
h3i = (0:795596362)(2746:22) + (1 0:795596362)(633:31) kJ/kg

h3i = 2314:333511 kJ/kg

De la fórmula de eciencia de la turbina, ecuación 3.10, se despeja la entalpía real (h3r ).

T ur = wT ur;R

wT ur;I

T ur = h2

h2
h3r

h3i

= 2 T ur ( h3r h h2 h3i )
h3r = [2772:6 0:85(2772:6 2314:333511)] kJ/kg

h3r = 2383:073484 kJ/kg

Para la turbina de baja presión se tiene:

x3r = hg (480
h3r hf (480 kPa)
hf (480
  kPa) kPa)
2383 :073484 633:31
= 2746:22 633:31 kJ/kg K
kJ/kg  K
x3r

x3r = 0:82812968
3r =
3r s sf (480 kPa)
x
sg (480 kPa) sf (480 kPa)

= 3r ( g(480 kPa) f (480 kPa)) + f (480 kPa)


s3r x s s s

s3r = [0:82812968(6:83486 1:84444) + 1:84444]  kJ/kg K

s3r = 5:977154922 
kJ/kg K
9
4 = 6:5
>
=
= 4i
P kPa
h
4i s= 3r = 5:s977154922  >
; kJ/kg K

4i = h 4i g (6.5 kPa) + (1
x h 4i ) f (6.5 kPa) x h

4i =
4i f (6.5 kPa)
s s
x
sg (6.5 kPa) sf (6.5 kPa)
Para encontrar los valores de hg (6.5 kPa) , hf (6.5 kPa) , sg (6.5 kPa) y sf (6.5 kPa) , se interpola entre

131
las presiones 5 y 7.5 kPa de la tabla A-5:

= (6:5 5) 8:2501 8:3938 + 8:3938 K
sg (6.5 kPa)
7:5 5 kJ/kg

sg(6.5 kPa) = 8:30758kJ/kg  K



= (6:5 5) 0:5763 0:4762 + 0:4762 K
sf (6.5 kPa)
7:5 5 kJ/kg

sf (6.5 kPa) = 0:53626 


kJ/kg K

2574 :0 2560:7
g(6.5 kPa) = (6:5 5)
h
7:5 5 + 2560:7 kJ/kg

hg(6.5 kPa) = 2568:68 kJ/kg


 
168 :75 137:75
f (6.5 kPa) = (6:5 5)
h
7:5 5 + 137:75 kJ/kg

hf (6.5 kPa)

= 156:35 kJ/kg

= 5:977154922 0:53626  
kJ/kg K
x4i
8:30758 0:53626 
kJ/kg K

x4i = 0:700124936
h4i = [0:700124936(2568:68) + (1 0:700124936)(156:35)] kJ/kg

h4i = 1845:282388 kJ/kg

De la fórmula de eciencia de la turbina, ecuación 3.10, se despeja la entalpía real (h4r ).

T ur = h3r

h3r
h4r

h4i

= 3r T ur ( 3r 4i)
h4r h h h

h4r = [2383:073484 0:85(2383:073484 1845:282388)] kJ/kg

h4r = 1925:951052 kJ/kg

Para la entrada de la bomba 1 se interpola entre las presiones de 5 y 7.5 kPa de la tabla A-5,

132
Apéndice B. Solución completa de los problemas de referencia

para conocer los valores de entalpía y entropía, los cuales ya se han calculado previamente:

h5 = f (6.5 kPa)
h

h5 = 156:35 kJ/kg

s5 = f (6.5 kPa)
s

s5 = 0:53626 kJ/kg K
Para la salida de la bomba 1 se tiene: 9
=7 >
=
=
P6 MPa
h6i
s6i = 5 = 0:53626
s kJ/kg K >
;
Para encontrar el valor de h6i , se interpola entre las presiones 5 y 10 MPa y entre el rango

de entropía correspondiente de la tabla A-7:

Agua líquida comprimida a 5 MPa y s = 0.53626 kJ/kg


 
 K:
hs = (0:53626 0:2954) 0171 :95 88:61
:5705 0:2954
+ 88:61 kJ/kg

hs = 161:5771843 kJ/kg

Agua líquida comprimida a 10 MPa y s = 0.53626 kJ/kg


 
 K:
hs = (0:53626 0:2943) 0176 :37 93:28
:5685 0:2943
+ 93:28 kJ/kg

hs = 166:6004099 kJ/kg

Agua líquida comprimida a 7 MPa y s = 0.53626 kJ/kg



 K:

= (7 5) 166 :6004099 161:5771843
+ 161:5771843 kJ/kg
h6i
10 5
h6i = 163:5864745 kJ/kg
h6r = h5
h5 h6i

  Bom;1

= 156:35 156 :35 163:5864745


h6r
0:80 kJ/kg

h6r = 165:3955931 kJ/kg


Para la entrada de la bomba 2 se interpola entre las presiones de 450 y 500 kPa de la

tabla A-5, para conocer los valores de entalpía y entropía, los cuales ya se han calculado

133
previamente:

h7 = f (480 kPa)
h

h7 = 633:31 kJ/kg

s7 = f (480 kPa)
s

s7 = 1:84444 kJ/kg K
Para la salida de la bomba 2 se tiene: 9
=7 >
=
=
P8 MPa
h8i
s8i = s7 = = 1:84444 kJ/kg K >
;
Para encontrar el valor de h8i , se interpola entre las presiones 5 y 10 MPa y entre el rango

de entropía correspondiente de la tabla A-7:

Agua líquida comprimida a 5 MPa y s = 1.84444 kJ/kg


 
 K:
hs = (1:84444 1:7344) 1678 :04 592:18
:9374 1:7344
+ 592:18 kJ/kg

hs = 638:7220414 kJ/kg

Agua líquida comprimida a 10 MPa y s = 1.84444 kJ/kg


 
 K:
hs = (1:84444 1:7293) 1681 :01 595:45
:9316 1:7293
+ 595:45 kJ/kg

hs = 644:1468779 kJ/kg

Agua líquida comprimida a 7 MPa y s = 1.84444 kJ/kg



 K:

= (7 5) 644 :1468779 638:7220414
+ 638:7220414 kJ/kg
h8i
10 5
h8i = 640:891976 kJ/kg
h8r = h7
h7 h8i

  Bom;2

= 633:31 633 :31 640:891976


h8r
0:80 kJ/kg

h8r = 642:78747 kJ/kg


h8r = h9 = h1

Para calcular los ujos másicos, se realiza el siguiente balance de energía en el calentador de

134
Apéndice B. Solución completa de los problemas de referencia

agua de alimentación cerrado, se desprecian los cambios en la energía cinética y potencial,

no hay trabajo ni transferencia de calor:


X X
( _ )ent = ( _ )sal
mh mh

_ 3 3r + _ 6 6r = _ 7 7 + _ 9
m h m h m h m h9

_ = _7
m3 m y m6_ = _9 m

_
m3 h3r + _ 6 6r = _ 3 7 + _ 6 9
m h m h m h

m h _ 3 3r _ 3 7 = _ 6 9 _ 6 6r
m h m h m h
 
_3 = _6
m
9
m
6r h

h3r
h

h7

Sustituyendo los valores numéricos, se tiene:


 
m m
642 :78747 165:3955931
_ 3 = _ 6 2383:073484 633:31 kJ/kg

kJ/kg

m_ 3 = 0:272832232 _ 6 m

m_ 3 + _ 6 = 253
m kg/s

0:272832232 _ 6 + _ 6 = 253
m m kg/s

m_ 6 = 1:253 kg/s

272832232
m_ 6 = 198:7693222 kg/s

m_ 6 = 54:23067783 kg/s

_ = _7 = _8
m3 m m y m6 _ = _4 = _5 = _9
m m m

Para el reactor, se utiliza la ecuación 3.2:

_ = _ 1(
QRx m h2 h1 )
_ = 253 (2772:6
QRx kg/s kJ/kg 642:78747 kJ/kg )
Q_ Rx = 538842:5701 kW

Q_ Rx = 538:84 MW

Para la turbina de alta presión, se aplica la ecuación 3.4:

_
WT ur;AP = _ 2(
m h2 h3r )

135
_
WT ur;AP = 253 (2772:6
kg/s kJ/kg 2383:073484 kJ/kg )
_ T ur;AP = 98550:20855
W kW

_ T ur;AP = 98:55
W MW

Para la turbina de baja presión, se sustituye la ecuación 3.4:

_
WT ur;BP = _ 4(
m h3r )h4r

_
WT ur;BP = 198:7693222 kg/s (2383:073484 kJ/kg 1925:951052 kJ/kg )
_ T ur;BP = 90861:91597
W kW

_ T ur;BP = 90:862
W MW

Para el condensador, se utiliza la ecuación 3.6:

_ = _ 4( 4r 5)
QCon m h h

_ = 198:7693222
QCon kg/s (1925:951052 156:35
kJ/kg kJ/kg )
Q_ Con = 351742:4017 kW

Q_ Con = 351:74 MW

Para la bomba 1, se sustituye la ecuación 3.8:

_
WBom;1 = _ 5(
m h6r h5)
_
WBom;1 = 198:7693222 kg/s (165:3955931 kJ/kg 156:35 kJ/kg )
_ Bom;1 = 1797:986409
W kW

_ Bom;1 = 1:79
W MW

Para la bomba 2, se emplea la ecuación 3.8:

_
WBom;2 = _ 7( 8r 7)
m h h

_
WBom;2 = 54:23067783 kg/s (642:78747 kJ/kg 633:31 kJ/kg )
_ Bom;2 = 513:9696222
W kW

_ Bom;2 = 0:514
W MW

La eciencia térmica del ciclo se calcula mediante la ecuación 3.11:


_ + _ T ur;BP _ Bom;1 _ Bom;2
T = WT ur;AP W
_ Rx
Q
W W

136
Apéndice B. Solución completa de los problemas de referencia

 
= 98 :55 + 90:862 1:79 0:514 MW
T
538:84 MW

T = 0:347242224
T = 34:7242224 %

Se demuestra que existe un incremento del 3.195693904 % en comparación con el ciclo

Rankine simple.

T = 34:7242224 % 31:5285285 %
T = 3:195693904 %

137

También podría gustarte