Wiederverwenden von Logik in Diagrammen
Sie können Logik in Stateflow®-Diagrammen wiederverwenden, indem Sie benutzerdefinierte Funktionen in Zuständen oder Übergängen aufrufen. Stateflow-Diagramme unterstützen folgende benutzerdefinierte Funktionen:
Grafische Funktionen enthalten ein Flussdiagramm, das aus Verbindungen und Übergängen besteht.
Simulink®-Funktionen enthalten ein Simulink-Subsystem.
MATLAB®-Funktionen enthalten MATLAB-Code.
In diesem Beispiel erstellen Sie eine MATLAB-Funktion, die es einem Modell eines wiederaufladbaren Batteriesystems ermöglicht, beim Anschluss an ein Ladegerät mit einer variablen Leistungszufuhr umzugehen.
Modell öffnen
Das sfGetStartedFunction-Modell stellt die Steuerlogik eines wiederaufladbaren Batteriesystems dar. Um das Modell zu erstellen, befolgen Sie die Anweisungen in den vorherigen Schritten des Tutorials.

Doppelklicken Sie auf den „Chart“-Block.

Das Diagramm enthält zwei parallele Zustände, die eine wiederaufladbare Hauptbatterie und eine nicht wiederaufladbare Reservebatterie darstellen. Jede Batterie enthält verschachtelte untergeordnete Zustände, die Betriebsmodi für Laden, Entladen oder Bereitschaft darstellen.
Wenn die Hauptbatterie leer wird, sendet sie ein Ereignis, das den Entlademodus der Reservebatterie aktiviert. Wenn die Hauptbatterie zu laden beginnt, aktiviert sie den Bereitschaftsmodus der Reservebatterie.
Das Diagramm verwendet folgende Daten:
isCharging– Eingangsdaten, die angeben, ob das Batteriesystem an ein Ladegerät angeschlossen ist oder nicht. Diese Daten bestimmen den aktiven Zustand der Hauptbatterie.deviceDemand– Eingangsdaten, die den Leistungsbedarf des angeschlossenen Geräts in Watt darstellen.maxPower– Lokale Daten, die die maximale Leistungsabgabe der Hauptbatterie in Watt darstellen.sentPower– Ausgangsdaten, die angeben, wie viel Leistung die Hauptbatterie an das angeschlossene Gerät liefert, in Watt.receivedPower– Eingangsdaten, die die vom Ladegerät an die Hauptbatterie gelieferte Leistung in Watt darstellen.mainChargeundemergencyCharge– Lokale Daten, die den Ladezustand der beiden Batterien darstellen.
Erstellen einer MATLAB-Funktion
Wenn das Ladegerät mehr oder weniger Strom liefert, wird das Batteriesystem derzeit nicht schneller oder langsamer geladen. Fügen Sie eine MATLAB-Funktion hinzu, mit der die Batterie eine variable Eingangsleistung innerhalb eines durch einen Minimal- und Maximalwert begrenzten Bereichs aufnehmen kann.
Klicken Sie zum Erstellen der MATLAB-Funktion in der Palette auf das MATLAB-Funktionssymbol
. Platzieren Sie die Funktion auf einer leeren Fläche des Zeichenbereichs.Der Editor fordert Sie auf, eine Funktionskennzeichnung einzugeben. Die Funktionskennzeichnung gibt die Rückgabewerte, den Namen und die Eingaben der MATLAB-Funktion im folgenden Format an:
[return_val1,return_val2,....] = function_name(input1,input2,...)Für Funktionskennzeichnungen mit einem einzigen Rückgabewert werden keine geschweiften Klammern benötigt.
Geben Sie eine Funktionskennzeichnung ein, die die aktuelle Ladung, die vom Ladegerät bereitgestellte zusätzliche Ladung und die maximale Eingangsladung angibt. Geben Sie die aktualisierte Batterieladung zurück.
charge=updateCharge(current,added,max)
Doppelklicken Sie zum Bearbeiten der MATLAB-Funktion auf einen beliebigen Teil der Funktion unterhalb der Funktionskennzeichnung. Der Funktionseditor wird geöffnet und zeigt folgende Überschrift an:
Der Funktionseditor kopiert die Überschrift aus der Funktionskennzeichnung im Diagramm. Wenn Sie die Überschrift ändern, ändert sich auch die Funktionskennzeichnung.function charge=updateCharge(current,added,max)
Schreiben Sie im Funktionseditor eine Funktion, die die Ladegeschwindigkeit der Batterie auf einen Bereich zwischen einem Maximalwert und
0begrenzt.function charge=updateCharge(current,added,max) if added>max charge=current+max; elseif added<0 charge=current; else charge=current+added; end
Hinzufügen von MATLAB-Funktionen zu Zustandsaktionen
Verwenden Sie die MATLAB-Funktion in den Zuständen FastCharge und SlowCharge.
Um zum Stateflow-Editor zurückzukehren, klicken Sie in der Explorer-Leiste auf die Schaltfläche „Up to Parent“ (Zu übergeordnetem Objekt)
.Ändern Sie im Zustand
FastChargedie Aktionduring, um die Funktion zu verwenden. Verwenden Sie als maximale Eingangsladung4, d. h. den Wert, den das Diagramm derzeit zumainChargehinzufügt.during:mainCharge=updateCharge(mainCharge,receivedPower,4);Ändern Sie im Zustand
SlowChargedie Aktionduring, um die Funktion zu verwenden. Verwenden Sie als maximale Eingangsladung1, d. h. den Wert, den das Diagramm derzeit zumainChargehinzufügt.during:mainCharge=updateCharge(mainCharge,receivedPower,1);
Simulieren des Modells
Das Modell protokolliert diese Werte im Simulation Data Inspector:
Die vom Ladegerät an das Batteriesystem gelieferte Leistung. Der Wert variiert zwischen
-6und6.Der Ladezustand der Hauptbatterie.
Der Name des aktiven Lademodus der Hauptbatterie.
Simulieren Sie das Modell und verwenden Sie den Simulation Data Inspector, um zu beobachten, wie sich der Wert von mainCharge während der Simulation ändert.
Wenn die Hauptbatterie schnell aufgeladen wird, steigt und sinkt der Ladezustand mit der zugeführten Leistung, bis zu einem Maximum von 4 und einem Minimum von 0. Wenn die Hauptbatterie langsam aufgeladen wird, steigt und sinkt der Ladezustand mit der zugeführten Leistung, bis zu einem Maximum von 1 und einem Minimum von 0.
