Entwerfen einer Mensch-Maschine-Schnittstellenlogik mithilfe von Stateflow-Diagrammen
Dieses Beispiel zeigt, wie die Logik einer grafischen Benutzeroberfläche in einem eigenständigen Stateflow®-Diagramm modelliert wird. Eigenständige Diagramme implementieren die klassische Diagramm-Semantik mit MATLAB® als Aktionssprache. Sie können das Diagramm mithilfe der vollständigen Funktionalität von MATLAB programmieren, einschließlich der Funktionen, die für die Codegenerierung in Simulink® eingeschränkt sind. Weitere Informationen finden Sie unter Create Stateflow Charts for Execution as MATLAB Objects.
Sie können ein eigenständiges Stateflow-Diagramm ausführen, indem Sie seine Eingangsereignisse aufrufen und temporale Operatoren verwenden. Der ereignis- und zeitgesteuerte Ausführungsworkflow eignet sich für die Gestaltung der Logik, die Mensch-Maschine-Schnittstellen (HMIs) und grafischen Benutzeroberflächen (UIs) zugrunde liegt.
Wenn Sie den MATLAB App Designer verwenden, rufen Callback-Funktionen aus den Schnittstellen-Widgets Ereignisse im Diagramm auf.
Im Stateflow-Diagramm steuern temporale Operatoren und lokale Daten die Eigenschaften der Benutzeroberfläche.
Weitere Informationen zur Verwendung von MATLAB zur Erstellung grafischer Benutzeroberflächen finden Sie unter Entwickeln von Apps mithilfe von App Designer.
Steuern einer App Designer-Benutzeroberfläche
Diese Benutzeroberfläche enthält einen Ein-/Aus-Schalter, der eine Lampe steuert. Wenn der Schalter auf „Ein“ steht, leuchtet die Lampe in einem von zwei Modi, entweder durchgehend oder blinkend, je nach Position des Modus-Auswahlschalters. Sie können die Blinkfrequenz durch Bewegen des Blinkfrequenz-Schiebereglers steuern. Um die App zu starten, klicken Sie in der Symbolleiste des App Designer auf Run.
Die Datei sf_lamp_logic.sfx
definiert ein eigenständiges Stateflow-Diagramm, das die Logik für die Benutzeroberfläche implementiert. Das Diagramm enthält Eingangsereignisse (ON
, OFF
, BLINKING
und SOLID
) und lokale Daten (delay
und app
). Die Aktionen im Diagramm steuern, welche Widgets von jedem Zustand aus zugänglich sind. Zum Beispiel bewirken die Aktionen im Zustand Off
, dass das Lampen-Widget, die Modus-Optionsschaltflächen und der Schieberegler für die Blinkrate in der Benutzeroberfläche abgedunkelt erscheinen.
Im Zustand On
bezeichnen die Teilzustände Solid
und Blinking
die beiden Betriebsarten. Um eine blinkende Lampe zu implementieren, stützt sich das Diagramm auf den temporalen Logikoperator after
. Wenn das Diagramm in den Zustand Blinking.Off
übergeht, erstellt der Ausdruck after(delay,sec)
beim ausgehenden Übergang ein MATLAB-Timer-Objekt, das das Diagramm nach einer bestimmten Anzahl von Sekunden ausführt. Das Diagramm wechselt dann in den Zustand Blinking.On
und erstellt ein weiteres Timer-Objekt, um den Übergang zurück zu Blinking.Off
auszulösen. Während das Diagramm ständig zwischen den beiden Zuständen wechselt, können Sie die Blinkrate anpassen, indem Sie den Wert der lokalen Datenverzögerung ändern oder den Blinkmodus verlassen, indem Sie die Eingangsereignisse SOLID
oder OFF
aufrufen.
Die Verlaufsverbindung im On
-Zustand speichert Informationen über den zuletzt aktiven Teilzustand, sodass die Benutzeroberfläche beim Einschalten der Lampe in den vorherigen Betriebsmodus zurückkehrt.
Ausführen eines eigenständigen Diagramms mithilfe von Ereignissen
Sie können das eigenständige Diagramm ausführen, indem Sie seine Eingangsereignisfunktionen im MATLAB-Befehlsfenster aufrufen. Der Stateflow-Editor zeigt die Auswirkungen jedes dieser Befehle an, indem aktive Zustände und Übergänge durch eine Diagrammanimation hervorgehoben werden.
1. Erstellen Sie das Diagrammobjekt L
und initialisieren Sie den Wert von delay
auf 0,5. Dieser Wert entspricht einer Blinkfrequenz von einem Blinken pro Sekunde (0,5 Sekunden lang an und 0,5 Sekunden lang aus).
L = sf_lamp_logic(delay=0.5);
2. Schalten Sie die Lampe ein.
ON(L)
3. Wechseln Sie in den Blinkmodus.
BLINKING(L)
4. Setzen Sie den Wert von delay
auf 0,25. Dieser Wert entspricht einer Blinkfrequenz von zwei Leuchtimpulsen pro Sekunde (0,25 Sekunden lang an und 0,25 Sekunden lang aus).
L.delay = 0.25;
5. Wechseln Sie in den Solid-Modus.
SOLID(L)
6. Schalten Sie die Lampe aus.
OFF(L)
7. Löschen Sie das Diagrammobjekt L
aus dem MATLAB-Workspace.
delete(L)
Verbinden des eigenständigen Diagramms mit der Benutzeroberfläche
Um eine bidirektionale Verbindung zwischen der Benutzeroberfläche und dem eigenständigen Stateflow-Diagramm herzustellen, öffnen Sie das Fenster des App Designer und wählen Sie Code View aus.
1. Erstellen Sie im Fenster des App Designer eine private Eigenschaft lampLogic
, um den Handle für das Stateflow-Diagrammobjekt zu speichern.
properties (Access = private)
lampLogic
end
2. Erstellen Sie eine StartupFcn
-Callback-Funktion, die das Diagrammobjekt erstellt und seine lokalen Daten app
auf den Handle der Benutzeroberfläche setzt. Weisen Sie das Diagrammobjekt-Handle der privaten Eigenschaft lampLogic
zu.
function StartupFcn(app) app.lampLogic = sf_lamp_logic(delay=0.5,app=app); end
3. Erstellen Sie eine CloseRequestFcn
-Callback-Funktion, die das Diagrammobjekt löscht, wenn Sie die Benutzeroberfläche schließen.
function UIFigureCloseRequest(app, event) delete(app.lampLogic); delete(app); end
4. Fügen Sie für jedes Widget der Benutzeroberfläche eine Callback-Funktion hinzu, die das entsprechende Ereignis im eigenständigen Diagramm aufruft.
ValueChangedFcn
Callback-Funktion für das Switch-Widget:
function SwitchValueChanged(app, event) value = app.Switch.Value; switch lower(value) case "off" OFF(app.lampLogic); case "on" ON(app.lampLogic); end end
SelectionChangedFcn
Callback-Funktion für das Modus-Schaltflächen-Widget:
function ModeButtonGroupSelectionChanged(app, event) selectedButton = app.ModeButtonGroup.SelectedObject; if selectedButton == app.SolidButton SOLID(app.lampLogic); else BLINKING(app.lampLogic); end end
ValueChangedFcn
Callback-Funktion für das Blinkfrequenz-Schieberegler-Widget:
function BlinkRateSliderValueChanged(app, event) app.lampLogic.delay = round(0.5/app.BlinkRateSlider.Value,2); end
Wenn Sie die Benutzeroberfläche ausführen, können Sie die Auswirkungen der Anpassung der Steuerungs-Widgets auf der Diagrammfläche und auf dem Lampen-Widget beobachten.
Siehe auch
Themen
- Create Stateflow Charts for Execution as MATLAB Objects
- Aktivieren eines Stateflow-Diagramms durch Absenden von Eingangsereignissen
- Ausführung von Steuerungsdiagrammen mithilfe der zeitlichen Logik
- Wiederaufnahme früherer Aktivitäten unterhalb der Zustandsebene durch Verwendung von Verlaufsknoten
- Entwickeln von Apps mithilfe von App Designer