필터 지우기
필터 지우기

Simulink - vary which part of a structure is accessed in a matlab function block (using a bus)

조회 수: 1 (최근 30일)
Hello,
Within a matlab function block can I dictate what part of a structure is accessed based on one of the function blocks inputs?
I am using an embedded 'matlab function' block in simulink to control the value of a force. The force depends on time and 1 other parameter (that I have called 'which_force'). The various values for Force are contained in a structure. I use a bus to grant Simulink access to the structure.
The structure looks like:
Forces.which_force1.Heave
Forces.which_force2.Heave
Here is a simplified version of the code:
function F_Heave = get_force(Forces, Clock, which_force)
F_Heave = Forces.(which_force).Heave(Clock)
An error occurs with (which_force) that states:
'Non-constant expression or empty matrix. This expression must be constant because its value determines the size or class of some expression. In this context, the value of the string must be known.'
I have also applied which_force from a constant block and I still receive the same error message.

채택된 답변

Kaustubha Govind
Kaustubha Govind 2013년 10월 9일
I think the only way this code might work is if the variable which_force is configured as a non-tunable parameter of the block, instead of as an input signal.
  댓글 수: 5
Leo
Leo 2013년 10월 17일
Kaustubha Govind:
The coder.extrinsic worked and seemed like a neat solution. However the model run took 18 minuts as opposed to the current method (using simulink switch blocks) which takes 50 seconds.
Ketan :
The controlflow that you suggested brought the simulation time down to 150 seconds but was still not quick enough to compete with the switch blocks which take 50 secs.
The reason I did not wish to continue using switch blocks is that I am expanding the model and they will take a long time to create as which_force has 29 options and there are many variables (thus switch blocks) that use depend on it. Unfortunately it looks like I will need to continue with the switch blocks.
Thanks for both your help,
Leo
Ketan
Ketan 2013년 10월 20일
Hi Leo,
If you are evaluating the performance of a model containing MATLAB Function blocks, you may want to disable debugging for the MATLAB Function blocks. By default they are configured for debugging. See the following page for information on controlling function block debugging:
Ketan

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Simulink Functions에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by