Mxarray error using set_param in Function Block Simulink

4 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;
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'
set_param(get_param(parent, 'parent'),'BackgroundColor','orange');
if Color == 'red' || Color == 'orange'
set_param(get_param(parent, 'parent'),'BackgroundColor','green');
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=='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)

Community Treasure Hunt

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

Start Hunting!