Zugriff auf Simulink-Bus-Signale in MATLAB-Funktionen
Dieses Beispiel zeigt, wie Sie in einer MATLAB®-Funktion mithilfe von MATLAB®- und Stateflow®-Bussen 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
Auslesen oder Beschreiben eines lokalen Stateflow-Bus
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-Bussen in
und out
verbunden. Die sb2abc
-Funktion extrahiert Informationen aus dem Eingangsbus und speichert sie im lokalen Stateflow-Bus localbus
. Daraufhin schreibt das Diagramm in den Ausgangsbus, indem es die Werte des lokalen Busses und eines der Elemente der Struktur-Arrays subBusArray
kombiniert. Für weitere Informationen über den Zugriff auf und die Änderung des Inhalts eines Stateflow-Busses oder eines Arrays von Stateflow-Bussen finden Sie unter Index and Assign Values to Stateflow Structures.
Die MATLAB®-Funktion sb2abc
nimmt einen Stateflow-Bus vom Typ SubBus
entgegen und gibt einen Stateflow-Bus vom Typ BusObject
aus. 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
. Daraufhin weist die Funktion den Wert des MATLAB struct
, dem Ausgangsbus y
zu.
X
ist eine skalare Strukturstruct
mit einem einzigen Feld namensele
. Dieses Feld enthält eine 3-mal-3-Matrix vom Typint8
, die dem Layout 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 dem Layout desSimulink.Bus
-ObjektsBusObject
.
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
Definieren von Eingangs- und Ausgangsstrukturen
Um auf einen lokalen Stateflow-Bus zuzugreifen oder eine Schnittstelle mit einem Simulink-Bussignal in einer MATLAB-Funktion zu erstellen, definieren Sie die Eingabe- und Ausgabebusse für die Funktion:
Erstellen Sie im Simulink-Basis-Workspace ein
Simulink.Bus
-Objekt, das den Bus-Datentyp 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 den Stateflow-Bus definiert.
Zum Beispiel bei der Funktion sb2abc
:
Die Eigenschaft Type des Eingangs
u
wird alsBus: SubBus
angegeben.Die Eigenschaft Type des Ausgangs
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 dem Eingangsbus u
extrahierten Daten vorübergehend zu speichern, bevor sie auf den Ausgangsbus y
geschrieben werden:
Weitere Informationen finden Sie unter Define Scalar Structures for Code Generation (Simulink).
Siehe auch
struct
| Simulink.Bus
(Simulink)