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 local de MATLAB que tiene los mismos campos que el objeto structBusObject de Simulink.Bus. A continuación, la función asigna el valor de struct de MATLAB al bus de salida y.
Xes una escalarstructcon un único campo llamadoele. Este campo contiene una matriz de 3 por 3 de tipoint8, que coincide con el diseño del objetoSubBusdeSimulink.Bus.Yes una escalarstructcon cuatro campos:sbes una subestructura de tipoSubBus,aes un vector bidimensional de tipodouble,bes una matriz de 3 por 2 de tipouint8yces una escalar de tipodouble. Estos campos coinciden con el diseño del objetoBusObjectdeSimulink.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:
En el área de trabajo base de Simulink, cree un objeto de
Simulink.Busque defina el tipo de datos del bus.En el panel Símbolos, seleccione la entrada o salida de la función.
En Property Inspector, configure la propiedad Tipo como
Bus: <object name>. Reemplace <object name> por el nombre del objeto deSimulink.Busque defina el bus de Stateflow.
Por ejemplo, en la función sb2abc:
La propiedad Tipo de la entrada
uestá designada comoBus: SubBus.La propiedad Tipo de la salida
yestá designada comoBus: 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
struct | Simulink.Bus (Simulink)