Controlar la ejecución de gráficos con acciones de condición
Comportamiento de una acción de condición
Este ejemplo muestra el comportamiento de una acción de condición simple en una ruta de transición con varios segmentos. El gráfico usa ordenación implícita de transiciones salientes (consulte ).
Inicialmente, el gráfico está desactivado. El estado A
está activo. Las condiciones C_one
y C_two
son falsas. Se produce el evento E_one
y se activa el gráfico, que procesa el evento desde la raíz hacia abajo a través de la jerarquía:
La raíz del gráfico comprueba si existe una transición válida como resultado de
E_one
. Se detecta un segmento de transición válido desde el estadoA
hasta una intersección conectiva. La acción de condiciónA_one
se detecta en el segmento de transición válido y se ejecuta y completa de inmediato. El estadoA
se mantiene activo.Dado que las condiciones en los segmentos de transición a posibles destinos son falsas, ninguna de las transiciones completadas es válida.
Las acciones during (
durA()
) del estadoA
se ejecutan y se completan.El estado
A
se mantiene activo.El gráfico vuelve a su estado de inactividad.
Esta secuencia completa la ejecución de este gráfico de Stateflow® asociado al evento E_one
cuando el estado A
está inicialmente activo.
Comportamiento de una acción de condición y transición
Este ejemplo muestra el comportamiento de una acción de condición y transición simple especificada en una transición desde un estado exclusivo (OR) a otro.
Inicialmente, el gráfico está desactivado. El estado A
está activo. La condición C_one
es verdadera. Se produce el evento E_one
y se activa el gráfico, que procesa el evento desde la raíz hacia abajo a través de la jerarquía:
La raíz del gráfico comprueba si existe una transición válida como resultado de
E_one
. Se detecta una transición válida desde el estadoA
al estadoB
. La condiciónC_one
es verdadera. La acción de condiciónA_one
se detecta en la transición válida y se ejecuta y completa de inmediato. El estadoA
se mantiene activo.Las acciones exit (
ExitA()
) del estadoA
se ejecutan y se completan.El estado
A
está marcado como inactivo.La acción de transición
A_two
se ejecuta y completa.El estado
B
está marcado como activo.Las acciones entry (
entB()
) del estadoB
se ejecutan y se completan.El gráfico vuelve a su estado de inactividad.
Esta secuencia completa la ejecución de este gráfico de Stateflow asociado al evento E_one
cuando el estado A
está inicialmente activo.
Crear acciones de condición con un bucle for
Las acciones de condición y las intersecciones conectivas se utilizan para diseñar una construcción de bucle for
. Este ejemplo muestra el uso de una acción de condición y una intersección conectiva para crear una construcción de bucle for
. El gráfico usa ordenación implícita de transiciones salientes (consulte ).
Consulte For-Loop Construct para ver el comportamiento de este ejemplo.
Transmitir eventos a estados paralelos (AND) con acciones de condición
Este ejemplo muestra cómo utilizar acciones de condición para transmitir eventos de inmediato a estados paralelos (AND). El gráfico usa ordenación implícita de estados paralelos (consulte ).
Consulte Broadcast Events in Condition Actions para ver el comportamiento de este ejemplo.
Sugerencia
Evite utilizar transmisiones de eventos locales no dirigidas. Las transmisiones de eventos locales no dirigidas pueden provocar un comportamiento recurrente no deseado en su gráfico. En lugar de ello, utilice transmisiones dirigidas para enviar los eventos locales. Para obtener más información, consulte Broadcast Local Events to Synchronize Parallel States.
Durante la simulación, los gráficos de Stateflow pueden detectar transmisiones de eventos locales no dirigidas. Para controlar el grado de acción de diagnóstico, abra el cuadro de diálogo Configuration Parameters y, en el panel Diagnostics > Stateflow, establezca el parámetro Undirected event broadcasts en none
, warning
o error
. El ajuste predeterminado es warning
. Para obtener más información, consulte Undirected event broadcasts (Simulink).
Evitar el comportamiento cíclico
Este ejemplo muestra una notación que se debe evitar cuando se utilizan transmisiones de eventos como acciones de condición, ya que la semántica produce un comportamiento cíclico.
Inicialmente, el gráfico está desactivado. El estado On
está activo. Se produce el evento E_one
y se activa el gráfico, que procesa el evento desde la raíz hacia abajo a través de la jerarquía:
La raíz del gráfico comprueba si existe una transición válida como resultado de
E_one
.Se detecta una transición válida desde el estado
On
al estadoOff
.La acción de condición en la transición transmite el evento
E_one
.El evento
E_one
se detecta en la transición válida, que se ejecuta de inmediato. El estadoOn
se mantiene activo.La transmisión del evento
E_one
activa el gráfico una segunda vez.Vaya al paso 1.
Los pasos 1 a 5 se siguen ejecutando de forma cíclica. La etiqueta de transición que indica un activador en el mismo evento que el evento de transmisión de acción de condición produce un comportamiento cíclico irrecuperable. Esta secuencia nunca se completa cuando se transmite el evento E_one
y el estado On
está activo.
Sugerencia
Evite utilizar transmisiones de eventos locales no dirigidas. Las transmisiones de eventos locales no dirigidas pueden provocar un comportamiento recurrente no deseado en su gráfico. En lugar de ello, utilice transmisiones dirigidas para enviar los eventos locales. Para obtener más información, consulte Broadcast Local Events to Synchronize Parallel States.
Durante la simulación, los gráficos de Stateflow pueden detectar transmisiones de eventos locales no dirigidas. Para controlar el grado de acción de diagnóstico, abra el cuadro de diálogo Configuration Parameters y, en el panel Diagnostics > Stateflow, establezca el parámetro Undirected event broadcasts en none
, warning
o error
. El ajuste predeterminado es warning
. Para obtener más información, consulte Undirected event broadcasts (Simulink).