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 structSimulink.Bus-Objekt BusObject. Daraufhin weist die Funktion den Wert des MATLAB struct, dem Ausgangsbus y zu.
Xist eine skalare Strukturstructmit einem einzigen Feld namensele. Dieses Feld enthält eine 3-mal-3-Matrix vom Typint8, die dem Layout desSimulink.Bus-ObjektsSubBusentspricht.Yist ein Skalarstructmit vier Feldern:sbist eine Unterstruktur vom TypSubBus,aist ein zweidimensionaler Vektor vom Typdouble,bist eine 3-mal-2 Matrix vom Typuint8, undcist 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
uwird alsBus: SubBusangegeben.Die Eigenschaft Type des Ausgangs
ywird alsBus: BusObjectangegeben.
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)