Sitemap

App Designer · Selectores de escalas continuas y discretas

4 min readJun 17, 2023

--

Continuando la idea de aumentar las funcionalidades de las aplicaciones, se incorporó como componente de instrumentación el “knob” o selector. Este componente hereda sus propiedades y métodos de la clase “uiknob”, disponible en Matlab desde la versión R2016a; el mismo dispone de dos variantes que se definen con la propiedad “style”.

La principal diferencia entre estos estilos se encuentra en las propiedades que controlan sus datos; que para el estilo continuo tiene la propiedad “Limits”, que es un vector con el máximo y el mínimo valor posible y otras propiedades muy similares a la del componente Gauge; y que para el estilo discreto tiene las propiedades “Items”, que contiene un “cell” con las etiquetas que se muestran y la propiedad “ItemsData” que es un vector numérico asociado a la propiedad “Items”.

Press enter or click to view image in full size

Para el control de los eventos relacionados con los componentes se tiene el método “ValueChangedFcn” , que se activa cuando se cambia el estado del componente; el cual se crea y funciona similar a los “callback” de otros componentes ya citados. Como se tienen varios estados en los que puede estar, para realizar una acción se necesita una sistema controlador de flujo del programa que en Matlab pueden ser la bifurcación condicional “if-elseif-else-end” o la bifurcación de estados “switch-case-otherwise-end”. Pero a su vez se cuentan con datos que pueden ser discretos y continuos en dependencia de la naturaleza del componente seleccionado, por lo que para elementos continuos es recomendable implementar una bifurcación condicional ya que permite determinar, mediante operadores lógicos, en cuál o cuáles condiciones debe accionar una determinada tarea; y para elementos discretos se recomienda una bifircación de estados la cual permite seleccionar de una agrupación de datos conocidos.

Get Josue Hernández’s stories in your inbox

Join Medium for free to get updates from this writer.

La aplicación de esta sección consta de dos “knob”, uno continuo y otro discreto, que al cambiar de estado actualiza el valor correspondiente en el otro y muestra el valor en un “EditField” numérico.

Press enter or click to view image in full size

Para que se actualice un componente cuando se cambia el valor en el otro se utilizará el método “ValueChangedFcn”. En los “callback” correspondientes se encuentra la lógica del programa, que para el “knob”: “ContinuoKnob”, se implementa una bifurcación condicional que en función de qué valor se selecciona determina que estado le corresponde al “DiscretoKnob”.

% Value changed function: ContinuoKnob 
function ContinuoKnobValueChanged(app, event)
value = app.ContinuoKnob.Value;

if value < 30
val = 'Off';
elseif value < 60
val = 'Low';
elseif value < 100
val = 'Medium';
else
val = 'High';
end

app.DiscretoKnob.Value = val;
app.ValorEditField.Value = value;
end

De forma similar sucede con el “DiscretoKnob”, al ejecutarse el “callback” de cambio de valor se necesita escoger que valor asignarle al “ContinuoKnob”. Como los resultados posibles son conocidos — los “Items” del “DiscretoKnob” — se utiliza una bifurcación de estados, aunque se puede implementar una bifurcación condicional con una lógica de igualdad entre cada uno de los estados conocidos y el estado actual del componente.

% Value changed function: DiscretoKnob 
function DiscretoKnobValueChanged(app, event)
value = app. DiscretoKnob.Value;
switch value
case 'Low'
val = 30;
case 'Medium'
val = 60;
case 'High'
val = 100;
otherwise
val = 0;
end

app.ContinuoKnob.Value = val;
app.ValorEditField.Value = val;
end

--

--

Josue Hernández
Josue Hernández

Written by Josue Hernández

Senior Django Developer · However, I like JavaScript. To see my projects and my cv visit https://josueisai.com