Hauptinhalt

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

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-struct, die über die gleichen Felder verfügt wie das Simulink.Bus-Objekt BusObject. Daraufhin weist die Funktion den Wert des MATLAB struct, dem Ausgangsbus y zu.

  • X ist eine skalare Struktur struct mit einem einzigen Feld namens ele. Dieses Feld enthält eine 3-mal-3-Matrix vom Typ int8, die dem Layout des Simulink.Bus-Objekts SubBus entspricht.

  • Y ist ein Skalar struct mit vier Feldern: sb ist eine Unterstruktur vom Typ SubBus, a ist ein zweidimensionaler Vektor vom Typ double, b ist eine 3-mal-2 Matrix vom Typ uint8, und c ist ein Skalar vom Typ double. Diese Felder entsprechen dem Layout des Simulink.Bus-Objekts BusObject.

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:

  1. Erstellen Sie im Simulink-Basis-Workspace ein Simulink.Bus-Objekt, das den Bus-Datentyp definiert.

  2. Wählen Sie im Fensterbereich Symbols den Funktionseingang oder -ausgang aus.

  3. Setzen Sie im Property Inspector die Eigenschaft Type auf Bus: <object name>. Ersetzen Sie <object name> durch den Namen des Simulink.Bus-Objekts, das den Stateflow-Bus definiert.

Zum Beispiel bei der Funktion sb2abc:

  • Die Eigenschaft Type des Eingangs u wird als Bus: SubBus angegeben.

  • Die Eigenschaft Type des Ausgangs y wird als Bus: 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

| (Simulink)

Themen