How do I make a Simulink embedded function run independent of the time step of the model?

조회 수: 4 (최근 30일)
So to explain on this: Let us say I have a simulink model with multiple blocks that I have to run for 100 sec with a time step of 1 sec. The model runs real time. I have added an embedded function added to the model that should run at time = 20 sec only once. However, the embedded function has lots of computations in it, and thus at time = 20 sec, the model takes some time to run the embedded function and thus does not run real time anymore. The question is: I need the function to run at time = 20 sec, but I dont need it to run in one time step necessarily (i.e. the results of the function do not feed into any other block or anything, it is just a result that I want to look at at the end of the 100sec). Can I make the function run independently of the model, i.e. have the model run in real time, and the function take the time it needs to finish independently (as long as it doesn't change the real time performance of the model)? Hopefully, my question makes sense.

답변 (1개)

Venkatachala Sarma
Venkatachala Sarma 2016년 1월 13일
Hi,
It is currently not possible to execute a block as an independent task or a background task directly in Simulink. Simulink just does single tasking and does not support multi tasking at the moment. There are ways to start the block after a particular major step time like using a Clock block from Simulink/Sources and using simulation time feature of a block (get_param). Although you could design your code in the MATLAB function block to indirectly maintain real-time by saving the states and retrieving the states later, it is directly not possible to run a block in background.
One workaround for the case provided here is to save all the data in a '.mat' file and run the logic separately after the execution of the model.
Regards
-Venkatachala Sarma
  댓글 수: 2
Nassim Samad
Nassim Samad 2016년 1월 19일
Yes I was thinking of doing that (running the logic after the execution of the model using a callback function). However, this would not work if I am building my simulink model into an executable to run real time on a hardware. How would I be able to run the logic after the execution of the model? My point is, if there is an input to the hardware that is processed and filtered through the built simulink model, how can I post process the data for it if there is no workspace or anything to save the data to?
Venkatachala Sarma
Venkatachala Sarma 2016년 3월 8일
Please take a look at this example.
Try using triggered subsystem with clock block to track time and implement the embedded function as a pre-emptable task using the example in the link above.
Hope this helps.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by