Zugriff auf Simulink-Bus-Signale in MATLAB-Funktionen
Dieses Beispiel zeigt, wie Sie in einer MATLAB®-Funktion mithilfe von MATLAB®- und Stateflow®-Strukturen von Simulink®-Bus-Signalen lesen und auf sie schreiben können. MATLAB-Strukturen ermöglichen die Bündelung von Daten unterschiedlicher Größen und Typen in einer einzigen Variable. Sie können eine MATLAB-Struktur erstellen, um:
Verwandte Daten in einer lokalen oder persistenten Variable einer MATLAB-Funktion zu speichern
Aus einer lokalen Stateflow-Struktur zu lesen oder in sie zu schreiben
Eine Schnittstelle zu einem Simulink-Bus-Signal an einem Eingangs- oder Ausgangsport zu bilden
MATLAB-Funktionen unterstützen nur nicht-virtuelle Busse. Weitere Informationen finden Sie unter Composite Interface Guidelines (Simulink).
Definieren von Strukturen in MATLAB-Funktionen
In diesem Beispiel verarbeitet ein Stateflow-Diagramm Daten von einem Simulink-Bus-Signal und gibt das Ergebnis an ein anderes Simulink-Bus-Signal aus. Sowohl das Eingangs- als auch das Ausgangs-Bus-Signal wird durch das Simulink.Bus
(Simulink)-Objekt BusObject
definiert. Diese Busse haben vier Felder: sb
, a
, b
und c
. Das sb
-Feld ist ebenfalls ein Bus-Signal, das durch das Simulink.Bus
-Objekt SubBus
definiert wird. Es verfügt über ein Feld namens ele
.
Im Diagramm sind die Bus-Signale von Simulink mit den Stateflow-Strukturen in
und out
verbunden. Die sb2abc
-Funktion extrahiert Informationen aus der Eingangsstruktur und speichert sie in der lokalen Stateflow-Struktur localbus
. Dann schreibt das Diagramm in die Ausgangsstruktur, indem es die Werte der lokalen Struktur und eines der Elemente des Arrays der Strukturen subBusArray
kombiniert. Für weitere Informationen über den Zugriff auf und die Änderung des Inhalts einer Stateflow-Struktur oder eines Arrays von Stateflow-Strukturen finden Sie unter Index and Assign Values to Stateflow Structures.
Die MATLAB®-Funktion sb2abc
nimmt eine Stateflow-Struktur vom Typ SubBus
entgegen und gibt eine Stateflow-Struktur vom Typ BusObject
zurück. Die Funktion zerlegt den Wert des ele
-Feldes aus seiner Eingabe in drei Komponenten: einen Vektor, eine 3-mal-2-Matrix und einen Skalar. Die Funktion speichert diese Komponenten in einer lokalen MATLAB-
, die über die gleichen Felder verfügt wie das struct
Simulink.Bus
-Objekt BusObject
. Dann weist die Funktion den Wert der MATLAB-Struktur struct
der Ausgangsstruktur y
zu.
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
Definieren von Eingangs- und Ausgangsstrukturen
In einer MATLAB-Funktion können Sie auf eine lokale Stateflow-Struktur oder eine Schnittstelle zu einem Simulink-Bus-Signal zugreifen, indem Sie die Eingangs- und Ausgangsstrukturen der Funktion definieren:
Erstellen Sie im Basis-Workspace ein
Simulink.Bus
-Objekt, das den Datentyp der Struktur definiert.Wählen Sie im Fensterbereich Symbols den Funktionseingang oder -ausgang aus.
Setzen Sie im Property Inspector die Eigenschaft Type auf
Bus: <object name>
. Ersetzen Sie <object name> durch den Namen desSimulink.Bus
-Objekts, das die Stateflow-Struktur definiert.
Zum Beispiel bei der Funktion sb2abc
:
Die Eigenschaft Type der Eingangsstruktur
u
wird alsBus: SubBus
angegeben.Die Eigenschaft Type der Ausgangsstruktur
y
wird alsBus: BusObject
angegeben.
Weitere Informationen finden Sie unter Define Stateflow Buses.
Definieren lokaler und persistenter Strukturvariablen
Um verwandte Daten in einer einzigen Variablen innerhalb einer MATLAB-Funktion zu speichern, können Sie eine MATLAB-Struktur struct
als lokale oder persistente Variable anlegen. Zum Beispiel definiert die sb2abc
-Funktion zwei lokale MATLAB-Strukturen, um die aus der Eingangsstruktur u
extrahierten Daten vorübergehend zu speichern, bevor sie in die Ausgangsstruktur y
geschrieben werden:
X
ist eine skalare Strukturstruct
mit einem einzigen Feld namensele
. Dieses Feld enthält eine 3-mal-3-Matrix vom Typint8
, die der Struktur desSimulink.Bus
-ObjektsSubBus
entspricht.Y
ist ein Skalarstruct
mit vier Feldern:sb
ist eine Unterstruktur vom TypSubBus
,a
ist ein zweidimensionaler Vektor vom Typdouble
,b
ist eine 3-mal-2 Matrix vom Typuint8
, undc
ist ein Skalar vom Typdouble
. Diese Felder entsprechen der Struktur desSimulink.Bus
-ObjektsBusObject
.
Weitere Informationen finden Sie unter Define Scalar Structures for Code Generation (Simulink).
Siehe auch
struct
| Simulink.Bus
(Simulink)