#A programm to design an MPC on a bio reactor model #Auther: Amirreza Zamani Meighani #Supervisors: Johannes Jäschke - Mandar Thombre #Autumn 2020 #NTNU, Trondheim, Chemical Engineering Department ##Start of the code: include("Plant.jl") include("NMPC.jl") include("Parameters.jl") using Plots ## Defining Simulation Parameters clearconsole() sim_par = Simulation_Data() T0_sim = sim_par[:T0_sim] Tf_sim = sim_par[:Tf_sim] dt_sim = sim_par[:dt_sim] Tf_MPC = sim_par[:Tf_MPC] dt_MPC = sim_par[:dt_MPC] NCP = sim_par[:NCP] NFE_sim = sim_par[:NFE_sim] NFE_MPC = sim_par[:NFE_MPC] uk = sim_par[:uk] xₛₚ = sim_par[:xₛₚ] xk = sim_par[:xk] U_Plot = []; X1_Plot = []; X2_Plot = []; # push the starting point into the final vectors push!(U_Plot, uk[1]) push!(X1_Plot, xk[1]) push!(X2_Plot, xk[2]) ## Options for plotting, saving the figure and Eporting the data Plotting = false; Fig_Save = false; Export_Vars = false; ## Simulation of the plant println("Start Simulation!") for k in 1:NFE_sim global xk, uk, dt_sim xₛₚ_MPC = xₛₚ[k:k - 1 + NFE_MPC] uk = Solve_MPC(xk, uk, xₛₚ_MPC,NFE_MPC, NCP) xk = Plant(xk, uk, dt_sim); push!(U_Plot, uk[1]) push!(X1_Plot, xk[1]) push!(X2_Plot, xk[2]) end println("The objective function is satisfied successfully!") ## Plotting with the option to show/not show the figure. Also different backends can be choose! t_plot = collect(T0_sim:dt_sim:Tf_sim) p11 = plot( t_plot,[X1_Plot[nIter] for nIter in 1:NFE_sim+1],label="x1") p11 = plot!(t_plot,[X2_Plot[nIter] for nIter in 1:NFE_sim+1],label="x2") p11 = plot!(t_plot, xₛₚ[1:NFE_sim + 1], label="y_sp", linetype=:steppost, linestyle=:dash) p12 = plot(t_plot[1:end], [U_Plot[nIter] for nIter in 1:NFE_sim+1], label="u", linetype=:steppost) fig1 = plot(p11, p12, layout=(2, 1)); #Checking the choosed Options for plotting if Fig_Save == true savefig(fig1,"MPC_Results.svg") end if Plotting == true plotlyjs() #gr() println("Start Plotting!") display(fig1) println("Finish Plotting!") end ## Exporting Data if Export_Vars == true println("Start Exporting Data!") using CSV using DataFrames df = DataFrame(Name = ["x1","x2","U","SetPoint","Time"], Value = [X1_Plot, X2_Plot, U_Plot, xₛₚ[1:NFE_sim+1], t_plot] ) CSV.write("MPC_Results.csv", df) println("Finish Exporting Data!") end