App Designer · Selectores de escalas continuas y discretas
En mi artículo anterior hice una introducción a la representación de escalas con App Designer.
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”.
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.
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;
endDe 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







