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
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 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:
En el área de trabajo base, cree un objeto de
Simulink.Bus
que defina el tipo de datos de la estructura.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>
. Sustituya <nombre del objeto> por el nombre del objeto deSimulink.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 comoBus: SubBus
.La propiedad Tipo de la estructura de salida
y
está designada comoBus: 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 escalarstruct
con un único campo llamadoele
. Este campo contiene una matriz de 3 por 3 de tipoint8
, que coincide con la estructura 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 la estructura del objetoBusObject
deSimulink.Bus
.
Para obtener más información, consulte Define Scalar Structures for Code Generation (Simulink).
Consulte también
struct
| Simulink.Bus
(Simulink)