Definir el comportamiento del gráfico utilizando acciones
Las acciones de estado y transición son instrucciones que se escriben dentro de un estado o junto a una transición para definir cómo se comporta un gráfico de Stateflow® durante la simulación. Para obtener más información, consulte Modelizar máquinas de estados finitos.
Ejemplo de acciones de estado y transición
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:
Los datos locales
n
se ajustan al valor de la entradau
.Los datos locales
n2
se ajustan al resto cuandon
se divide entre dos.Los datos de salida
y
se configuran comofalse
.
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 hace un gráfico de Stateflow mientras un estado está activo. Los tipos más comunes de acciones de estado son las acciones de entry
, during
y exit
.
Tipo de acción de estado | Abreviatura | Descripción |
---|---|---|
entry | en | La acción se produce en una unidad de tiempo cuando el estado se convierte en activo. |
during | du | La acción se produce en una unidad de tiempo en la que el estado ya está activo y el gráfico no cambia de estado. |
exit | ex | La acción se produce en una unidad de tiempo en la que el gráfico cambia de estado. |
Puede especificar el tipo de una acción de estado con su palabra clave completa (entry
, during
, exit
) o con su 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.
Esta tabla muestra el resultado de cada acción de estado en el gráfico de granizo.
Estado | Acción | Resultado |
---|---|---|
Init |
entry: n2 = rem(n,2); y = false; | Cuando Init se activa al inicio de la simulación, determina la paridad de n y establece y como false . |
exit: y = isequal(n,1); | Al salir de Init después de una unidad de tiempo, determina si n es igual a uno. | |
Even |
entry,during: n = n/2; n2 = rem(n,2); | Calcula el siguiente número de la secuencia de granizo (
|
Odd |
entry,during: n = 3*(n-y)+1; n2 = rem(n,2); | Calcula el siguiente número de la secuencia de granizo (3
Durante la mayor parte de la simulación, |
Tipos de acciones de transición
Las acciones de transición definen lo que hace un gráfico de Stateflow cuando una transición se aleja de un estado activo. Los tipos más comunes de acciones de transición son las condiciones y las acciones condicionales. Para especificar las acciones de transición, utilice una etiqueta con esta sintaxis:
[condition]{conditional_action}
condition
es una expresión booleana que determina si se produce la transición. Si no se especifica una condición, se asume una implícita que se evalúa como verdadera.
conditional_action
es una instrucción que se ejecuta cuando la condición que vigila la transición es verdadera. La acción condicional tiene lugar después de la condición, pero antes de cualquier acción de estado exit
o entry
.
Esta tabla muestra el resultado de cada acción de transición en el gráfico de granizo.
Transición | Acción | Tipo de acción | Resultado |
---|---|---|---|
Transición predeterminada a Init |
n = u | Acción condicional | Al inicio de la simulación, asigna el valor de entrada u a los datos locales n . |
Transición de Init a Even |
n2 == 0 | Condición | Cuando n es par, se produce la transición. El número 1 en el origen de esta transición indica que se evalúa antes de la transición a Odd . |
Transición de Init a Odd | Ninguna | Cuando n es par, se produce la transición. El número 2 en el origen de esta transición indica que se evalúa después de la transición a Even . | |
Transición de Odd a Even |
n2 == 0 | Condición | Cuando n es par, se produce la transición. |
Transición de Even a Odd |
n2 ~= 0 | Condición | Cuando n es par, se produce la transición. |
y = isequal(n,1) | Acción condicional | Cuando se produce la transición, determina si n es igual a uno. |
Examinar el comportamiento del gráfico
Suponga que desea calcular la secuencia de granizo que empieza con un valor de nueve.
En el bloque Constant (Simulink), introduzca un valor de
9
.En la pestaña Simulation, haga clic en Run
.
El gráfico responde con estas acciones:
En la unidad de tiempo t = 0, se produce la transición predeterminada a
Init
.La acción de transición establece el valor de
n
en 9.El estado
Init
se convierte en activo.Las acciones
entry
deInit
establecen el valor den2
en 1 y el dey
enfalse
.
En la unidad de tiempo t = 1, la condición
n2 == 0
es falsa, por lo que el gráfico prepara la transición aOdd
.La acción
exit
deInit
establece el valor dey
enfalse
.El estado
Init
se inactiva.El estado
Odd
se convierte en activo.Las acciones
entry
deOdd
establecen el valor den
en 28 y el den2
en 0.
En la unidad de tiempo t = 2, la condición
n2 == 0
es verdadera, por lo que el gráfico prepara la transición aEven
.El estado
Odd
se inactiva.El estado
Even
se convierte en activo.Las acciones
entry
deEven
establecen el valor den
en 14 y el den2
en 0.
En la unidad de tiempo t = 3, la condición
n2 ~= 0
es falsa, por lo que el gráfico no realiza ninguna transición.El estado
Even
se mantiene activo.Las acciones
during
deEven
establecen el valor den
en 7 y el den2
en 1.
En la unidad de tiempo t = 4, la condición
n2 ~= 0
es verdadera, por lo que el gráfico prepara la transición aOdd
.La acción de transición establece el valor de
y
enfalse
.El estado
Even
se inactiva.El estado
Odd
se activa.Las acciones
entry
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
= 1 en la unidad de tiempo t = 19.En la unidad de tiempo t = 20, el gráfico prepara la transición de
Even
aOdd
.Antes de que el estado
Even
se inactive, la acción de transición establece el valor dey
entrue
.El estado
Odd
se activa.Las acciones
entry
deOdd
no modificann
nin2
.El bloque Stop Simulation (Simulink) que está conectado a la señal de salida
y
detiene la simulación.
En la pestaña Simulation, en Review Results, haga clic en Data Inspector
.
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.