source: branches/gui/eml/water_steam/power_plant.mso @ 991

Last change on this file since 991 was 967, checked in by Argimiro Resende Secchi, 7 years ago
File size: 24.2 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        EntalpiaMol                     as Real(Default=3,Lower=1e-3,Upper=7,Unit='kJ/kmol');
31        Entropia                        as Real(Default=5,Lower=1e-3,Upper=10,Unit='kJ/kg/K');
32        Fracao                          as Real(Default=0.5,Lower=0,Upper=1);
33        Potencia                        as Real(Default=10,Lower=0,Upper=500,Unit='1000*kW', Color="Red");
34        Pressao                         as Real(Default=1,Lower=5e-4,Upper=20,Unit='MPa');
35        MassaEspecifica         as Real(Default=1e3,Lower=1e-3,Upper=1e6,Unit='kg/m^3');
36    NoType                              as Real(Default=1,Lower=-2,Upper=2);
37        Temperatura                     as Real(Default=600,Lower=273.16,Upper=900,Unit='K');
38        VazaoMassica            as Real(Default=50,Lower=0,Upper=1e4,Unit='kg/s');
39        VolumeEspecifico        as Real(Default=1e-3,Lower=1e-6,Upper=500,Unit='m^3/kg');
40        Pot_sinal                       as Potencia(Color="Red", LineDashed=true);
41        positive                        as Real (Brief = "Positive General Constant", Default=1.0, Lower=-1e-6);
42        mol                             as positive (Brief = "Moles", Default=2500, Upper=1e9, final Unit = 'kmol');
43        fraction                        as Real (Brief = "Fraction" , Default=0.5, Lower=-1e-6, Upper=1.00001);
44        molweight                       as Real (Brief = "Molar Weight", Default=75, Lower=1, Upper=1e8, final Unit = 'kg/kmol');
45        Volume                          as Real (Default=1e-3,Lower=1e-6,Upper=500,Unit='m^3');
46        Reacao_mol                      as Real (Brief = "Molar Reaction Rate", Default=0, Lower=-1e6, Upper=1e6, final Unit = 'kmol/h/m^3');
47        VazaoMolar                      as Real(Default=50,Lower=0,Upper=1e4,Unit='kmol/s');
48
49Model Corrente
50        #Brief="Corrente para conexão entre os equipamentos"
51        VARIABLES
52        F as VazaoMassica;
53        P as Pressao;
54        T as Temperatura;
55        S as Entropia; # (Lower=-2);
56        H as Entalpia; # (Lower=-100);
57end
58
59Model CorrenteZ as Corrente
60        PARAMETERS
61outer Ncomp as Integer;
62
63        VARIABLES
64        z(NComp) as fraction;
65end
66
67Model CorrenteVap as CorrenteZ
68        ATTRIBUTES
69        Pallete = false;
70        Brief = "Vapour Material Stream";
71        Info =
72        "Model for vapour material streams.
73        This model should be used only when the phase of the stream
74        is known ''a priori''.";
75
76        PARAMETERS
77outer PP as Plugin(Brief = "External Physical Properties");
78       
79        EQUATIONS
80        "Vapour Enthalpy"
81        H = PP.VapourEnthalpy(T, P, z);
82        "Vapour Entropy"
83        S = PP.VapourEntropy(T, P, z);
84end
85
86Model Fonte2
87        ATTRIBUTES
88        Pallete = true;
89        Icon = "icon/fonte2";
90        Brief="Corrente de saída";
91        Info = " ";
92
93        PARAMETERS
94outer PP2 as Plugin(Brief="Steam tables");
95
96        VARIABLES
97out Fout        as      Corrente(Symbol="_{out}", PosX = 1, PosY = 0.5);
98
99        EQUATIONS
100        [Fout.S,Fout.H] = PP2.propPTl(Fout.P,Fout.T);
101end
102
103
104Model Sumidouro
105        ATTRIBUTES
106        Pallete = true;
107        Icon = "icon/sumidouro";
108        Brief="Sumidouro de corrente de processo";
109        Info = " ";
110       
111        VARIABLES
112in Fin  as      Corrente(Symbol="_{in}", PosX = 0, PosY = 0.5 );
113end
114
115
116Model SumidouroQ
117        ATTRIBUTES
118        Pallete = true;
119        Icon = "icon/sumidouroQ";
120        Brief="Sumidouro de calor";
121       
122                VARIABLES
123in Qin  as      Potencia(Symbol="_{in}", PosX = 0, PosY = 0.5);
124end
125
126
127# Modelo de turbina sem sangria
128Model Turbina
129        ATTRIBUTES
130        Pallete = true;
131        Icon = "icon/turbina";
132       
133       
134        PARAMETERS
135outer PP2 as Plugin(Brief="Steam tables");
136       
137        VARIABLES
138        H_IS            as Entalpia;
139        EF_T            as Eficiencia (Brief="Eficiencia da turbina");
140in      Fin                     as Corrente (Symbol="_{in}", PosX = 0, PosY = 0.25);
141out     POT_TURB        as Potencia (Brief="Potencia da turbina",PosX = 1, PosY = 0.5);
142out     Fout            as Corrente (Symbol="_{out}", PosX = 1, PosY = 1);
143
144        EQUATIONS
145
146        H_IS = PP2.propPS(Fout.P,Fin.S);
147
148        Fout.H = (H_IS - Fin.H) * EF_T + Fin.H;
149       
150        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
151                       
152        Fin.F * (Fin.H - Fout.H) = POT_TURB;
153
154        Fout.F = Fin.F;
155end
156
157# Modelo de turbina com sangria
158Model Turbina_sangra
159ATTRIBUTES
160        Pallete = true;
161        Icon = "icon/turbina_sa";
162       
163       
164        PARAMETERS
165outer PP2 as Plugin(Brief="Steam tables");
166
167        VARIABLES
168        H_IS            as Entalpia;
169        EF_T            as Eficiencia(Brief="Eficiencia da turbina");
170out POT_TURB    as Potencia(Brief="Potencia da turbina", PosX = 0.9, PosY = 0.45);
171        y                       as Fracao(Brief="Fracao massica da sangria");
172in      Fin                     as Corrente (Symbol="_{in}", PosX = 0, PosY = 0.25);
173out Fout                as Corrente (Symbol="_{out}", PosX = 1, PosY = 0.85);
174out Fouts               as Corrente (Symbol="_{outx}", PosX = 0.85, PosY = 1); #(Brief="Sangria da Turbina");
175
176        EQUATIONS
177
178        H_IS = PP2.propPS(Fout.P,Fin.S);
179
180        Fout.H = (H_IS - Fin.H) * EF_T + Fin.H;
181       
182        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
183                       
184        Fin.F * (Fin.H - Fout.H) = POT_TURB;
185
186        Fouts.F = Fin.F * y;
187        Fout.F = Fin.F - Fouts.F;
188        Fouts.P = Fout.P;
189        Fouts.T = Fout.T;
190        Fouts.S = Fout.S;
191        Fouts.H = Fout.H;
192end
193
194# Modelo de condensador com uma alimentacao
195Model Condensador
196        ATTRIBUTES
197        Pallete = true;
198        Icon = "icon/condensador";
199
200        PARAMETERS
201outer PP2 as Plugin(Brief="Steam tables");
202       
203        VARIABLES
204out     Q_COND  as Potencia (Brief="Taxa de calor removido",PosX = 1, PosY = 0.5);
205        G_S             as Dif_Temp (Brief="Grau de sub-resfriamento");
206in      Fin             as Corrente (Symbol="_{in}", PosX = 0.5, PosY = 0);
207out     Fout    as Corrente (Symbol="_{out}", PosX = 0.5, PosY = 1);
208
209        EQUATIONS
210
211        Fout.P = Fin.P;
212        Fout.T = PP2.Tsat(Fout.P) - G_S;
213       
214        [Fout.S,Fout.H] = PP2.propPTl(Fout.P,Fout.T);
215         
216        Q_COND = Fin.F * (Fin.H - Fout.H);
217        Fout.F = Fin.F;
218end
219
220# Modelo de condensador com duas alimentacoes
221Model Condensador_2alim
222        PARAMETERS
223outer PP2 as Plugin(Brief="Steam tables");
224   
225        VARIABLES
226        Q_COND  as Potencia (Brief="Taxa de calor removido");
227        G_S             as Dif_Temp (Brief="Grau de sub-resfriamento");
228in      Fin1    as Corrente (Brief="Corrente com pressao igual a saida", Symbol="_{in1}");
229in      Fin2    as Corrente (Symbol="_{in2}");
230out     Fout    as Corrente (Symbol="_{out}");
231
232        EQUATIONS
233
234        Fout.P = Fin1.P;
235        Fout.T = PP2.Tsat(Fout.P) - G_S;
236       
237        [Fout.S,Fout.H] = PP2.propPTl(Fout.P,Fout.T);
238
239        Fout.F = Fin1.F + Fin2.F;
240        Q_COND = Fin1.F * Fin1.H + Fin2.F * Fin2.H - Fout.F * Fout.H;
241end
242
243# Modelo de tanque de armazenamento com dois alimentacoes
244Model Tanque2
245        ATTRIBUTES
246        Pallete = true;
247        Icon = "icon/tanque2";
248        PARAMETERS
249outer PP2 as Plugin(Brief="Steam tables");
250       
251    VARIABLES
252in      Fin1    as Corrente (Symbol="_{in1}",PosX = 0.1, PosY = 0.20);
253in      Fin2    as Corrente (Symbol="_{in2}",PosX = 0.1, PosY = 0.79);
254out     Fout    as Corrente (Symbol="_{out}",PosX = 0.9, PosY = 0.5);
255
256        EQUATIONS
257
258        Fout.F = Fin1.F + Fin2.F;
259        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H;
260
261        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
262end
263
264# Modelo de tanque de armazenamento com tres alimentacoes sem perdas
265Model Tanque
266        PARAMETERS
267outer PP2 as Plugin(Brief="Steam tables");
268
269    VARIABLES
270in      Fin1    as Corrente (Symbol="_{in1}");
271in      Fin2    as Corrente (Symbol="_{in2}");
272in      Fin3    as Corrente (Symbol="_{in3}");
273out     Fout    as Corrente (Symbol="_{out}");
274
275        EQUATIONS
276
277        Fout.F = Fin1.F + Fin2.F + Fin3.F;
278        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H;
279
280        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
281end
282
283# Modelo de tanque de armazenamento com tres alimentacoes e perdas
284Model Tanque3
285        PARAMETERS
286outer PP2 as Plugin(Brief="Steam tables");
287       
288    VARIABLES
289in      Fin1    as Corrente (Symbol="_{in1}");
290in      Fin2    as Corrente (Symbol="_{in2}");
291in      Fin3    as Corrente (Symbol="_{in3}");
292out     Fout    as Corrente (Symbol="_{out}");
293out Fperda      as Corrente (Symbol="_{perda}");
294
295        EQUATIONS
296
297        Fout.F = Fin1.F + Fin2.F + Fin3.F - Fperda.F;
298        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H - Fperda.F*Fperda.H;
299
300        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
301        Fperda.S = Fout.S;
302        Fperda.T = Fout.T;
303        Fperda.P = Fout.P;
304        Fperda.H = Fout.H;
305       
306end
307
308
309# Modelo de tanque de armazenamento com quatro alimentacoes
310Model Tanque4
311        PARAMETERS
312outer PP2 as Plugin(Brief="Steam tables");
313       
314    VARIABLES
315in      Fin1    as Corrente (Symbol="_{in1}");
316in      Fin2    as Corrente (Symbol="_{in2}");
317in      Fin3    as Corrente (Symbol="_{in3}");
318in      Fin4    as Corrente (Symbol="_{in4}");
319out     Fout    as Corrente (Symbol="_{out}");
320
321        EQUATIONS
322
323        Fout.F = Fin1.F + Fin2.F + Fin3.F + Fin4.F;
324        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H + Fin4.F * Fin4.H;
325
326        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
327end
328
329
330# Modelo de tanque de armazenamento com quatro alimentacoes e perdas
331
332
333
334Model Tanque4perdas
335        ATTRIBUTES
336        Pallete = true;
337        Icon = "icon/tanque4perdas";
338       
339        PARAMETERS
340outer PP2 as Plugin(Brief="Steam tables");
341       
342    VARIABLES
343        y       as Fracao(Brief="Fracao massica de perdas");
344        Fsalida as VazaoMassica;
345in      Fin1    as Corrente (Symbol="_{in1}", PosX = 0.1, PosY = 0.16);
346in      Fin2    as Corrente (Symbol="_{in2}", PosX = 0.1, PosY = 0.35);
347in      Fin3    as Corrente (Symbol="_{in3}", PosX = 0.1, PosY = 0.55);
348in      Fin4    as Corrente (Symbol="_{in4}", PosX = 0.1, PosY = 0.75);
349out     Fout    as Corrente (Symbol="_{out}", PosX = 1, PosY = 0.45);
350out Fperda  as Corrente (Symbol="_{perdas}",PosX = 0.5, PosY = 1);
351
352        EQUATIONS
353
354        Fout.F = Fin1.F + Fin2.F + Fin3.F + Fin4.F - Fperda.F;
355        Fsalida= Fin1.F + Fin2.F + Fin3.F + Fin4.F;
356        Fperda.F=y*Fsalida;
357       
358        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H +
359        Fin4.F * Fin4.H - Fperda.F*Fperda.H;
360
361        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
362        Fperda.S = Fout.S;
363        Fperda.T = Fout.T;
364        Fperda.P = Fout.P;
365        Fperda.H = Fout.H;
366end
367
368# Modelo de desaerador (tanque) com 5 entradas e saída líquido saturado (x=0)
369Model Desaerador5
370        ATTRIBUTES
371        Pallete = true;
372        Icon = "icon/desaerador";
373        PARAMETERS
374outer PP2 as Plugin(Brief="Steam tables");
375       
376    VARIABLES
377in      Fin1    as Corrente (Symbol="_{in1}", PosX = 1, PosY = 0.2);
378in      Fin2    as Corrente (Symbol="_{in2}", PosX = 1, PosY = 0.45);
379in      Fin3    as Corrente (Symbol="_{in3}", PosX = 1, PosY = 0.7);
380in      Fin4    as Corrente (Symbol="_{in4}", PosX = 1, PosY = 0.9);
381in      Fin5    as Corrente (Symbol="_{in5}", PosX = 0.5, PosY = 0);
382out     Fout    as Corrente (Symbol="_{out}", PosX = 0, PosY = 0.85);
383
384        EQUATIONS
385
386        Fout.F = Fin1.F + Fin2.F + Fin3.F + Fin4.F + Fin5.F;
387        Fout.F * Fout.H = Fin1.F * Fin1.H + Fin2.F * Fin2.H + Fin3.F * Fin3.H + Fin4.F * Fin4.H + Fin5.F * Fin5.H;
388        #Fout.T = PP2.Tsat(Fout.P);
389
390        [Fout.S,Fout.H] = PP2.propPTl(Fout.P,Fout.T);
391end
392
393# Modelo de trocador de calor, dada a carga termica
394Model Trocador
395        PARAMETERS
396outer PP2 as Plugin(Brief="Steam tables");
397       
398    VARIABLES
399        Q               as Potencia;
400        DP              as Dif_Pres;
401in      Fin             as Corrente (Symbol="_{in}");
402out     Fout    as Corrente (Symbol="_{out}");
403
404        EQUATIONS
405
406        Fout.F = Fin.F;
407        Fout.P = Fin.P - DP;
408        Fout.F * (Fout.H - Fin.H) = Q;
409        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
410end
411
412# Modelo de torre de refrigeracao
413Model Torre
414        ATTRIBUTES
415        Pallete = true;
416        Icon = "icon/torreresf";
417
418        PARAMETERS
419        cpa             as CalorEspecifico;
420
421        VARIABLES
422        F               as VazaoMassica;
423in      Qin             as Potencia (Symbol="_{in1}", PosX = 0.1, PosY = 0.5);
424        DTh             as Dif_Temp;
425        DTc             as Dif_Temp;
426        DTar    as Dif_Temp; # grau de aquecimento do ar
427        Th              as Temperatura;
428        Tc              as Temperatura;
429        Tar_c   as Temperatura;
430        Tar_h   as Temperatura;
431        Uat             as CoefGlobal_area;
432
433        EQUATIONS
434
435        DTar = Tar_h - Tar_c;
436        DTh = Th - Tar_h;
437        DTc = Tc  - Tar_c;
438        F * cpa * (Th - Tc) = Qin;
439        Uat * (DTh - DTc) = Qin * ln(abs(DTh/DTc));
440#       Uat * 0.5 * (DTh + DTc) = Qin;
441end
442
443# Modelo de bomba
444Model Bomba
445        ATTRIBUTES
446        Pallete = true;
447        Icon = "icon/bomba1";
448               
449       
450        PARAMETERS
451outer PP2 as Plugin(Brief="Steam tables");
452#       v_esp     as VolumeEspecifico;
453       
454        VARIABLES
455        H_IS    as Entalpia;
456out     POT_BMB as Pot_sinal(Brief="Potencia do motor da bomba", PosX = 0.5, PosY = 1 );
457        POT_EF  as Potencia(Brief="Potencia injetada pela bomba");
458        EF_B    as Eficiencia(Brief="Eficiencia da bomba");
459in      Fin             as Corrente (Symbol="_{in}");
460out     Fout    as Corrente (Symbol="_{out}",PosX = 0, PosY = 0.2);
461        v_esp     as VolumeEspecifico;
462
463        EQUATIONS
464
465        v_esp = PP2.Vesp(Fin.P,Fin.T);
466       
467        H_IS = PP2.propPS(Fout.P,Fin.S);
468
469        (Fout.H - Fin.H) * EF_B = H_IS - Fin.H;
470#       (Fout.H - Fin.H) * Fin.F = POT_EF; # Forma alternativa
471       
472        [Fout.S,Fout.T] = PP2.propPH(Fout.P,Fout.H);
473
474        POT_EF = POT_BMB * EF_B;
475        POT_EF = Fin.F * v_esp * (Fout.P - Fin.P);
476        Fout.F = Fin.F;
477end
478
479
480# Modelo de gerador de vapor
481Model Gerador_Vapor
482        ATTRIBUTES
483    Pallete = true;
484        Icon = "icon/caldeira";
485
486        PARAMETERS
487outer PP2 as Plugin(Brief="Steam tables");
488
489    VARIABLES
490out     Q_GV            as Pot_sinal (Brief="Taxa de calor gerado na caldeira", PosX = 1, PosY = 0.5);
491        EF_GV           as Eficiencia (Brief="Eficiencia do gerador de vapor");
492        Qra                     as Potencia (Brief="Taxa de calor nos reaquecedores");
493        Qsa                     as Potencia (Brief="Taxa de calor nos superaquecedores");
494        Qca                     as Potencia (Brief="Taxa de calor no evaporador");
495        Qec                     as Potencia (Brief="Taxa de calor nos economizadores");
496in      Fin_a           as Corrente (Brief="Agua de alimentacao", Symbol="_{in_a}", PosX = 0.5, PosY = 1);
497in      Fin_ra          as Corrente (Brief="Vapor a ser Reaquecido", Symbol="_{in_ra}", PosX = 0.7, PosY = 1);
498out     Fout_sa     as Corrente (Brief="Vapor Superaquecido", Symbol="_{out_sa}", PosX = 0.5, PosY = 0);
499out     Fout_ra     as Corrente (Brief="Vapor Reaquecido", Symbol="_{out_ra}", PosX = 0.7, PosY = 0);
500        Fvap            as Corrente (Brief="Evaporador");
501        Feco            as Corrente (Brief="Economizadores");
502
503        EQUATIONS
504
505#       [Fin_a.S,Fin_a.H] = PP2.propPTl(Fin_a.P,Fin_a.T); # Reduntante no ciclo fechado
506
507        "Economizadores ECO1 + ECO1"
508#       Feco.F = Fin_a.F; # Reduntante no ciclo fechado
509        [Feco.S,Feco.H] = PP2.propPTv(Feco.P,Feco.T);   
510        Qec = Feco.F * (Feco.H - Fin_a.H);
511
512        "Evaporador - Camisa dagua"
513        Fvap.F = Feco.F;
514        [Fvap.S,Fvap.H] = PP2.propPTv(Fvap.P,Fvap.T);   
515        Qca = Fvap.F * (Fvap.H - Feco.H);
516
517        "Superaquecedores BT + AT"
518        Fout_sa.F = Fvap.F;
519        [Fout_sa.S,Fout_sa.H] = PP2.propPTv(Fout_sa.P,Fout_sa.T);
520        Qsa = Fout_sa.F * (Fout_sa.H - Fvap.H);
521
522        "Reaquecedores BT + AT"
523        Fout_ra.F = Fin_ra.F;
524        [Fout_ra.S,Fout_ra.H] = PP2.propPTv(Fout_ra.P,Fout_ra.T);
525        Qra = Fout_ra.F * (Fout_ra.H - Fin_ra.H);
526
527        "Caldeira"
528        Q_GV * EF_GV = Qec + Qca + Qsa + Qra;
529end
530
531
532# Modelo de gerador de vapor modificado
533Model Gerador_VaporMod
534        ATTRIBUTES
535    Pallete = true;
536        Icon = "icon/caldeira";
537       
538       
539        PARAMETERS
540outer PP2 as Plugin(Brief="Steam tables");
541
542    VARIABLES
543out     Q_GV            as Pot_sinal (Brief="Taxa de calor gerado na caldeira", PosX = 1, PosY = 0.5);
544        EF_GV           as Eficiencia (Brief="Eficiencia do gerador de vapor");
545        Qpre            as Potencia (Brief="Taxa de calor no pre aquecedor de ar");
546        Qsa                     as Potencia (Brief="Taxa de calor nos superaquecedores");
547        Qca                     as Potencia (Brief="Taxa de calor no evaporador");
548        Qec                     as Potencia (Brief="Taxa de calor nos economizadores");
549in      Fin_a           as Corrente (Brief="Agua de alimentacao", Symbol="_{in_a}", PosX = 0.5, PosY = 1);
550out     Fout_sa     as Corrente (Brief="Vapor Superaquecido", Symbol="_{out_sa}", PosX = 0.5, PosY = 0);
551        Fvap            as Corrente (Brief="Evaporador");
552        Feco            as Corrente (Brief="Economizadores");
553
554        EQUATIONS
555
556#       [Fin_a.S,Fin_a.H] = PP2.propPTl(Fin_a.P,Fin_a.T); # Reduntante no ciclo fechado
557
558        "Economizadores ECO1 + ECO1"
559#       Feco.F = Fin_a.F; # Reduntante no ciclo fechado
560        [Feco.S,Feco.H] = PP2.propPTv(Feco.P,Feco.T);   
561        Qec = Feco.F * (Feco.H - Fin_a.H);
562
563        "Evaporador - Camisa dagua"
564        Fvap.F = Feco.F;
565        [Fvap.S,Fvap.H] = PP2.propPTv(Fvap.P,Fvap.T);   
566        Qca = Fvap.F * (Fvap.H - Feco.H);
567
568        "Superaquecedores BT + AT"
569        Fout_sa.F = Fvap.F;
570        [Fout_sa.S,Fout_sa.H] = PP2.propPTv(Fout_sa.P,Fout_sa.T);
571        Qsa = Fout_sa.F * (Fout_sa.H - Fvap.H);
572
573        "Caldeira"
574        Q_GV * EF_GV = Qec + Qca + Qsa + Qpre;
575end
576
577
578# Modelo simplificado gerador de vapor
579Model Gerador_Vapor_Simples
580        PARAMETERS
581outer PP2 as Plugin(Brief="Steam tables");
582       
583        VARIABLES
584        Q_GV            as Potencia;
585        EF_GV           as Eficiencia;
586in      Fin                     as Corrente (Symbol="_{in}");
587out     Fout            as Corrente (Symbol="_{out}");
588
589        EQUATIONS
590
591        Fout.P = Fin.P;
592       
593        [Fout.S,Fout.H] = PP2.propPTv(Fout.P,Fout.T);
594
595        Q_GV * EF_GV = Fin.F * (Fout.H - Fin.H);
596#       Fout.F = Fin.F;
597end
598
599# Modelo de gerador eletrico
600Model Gerador_Eletrico
601    ATTRIBUTES
602        Pallete = true;
603        Icon = "icon/gerador"; 
604       
605        PARAMETERS
606        EF_GE as Eficiencia(Brief="Eficiencia do gerador eletrico");
607
608        VARIABLES
609out     POT_GE as Pot_sinal(Brief="Potencia do gerador eletrico", PosX = 1, PosY = 0.5);
610        POT_TURB as Potencia(Brief="Potencia total das turbinas");
611in      POT_TURB1 as Potencia(Brief="Potencia total da turbina", PosX = 0, PosY = 0.5);
612in      POT_TURB2 as Potencia(Brief="Potencia total da turbina", PosX = 0.02, PosY = 0.25);
613in      POT_TURB3 as Potencia(Brief="Potencia total da turbina", PosX = 0.02, PosY = 0.75);
614in      POT_TURB4 as Potencia(Brief="Potencia total da turbina", PosX = 0.5, PosY = 1);
615
616        EQUATIONS
617        "Potencia total das turbinas"
618        POT_TURB = POT_TURB1 + POT_TURB2 + POT_TURB3 + POT_TURB4;
619       
620        "Potencia do Gerador Eletrico"
621        POT_GE = EF_GE * POT_TURB;
622end
623
624# Modelo de gerador eletrico
625Model Gerador_Eletrico_Simples
626    ATTRIBUTES
627        Pallete = true;
628        Icon = "icon/gerador"; 
629       
630        PARAMETERS
631        EF_GE as Eficiencia(Brief="Eficiencia do gerador eletrico");
632
633        VARIABLES
634out     POT_GE as Pot_sinal(Brief="Potencia do gerador eletrico", PosX = 1, PosY = 0.5);
635end
636
637
638# Modelo de separador de corrente
639Model Splitter
640        ATTRIBUTES
641        Pallete = true;
642        Icon = "icon/splitter";
643       
644        VARIABLES
645        y                       as Fracao(Brief="Fracao de massa para a segunda corrente");
646in      Fin                     as Corrente (Symbol="_{in}", PosX = 0, PosY = 0.5);
647out     Fout            as Corrente (Symbol="_{out}", PosX = 1, PosY = 0.25);
648out     Fouts           as Corrente(Brief="Segunda corrente", Symbol="_{outx}", PosX = 1, PosY = 0.75);
649
650        EQUATIONS
651
652        Fout.P = Fin.P;
653        Fout.T = Fin.T;
654        Fout.S = Fin.S;
655        Fout.H = Fin.H;
656
657        Fouts.P = Fin.P;
658        Fouts.T = Fin.T;
659        Fouts.S = Fin.S;
660        Fouts.H = Fin.H;
661
662        Fouts.F = Fin.F * y;
663        Fout.F = Fin.F - Fouts.F;
664end
665
666
667# Modelo de separador de corrente de 4 saidas
668Model Splitter4
669        ATTRIBUTES
670        Pallete = true;
671        Icon = "icon/splitter4";
672       
673        VARIABLES
674        y(3)            as Fracao(Brief="Fracao de massa");
675in      Fin                     as Corrente (Symbol="_{in}", PosX = 1, PosY = 0.5);
676out     Fout1           as Corrente (Symbol="_{out1}", PosX = 0, PosY = 0.19);
677out     Fout2           as Corrente(Symbol="_{out2}", PosX = 0, PosY = 0.4);
678out     Fout3           as Corrente (Symbol="_{out3}", PosX = 0, PosY = 0.62);
679out     Fout4           as Corrente(Symbol="_{out4}", PosX = 0, PosY = 0.85);
680
681
682        EQUATIONS
683
684        Fout1.P = Fin.P;
685        Fout1.T = Fin.T;
686        Fout1.S = Fin.S;
687        Fout1.H = Fin.H;
688
689        Fout2.P = Fin.P;
690        Fout2.T = Fin.T;
691        Fout2.S = Fin.S;
692        Fout2.H = Fin.H;
693
694        Fout3.P = Fin.P;
695        Fout3.T = Fin.T;
696        Fout3.S = Fin.S;
697        Fout3.H = Fin.H;
698       
699        Fout4.P = Fin.P;
700        Fout4.T = Fin.T;
701        Fout4.S = Fin.S;
702        Fout4.H = Fin.H;
703       
704        Fout1.F = Fin.F * y(1);
705        Fout2.F = Fin.F * y(2);
706        Fout3.F = Fin.F * y(3);
707        #Fout4.F = Fin.F * y(4);
708       
709       
710        Fout4.F = Fin.F - Fout1.F - Fout2.F - Fout3.F;
711end
712
713# Modelo de flash provisório, pois o PP tem cálculo de flash mas
714# esta função não está disponibilizada no plugin (esta função seria mais
715# eficiente nos cálculos, não teria cálculos repetitivos)
716Model Flash
717
718    ATTRIBUTES
719        Pallete = true;
720        Icon = "icon/flash";
721       
722        PARAMETERS
723outer PP2 as Plugin(Brief="Steam tables");
724       
725    VARIABLES
726        TIT             as Fracao (Upper=2);
727#       S_ad    as Entropia;
728in      Fin             as Corrente (Symbol="_{in}",PosX = 1, PosY = 0.5);
729out     FoutL   as Corrente (Symbol="_{outL}", PosX = 0.4, PosY = 1);
730out     FoutV   as Corrente (Symbol="_{outV}", PosX = 0.4, PosY = 0);
731
732        EQUATIONS
733
734        Fin.F = FoutL.F + FoutV.F;
735        FoutV.F = TIT * Fin.F;
736
737        FoutL.T = FoutV.T;
738        FoutL.P = FoutV.P;
739
740#       [S_ad,FoutL.T] = PP2.propPH(FoutL.P,Fin.H);
741#       [FoutV.S,FoutV.H] = PP2.propPTv(FoutV.P,FoutV.T+0.1*'K'); # perturbado para evitar ir para liq.
742#       [FoutL.S,FoutL.H] = PP2.propPTl(FoutL.P,FoutL.T-0.1*'K'); # perturbado para evitar ir para vap.
743
744        [FoutL.S,FoutL.H,FoutV.S,FoutV.H,FoutL.T,TIT] = PP2.FlashPH(FoutL.P,Fin.H);
745
746#       TIT * (FoutV.H - FoutL.H) = Fin.H - FoutL.H;
747end
748
749Model ETA_CICLO
750        ATTRIBUTES
751        Pallete = true;
752        Icon = "icon/eficiencia";
753
754        VARIABLES
755        EF_CIC          as Eficiencia;
756in      POT_BMB1        as Pot_sinal(Symbol = "_{inB1}", PosX = 0.2, PosY = 0);
757in      POT_BMB2        as Pot_sinal(Symbol = "_{inB2}", PosX = 0.4, PosY = 0);
758in      POT_BMB3        as Pot_sinal(Symbol = "_{inB3}", PosX = 0.6, PosY = 0);
759in      POT_BMB4        as Pot_sinal(Symbol = "_{inB4}", PosX = 0.8, PosY = 0);
760in      POT_BMB5        as Pot_sinal(Symbol = "_{inB5}", PosX = 0.25, PosY = 1);
761in      POT_GE          as Pot_sinal(Symbol = "_{inGE}", PosX = 0.5, PosY = 1);
762in      POT_GV          as Pot_sinal(Symbol = "_{inGV}", PosX = 0.75, PosY = 1);
763
764
765        EQUATIONS
766        "Eficiencia do Ciclo"
767        EF_CIC * POT_GV = POT_GE - POT_BMB1 - POT_BMB2 - POT_BMB3 - POT_BMB4 - POT_BMB5;
768
769end
770
771
772#*---------------------------------------------------------------------
773*       only vapour phase
774*--------------------------------------------------------------------*#
775Model Equil_vap
776        ATTRIBUTES
777        Pallete         = true;
778        Icon            = "icon/cstr";
779        Brief           = "Model of a generic vapour-phase equilibrium CSTR";
780        Info            = "
781== Assumptions ==
782* only vapour-phase
783* thermodynamic equilibrium
784* steady-state
785
786== Specify ==
787* inlet stream
788* stoichiometric matrix
789* equilibrium temperature
790";
791
792        PARAMETERS
793outer PP as Plugin(Brief = "External Physical Properties");
794        NReac           as Integer              (Brief="Number of reactions", Default=1);
795    stoic(NComp,NReac) as Real  (Brief="Stoichiometric matrix", Symbol="\nu");
796        Rg                      as Real                 (Brief="Universal gas constant", Unit='J/mol/K', Default=8.314);
797        fs(NComp)       as Pressao              (Brief="Fugacity in standard state", Default=1, DisplayUnit='atm');
798        To                      as Temperatura  (Brief="Reference temperature", Default=298.15);
799        V                       as Volume;
800        Mw(NComp)       as molweight;
801
802        VARIABLES
803in      Inlet           as CorrenteZ    (Brief="Inlet stream", PosX=0, PosY=0, Symbol="_{in}");
804out Outlet              as CorrenteVap  (Brief="Outlet stream", PosX=1, PosY=1, Symbol="_{out}");
805
806        G(NComp)        as EntalpiaMol  (Brief="Gibbs free-energy of formation");
807        K(NReac)        as Real                 (Brief="Equillibrium constant", Lower=0, Default=1.5);
808        activ(NComp)as Real             (Brief="Activity", Symbol="\hat{a}", Lower=0, Default=0.2);
809       
810        rate(NComp) as Reacao_mol       (Brief="Overall component rate of reaction");
811        extent(NReac) as VazaoMolar     (Brief="Extent of reaction", Symbol="\xi");
812        conv(NComp) as Real             (Brief="Fractional conversion of component", Symbol="X", Default=0); # Lower=-1e3, Upper=1e3);
813
814        SET
815        Mw = PP.MolecularWeight();
816
817        EQUATIONS
818        "Outlet stream"
819        Outlet.F*Outlet.z = Inlet.F*Inlet.z + rate*V*Mw;
820       
821        "Mechanical equilibrium"
822        Outlet.P = Inlet.P;
823       
824        "Energy balance"
825        Outlet.F*Outlet.H = Inlet.F*Inlet.H;
826       
827        "Steady-state"
828        Outlet.F = Inlet.F + sum(sumt(stoic*extent)*Mw);
829
830        "Gibbs free-energy of formation"
831        G = PP.IdealGasGibbsOfFormation(Outlet.T);
832
833#       "Gibbs free-energy of formation without Cp correction"
834#       G = PP.IdealGasGibbsOfFormationAt25C()*Outlet.T/To
835#               + PP.IdealGasEnthalpyOfFormationAt25C()*(1 - Outlet.T/To);
836
837        for j in [1:NReac] do
838        "Gibbs free energy of reaction"
839                sumt(G*stoic(:,j)) = -Rg*Outlet.T*ln(K(j));
840#               K(j) = exp(-sumt(G*stoic(:,j))/(Rg*Outlet.T));
841
842        "Equilibrium constant"
843                K(j) = prod(activ^stoic(:,j));
844        end
845
846        for i in [1:NComp] do
847        "Outlet molar fraction"
848                Outlet.F*Outlet.z(i) = (Inlet.F*Inlet.z(i) + sumt(stoic(i,:)*extent)*Mw);
849        end     
850
851        for i in [1:NComp] do
852          if (Inlet.z(i) > 1e-16) then
853            "Molar conversion"
854            Outlet.F*Outlet.z(i) = Inlet.F*Inlet.z(i)*(1 - conv(i));
855          else if (Outlet.z(i) > 0) then
856                        "Molar conversion"
857                                conv(i) = 1;    # ?
858                        else
859                        "Molar conversion"
860                                conv(i) = 0;    # ?
861                        end
862          end
863        end
864
865        "Activity"
866        activ = PP.VapourFugacityCoefficient(Outlet.T,Outlet.P,Outlet.z)*Outlet.P*Outlet.z/fs;
867end
868
Note: See TracBrowser for help on using the repository browser.