Main Content

Crear y ejecutar un gráfico de Stateflow

Un gráfico de Stateflow® es una representación gráfica de una máquina de estados finito formada por estados, transiciones y datos. Puede crear un gráfico de Stateflow para definir cómo un algoritmo de MATLAB® o un modelo de Simulink® reacciona a las señales de entrada externas, los eventos y las condiciones basadas en el tiempo. Para obtener más información, consulte Modelizar máquinas de estados finitos.

Por ejemplo, este gráfico de Stateflow presenta la lógica que subyace a un rectificador de media onda. El gráfico contiene dos estados con las etiquetas On y Off. En el estado On, la señal de salida del gráfico y es igual a la entrada x. En el estado Off, la señal de salida se establece en cero. Cuando la señal de entrada cruza cierto umbral t0, el gráfico cambia entre estos estados. Las acciones de cada estado actualizan el valor de y en cada unidad de tiempo de la simulación.

Stateflow chart with two states.

Este ejemplo muestra cómo crear este gráfico de Stateflow para la simulación en Simulink y la ejecución en MATLAB.

Crear el gráfico de Stateflow

Abrir el editor de Stateflow

El editor de Stateflow es un entorno gráfico para diseñar diagramas de transición de estados, diagramas de flujo, tablas de transición de estados y tablas de verdad. Antes de abrir editor de Stateflow, escoja el modo de ejecución del gráfico que más se ajuste a sus necesidades.

  • Para modelizar lógica condicional, basada en eventos y con marca de tiempo para algoritmos periódicos o de tiempo continuo de Simulink, utilice la función sfnew para crear un gráfico de Stateflow que pueda simular como un bloque en un modelo de Simulink. En la línea de comandos de MATLAB, introduzca:

    sfnew rectify     % create chart for simulation in a Simulink model

    Simulink crea un modelo llamado rectify que contiene un bloque Chart de Stateflow vacío. Para abrir el editor de Stateflow, haga doble clic en el bloque del gráfico.

  • Para diseñar lógica temporal y máquinas de estados reutilizables para aplicaciones de MATLAB, utilice la función edit para crear un gráfico de Stateflow independiente que se pueda ejecutar como un objeto de MATLAB. En la línea de comandos de MATLAB, introduzca:

    edit rectify.sfx  % create chart for execution as a MATLAB object

    Si el archivo rectify.sfx no existe, el editor de Stateflow crea un gráfico vacío con el nombre rectify.

Los componentes principales del Editor de Stateflow son el área de trabajo del gráfico, la paleta de objetos y el panel Symbols.

  • El área de trabajo del gráfico es un área de representación donde se crea un gráfico combinando estados, transiciones y otros elementos gráficos.

  • En la parte izquierda del área de trabajo, la paleta de objetos muestra un conjunto de herramientas para añadir elementos gráficos al gráfico.

  • En la parte derecha del área de trabajo, en el panel Symbols, se añaden datos, eventos y mensajes nuevos al gráfico y se resuelve cualquier símbolo sin definir o sin usar.

Default view of the Stateflow Editor.

Sugerencia

Después de crear el gráfico de Stateflow, puede copiar su contenido en otro gráfico con un modo de ejecución diferente. Por ejemplo, puede crear un gráfico para que se ejecute en MATLAB y copiar su contenido en un gráfico para su simulación en Simulink.

Añadir estados y transiciones

  1. Desde la paleta de objetos, haga clic en el icono State y mueva el puntero al área de trabajo del gráfico. Aparece un estado con su transición predeterminada. Para colocar el estado, haga clic en un punto del área de trabajo. En el comando de texto, introduzca el nombre de estado On y la acción de estado y = x.

    Chart with one state, On.

  2. Añada otro estado. Haga clic con el botón secundario y arrastre el estado On. Las indicaciones gráficas azules ayudan a alinear los estados horizontal o verticalmente. El nombre del estado nuevo cambia a Off. Haga doble clic en el estado y cambie la acción de estado a y = 0.

    Chart with two states, On and Off.

  3. Vuelva a alinear los dos estados y deténgase en el espacio entre los dos estados. Las indicaciones de transición azules indican diferentes formas para conectar los estados. Para añadir transiciones, haga clic en la indicación adecuada.

    De forma alternativa, para representar una transición, haga clic en el flanco de un estado y arrástrelo al flanco del otro estado.

    Chart with the two states joined by transitions.

  4. Haga doble clic en cada transición y escriba la condición de transición adecuada x<t0 o x>=t0. Las condiciones aparecen entre corchetes.

    Chart with transition conditions.

  5. Depure el gráfico:

    • Para mejorar la claridad, mueva cada etiqueta de transición a una ubicación adecuada encima o debajo de la transición correspondiente.

    • Para alinear y cambiar el tamaño de los elementos gráficos del gráfico, en la pestaña Format haga clic en Auto Arrange o presione Ctrl+Shift+A.

    • Para cambiar el tamaño del gráfico de modo que quepa en el área de trabajo, presione la barra espaciadora o haga clic en el icono Fit To View .

Resolver símbolos no definidos

