MATLAB: Mxarray error using set_param in Function Block Simulink

matlab functionmxarraysimulink

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

Best Answer

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.