JARA2i.CaseStudies.batchReactor.Ejs

Modelica model of the batch reactor to be used in a virtual lab implemented in combination with Ejs and Matlab/Simulink

Information


 

Modelica model of the batch reactor to be used in a virtual lab implemented in combination with Ejs and Matlab/Simulink

The implementation of the batch reactor virtual-lab by combining Ejs, Matlab/Simulink and Modelica/Dymola is discussed in (Martin, Urquia and Dormido 2005).

References

Martin, C. and A. Urquia and S. Dormido (2005): Object-Oriented Modeling of Virtual Laboratories for Control Education. Proceedings of the 16th IFAC World Congress, paper code: Th-A22-TO/2.


Package Content

NameDescription
batchReacLiqAtoPInteractive Reactor interactive model


JARA2i.CaseStudies.batchReactor.Ejs.batchReacLiqAtoPInteractive

Reactor interactive model

JARA2i.CaseStudies.batchReactor.Ejs.batchReacLiqAtoPInteractive

Parameters

TypeNameDefaultDescription
IntegernComp3Component number of the liqid mixture
IntegernumChR1Number of irreversible chemical reactions
BooleanEjstrue 
BooleanSysquakefalse 
RealCpCoefMInitial[nComp, 7][4.5E3, 0, 0, 0, 0, 0, 0; 4....[J/(Kg*K)]
RealmassEnthalpyRefInitial[nComp]{167E4,0,0}Specific (per mass) enthalpy at reference temperature [J/Kg]
RealtempRefInitial300Reference temperature [K]
RealmolecWeightInitial[nComp]{0.1,0.018,0.1}Molecular weight [Kg/mol]
RealdensityInitial[nComp]{1E3,1E3,1E3}Components density [Kg/m3]
RealvesselVinitial5Initial reactor volume [m3]
RealvesselSinitial3Initial reactor section [m2]
RealstoichCoefInitial[numChR, nComp][-1, 0, 1]Stoich coeffs.
RealkCoefInitial[2]{4E6,-7.9E3}Reaction velocity coeffs. [{s-1,K}]
RealheatExchAreaInitial3.3Exchanger area [m2]
RealhTSteamInitial1360Heat-transfer coeff. of the vapor [W/(m2.K)]
RealhTWaterInitial1180Heat-transfer coeff. of the water [W/(m2.K)]
RealtempSteam393Vapor temperature [K]
RealtempWater288Water temperature [K]
Realpmax1.05*3*vesselVinitial*liq.li... 
Realpcodopmax/1.05Source parameter
Realpmin1Source parameter
Realpeps0.2Source parameter
RealmassLinitial[:]{0,1,0}Initial condition [M]
RealtempLinitial300Initial condition [T]

Modelica definition

model batchReacLiqAtoPInteractive "Reactor interactive model" 
  
  // Physical model
  extends PhysicalModel.batchReacLiqAtoP;
  
  // Interface
  input Real Iparam[7];
  input Real Ivar[10];
  input Real Istate[4];
  
  input Real CKparam;
  input Real CKvar;
  input Real CKstate;
  
  output Real O[21];
  output Real Release;
  
protected 
  Boolean CKparamIs0( start = true, fixed=true);
  Boolean CKvarIs0(   start = true, fixed=true);
  Boolean CKstateIs0( start = true, fixed=true);
  
equation 
  // Model release
  // -------------
  {Release}       = {1.0};
  
  // Interactive change of the parameters
  // ------------------------------------
  when CKparam           > 0.5 and     pre(CKparamIs0) or CKparam
                         < 0.5 and not pre(CKparamIs0) then
    
    CKparamIs0 =CKparam            < 0.5;
    
    reinit(liq.vessel.vesselVolume,Iparam[1]);
    reinit(liq.liquid.section,Iparam[2]);
    
    reinit(resistTherm.hTSteam,Iparam[3]);
    reinit(resistTherm.hTWater,Iparam[4]);
    reinit(resistTherm.heatExchArea,Iparam[5]);
    
    reinit(chRAtoP.kCoef[1],Iparam[6]);
    reinit(chRAtoP.kCoef[2],Iparam[7]);
    
  end when;
  
  // Interactive change of the input variables
  // -----------------------------------------
  when CKvar           > 0.5 and     pre(CKvarIs0) or CKvar
                       < 0.5 and not pre(CKvarIs0) then
    
    CKvarIs0 =CKvar            < 0.5;
    
    reinit(resistTherm.isHeater,Ivar[1]);
    reinit(fluidTemp.isHeater,Ivar[1]);
    
    reinit(resistTherm.isChiller,Ivar[2]);
    reinit(fluidTemp.isChiller,Ivar[2]);
    
    reinit(fluidTemp.tempHeat,Ivar[3]);
    reinit(fluidTemp.tempCool,Ivar[4]);
    
    reinit(sourceLiqCtrl.flowVSP,        -Ivar[5]);          // Positivo: llena el deposito
    reinit(sourceLiqCtrl.tempSP,Ivar[6]);
    reinit(sourceLiqCtrl.fractVSP[1],Ivar[7]);
    reinit(sourceLiqCtrl.fractVSP[2],Ivar[8]);
    reinit(sourceLiqCtrl.fractVSP[3],Ivar[9]);
    
    reinit(chRAtoP.calcConversion,Ivar[10]);
    
  end when;
  
  // Interactive change of the state variables
  // -----------------------------------------
  when CKstate           > 0.5 and     pre(CKstateIs0) or CKstate
                         < 0.5 and not pre(CKstateIs0) then
    
    CKstateIs0 =CKstate            < 0.5;
    
    reinit(liq.liquid.massL[1],Istate[1]);
    reinit(liq.liquid.massL[2],Istate[2]);
    reinit(liq.liquid.massL[3],Istate[3]);
    reinit(liq.liquid.tempL,Istate[4]);
    
  end when;
  
  // Output variables
  // ----------------
  O        = {
             liq.liquid.massL[1], liq.liquid.massL[2], liq.liquid.massL[3], liq.liquid.tempL,
             liq.liquid.liqHeight, liq.liquid.fluidV,
             fluidTemp.sourceTemp, fluidTemp.consumHeater, fluidTemp.consumChiller,
             fluidTemp.isHeater, fluidTemp.isChiller,
             -liqSource.inMass.massLF[1], -liqSource.inMass.massLF[2], -liqSource.inMass.massLF[3],
             -liqSource.totalMassF, liqSource.tempF,
             -chRAtoP.inMass.massLF[1], -chRAtoP.inMass.massLF[2], -chRAtoP.inMass.massLF[3],
             chRAtoP.conversion, chRAtoP.reactionRate[1]};
  
end batchReacLiqAtoPInteractive;

HTML-documentation generated by Dymola Tue Jul 24 19:07:52 2007.