Basic Slider Switch question

6 visualizaciones (últimos 30 días)
Matthew Mishrikey
Matthew Mishrikey el 20 de Dic. de 2021
Editada: Matthew Mishrikey el 9 de Feb. de 2022
I was curious if it was possible to make a slider switch dashboard element control more than one block simultaneously. Alternately, can I use a switch to somehow set a global parameter that the whole sim can access?

Respuesta aceptada

Benjamin Thompson
Benjamin Thompson el 8 de Feb. de 2022
Looks like you can only connect the Slider Switch to one block. But if that was a Constant block connected to a Data Store Write, then you could put Data Store Reads throughout your model and in that way redistribute your parameter change to more points.
  4 comentarios
Matthew Mishrikey
Matthew Mishrikey el 8 de Feb. de 2022
Is it possible to interface a data store read with a workspace variable?
I think your suggestion would probably work, but it would be preferable not to clutter these blocks with so many inputs.
Benjamin Thompson
Benjamin Thompson el 8 de Feb. de 2022
You can also use set_param to change parameters on blocks. If you go to Model Properties you can add M-code to be called at certain times, like during model init or simulation start. Perhaps there, you could read your data value from the workspace or something like that, then use it to set block parameters in different places in the model. This would not change when you move your slides as you originally wanted.
If you can put all blocks that depend on the slider in a masked subsystem, then your slider could just change a parameter in the mask. Then through the parameter promotion mechanism you can assign block parameters within the mask to one parameter that is set by the user in the mask.

Iniciar sesión para comentar.

Más respuestas (2)

Matthew Mishrikey
Matthew Mishrikey el 9 de Feb. de 2022
I think I'm getting closer to an answer here.
I setup slider switch to control a constant block, which feeds a data store write, which writes to a data store memory.
A data store read then writes this value to the base workspace.
To access this value in a matlab function, I can do it two ways -
first, I can use a data store read to feed an input to a matlab function (rmathfunc in image).
second, I can declare the data store variable as global inside a matlab function (tmathfunc) and access it without an input to the function.
In the simscape LOAD element, to access R_ohms, I tried to set the resistance to resval. I have to run the sim two times though after changing the slider before the updated value makes it to the simscape component. That's not so nice.
Sim attached.

Matthew Mishrikey
Matthew Mishrikey el 9 de Feb. de 2022
Editada: Matthew Mishrikey el 9 de Feb. de 2022
I think I figured out a way. I hope there's a better solution because this seems like a royal pain.
1) in the simscape component, set the parameter to a base workspace variable.
2) slider switch controls a constant block.
3) constant block sets a data store write, and also a to_workspace block.
4) to control the simscape component with the slider switch, you need to create the workspace variable before the block loads. Do this with model level Callbacks. In this case I do
resval = str2num(get_param(strcat(bdroot,'/Constant'),"Value"));
in PostLoadFcn, InitFcn, and also StartFcn.
5) Matlab Function blocks can access the data store memory (either by a data store read, or by Edit Data | add global variable - must declare data store memory as global in function).
I played around with ways to have the matlab function blocks access the workspace variable directly, to elminate the data store memory middleman, but didn't have any luck.
Anyway, thanks for your comments Benjamin, helped me get across the finish line here.

Categorías

Más información sobre Nonlinear Operators en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by