Contenido principal

Acceder a las señales de bus de Simulink en las funciones de MATLAB

En este ejemplo se muestra cómo leer y escribir las señales de bus de Simulink® en una función de MATLAB® usando buses de MATLAB y Stateflow®. Las estructuras de MATLAB permiten agrupar datos de diferentes tamaños y tipos en una única variable. Puede crear una estructura de MATLAB para:

  • Almacenar datos relacionados en una variable local o persistente de una función de MATLAB

  • Leer o escribir en un bus local de Stateflow

  • Establecer una interfaz a una señal de bus de Simulink en un puerto de entrada o salida

Las funciones de MATLAB solo admiten buses no virtuales. Para obtener más información, consulte Composite Interface Guidelines (Simulink).

Definir estructuras en funciones de MATLAB

En este ejemplo, un gráfico de Stateflow procesa datos de una señal de bus de Simulink y envía el resultado a otra señal de bus de Simulink. El Simulink.Bus (Simulink) objecto BusObject define las señales de bus de entrada y de salida. Estos buses tienen cuatro campos: sb, a, b y c. El campo sb también es una señal de bus definida por el objeto SubBus de Simulink.Bus. Tiene un campo llamado ele.

En el gráfico, las señales de bus de Simulink interactúan con los buses de Stateflow in y out. La función sb2abc extrae información del bus de entrada y la almacena en el bus de Stateflow local localbus. A continuación, el gráfico escribe el bus de salida combinando los valores del bus local y uno de los elementos del arreglo de estructuras subBusArray. Para obtener más información acerca de cómo acceder y modificar el contenido de un bus de Stateflow o un arreglo de buses de Stateflow, consulte Index and Assign Values to Stateflow Structures.

La función sb2abc de MATLAB® toma un bus de Stateflow de tipo SubBus y devuelve un bus de Stateflow de tipo BusObject. La función descompone el valor del campo ele de su entrada en tres componentes: un vector, una matriz 3 por 2 y un escalar. La función almacena estos componentes en un struct local de MATLAB que tiene los mismos campos que el objeto BusObject de Simulink.Bus. A continuación, la función asigna el valor de struct de MATLAB al bus de salida y.

  • X es una escalar struct con un único campo llamado ele. Este campo contiene una matriz de 3 por 3 de tipo int8, que coincide con el diseño del objeto SubBus de Simulink.Bus.

  • Y es una escalar struct con cuatro campos: sb es una subestructura de tipo SubBus, a es un vector bidimensional de tipo double, b es una matriz de 3 por 2 de tipo uint8 y c es una escalar de tipo double. Estos campos coinciden con el diseño del objeto BusObject de Simulink.Bus.

function y = sb2abc(u)
% extract data from input bus
A = double(u.ele(1:2,1));
B = uint8(u.ele(:,2:3));
C = double(u.ele(3,1));
% create local bus
X = struct(ele=int8(zeros(3)));
Y = struct(sb=X,a=A,b=B,c=C);
% assign value to output bus
y = Y;
end

Definir las estructuras de entrada y de salida

Para acceder a un bus o interfaz local de Stateflow con una señal de bus de Simulink en una función de MATLAB, defina los buses de entrada y salida de la función:

  1. En el área de trabajo base de Simulink, cree un objeto de Simulink.Bus que defina el tipo de datos del bus.

  2. En el panel Símbolos, seleccione la entrada o salida de la función.

  3. En Property Inspector, configure la propiedad Tipo como Bus: <object name>. Reemplace <object name> por el nombre del objeto de Simulink.Bus que defina el bus de Stateflow.

Por ejemplo, en la función sb2abc:

  • La propiedad Tipo de la entrada u está designada como Bus: SubBus.

  • La propiedad Tipo de la salida y está designada como Bus: BusObject.

Para obtener más información, consulte Definir buses de Stateflow.

Definir variables de estructura locales y persistentes

Para almacenar los datos relacionados en una única variable dentro de una función de MATLAB, puede crear una estructura de MATLAB struct como local o persistente. Por ejemplo, la función sb2abc define dos estructuras de MATLAB locales para almacenar de forma temporal los datos extraídos del bus de entrada u antes de escribirlos en el bus de salida y:

Para obtener más información, consulte Define Scalar Structures for Code Generation (Simulink).

Consulte también

| (Simulink)

Temas