Change value of one element of a vector valued Simulink Constant Block

8 visualizaciones (últimos 30 días)
Jon
Jon el 27 de Jul. de 2020
Comentada: Jon el 28 de Jul. de 2020
I would like to programmatically change one element of a vector valued Simulink Constant Block.
So for example suppose I have a constant block whose value is currently assigned the vector value [3,1,5] and I wish to change the second element from 1 to 6 so that the constant block will have the value [3,6,5].
I assume that I will need to use set_param for this purpose. The difficulty is that the Value parameter of a constant block must be set as a string, and it seems you would have to enter the entire string, describing the vector of values.
For example, I can use set_param to change the whole vector of values
set_param(gcb,'Value','[3,6,5]')
but is there some way to directly change just the second element?
The only thing I've been able to come up with requires mulitple lines of code and seems quite awkward:
valstr = get_param(gcb,'Value'); % get Value as a string, e.g. '[3 1 5]'
val = str2num(valstr(2:end-1)); % remove left and right brackets and convert to a numerical array
val(2) = 6; % assign new value to second element
valstr = mat2str(val); % convert to string with left and right brackets, e.g. '[3 6 5]'
set_param(gcb,'Value',valstr) % assign new value
If anyone has a cleaner way of doing this I would appeciate it. Otherwise, of course I could put those 5 lines of code into a little function, and call it when needed, but it seems like a hard way to go.
Thanks for your assistance
  2 comentarios
Paul
Paul el 28 de Jul. de 2020
I don't think there is a cleaner way because Value can be any valid Matlab expression. I will be very interested if someone comes up with a better solution.
You don't need that line to remove the brackets from valstr. str2num should work on valstr directly for your use case where valstr is a vector expressed in char format.
>> valstr = '[1 3 5]';
>> str2num(valstr)
ans =
1.00 3.00 5.00
Jon
Jon el 28 de Jul. de 2020
Thanks for the tip on not needing to remove the brackets. Needing to do that really seemed a little absurd. I fell into it somehow starting with str2double which didn't like arguments such as '[1 3 5]' at all. I thought I had tried str2num with the square brackets and it hadn't worked, but I guess I had gotten confused.

Iniciar sesión para comentar.

Respuestas (0)

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by