Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Acceder a señales de bus

Un bus de Stateflow® es un tipo de datos que se define a partir de un objeto Simulink.Bus (Simulink). Con buses de Stateflow, puede agrupar datos de diferentes tamaños y tipos para crear:

  • Entradas y salidas que acceden a señales de bus de Simulink® a partir de gráficos de Stateflow, bloques Truth Table y bloques MATLAB Function.

  • Datos locales en gráficos de Stateflow, tablas de verdad, funciones gráficas, funciones de MATLAB® y cuadros.

  • Datos temporales en funciones gráficas de Stateflow, tablas de verdad y funciones de MATLAB.

Para obtener más información, consulte Create Simulink Bus Objects (Simulink).

Ejemplo de buses de Stateflow

En este ejemplo, un gráfico de Stateflow recibe una señal de entrada de bus desde Simulink utilizando la entrada inbus y genera como salida una señal de bus desde outbus. La señal de entrada procede del bloque Bus Creator COUNTERBUSCreator de Simulink, que agrupa señales desde otros dos bloques Bus Creator. La salida outbus conecta con un bloque Bus Selector de Simulink. Tanto inbus como outbus derivan su tipo del objeto Simulink.Bus COUNTERBUS. Para obtener más información sobre este ejemplo, consulte Integrar estructuras personalizadas en gráficos de Stateflow.

Los elementos de un tipo de datos de bus de Stateflow se denominan campos. Los campos pueden ser cualquier combinación de señales individuales, señales multiplexadas, vectores y otros buses, también denominados subbuses. Cada campo tiene su propio tipo de datos. No es necesario que el tipo de datos coincida con el tipo de cualquier otro campo en el bus. Por ejemplo, en este modelo, cada uno de los buses, inbus y outbus, tiene dos campos:

  • inputsignal es un subbus con un campo, input.

  • limits es un subbus con dos campos, upper_saturation_limit y lower_saturation_limit.

Definir buses de Stateflow

  1. Para definir el tipo de datos de bus, cree un objeto de bus de Simulink en el área de trabajo base, como se describe en Create Simulink Bus Objects (Simulink).

  2. Añada un objeto de datos al gráfico como se describe en Añadir datos de Stateflow.

    Para definir buses temporales en tablas de verdad, funciones gráficas y funciones de MATLAB, añada un objeto de datos a la función. Para obtener más información, consulte Añadir datos en Model Explorer.

  3. Establezca la propiedad Scope del bus. Las opciones son:

    • Input

    • Output

    • Local

    • Parameter

    • Data Store Memory

    • Temporary (Solo en gráficos que utilizan C como lenguaje de acción)

  4. Establezca la propiedad Type del bus. En función de su ámbito, un bus de Stateflow puede tener uno de estos tipos de datos.

    TipoDescripción
    Inherit: Same as Simulink

    Esta opción solo está disponible para buses de entrada. El bus de entrada hereda su tipo de datos de la señal de bus de Simulink en el modelo al que se conecta. La señal de bus de Simulink debe ser un bus no virtual. Para obtener más información, consulte Buses virtuales y no virtuales.

    En el área de trabajo base, especifique un objeto de Simulink.Bus con las mismas propiedades que la señal de bus que se conecta al bus de entrada de Stateflow. Estas propiedades deben coincidir con:

    • Número, nombre y tipo de entradas

    • Dimensión

    • Tiempo de muestreo

    • Complejidad

    • Modo de muestreo

    Si la señal de entrada procede de un bloque Bus Creator, en el cuadro de diálogo Bus Creator, especifique un objeto de bus adecuado para el campo Output data type. Cuando especifica el objeto de bus, Simulink verifica que las propiedades del objeto de Simulink.Bus en el área de trabajo base coinciden con las propiedades de la señal de bus de Simulink.

    Bus: <object name>

    En el campo Type, reemplace <object name> por el nombre del objeto de Simulink.Bus que define el bus de Stateflow.

    Para buses de entrada o salida, no es necesario que especifique la señal de bus en el modelo de Simulink que conecta con el bus de Stateflow. Si especifica una señal de bus, sus propiedades deben coincidir con el objeto de Simulink.Bus que define el bus de Stateflow.

    <data type expression>

    Para los buses con ámbitos distintos de Output, use una expresión que llama al operador type. Este operador establece el tipo de un bus en el tipo de otro bus en el gráfico de Stateflow. Por ejemplo, en el modelo sf_bus_demo, una expresión del operador type especifica el tipo del bus local counterbus_struct en términos del bus de entrada inbus. Ambos buses se definen a partir del objeto de Simulink.Bus COUNTERBUS. Para obtener más información, consulte Derivar tipos de datos de otros objetos de datos.

Inicializar buses de Stateflow

Después de definir un bus de Stateflow como un objeto de datos, puede asignar valores al objeto de datos en un estado o transición. De forma alternativa, puede inicializar el objeto de datos con Property Inspector de una de estas formas:

  • Asignar directamente un valor inicial utilizando la función struct.

  • Asignar una variable en el área de trabajo de MATLAB como un parámetro.

Asignar directamente un valor inicial

  1. En el panel de símbolos, haga clic con el botón secundario en el bus y seleccione Inspect.

  2. En el campo Initial value, cree un bus utilizando la función struct.

    Setting the 'Initial value' field in the Property Inspector.

  3. En la sección Advanced, en el menú desplegable Initialize method, seleccione Parameter.

Asignar una variable en el área de trabajo de MATLAB como un parámetro

  1. En la ventana de comandos de MATLAB, utilice la función Simulink.Bus.createMATLABStruct (Simulink) para asignar una estructura de MATLAB a una variable.

  2. En el panel de símbolos, haga clic con el botón secundario en el bus y seleccione Inspect.

  3. En el campo Initial value, introduzca el nombre de la variable.

    Si la variable y el bus comparten un nombre, introducir un valor inicial es opcional. El bus infiere el nombre de la variable.

  4. En la sección Advanced, en el menú desplegable Initialize method, seleccione Parameter.

Limitaciones

Property Inspector no admite inicializar:

  • Buses en modelos que usan generación de código HDL

  • Buses con un campo Initial value establecido en 0 o una estructura sin campos

  • Buses con un ámbito de Input, Constant, Parameter o Data Store Memory

  • Buses no acotados o buses que contengan cadenas

Buses virtuales y no virtuales

Los modelos de Simulink admiten buses virtuales y no virtuales. Los buses no virtuales leen las entradas de las estructuras de datos almacenadas en una memoria contigua. Los buses virtuales leen las entradas de una memoria no contigua. Para obtener más información, consulte Composite Interface Guidelines (Simulink).

Los gráficos de Stateflow admiten únicamente buses no virtuales. Los buses de entrada de Stateflow pueden aceptar señales de bus virtuales y convertirlas en señales de bus no virtuales. Los buses de entrada de Stateflow no pueden heredar propiedades de señales de bus virtuales. Si la entrada para un gráfico es un bus virtual, establezca la propiedad Type del bus de entrada mediante una especificación con el formato Bus: <object name>.

Depurar buses

Para depurar un bus de Stateflow, abra la ventana Breakpoints and Watch de Stateflow y examine los valores de los campos de bus durante la simulación. Para visualizar los valores de los campos de bus en la línea de comandos, use la notación de puntos para indexar en el bus. Para obtener más información, consulte Inspect and Modify Data and Messages While Debugging.

Consulte también

(Simulink)

Temas