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
ylower_saturation_limit
.
Definir buses de Stateflow
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).
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.
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)
Establezca la propiedad Type del bus. En función de su ámbito, un bus de Stateflow puede tener uno de estos tipos de datos.
Tipo Descripció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 deSimulink.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 operadortype
. Este operador establece el tipo de un bus en el tipo de otro bus en el gráfico de Stateflow. Por ejemplo, en el modelosf_bus_demo
, una expresión del operadortype
especifica el tipo del bus localcounterbus_struct
en términos del bus de entradainbus
. Ambos buses se definen a partir del objeto deSimulink.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
En el panel de símbolos, haga clic con el botón secundario en el bus y seleccione Inspect.
En el campo Initial value, cree un bus utilizando la función
struct
.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
En la ventana de comandos de MATLAB, utilice la función
Simulink.Bus.createMATLABStruct
(Simulink) para asignar una estructura de MATLAB a una variable.En el panel de símbolos, haga clic con el botón secundario en el bus y seleccione Inspect.
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.
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 camposBuses con un ámbito de
Input
,Constant
,Parameter
oData 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.Bus
(Simulink)
Temas
- Index and Assign Values to Stateflow Structures
- Integrar estructuras personalizadas en gráficos de Stateflow
- Añadir datos de Stateflow
- Derivar tipos de datos de otros objetos de datos
- Inspect and Modify Data and Messages While Debugging
- Specify Bus Properties with Bus Objects (Simulink)
- Composite Interface Guidelines (Simulink)