Definir el comportamiento del gráfico usando acciones de estado y etiquetas de transición
Las acciones de estado y las acciones de transición son instrucciones que se escriben dentro de un estado o en una transición, respectivamente, para definir cómo se comporta un gráfico de Stateflow® durante la simulación. Por ejemplo, las acciones de este gráfico definen una máquina de estados que verifica de forma empírica una instancia de la conjetura de Collatz. En la entrada numérica , el gráfico calcula la secuencia de granizo ... iterando la siguiente regla:
Si es par, .
Si es impar, .
La conjetura de Collatz establece que todos los enteros positivos tienen una secuencia de granizo que termina en 1.
El gráfico consta de tres estados. Al comienzo de la simulación, el estado Init
inicializa los datos del gráfico estableciendo lo siguiente:
Los datos locales
n
en el valor de la entradau
.Los datos locales
n2
en el resto cuandon
se divide entre dos.Los datos de salida
y
enfalse
.
Dependiendo de la paridad de la entrada, el gráfico cambia a estado Even
o Odd
. A medida que la actividad del estado cambia entre Even
y Odd
, el gráfico calcula los números de la secuencia de granizo. Cuando la secuencia alcanza un valor de uno, los datos de salida y
se convierten en true
y activan un bloque Stop Simulation (Simulink) en el modelo de Simulink®.
Tipos de acciones de estado
Las acciones de estado definen lo que un gráfico de Stateflow puede hacer mientras un estado está activo. Los tipos más comunes de acciones de estado son las acciones entry
, during
y exit
:
Las acciones
entry
se producen cuando el estado se convierte en activo.Las acciones
during
se producen en una unidad de tiempo en la que el estado ya está activo y el gráfico no cambia de estado.Las acciones
exit
se producen cuando el gráfico sale del estado.
Puede especificar el tipo de una acción de estado con una palabra clave completa (entry
, during
, exit
) o con una abreviatura (en
, du
, ex
). También puede combinar los tipos de acciones de estado con comas. Por ejemplo, una acción con el tipo combinado entry, during
se produce en la unidad de tiempo en la que el estado se convierte en activo y en cada unidad de tiempo posterior mientras el estado permanece activo.
El gráfico de granizo contiene acciones en estos estados:
Init
: cuando este estado se convierte en activo al inicio de la simulación, la acciónentry
determina la paridad den
y establecey
enfalse
. Cuando el gráfico sale deInit
después de una unidad de tiempo, la acciónexit
determina sin
es igual a uno.Even
: cuando este estado se convierte en activo y en cada unidad de tiempo posterior en la que el estado está activo, la acción combinadaentry, during
calcula el valor y la paridad para el siguiente número de la secuencia de granizo,n/2
.Odd
: cuando este estado se convierte en activo y en cada unidad de tiempo posterior en la que el estado está activo, la acción combinadaentry, during
comprueba sin
es mayor que uno y, si lo es, calcula el valor y la paridad para el siguiente número de la secuencia de granizo,3*n+1
.
Tipos de etiquetas de transición
Las etiquetas de transición definen lo que un gráfico de Stateflow puede hacer cuando el estado activo cambia. Los tipos más comunes de etiquetas de transición son las condiciones y las acciones de condición.
[Condition]{ConditionAction}
Condition
es una expresión booleana que determina si se produce la transición. Si no se especifica una condición, la transición se produce una unidad de tiempo después de que el estado de origen se convierte en activo.
ConditionAction
es una instrucción que se ejecuta cuando la condición que vigila la transición es verdadera. La acción de condición tiene lugar después de la condición, pero antes de cualquier acción de estado exit
o entry
.
El gráfico de granizo contiene acciones en estas transiciones:
Transición predeterminada a
Init
: al inicio de la simulación, la acción de condiciónn = u
asigna el valor de entradau
a los datos localesn
.Transición de
Init
aEven
: la condiciónn2 == 0
determina que la transición se produce cuandon
es par. El número 1 en el origen de esta transición indica que esta transición se evalúa antes de la transiciónInit
aOdd
.Transición de
Odd
aEven
: la condiciónn2 == 0
determina que la transición se produce cuandon
es par.Transición de
Even
aOdd
: la condiciónn2 ~= 0
determina que la transición se produce cuandon
es impar. En este caso, la acción de condicióny = isequal(n,1)
determina sin
es igual a uno.
Examinar el comportamiento del gráfico
Para calcular la secuencia de granizo que empieza con un valor de nueve:
1. En el bloque Constant, introduzca un valor de 9
.
2. En la pestaña Simulation, haga clic en Run. El gráfico responde con estas acciones:
En la unidad de tiempo , se produce la transición predeterminada a
Init
. La acción de transición establece el valor den
en 9. El estadoInit
se convierte en activo. Las accionesentry
deInit
establecen el valor den2
en 1 y el dey
enfalse
.En la unidad de tiempo , la condición
n2 == 0
es falsa, por lo que el gráfico prepara la transición aOdd
. La acciónexit
deInit
establece el valor dey
enfalse
. El estadoInit
se convierte en inactivo y el estadoOdd
se convierte en activo. La acciónentry
deOdd
establecen
en 28 yn2
en 0.En la unidad de tiempo , la condición
n2 == 0
es verdadera, por lo que el gráfico prepara la transición aEven
. El estadoOdd
se convierte en inactivo y el estadoEven
se convierte en activo. La acción entry deEven
establecen
en 14 yn2
en 0.En la unidad de tiempo , la condición
n2 ~= 0
es falsa, por lo que el gráfico no realiza ninguna transición. El estadoEven
se mantiene activo. La acciónduring
deEven
establecen
en 7 yn2
en 1.En la unidad de tiempo , la condición
n2 ~= 0
es verdadera, por lo que el gráfico prepara la transición aOdd
. La acción de transición establecey
en falso. El estadoEven
se convierte en inactivo y el estadoOdd
se convierte en activo. Las accionesentry
deOdd
establecen el valor den
en 22 y el den2
en 0.El gráfico continúa calculando la secuencia de granizo hasta llegar a un valor de
n
en la unidad de tiempo .En la unidad de tiempo , el gráfico prepara la transición de
Even
aOdd
. La acción de transición establece el valor dey
entrue
. El estadoEven
se convierte en inactivo y el estadoOdd
se convierte en activo. Las accionesentry
deOdd
no modificann
nin2
. El bloque Stop Simulation que está conectado a la señal de saliday
detiene la simulación.
3. En la pestaña Simulation, en Review Results, haga clic en Data Inspector.
4. Para ver los valores de la secuencia de granizo, en Simulation Data Inspector, seleccione la señal registrada n
.
La secuencia de granizo alcanza el valor de uno después de 19 iteraciones.