Main Content

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 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 estructuras 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 una estructura 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 las estructuras de Stateflow in y out. La función sb2abc extrae información de la estructura de entrada y la almacena en la estructura de Stateflow local localbus. A continuación, el gráfico escribe la estructura de salida combinando los valores de la estructura 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 una estructura de Stateflow o un arreglo de estructuras de Stateflow, consulte Index and Assign Values to Stateflow Structures.

La función sb2abc de MATLAB® toma una estructura de Stateflow de tipo SubBus y devuelve una estructura 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 a la estructura de salida y.

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

Definir las estructuras de entrada y de salida

En una función de MATLAB, puede acceder a una interfaz o una estructura local de Stateflow con una señal de bus de Simulink definiendo las estructuras de entrada y salida de la función:

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

  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>. Sustituya <nombre del objeto> por el nombre del objeto de Simulink.Bus que defina la estructura de Stateflow.

Por ejemplo, en la función sb2abc:

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

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

Para obtener más información, consulte Define Stateflow Structures.

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 de la estructura de entrada u antes de escribirlos en la estructura 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 la estructura 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 la estructura del objeto BusObject de Simulink.Bus.

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

Consulte también

| (Simulink)

Temas relacionados