source: trunk/eml/water_steam/power_plant.mso @ 945

Last change on this file since 945 was 945, checked in by Argimiro Resende Secchi, 9 years ago

Adding Block-Oriented library by Jonathan Ospino Pinedo

File size: 11.0 KB
Line 
1#*-------------------------------------------------------------------
2* EMSO Model Library (EML) Copyright (C) 2004 - 2007 ALSOC.
3*
4* This LIBRARY is free software; you can distribute it and/or modify
5* it under the therms of the ALSOC FREE LICENSE as available at
6* http://www.enq.ufrgs.br/alsoc.
7*
8* EMSO Copyright (C) 2004 - 2007 ALSOC, original code
9* from http://www.rps.eng.br Copyright (C) 2002-2004.
10* All rights reserved.
11*
12* EMSO is distributed under the therms of the ALSOC LICENSE as
13* available at http://www.enq.ufrgs.br/alsoc.
14*
15*--------------------------------------------------------------------
16* Models to simulate a power plant.
17*--------------------------------------------------------------------
18* Author: Argimiro R. Secchi
19* $Id: power_plant.mso 195 2007-03-07 20:30:12Z arge $
20*-------------------------------------------------------------------*#
21
22# Declaracao de tipos
23        CalorEspecifico         as Real(Default=1e-3,Lower=0,Upper=1,Unit='MJ/kg/K');
24        CoefGlobal_area         as Real(Default=10,Lower=0,Upper=1e3,Unit='1000*kW/K');
25        Dif_Pres                        as Real(Default=0,Lower=-50,Upper=50,Unit='MPa');
26        Dif_Temp                        as Real(Default=0,Lower=-300,Upper=300,Unit='K');
27        Eficiencia                      as Real(Default=0.75,Lower=0,Upper=1);
28        EnergiaInterna          as Real(Default=2,Lower=0,Upper=10,Unit='MJ/kg');
29        Entalpia                        as Real(Default=3,Lower=1e-3,Upper=7,Unit='MJ/kg');
30        Entropia                        as Real(Default=5,Lower=1e-3,Upper=8,Unit='kJ/kg/K');
31        Fracao                          as Real(Default=0.5,Lower=0,Upper=1);
32        Potencia                        as Real(Default=10,Lower=0,Upper=500,Unit='1000*kW');
33        Pressao                         as Real(Default=1,Lower=5e-4,Upper=20,Unit='MPa');
34        MassaEspecifica         as Real(Default=1e3,Lower=1e-3,Upper=1e6,Unit='kg/m^3');
35    NoType                              as Real(Default=1,Lower=-2,Upper=2);
36        Temperatura                     as Real(Default=600,Lower=273.16,Upper=900,Unit='K');
37        VazaoMassica            as Real(Default=50,Lower=0,Upper=1e4,Unit='kg/s');
38        VolumeEspecifico        as Real(Default=1e-3,Lower=1e-6,Upper=500,Unit='m^3/kg');
39
40Model Corrente
41        #Brief="Corrente para conexão entre os equipamentos"
42        VARIABLES
43        F as VazaoMassica;
44        P as Pressao;
45        T as Temperatura;
46        S as Entropia;
47        H as Entalpia;
48end
49
50Model Fonte
51        ATTRIBUTES
52        Pallete = true;
53        Icon = "icon/fonte2";
54        Brief="Corrente de saída";
55        Info = " ";
56
57        PARAMETERS
58outer PP as Plugin(Brief="Steam tables");
59
60        VARIABLES
61out Fout        as      Corrente(Symbol="_{out}", PosX = 1, PosY = 0.5);
62
63        EQUATIONS
64        [Fout.S,Fout.H] = PP.propPTl(Fout.P,Fout.T);
65end
66
67Model Sumidouro
68        ATTRIBUTES
69        Pallete = true;
70        Icon = "icon/sumidouro";
71        Brief="Sumidouro de corrente de processo";
72        Info = " ";
73       
74        VARIABLES
75in Fin  as      Corrente(Symbol="_{in}", PosX = 0, PosY = 0.5 );
76end
77
78
79Model SumidouroQ
80        ATTRIBUTES
81        Pallete = true;
82        Icon = "icon/sumidouroQ";
83        Brief="Sumidouro de calor";
84       
85                VARIABLES
86in Qin  as      Potencia(Symbol="_{in}", PosX = 0, PosY = 0.5);
87end
88
89# Modelo de turbina sem sangria
90Model Turbina
91        ATTRIBUTES
92        Pallete = true;
93        Icon = "icon/turbina";
94
95        PARAMETERS
96outer propterm as Plugin(Brief="Steam tables", Type="water");
97       
98        VARIABLES
99        H_IS            as Entalpia;
100        EF_T            as Eficiencia (Brief="Eficiencia da turbina");
101        POT_TURB        as Potencia (Brief="Potencia da turbina");
102in      Fin             as Corrente (Symbol="_{in}");
103out     Fout    as Corrente (Symbol="_{out}");
104
105        EQUATIONS
106
107        H_IS = propterm.propPS(Fout.P,Fin.S);
108
109        Fout.H = (H_IS - Fin.H) * EF_T + Fin.H;
110       
111        [Fout.S,Fout.T] = propterm.propPH(Fout.P,Fout.H);
112                       
113        Fin.F * (Fin.H - Fout.H) = POT_TURB;
114
115        Fout.F = Fin.F;
116end
117
118# Modelo de turbina com sangria
119Model Turbina_sangra
120ATTRIBUTES
121        Pallete = true;
122        Icon = "icon/turbina_sa";
123
124        PARAMETERS
125outer propterm as Plugin(Brief="Steam tables", Type="water");
126
127        VARIABLES
128        H_IS            as Entalpia;
129        EF_T            as Eficiencia(Brief="Eficiencia da turbina");
130        POT_TURB        as Potencia(Brief="Potencia da turbina");
131        y                       as Fracao(Brief="Fracao massica da sangria");
132in      Fin                     as Corrente (Symbol="_{in}");
133out Fout                as Corrente (Symbol="_{out}");
134out Fouts               as Corrente (Symbol="_{outx}");#(Brief="Sangria da Turbina")
135
136        EQUATIONS
137
138        H_IS = propterm.propPS(Fout.P,Fin.S);
139
140        Fout.H = (H_IS - Fin.H) * EF_T + Fin.H;
141       
142        [Fout.S,Fout.T] = propterm.propPH(Fout.P,Fout.H);
143                       
144        Fin.F * (Fin.H - Fout.H) = POT_TURB;
145
146        Fouts.F = Fin.F * y;
147        Fout.F = Fin.F - Fouts.F;
148        Fouts.P = Fout.P;
149        Fouts.T = Fout.T;
150        Fouts.S = Fout.S;
151        Fouts.H = Fout.H;
152end
153
154# Modelo de condensador com uma alimentacao
155Model Condensador
156        ATTRIBUTES
157        Pallete = true;
158        Icon = "icon/condensador";
159
160        PARAMETERS
161outer propterm as Plugin(Brief="Steam tables", Type="water");
162       
163        VARIABLES
164        Q_COND  as Potencia (Brief="Taxa de calor removido");
165        G_S             as Dif_Temp (Brief="Grau de sub-resfriamento");
166in      Fin             as Corrente (Symbol="_{in}");
167out     Fout    as Corrente (Symbol="_{out}");
168
169        EQUATIONS
170
171        Fout.P = Fin.P;
172        Fout.T = propterm.Tsat(Fout.P) - G_S;
173       
174        [Fout.S,Fout.H] = propterm.propPTl(Fout.P,Fout.T);
175         
176        Q_COND = Fin.F * (Fin.H - Fout.H);
177        Fout.F = Fin.F;
178end
179
180# Modelo de condensador com duas alimentacoes
181Model Condensador_2alim
182        ATTRIBUTES
183        Pallete = true;
184        Icon = "icon/condensador";
185
186        PARAMETERS
187outer propterm as Plugin(Brief="Steam tables", Type="water");
188   
189        VARIABLES
190        Q_COND  as Potencia (Brief="Taxa de calor removido");
191        G_S             as Dif_Temp (Brief="Grau de sub-resfriamento");
192in      Fin1    as Corrente (Brief="Corrente com pressao igual a saida", Symbol="_{in1}");
193in      Fin2    as Corrente (Symbol="_{in2}");
194out     Fout    as Corrente (Symbol="_{out}");
195
196        EQUATIONS
197
198        Fout.P = Fin1.P;
199        Fout.T = propterm.Tsat(Fout.P) - G_S;
200       
201        [Fout.S,Fout.H] = propterm.propPTl(Fout.P,Fout.T);
202
203        Fout.F = Fin1.F + Fin2.F;
204        Q_COND = Fin1.F * Fin1.H + Fin2.F * Fin2.H - Fout.F * Fout.H;
205end
206
207# Modelo de tanque de armazenamento com tres alimentacoes
208Model Tanque
209        ATTRIBUTES
210        Pallete = true;
211        Icon = "icon/tanque2";
212
213        PARAMETERS
214outer propterm as Plugin(Brief="Steam tables", Type="water");
215       
216    VARIABLES
217in      Fin1    as Corrente (Symbol="_{in1}");
218in      Fin2    as Corrente (Symbol="_{in2}");
219in      Fin3    as Corrente (Symbol="_{in3}");
220out     Fout    as Corrente (Symbol="_{out}");
221
222        EQUATIONS
223
224        Fout.F = Fin1.F + Fin2.F + Fin3.F;
225        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H;
226
227        [Fout.S,Fout.T] = propterm.propPH(Fout.P,Fout.H);
228end
229
230# Modelo de trocador de calor, dada a carga termica
231Model Trocador
232        PARAMETERS
233outer propterm as Plugin(Brief="Steam tables", Type="water");
234       
235    VARIABLES
236        Q               as Potencia;
237        DP              as Dif_Pres;
238in      Fin             as Corrente (Symbol="_{in}");
239out     Fout    as Corrente (Symbol="_{out}");
240
241        EQUATIONS
242
243        Fout.F = Fin.F;
244        Fout.P = Fin.P - DP;
245        Fout.F * (Fout.H - Fin.H) = Q;
246        [Fout.S,Fout.T] = propterm.propPH(Fout.P,Fout.H);
247end
248
249# Modelo de torre de refrigeracao
250Model Torre
251        ATTRIBUTES
252        Pallete = true;
253        Icon = "icon/torreresf";
254
255        PARAMETERS
256        cpa             as CalorEspecifico;
257
258        VARIABLES
259        F               as VazaoMassica;
260        Q               as Potencia;
261        DTh             as Dif_Temp;
262        DTc             as Dif_Temp;
263        DTar    as Dif_Temp; # grau de aquecimento do ar
264        Th              as Temperatura;
265        Tc              as Temperatura;
266        Tar_c   as Temperatura;
267        Tar_h   as Temperatura;
268        Uat             as CoefGlobal_area;
269
270        EQUATIONS
271
272        DTar = Tar_h - Tar_c;
273        DTh = Th - Tar_h;
274        DTc = Tc  - Tar_c;
275        F * cpa * (Th - Tc) = Q;
276        Uat * (DTh - DTc) = Q * ln(abs(DTh/DTc));
277#       Uat * 0.5 * (DTh + DTc) = Q;
278end
279
280# Modelo de bomba
281Model Bomba
282        ATTRIBUTES
283        Pallete = true;
284        Icon = "icon/bomba1";
285
286        PARAMETERS
287outer propterm as Plugin(Brief="Steam tables", Type="water");
288        v_esp     as VolumeEspecifico;
289       
290        VARIABLES
291        H_IS    as Entalpia;
292        POT_BMB as Potencia(Brief="Potencia do motor da bomba");
293        POT_EF  as Potencia(Brief="Potencia injetada pela bomba");
294        EF_B    as Eficiencia(Brief="Eficiencia da bomba");
295in      Fin             as Corrente (Symbol="_{in}");
296out     Fout    as Corrente (Symbol="_{out}");
297       
298        EQUATIONS
299
300        H_IS = propterm.propPS(Fout.P,Fin.S);
301
302        (Fout.H - Fin.H) * EF_B = H_IS - Fin.H;
303#       (Fout.H - Fin.H) * Fin.F = POT_EF; # Forma alternativa
304       
305        [Fout.S,Fout.T] = propterm.propPH(Fout.P,Fout.H);
306
307        POT_EF = POT_BMB * EF_B;
308        POT_EF = Fin.F * v_esp * (Fout.P - Fin.P);
309        Fout.F = Fin.F;
310end
311
312# Modelo de gerador de vapor
313Model Gerador_Vapor
314        ATTRIBUTES
315    Pallete = true;
316        Icon = "icon/caldeira";
317
318        PARAMETERS
319outer propterm as Plugin(Brief="Steam tables", Type="water");
320
321    VARIABLES
322        Q_GV            as Potencia (Brief="Taxa de calor gerado na caldeira");
323        EF_GV           as Eficiencia (Brief="Eficiencia do gerador de vapor");
324        Qra                     as Potencia (Brief="Taxa de calor nos reaquecedores");
325        Qsa                     as Potencia (Brief="Taxa de calor nos superaquecedores");
326        Qca                     as Potencia (Brief="Taxa de calor no evaporador");
327        Qec                     as Potencia (Brief="Taxa de calor nos economizadores");
328in      Fin_a           as Corrente (Brief="Agua de alimentacao", Symbol="_{in_a}");
329in      Fin_ra          as Corrente (Brief="Vapor a ser Reaquecido", Symbol="_{in_ra}");
330out     Fout_sa     as Corrente (Brief="Vapor Superaquecido", Symbol="_{out_sa}");
331out     Fout_ra     as Corrente (Brief="Vapor Reaquecido", Symbol="_{out_ra}");
332        Fvap            as Corrente (Brief="Evaporador");
333        Feco            as Corrente (Brief="Economizadores");
334
335        EQUATIONS
336
337#       [Fin_a.S,Fin_a.H] = propterm.propPTl(Fin_a.P,Fin_a.T); # Reduntante no ciclo fechado
338
339        "Economizadores ECO1 + ECO1"
340#       Feco.F = Fin_a.F; # Reduntante no ciclo fechado
341        [Feco.S,Feco.H] = propterm.propPTv(Feco.P,Feco.T);     
342        Qec = Feco.F * (Feco.H - Fin_a.H);
343
344        "Evaporador - Camisa dagua"
345        Fvap.F = Feco.F;
346        [Fvap.S,Fvap.H] = propterm.propPTv(Fvap.P,Fvap.T);     
347        Qca = Fvap.F * (Fvap.H - Feco.H);
348
349        "Superaquecedores BT + AT"
350        Fout_sa.F = Fvap.F;
351        [Fout_sa.S,Fout_sa.H] = propterm.propPTv(Fout_sa.P,Fout_sa.T);
352        Qsa = Fout_sa.F * (Fout_sa.H - Fvap.H);
353
354        "Reaquecedores BT + AT"
355        Fout_ra.F = Fin_ra.F;
356        [Fout_ra.S,Fout_ra.H] = propterm.propPTv(Fout_ra.P,Fout_ra.T);
357        Qra = Fout_ra.F * (Fout_ra.H - Fin_ra.H);
358
359        "Caldeira"
360        Q_GV * EF_GV = Qec + Qca + Qsa + Qra;
361end
362
363# Modelo simplificado gerador de vapor
364Model Gerador_Vapor_Simples
365        ATTRIBUTES
366    Pallete = true;
367        Icon = "icon/caldeira";
368
369        PARAMETERS
370outer propterm as Plugin(Brief="Steam tables", Type="water");
371       
372        VARIABLES
373        Q_GV            as Potencia;
374        EF_GV           as Eficiencia;
375in      Fin                     as Corrente (Symbol="_{in}");
376out     Fout            as Corrente (Symbol="_{out}");
377
378        EQUATIONS
379
380        Fout.P = Fin.P;
381       
382        [Fout.S,Fout.H] = propterm.propPTv(Fout.P,Fout.T);
383
384        Q_GV * EF_GV = Fin.F * (Fout.H - Fin.H);
385#       Fout.F = Fin.F;
386end
387
388# Modelo de gerador eletrico
389Model Gerador_Eletrico
390    ATTRIBUTES
391        Pallete = true;
392        Icon = "icon/gerador"; 
393
394        PARAMETERS
395        EF_GE as Eficiencia(Brief="Eficiencia do gerador eletrico");
396
397        VARIABLES
398        POT_GE as Potencia(Brief="Potencia do gerador eletrico");
399end
400
401# Modelo de separador de corrente
402Model Splitter
403        ATTRIBUTES
404        Pallete = true;
405        Icon = "icon/splitter";
406
407        VARIABLES
408        y                       as Fracao(Brief="Fracao de massa para a segunda corrente");
409in      Fin                     as Corrente (Symbol="_{in}");
410out     Fout            as Corrente (Symbol="_{out}");
411out     Fouts           as Corrente(Brief="Segunda corrente", Symbol="_{outx}");
412
413        EQUATIONS
414
415        Fout.P = Fin.P;
416        Fout.T = Fin.T;
417        Fout.S = Fin.S;
418        Fout.H = Fin.H;
419
420        Fouts.P = Fin.P;
421        Fouts.T = Fin.T;
422        Fouts.S = Fin.S;
423        Fouts.H = Fin.H;
424
425        Fouts.F = Fin.F * y;
426        Fout.F = Fin.F - Fouts.F;
427end
Note: See TracBrowser for help on using the repository browser.