Is it possible to design a controller in simulink using experimental data only?

6 views (last 30 days)
Hi, Please I am new to Simulink, I need to design a controller from experimental data(input is Speed and output is differential pressure). I have a model designed using simulink blocks, now I need a controller to tune this model. Each time I try to linearize I get this error In "linearize(modelname,io)" using block substitution the block Control_plant_input_output/PID Controller cannot be substituted due to an error in the MATLAB function Speed. The error is: Undefined function 'Speed' for input arguments of type 'struct'.. Any pointer on what to do next. please help.

Accepted Answer

Arkadiy Turevskiy
Arkadiy Turevskiy on 24 Jun 2014
Yes, you can follow the workflow explained here . Note that this requires R2014a.
  2 Comments
Arkadiy Turevskiy
Arkadiy Turevskiy on 24 Jun 2014
If you want more specific help, please attach the model as well as the description of what you did.
felix
felix on 25 Jun 2014
Thank you for your prompt response. Although, I am using R2012b. I can the R2014a, if that will help. Here is my design. The model is already in the subsystem, which I created by copying all the blocks and then create subsystem from selection. What i am trying to achieve is to create a controller to tune the input(speed) to match output(DP), such that as speed varies, there is a matching DP. The lookup table has data in it and the centrifugal pump too. Thanks for your help sir.

Sign in to comment.

More Answers (2)

Arkadiy Turevskiy
Arkadiy Turevskiy on 26 Jun 2014
The model as provided does not quite make sense, as it uses positive feedback.
Here is what I did to get some sort of controller design (without really understanding physics of the system):
  • I commented though the lookup table block for now
  • I changed sum block to use negative feedback
  • Changed step block parameters
  • Changed PID to PI and set integrator initial condition to 0.
I then pressed "tune" button in the PID Controller block and accepted default tuning the too, came up with:
I then unchecked the limit on the number of data points shown in the display block
and ran the simulation getting this result:
The overshoot is a bit high, so I went to the PID Tuner and reduced the bandwidth by an order of magnitude:
I updated block parameters with tuned value, and ran the simulation for 5 secs (as it seems nothing is really happening after 5 secs):
As this image shows, we got rid of the overshoot but disturbance rejection is now worse than with the original design. The disturbance is coming from here:
To check that I set the ramp slope to 0 and reran the simulation. response looks pretty good.
Hope this helps you get started.
  1 Comment
felix
felix on 27 Jun 2014
I want to say a big thank you for helping me get started on this. I didn't know the physics of the model does not make any sense. I was only trying to use measured data extracted from digitized graph to create a model that will generate same output as that seen on the graph. There are no actual equations or physics, if there is any pointer on this I will appreciate it. But all the same, I want to say a big thank you for this exposure. God bless you. Regards to everyone at Mathworks and your family... Thanks!!!

Sign in to comment.


Magdi Nabi
Magdi Nabi on 3 Oct 2017
Hi, i need to design model like yours but the input is flow ( 2 inputs) and 1 out put i need to control the flow by vary the speed of both pumps so could you please guide me how to do that using simulink?
i know how to design the controller, my problem is to design simulation model by experimental data?
thank you very much

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!