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 struct
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 escalarstruct
con un único campo llamadoele
. Este campo contiene una matriz de 3 por 3 de tipoint8
, que coincide con el diseño del objetoSubBus
deSimulink.Bus
.Y
es una escalarstruct
con cuatro campos:sb
es una subestructura de tipoSubBus
,a
es un vector bidimensional de tipodouble
,b
es una matriz de 3 por 2 de tipouint8
yc
es una escalar de tipodouble
. Estos campos coinciden con el diseño del objetoBusObject
deSimulink.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.Bus
que 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.Bus
que defina el bus de Stateflow.
Por ejemplo, en la función sb2abc
:
La propiedad Tipo de la entrada
u
está designada comoBus: SubBus
.La propiedad Tipo de la salida
y
está 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)