Mxarray error using set_param in Function Block Simulink

3 views (last 30 days)
Hello !
I have a model which has 3 layers : Subsystem => 2 subsystems => 1 Matlab Function block (in each of both parent subsystem).
The input of the Function block can take the value : 1, 2 or 3 .
I have this code :
y = u;
coder.extrinsic('set_param','get_param','gcs');
parent = get_param(gcs,'parent');
parent2 = get_param(parent, 'parent');
Color = get_param(parent2, 'BackgroundColor');
if u == 3
set_param(get_param(parent, 'parent'),'BackgroundColor','red');
elseif u == 2
if Color == 'red'
else
set_param(get_param(parent, 'parent'),'BackgroundColor','orange');
end
else
if Color == 'red' || Color == 'orange'
else
set_param(get_param(parent, 'parent'),'BackgroundColor','green');
end
end
Explanation :
When the block receive 3 the top Subsystem become red, 2 => Orange and 1 => Green
If he is already red he stay red, if he is already orange he can be red but not green.
Error :
Expected either a logical, char, int, fi, single, or double. Found an mxArray.
MxArrays are returned from calls to the MATLAB interpreter and are not supported inside expressions.
They may only be used on the right-hand side of assignments and as arguments to extrinsic functions.
I don't understand why Color is not a string value as it originate from get_param function.
Thanks for help

Accepted Answer

Fangjun Jiang
Fangjun Jiang on 4 Mar 2020
When comparing char array, use strcmp() or isequal(), not to use "==", for example
MyColor='red'
strcmp(MyColor,'green')
isequal(MyColor,'green')
MyColor=='green' will cause error.
  1 Comment
Lucas S
Lucas S on 5 Mar 2020
Ok i don't understand i tried yesterday with strcmp i had the same mxarray error and it worked with isequal today. Thank you !

Sign in to comment.

More Answers (0)

Categories

Find more on Simulink Functions in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!