How to Make a Simulink Scheduler for a Matlab Block Function to run each 40 ms of simulation?

7 views (last 30 days)
Hello, I am trying to make a controller for a system that must run every 40-50 ms. I am having difficulties with Stateflow because if I try to adapt the example given by Mathworks the matlab blocks runs just once.
In the picture you see the controller that I adapted from the example
this is "Edge to Function" block
and this is the simple subsystem called by Call() event
inside the matlab block there is only
j = 0;
for i = 1:10
j = j+1;
end
and here the plot of the output j, as you can see the block is triggered just once
Can you please help me to understand how to call the matlab block every 40 seconds or address me to a good stateflow scheduler tutorial? I haven't been lucky

Accepted Answer

Fangjun Jiang
Fangjun Jiang on 10 Aug 2022
Use a Function-call Generator block, specify the sample time. Put the MATLAB Function block inside a triggered subsystem, specify the trigger as Function-call.
  3 Comments
Gianluca Mammone
Gianluca Mammone on 18 Aug 2022
Edited: Gianluca Mammone on 18 Aug 2022
My task is to create a controller that runs every 40 Ms. The dynamic differential model of the plant is a matlab function followed by integrators that calculate the state.
This controller every 40 ms is triggered, collect the actual state (the output of the integrator which is the output of the Matlab Function Block), and gives the value of the controlled variable.
The controller is quite heavy (MPC with QP), so I am not too prone to use zero-older hold block
EDIT: I think I solved it, thank you for your patience.
One of the inputs (let's call it dx) of the triggered block was the direct output of the matlab function. Since the matlab function needed the output of the controller to run, there was this data dependency where dx was not initialized or defined.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!