import matplotlib.pyplot as plt #%% Simulation s = GEKKO(remote=False) #1 step of simulation, discretization matches MHE s.time = np.linspace(0, .1, 2) #Receive measurement from simulated control s.Tc = s.MV(value=300) s.Tc.FSTATUS = 1 #receive measurement s.Tc.STATUS = 0 #don't optimize #State variables to watch s.Ca = s.SV(value=.8, ub=1, lb=0) s.T = s.SV(value=325, lb=250, ub=500) #other parameters q = s.Param(value=100) V = s.Param(value=100) rho = s.Param(value=1000) Cp = s.Param(value=0.239) mdelH = s.Param(value=50000) ER = s.Param(value=8750) k0 = s.Param(value=7.2 * 10**10) UA = s.Param(value=5 * 10**4) Ca0 = s.Param(value=1) T0 = s.Param(value=350) #Variables
# U - Overall Heat Transfer Coefficient (W/m^2-K) # A - Area - this value is specific for the U calculation (m^2) UA = 5e4 # initial conditions Tc0 = 280 T0 = 304 Ca0 = 1.0 tau = m.Const(value=0.5) Kp = m.Const(value=1) m.Tc = m.MV(value=Tc0, lb=250, ub=350) m.T = m.CV(value=T_ss) m.rA = m.Var(value=0) m.Ca = m.CV(value=Ca_ss) m.Equation(m.rA == k0 * m.exp(-EoverR / m.T) * m.Ca) m.Equation(m.T.dt() == q/V*(Tf - m.T) \ + mdelH/(rho*Cp)*m.rA \ + UA/V/rho/Cp*(m.Tc-m.T)) m.Equation(m.Ca.dt() == q / V * (Caf - m.Ca) - m.rA) #MV tuning m.Tc.STATUS = 1 m.Tc.FSTATUS = 0 m.Tc.DMAX = 100 m.Tc.DMAXHI = 20 # constrain movement up m.Tc.DMAXLO = -100 # quick action down