Antes de poder ejecutar el gráfico, debe definir cada símbolo que se usa en el gráfico y especificar su alcance (por ejemplo, datos de entrada, datos de salida o datos locales). En el panel de Symbols, los símbolos no definidos están marcados con un distintivo de error rojo . La columna Type muestra el alcance sugerido de cada símbolo no definido basándose en su uso en el gráfico.

  1. Abra el panel Symbols.

    • Si está creando un gráfico en un modelo de Simulink, en la pestaña Modeling, en Design Data, seleccione Symbols Pane.

    • Si está creando un gráfico independiente para ejecutarlo en MATLAB, en la pestaña State Chart, seleccione Add Data > Symbols Pane.

  2. En el panel Symbols, haga clic en Resolve Undefined Symbols .

    • Si está creando un gráfico en un modelo de Simulink, el editor de Stateflow resuelve los símbolos x y t0 como datos de entrada e y como datos de salida .

    • Si está creando un gráfico independiente para ejecutarlo en MATLAB, el editor de Stateflow resuelve t0, x e y como datos locales .

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. Dado que el umbral t0 no cambia durante la simulación, cambie su alcance a datos constantes. En la columna Type, haga clic en el icono de tipo de datos situado junto a t0 y seleccione Constant Data.

  4. Establezca el valor del umbral en t0. En la columna Value, haga clic en la entrada vacía situada junto a t0 e introduzca un valor de 0.

  5. Guarde el gráfico de Stateflow.

Ahora el gráfico está listo para la simulación en Simulink o para su ejecución en MATLAB.

Simular el gráfico como un bloque de Simulink

Para simular el gráfico dentro de un modelo de Simulink, conecte el bloque del gráfico con otros bloques del modelo a través de puertos de entrada y de salida. Si desea ejecutar el gráfico desde la ventana de comandos de MATLAB, consulte Ejecutar el gráfico como un objeto de MATLAB.

  1. Para volver al editor de Simulink, en la barra del explorador en la parte superior del área de trabajo, haga clic en el nombre del modelo de Simulink: rectify. Si la barra del explorador no está visible, haga clic en el icono Hide/Show Explorer Bar en la parte superior de la paleta de objetos.

  2. Añada una fuente al modelo:

    • Desde la biblioteca Sources de Simulink, añada un bloque Sine Wave (Simulink).

    • Haga doble clic en el bloque Sine Wave y establezca Sample time en 0.2.

    • Conecte la salida del bloque Sine Wave con la entrada del gráfico de Stateflow.

    • Etiquete la señal como x.

  3. Añada un sumidero al modelo:

    • Desde la biblioteca Sinks de Simulink, añada un bloque Scope (Simulink) con dos puertos de entrada.

    • Conecte la salida del bloque Sine Wave con la primera entrada del bloque Scope.

    • Conecte la salida del gráfico de Stateflow con la segunda entrada del bloque Scope.

    • Etiquete la señal como y.

  4. Guarde el modelo de Simulink.

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. Para simular el modelo, haga clic en Run . Durante la simulación, el editor de Stateflow resalta los estados activos y las transiciones mediante la animación del gráfico.

  6. Después de simular el modelo, haga doble clic en el bloque Scope. El bloque Scope muestra los gráficos de las señales de entrada y salida a los gráficos.

    Scope block showing the input and output of the chart.

    Los resultados de la simulación muestran que el rectificador filtra valores de entrada negativos.

Ejecutar el gráfico como un objeto de MATLAB

Para ejecutar el gráfico en la ventana de comandos de MATLAB, cree un objeto el gráfico y llame a su función step. Si desea simular el gráfico dentro de un modelo de Simulink, consulte Simular el gráfico como un bloque de Simulink.

  1. Cree un objeto de gráfico r utilizando el nombre del archivo sfx que contiene la definición del gráfico como una función. Especifique el valor inicial para el valor x del gráfico como un par nombre-valor.

    r = rectify(x=0);
  2. Inicialice datos de entrada y salida para la ejecución del gráfico. El vector X contiene valores de entrada de una onda sinusoidal. El vector Y es un acumulador vacío.

    T = 0:0.2:10;
    X = sin(T);
    Y = [];
  3. Ejecute el objeto del gráfico llamando a la función step múltiples veces. Pase valores individuales del vector X como datos de gráfico x. Recopile los valores resultantes de y en el vector Y. Durante la ejecución, el editor de Stateflow resalta los estados activos y las transiciones mediante la animación del gráfico.

    for i = 1:51
        step(r,x=X(i));
        Y(i) = r.y;
    end
  4. Elimine el objeto de gráfico r del espacio de trabajo de MATLAB.

    delete(r)
  5. Examine los resultados de la ejecución del gráfico. Por ejemplo, puede llamar a la función stairs para crear una gráfica de escalones que compare los valores de X e Y.

    ax1 = subplot(2,1,1);
    stairs(ax1,T,X,color="#0072BD")
    title(ax1,"x")
    
    ax2 = subplot(2,1,2);
    stairs(ax2,T,Y,color="#D95319")
    title(ax2,"y")

    MATLAB figure showing the input and output of the chart.

    Los resultados de la ejecución muestran que el rectificador filtra valores de entrada negativos.

Temas relacionados