Ignore:
Timestamp:
Apr 16, 2007, 2:19:39 PM (16 years ago)
Author:
Paula Bettio Staudt
Message:

Updated reactive distillation models andsample

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sample/stage_separators/sample_columnReact.mso

    r213 r243  
    2828FlowSheet Startup_ReactiveDistillation
    2929        PARAMETERS
    30         PP              as Plugin(Brief="Physical Properties",
    31                 Type="PP",
     30        PP      as Plugin(Brief="Physical Properties", Type="PP",
    3231                Components = [ "acetic acid", "ethanol",  "ethyl acetate", "water"],
    3332                LiquidModel = "UNIFAC",
    34                 VapourModel = "Ideal",
    35                 Derivatives = 1
     33                VapourModel = "Ideal"
    3634        );
    3735        NComp   as Integer;
     
    5048
    5149        VARIABLES
     50        Qcmin as heat_rate (Brief="Condenser Heat supplied");
     51        Qcmax as heat_rate (Brief="Condenser Heat supplied");
     52        Qrmin as heat_rate (Brief="Reboiler Heat supplied");
     53        Qrmax as heat_rate (Brief="Reboiler Heat supplied");
     54        Fmin as flow_mol;
     55        Fmax as flow_mol;
     56        Frmin as flow_mol;
     57        Frmax as flow_mol;
     58       
    5259        Lreb_ad as Real;
    5360        Lrebmin as length;
     
    6976        zero to col.trays([6:col.NTrays]).Inlet;
    7077       
     78       
    7179        EQUATIONS
    72         "Equações do PID para controle de nível"
    73         Lreb_ad*(Lrebmax-Lrebmin)=col.reb.Level-Lrebmin;
    74         PIDLreb.Ports.input=Lreb_ad;
    75         Lcond_ad*(Lcondmax-Lcondmin)=col.cond.Level-Lcondmin;
    76         PIDLcond.Ports.input=Lcond_ad;
    77         "Equações do PID para controle de temperatura"
    78         Treb_ad*(Trebmax-Trebmin)=col.reb.OutletL.T-Trebmin;
    79         PIDTreb.Ports.input=Treb_ad;
    80         Tcond_ad*(Tcondmax-Tcondmin)=col.cond.OutletL.T-Tcondmin;
    81         PIDTcond.Ports.input=Tcond_ad;
    82        
    83         col.sp.frac = 0.1;
    84 
    85         col.sp.Outlet1.F = 0.5 * PIDLcond.Ports.output * 'mol/s';
    86         col.reb.OutletL.F = 1.736 * PIDLreb.Ports.output * 'mol/s';
    87 
    88         PIDTreb.Ports.setPoint= (367 * 'K' - Trebmin)/(Trebmax-Trebmin);
    89         PIDTcond.Ports.setPoint= (344 * 'K' - Trebmin)/(Trebmax-Trebmin);
    90         col.cond.Q = 10*'J/s' - (5 * PIDTcond.Ports.output) * 'kJ/s';
    91 
    92 #verificando a partida do refervedor
    93         if time < 200 * 's' then
     80        col.sp.frac = 0.09;
     81
     82        #verificando a partida do refervedor
     83        if time < 400 * 's' then
    9484                col.reb.startup = 1;
    9585        else
    9686                col.reb.startup = 0;
    9787        end
    98 
     88 
    9989        if col.reb.startup then
     90                col.cond.Q = 0 * PIDTcond.Ports.output * 'kJ/s';
    10091                col.reb.Q = 0 * PIDTreb.Ports.output * 'kJ/s';
     92               
     93                PIDTreb.Ports.input = PIDTreb.Ports.setPoint;
    10194        else
    102                 col.reb.Q = 1e1 * PIDTreb.Ports.output * 'kJ/s';
     95                col.cond.Q = Qcmin+(Qcmax-Qcmin)*PIDTcond.Ports.output;
     96                col.reb.Q = Qrmin+(Qrmax-Qrmin)*PIDTreb.Ports.output;
     97               
     98                PIDTreb.Ports.input=Treb_ad;
    10399        end
    104        
    105         "Reaction - Trays"
    106         col.trays.r = exp(-7150*'K'/col.trays.OutletL.T)*
    107         (4.85e4*col.trays.C(1)*col.trays.C(2) - 1.23e4*col.trays.C(3)*col.trays.C(4))*'l/mol/s';
    108         "Reaction - Reboiler"
    109         col.reb.r = exp(-7150*'K'/col.reb.OutletL.T)*(4.85e4*col.reb.C(1)*col.reb.C(2)
    110                         - 1.23e4*col.reb.C(3)*col.reb.C(4)) * 'l/mol/s';
    111         "Reaction - Condenser"
    112         col.cond.r = exp(-7150*'K'/col.cond.OutletL.T)*(4.85e4*col.cond.C(1)*col.cond.C(2)
    113                         - 1.23e4*col.cond.C(3)*col.cond.C(4)) * 'l/mol/s';
    114 
    115100
    116101        SPECIFY
     
    138123        PIDLreb.Parameters.beta=1;
    139124        PIDLreb.Parameters.gain=1;
    140         PIDLreb.Parameters.intTime=100*'s';
     125        PIDLreb.Parameters.intTime=10*'s';
    141126        PIDLreb.Parameters.derivTime=1*'s';
    142127        PIDLreb.Options.action=-1;
     
    144129        PIDLreb.Options.autoMan=0;
    145130        PIDLreb.Ports.setPoint=(0.5 * 'm' - Lrebmin)/(Lrebmax-Lrebmin);
     131        Lreb_ad*(Lrebmax-Lrebmin)=col.reb.Level-Lrebmin;
     132        PIDLreb.Ports.input=Lreb_ad;
     133        col.reb.OutletL.F = Frmin + (Frmax-Frmin) * PIDLreb.Ports.output;
    146134
    147135        PIDLcond.Parameters.tau = 1*'s';       
    148         PIDLcond.Parameters.tauSet=1*'s';       
    149         PIDLcond.Parameters.bias = 0;
     136        PIDLcond.Parameters.tauSet=1*'s';
     137        PIDLcond.Parameters.bias = 0.5;
    150138        PIDLcond.Parameters.alpha=1;
    151139        PIDLcond.Parameters.gamma=1;
     
    158146        PIDLcond.Options.autoMan=0;
    159147        PIDLcond.Ports.setPoint=(0.5 * 'm' - Lcondmin)/(Lcondmax-Lcondmin);
     148        Lcond_ad*(Lcondmax-Lcondmin)=col.cond.Level-Lcondmin;
     149        PIDLcond.Ports.input=Lcond_ad;
     150        col.sp.Outlet1.F = Fmin + (Fmax-Fmin) * PIDLcond.Ports.output;
    160151
    161152        PIDTreb.Parameters.tau = 1*'s';
    162         PIDTreb.Parameters.tauSet=1*'s';       
     153        PIDTreb.Parameters.tauSet=1*'s';
    163154        PIDTreb.Parameters.bias = 0.2;
    164155        PIDTreb.Parameters.alpha=0.2;
     
    166157        PIDTreb.Parameters.beta=1;
    167158        PIDTreb.Parameters.gain=0.9;
    168         PIDTreb.Parameters.intTime=10*'s';
     159        PIDTreb.Parameters.intTime=100*'s';
    169160        PIDTreb.Parameters.derivTime=1*'s';
    170161        PIDTreb.Options.action=1;
    171162        PIDTreb.Options.clip=1;
    172163        PIDTreb.Options.autoMan=0;
    173 
    174         PIDTcond.Parameters.tau = 1*'s';
    175         PIDTcond.Parameters.tauSet=1*'s';       
    176         PIDTcond.Parameters.bias = 0.2;
     164        PIDTreb.Ports.setPoint= (366 * 'K' - Trebmin)/(Trebmax-Trebmin);
     165        Treb_ad*(Trebmax-Trebmin)=col.reb.OutletL.T-Trebmin;
     166
     167        PIDTcond.Parameters.tau = 1*'s';       
     168        PIDTcond.Parameters.tauSet=1*'s';
     169        PIDTcond.Parameters.bias = 0.5;
    177170        PIDTcond.Parameters.alpha=0.2;
    178171        PIDTcond.Parameters.gamma=1;
     
    181174        PIDTcond.Parameters.intTime=10*'s';
    182175        PIDTcond.Parameters.derivTime=1*'s';
    183         PIDTcond.Options.action=-1;
     176        PIDTcond.Options.action=1;
    184177        PIDTcond.Options.clip=1;
    185178        PIDTcond.Options.autoMan=0;
     179        PIDTcond.Ports.setPoint= (346 * 'K' - Tcondmin)/(Tcondmax-Tcondmin);
     180        Tcond_ad*(Tcondmax-Tcondmin)=col.cond.OutletL.T-Tcondmin;
     181        PIDTcond.Ports.input=Tcond_ad;
    186182       
    187183        "Valores limites para normalizações"
     
    194190        Tcondmax=380*'K';
    195191        Tcondmin=250*'K';
     192        Qcmin = -100 * 'kJ/s';
     193        Qcmax = 0 * 'kJ/s';
     194        Qrmin = 0 * 'kJ/s';
     195        Qrmax = 150 * 'kJ/s';
     196        Fmin = 0 * 'kmol/h';
     197        Fmax = 2 * 'kmol/h';
     198        Frmin = 0 * 'kmol/h';
     199        Frmax = 5 * 'kmol/h';
    196200       
    197201        col.cond.OutletV.F = 0 * 'kmol/h';
     
    206210        col.cond.Across = 6 * 'l/m';
    207211       
    208         col.trays.V =  0.0961 * 'm^3'; # 0.34* (3.14*0.6*0.6/4)
    209         col.trays.Ah = 0.04 * 'm^2';#0.2 * 'm^2';
     212        col.trays.V =  0.0961 * 'm^3';
     213        col.trays.Ah = 0.04 * 'm^2';
    210214        col.trays.lw = 0.457 * 'm';
    211215        col.trays.hw = 0.05 * 'm';
    212216        col.trays.Q = 0 * 'kW';
    213217        col.trays.beta = 0.8;
    214         col.trays.alfa = 5;
    215         col.trays.Ap = 0.07 * 'm^2'; #0.24 * 'm^2'; # 3.14*0.6*0.6/4 - 15%
     218        col.trays.alfa = 30;
     219        col.alfacond = 100000;
     220        col.trays.Ap = 0.07 * 'm^2';
    216221
    217222        col.trays.Hr = 0 * 'kJ/mol';
     
    232237
    233238        # reboiler
    234         col.reb.OutletL.T = 300 *'K';
     239        col.reb.OutletL.T = 300 * 'K';
    235240        col.reb.Level = 0.1 * 'm';
    236241        col.reb.OutletL.z([1:3]) = [0.4962, 0.4808, 0];
     
    242247
    243248        OPTIONS
     249        TimeStep = 100;
     250        TimeEnd = 50000;
     251        NLASolver = "sundials";
    244252        DAESolver = "dassl";
    245         RelativeAccuracy = 1e-2;
    246         TimeEnd = 20000;
    247         TimeStep = 100;
    248         TimeUnit = 's';
    249 #       time = [0:200, 210:10:2000, 2100:100:20000];
    250253end
Note: See TracChangeset for help on using the changeset viewer.