source: mso/sample/controllers/Sample_flash_pid.mso @ 1

Last change on this file since 1 was 1, checked in by Rafael de Pelegrini Soares, 16 years ago

Initial import of the library

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.7 KB
Line 
1#*---------------------------------------------------------------------
2* This file is property of the author and cannot be used, copyed
3* or modified without permission.
4*
5* Copyright (C) 2002-2004  the author
6*----------------------------------------------------------------------
7* Author: Rafael de Pelegrini Soares
8* $Id: Sample_flash_pid.mso 1 2006-06-20 17:33:53Z rafael $
9*----------------------------------------------------------------------
10*
11* Flash separator sample file.
12*
13* This file requires an compatible thermodynamic package installed.
14*
15*--------------------------------------------------------------------*#
16using "stage_separators/flash";
17using "controllers/PIDIncr";
18
19FlowSheet Flash_Dynamic
20       
21        PARAMETERS
22        PP      as CalcObject(Brief="Physical Properties",File="P:\WINAPPS\EMSO\interface\vrpp.dll");
23        NComp   as Integer;
24        #Valores utilizados na normalização do nível e da pressão do flash
25        #Vazões mínimas e máximas das correntes de vapor e líquido
26        FVMin as flow_mol;
27        FVMax as flow_mol;
28        FLMax as flow_mol;
29        FLMin as flow_mol;
30        #Pressão máxima e mínima
31        PMin as pressure;
32        PMax as pressure;
33        #Nível máximo e mínimo
34        LMax as length;
35        LMin as length;
36
37        VARIABLES
38        #Nível e Pressão normalizados
39        L_ad as Real;
40        P_ad as Real;
41        Q       as heat_rate (Brief="Heat supplied");
42       
43        DEVICES
44        #Controlador para o nível
45        pidL as PIDIncr_Parallel_AWBT;
46        #Controlador para a pressão
47        pidP as PIDIncr_Parallel_AWBT;
48        fl as flash;
49        s1 as streamTP;
50       
51        SET
52        PP.Components = ["n-butane", "benzene", "n-octane"];
53        PP.LiquidModel = "PR";
54        PP.VapourModel = "PR";
55        NComp = PP.NumberOfComponents;
56       
57        #Parâmetros do modelo de flash
58        fl.V = 1 * "m^3";
59        fl.Across = 0.5* "m^2";
60       
61        #Valores máximos e mínimos para as normalizações
62        PMax=2.36 *"atm";
63        PMin=0 *"atm";
64        LMax=2 *"m";
65        LMin=0 *"m";
66        FVMax=300*"kmol/h";
67        FVMin=0*"kmol/h";
68        FLMax=692.7*"kmol/h";
69        FLMin=0*"kmol/h";
70
71        CONNECTIONS
72        s1 to fl.Inlet;
73        Q to fl.Q;
74       
75        SPECIFY
76
77        Q = 1026.32 * "kJ/s";
78
79        #Parâmetros do controlador de nível
80        pidL.Parameters.bias=0.5;
81        pidL.Parameters.gain=1.1776;
82        pidL.Parameters.derivTime=19*"s";
83        pidL.Parameters.intTime=76*"s";
84        pidL.Parameters.tau=1*"s";
85        pidL.Parameters.tauSet=1*"s";
86        pidL.Parameters.alpha =1;
87        pidL.Parameters.beta =1;
88    pidL.Parameters.gamma =1;
89        #Opções do controlador de nível
90        pidL.Options.autoMan=0;         
91        pidL.Options.clip=1;                   
92        pidL.Ports.setPoint=0.5;
93        pidL.Options.action =-1;
94       
95        #Parâmetros do controlador de pressão
96        pidP.Parameters.bias=0.5;       
97        pidP.Parameters.gain=0.9275;
98        pidP.Parameters.derivTime=18*"s";
99        pidP.Parameters.intTime=72*"s";
100        pidP.Parameters.tau=1*"s";
101        pidP.Parameters.tauSet=1*"s";
102        pidP.Parameters.alpha =1;
103        pidP.Parameters.beta =1;
104        pidP.Parameters.gamma =1;
105        #Opções do controlador de pressão
106        pidP.Options.autoMan=0;         
107        pidP.Options.clip=1;           
108        pidP.Options.action =-1;
109
110        EQUATIONS
111        #Corrente de entrada do flash
112        s1.z = [0.3, 0.3, 0.4];
113        s1.P = 5 * "atm";       
114       
115        #Distúrbio regulatório
116        if time<2000 then
117                s1.T = 338 * "K";
118                s1.F = 496.3 * "kmol/h";
119        else
120                s1.T = 360 * "K";
121                s1.F = 450 * "kmol/h";
122        end
123
124        #Normalização das variáveis controladas
125        #Variáveis controladas: fl.Level e fl.OutletV.P
126        L_ad*(LMax-LMin)=fl.Level-LMin;
127        P_ad*(PMax-PMin)=fl.OutletV.P-PMin;
128       
129        #Conexão das entradas dos pid´s
130        pidL.Ports.input=L_ad;
131        pidP.Ports.input=P_ad; 
132       
133        #Distúrbio servo
134        if time<7200 then
135                pidP.Ports.setPoint=0.501822;
136        else
137                pidP.Ports.setPoint=0.8474576;
138        end     
139       
140        #Conexão entre os controladores e o flash
141        #Variáveis manipuladas: fl.OutletV.F(controle de pressão) e fl.OutletL.F(nível)
142        fl.OutletV.F = pidP.Ports.output*(FVMax-FVMin)+FVMin;
143        fl.OutletL.F = pidL.Ports.output*(FLMax-FLMin)+FLMin;
144
145        INITIAL
146        fl.OutletL.T = 340 *"K";
147        fl.Level = 1* "m";
148        fl.OutletL.z(1) = 0.1;
149        fl.OutletL.z(2) = 0.1;
150
151        OPTIONS
152        relativeAccuracy = 1e-6;
153        outputLevel = "medium";
154        time = [0:100:7000 7000:0.10:8150 8150:100:10000];
155end
156
157
158
Note: See TracBrowser for help on using the repository browser.