Main Content

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®-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-struct, die über die gleichen Felder verfügt wie das 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:

  1. Erstellen Sie im Basis-Workspace ein Simulink.Bus-Objekt, das den Datentyp der Struktur 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 die Stateflow-Struktur definiert.

Zum Beispiel bei der Funktion sb2abc:

  • Die Eigenschaft Type der Eingangsstruktur u wird als Bus: SubBus angegeben.

  • Die Eigenschaft Type der Ausgangsstruktur y wird als Bus: BusObject angegeben.

Weitere Informationen finden Sie unter Define Stateflow Structures.

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 Struktur struct mit einem einzigen Feld namens ele. Dieses Feld enthält eine 3-mal-3-Matrix vom Typ int8, die der Struktur 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 der Struktur des Simulink.Bus-Objekts BusObject.

Weitere Informationen finden Sie unter Define Scalar Structures for Code Generation (Simulink).

Siehe auch

| (Simulink)

Verwandte Themen