source: mso/sample/controllers/CSTR_noniso_pid.mso @ 18

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

Fixed problem with CSTR controller sample

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1using "controllers/PIDs";
2
3const_valv as positive(Brief = "Valve Constant", Default=1,Lower=0,Upper=100, Unit="m^2.5/h");
4
5Model corrente
6        VARIABLES
7        Ca     as conc_mol;
8        F      as flow_vol;
9        T      as temperature;
10end
11
12Model CSTR
13
14        PARAMETERS
15        ko  as frequency                (Unit="1/h");
16        A   as area;
17        At  as area;   
18        Ea  as energy_mol               (Unit="kJ/kmol");
19        R   as Real                     (Unit="kJ/mol/K");
20        ro  as dens_mol                 (Unit="kmol/m^3");
21        Cp  as cp_mol                   (Unit="kJ/kmol/K");
22        U   as heat_trans_coeff (Unit="kW/m^2/K");
23        Hr  as heat_reaction    (Unit="kJ/kmol");
24       
25        VARIABLES
26        Cv       as const_valv;
27        T        as temperature;
28        Tw       as temperature;
29        V        as volume;
30        Ca       as conc_mol;
31        h        as length;
32        tau      as time_h;
33        rA           as reaction_mol;
34        k        as frequency   (Unit="1/h");
35in  Inlet    as corrente;
36out Outlet   as corrente;
37
38        EQUATIONS
39
40        "Balanço de Massa Global"
41        diff(V) = Inlet.F - Outlet.F;
42        "Balanço de Massa por Componente"
43        tau * diff(Ca) = (Inlet.Ca - Ca) - (-rA) * tau;
44        "Mistura perfeita"
45        Outlet.Ca = Ca;
46        Outlet.T  = T;
47        "Taxa de reação"
48        -rA = k * Ca;
49        "Equação de Arrhenius"
50        k=ko*exp(-Ea/(R*T));
51        "Tempo de residência médio"
52        tau * Inlet.F = V;
53        "Geometria"
54        A * h = V;
55        "Equação da válvula"
56        Outlet.F = Cv * sqrt(h);
57        "Balanço de energia"
58        tau * diff(T)=(Inlet.T - T) - U*At*(T-Tw)/(ro*V*Cp)*tau + (-Hr)*(-rA)*tau/(ro*Cp);
59
60end
61
62# processo com 1 CSTR controlado
63FlowSheet CSTR_controller
64
65        DEVICES
66        FEED as corrente;
67        CSTR as CSTR;
68        PIDL as PID_Ideal_AWBT;
69        PIDT as PID_Ideal_AWBT;
70 
71        VARIABLES
72        L_ad as Real;
73        Lmin as length;
74        Lmax as length;
75        T_ad as Real;
76        Tmin as temperature;
77        Tmax as temperature;
78       
79        CONNECTIONS
80        FEED to CSTR.Inlet;
81       
82        SET
83#       Parâmetros do CSTR"
84        CSTR.R   = 8.3144 * "kJ/kmol/K";
85        CSTR.U   = 300 * "kJ/h/m^2/K";
86        CSTR.ro  = 55.56 * "kmol/m^3";
87        CSTR.Cp  = 70*"kJ/kmol/K";
88        CSTR.Hr  = -7000 * "kJ/kmol";
89        CSTR.Ea  = 6e4 * "kJ/kmol";
90        CSTR.ko  = 89 * "1/s";
91        CSTR.A   = 8 * "m^2";
92        CSTR.At  = 25 * "m^2";
93       
94        EQUATIONS
95
96        "Equações do PID para controle de nível"
97        L_ad*(Lmax-Lmin)=CSTR.h-Lmin;
98        PIDL.Ports.input=L_ad;
99
100        "Equações do PID para controle de temperatura"
101        T_ad*(Tmax-Tmin)=CSTR.T-Tmin;
102        PIDT.Ports.input=T_ad;
103       
104        "Variáveis manipulada"
105        CSTR.Cv  = 2.2136 * "m^2.5/h" * (1 + PIDL.Ports.output);
106        CSTR.Tw  = PIDT.Ports.output*(Tmax-Tmin)+Tmin;
107       
108        #distúrbio regulatório
109        if time<1.6e5 then     
110                FEED.T = 300 * "K";
111        else
112                FEED.T = 285 * "K";
113        end
114
115
116        #Parâmetros do PID de nível
117        PIDL.Parameters.bias = 0;
118        PIDL.Parameters.alpha=0.1;
119        PIDL.Options.action=-1;
120        PIDL.Parameters.gamma=1;
121        PIDL.Parameters.beta=1;
122        PIDL.Options.clip=1;
123        PIDL.Options.autoMan=0;
124        PIDL.Parameters.gain=0.15;
125        PIDL.Parameters.intTime=100*"s";
126        PIDL.Parameters.derivTime=1*"s";
127        PIDL.Ports.setPoint=0.55;
128        PIDL.Parameters.tau=1*"s";
129        PIDL.Parameters.tauSet=1*"s";
130       
131        PIDT.Parameters.bias = 0;
132        PIDT.Parameters.alpha=0.1;
133        PIDT.Options.action=-1;
134        PIDT.Parameters.gamma=1;
135        PIDT.Parameters.beta=1;
136        PIDT.Options.clip=1;
137        PIDT.Options.autoMan=0;
138        PIDT.Parameters.gain=0.85;
139        PIDT.Parameters.intTime=100*"s";
140        PIDT.Parameters.derivTime=1*"s";
141        PIDT.Ports.setPoint=0.85;
142        PIDT.Parameters.tau=1*"s";
143        PIDT.Parameters.tauSet=1*"s";   
144       
145        "Valores limites para normalizações"
146        Lmax=5*"m";
147        Lmin=0*"m";
148        Tmax=700*"K";
149        Tmin=230*"K";   
150       
151        "Variáveís da corrente de alimentação"
152        FEED.Ca = 300 * "kmol/m^3";
153        FEED.F = 3.5 * "m^3/h";
154
155        INITIAL
156        CSTR.Ca = 50 * "kmol/m^3";
157        CSTR.h = 2.5 * "m";
158        CSTR.T = 650 * "K";
159       
160        OPTIONS
161        time = [0:0.1:1 1:1:100] * "h";
162        outputLevel = "high";
163end
Note: See TracBrowser for help on using the repository browser.