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.
Name | Description |
---|---|
batchReacLiqAtoPInteractive | Reactor interactive model |
Type | Name | Default | Description |
---|---|---|---|
Integer | nComp | 3 | Component number of the liqid mixture |
Integer | numChR | 1 | Number of irreversible chemical reactions |
Boolean | Ejs | true | |
Boolean | Sysquake | false | |
Real | CpCoefMInitial[nComp, 7] | [4.5E3, 0, 0, 0, 0, 0, 0; 4.... | [J/(Kg*K)] |
Real | massEnthalpyRefInitial[nComp] | {167E4,0,0} | Specific (per mass) enthalpy at reference temperature [J/Kg] |
Real | tempRefInitial | 300 | Reference temperature [K] |
Real | molecWeightInitial[nComp] | {0.1,0.018,0.1} | Molecular weight [Kg/mol] |
Real | densityInitial[nComp] | {1E3,1E3,1E3} | Components density [Kg/m3] |
Real | vesselVinitial | 5 | Initial reactor volume [m3] |
Real | vesselSinitial | 3 | Initial reactor section [m2] |
Real | stoichCoefInitial[numChR, nComp] | [-1, 0, 1] | Stoich coeffs. |
Real | kCoefInitial[2] | {4E6,-7.9E3} | Reaction velocity coeffs. [{s-1,K}] |
Real | heatExchAreaInitial | 3.3 | Exchanger area [m2] |
Real | hTSteamInitial | 1360 | Heat-transfer coeff. of the vapor [W/(m2.K)] |
Real | hTWaterInitial | 1180 | Heat-transfer coeff. of the water [W/(m2.K)] |
Real | tempSteam | 393 | Vapor temperature [K] |
Real | tempWater | 288 | Water temperature [K] |
Real | pmax | 1.05*3*vesselVinitial*liq.li... | |
Real | pcodo | pmax/1.05 | Source parameter |
Real | pmin | 1 | Source parameter |
Real | peps | 0.2 | Source parameter |
Real | massLinitial[:] | {0,1,0} | Initial condition [M] |
Real | tempLinitial | 300 | Initial condition [T] |
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;