Main Content

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

Synchronisieren paralleler Zustände durch Übertragung von Ereignissen

Lokale Ereignisse ermöglichen es Ihnen, parallele Zustände zu koordinieren, indem ein Zustand einen Übergang oder eine Aktion in einem anderen Zustand im selben Stateflow®-Diagramm auslösen kann. Verwenden Sie zum Übertragen eines Ereignisses von einem Zustand zu einem anderen Zustand den send-Operator mit dem Namen des Ereignisses und dem Namen des aktiven Zustands:

send(eventName,stateName)

Wenn Sie ein Ereignis übertragen, wird das Ereignis im empfangenden Zustand und in allen untergeordneten Zuständen in der Hierarchie dieses Zustands wirksam.

Modellierung eines Haussicherheitssystems

In diesem Beispiel werden lokale Ereignisse für die Konzeption eines Gebäudesicherheitssystems verwendet.

Das Sicherheitssystem besteht aus einer Alarmanlage und drei Einbruchsschutzsensoren: einem Türsensor, einem Fenstersensor und einem Bewegungsmelder. Wenn das System einen Einbruchsversuch erkannt hat, muss die Alarmanlage innerhalb einer kurzen Zeitspanne deaktiviert werden. Anderenfalls ruft das System die Polizei.

Das Diagramm modelliert jeden Sensor mit einem dieser parallelen Zustände:

  • Der parallele Zustand Door modelliert den Türsensor. Das Eingangssignal D_mode wählt für diesen Sensor zwischen den Modi Active und Disabled. Wenn der Sensor aktiv ist, zeigt das Eingangssignal Door_sens einen möglichen Einbruch an.

  • Der parallele Zustand Win modelliert den Fenstersensor. Das Eingangssignal W_mode wählt für diesen Sensor zwischen den Modi Active und Disabled. Wenn der Sensor aktiv ist, zeigt das Eingangssignal Win_sens einen möglichen Einbruch an.

  • Der parallele Zustand Motion modelliert den Bewegungsmelder. Das Eingangssignal M_mode wählt für diesen Sensor zwischen den Modi Active und Disabled. Wenn der Sensor aktiv ist, zeigt das Eingangssignal Mot_sens einen möglichen Einbruch an.

Als Gegenmaßnahme zu sporadischen Fehlalarmen ist der Bewegungsmelder mit einem Entschärfungsmechanismus ausgestattet, sodass nur ein anhaltend positives Triggersignal einen Alarm auslöst. Im Gegensatz dazu interpretieren die Tür- und Fenstersensoren ein einziges positives Triggersignal als Einbruch und lösen sofort einen Alarm aus.

Ein vierter paralleler Zustand namens Alarm modelliert die Betriebsmodi des Alarmsystems. Das Eingangssignal Alarm_active wählt für die Alarmanlage zwischen den Modi On und Off. Wenn ein Sensor einen Einbruch erkennt, während das Alarmanlagen-Subsystem eingeschaltet ist, sendet der Sensor das lokale Alarm-Ereignis an den Alarm-Zustand. Im On-Unterzustand des Alarm-Zustands löst das Ereignis den Übergang vom Idle-Unterzustand zum Pending-Unterzustand aus. Wenn Pending aktiv wird, werden die Bewohner durch ein akustisches Warnsignal auf den möglichen Einbruch aufmerksam gemacht. Bei einem versehentlichen Alarm können die Bewohner das Sicherheitssystem innerhalb einer kurzen Zeitspanne deaktivieren. Wird die Funktion nicht innerhalb dieser Zeitspanne deaktiviert, fordert das System Hilfe bei der Polizei an, bevor es in den Idle-Modus zurückkehrt.

Koordination mit anderen Simulink-Blöcken

Stateflow-Diagramme können auch mit Hilfe von Ereignissen mit anderen Blöcken in einem Simulink®-Modell kommunizieren.

Ausgangsereignisse

Ein Ausgangsereignis ist ein Ereignis, das in einem Stateflow-Diagramm auftritt, jedoch in Simulink-Blöcken außerhalb des Diagramms sichtbar ist. Dieser Ereignistyp versetzt ein Diagramm in die Lage, andere Blöcke in einem Modell über Ereignisse zu informieren, die im Diagramm auftreten. Beispielsweise steuern die Ausgangsereignisse Sound und call_police hier externe Blöcke, die das akustische Warnsignal und den Anruf bei der Polizei handhaben. Das Diagramm überträgt diese Ereignisse, wenn das lokale Alert-Ereignis den Übergang in den Pending-Unterzustand des Alarm-Zustands auslöst. Konkret: Im Pending-Unterzustand überträgt die Eintragsaktion das Sound-Ereignis. Ebenso überträgt die Bedingungsaktion beim Übergang von Pending zu Idle das call_police-Ereignis. In jedem Fall verwendet die Aktion zur Übertragung des Ausgangsereignisses den send-Operator mit dem Namen des Ereignisses:

send(eventName)

Jedes Ausgangsereignis wird einem Ausgangsport auf dem Diagramm zugeordnet. Abhängig von der Konfiguration kann das Signal ein getriggertes Subsystem oder ein Funktionsaufruf-Subsystem regeln. Gehen Sie zum Konfigurieren eines Ausgangsereignisses wie folgt vor:

  1. Wählen Sie auf der Registerkarte Modeling unter Design Data den Fensterbereich Symbols und den Property Inspector.

  2. Wählen Sie im Fensterbereich Symbols das Ausgangsereignis aus.

  3. Legen Sie im Property Inspector den Trigger auf eine dieser Optionen fest:

  • Either edge — Die Übertragung des Ausgangsereignisses führt dazu, dass das ausgehende Signal zwischen null und eins hin- und herwechselt.

  • Function call — Die Übertragung des Ausgangsereignisses führt zu einem Simulink-Funktionsaufrufereignis.

In diesem Beispiel verwenden die Ausgangsereignisse Flankentrigger, um ein Paar von Latch-Subsystemen im Simulink-Modell zu aktivieren. Wenn jedes Latch eine Wertänderung in seinem Eingangssignal erkennt, gibt es kurzzeitig einen Wert von eins aus, bevor es zu einem Ausgang von null zurückkehrt.

Eingangsereignisse

Ein Eingangsereignis ist ein Ereignis, das in einem Simulink-Block auftritt, jedoch in einem Stateflow-Diagramm sichtbar ist. Dieser Ereignistyp versetzt andere Simulink-Blöcke, einschließlich anderer Stateflow-Diagramme, in die Lage, ein bestimmtes Diagramm über Ereignisse zu informieren, die außerhalb des Diagramms auftreten. Beispielsweise regelt das Eingangsereignis sl_call hier das Timing für den Entschärfungsmechanismus des Bewegungsmelders und die kurze Verzögerung vor dem Anruf bei der Polizei. In jedem Fall tritt das Ereignis innerhalb eines Aufrufs des temporalen Operators after auf, was einen Übergang auslöst, nachdem das Diagramm das Ereignis einige Male empfangen hat.

Ein externer Simulink-Block sendet ein Eingangsereignis über ein Signal, das mit dem Triggerport auf dem Stateflow-Diagramm verbunden ist. Abhängig von der Konfiguration resultiert ein Eingangsereignis aus der Änderung eines Signalwerts oder tritt aufgrund eines Funktionsaufrufs von einem Simulink-Block auf. Gehen Sie zum Konfigurieren eines Eingangsereignisses wie folgt vor:

  1. Wählen Sie auf der Registerkarte Modeling unter Design Data den Fensterbereich Symbols und den Property Inspector.

  2. Wählen Sie im Fensterbereich Symbols das Eingangsereignis aus.

  3. Legen Sie im Property Inspector den Trigger auf eine dieser Optionen fest:

  • Rising — Das Diagramm wird aktiviert, wenn das Eingangssignal entweder von null oder von einem negativen Wert in einen positiven Wert wechselt.

  • Falling — Das Diagramm wird aktiviert, wenn das Eingangssignal von einem positiven Wert entweder in null oder in einen negativen Wert wechselt.

  • Either — Das Diagramm wird aktiviert, wenn das Eingangssignal bei der Änderung in eine der beiden Richtungen null durchläuft.

  • Function-Aufruf — Das Diagramm wird mit einem Funktionsaufruf aus einem Simulink-Block aktiviert.

In diesem Beispiel regelt ein Simulink-Funktionsaufrufgenerator-Block das Timing des Sicherheitssystems, indem das Eingangsereignis sl_call über periodische Funktionsaufrufe getriggert wird.

Untersuchung des Beispiels

In diesem Beispiel erhält das Stateflow-Diagramm Eingangsdaten von verschiedenen manuellen Schaltblöcken und stellt einem Paar von Latch-Subsystemen, die mit Anzeigeblöcken verbunden sind, Ausgangsdaten zur Verfügung. Während der Simulation haben Sie folgende Möglichkeiten:

  • Aktivieren der Alarmanlagen- und Sensor-Subsysteme und Triggern der Einbruchserkennung durch Klicken auf die Schaltblöcke.

  • Beobachten, wie durch die Diagrammanimation verschiedene aktive Zustände im Diagramm hervorgehoben werden.

  • Anzeigen der Ausgangssignale im Scope-Block und im Simulation Data Inspector.

Nehmen wir zum Beispiel an, dass Sie die Alarm- und Sensor-Subsysteme einschalten, die Sensorauslöser ausschalten und die Simulation starten. Während der Simulation gehen Sie wie folgt vor:

  1. Zum Zeitpunkt $t = 250$ Sekunden triggern Sie den Türsensor. Das Alarmsignal ertönt (Sound = 1), sodass Sie die Alarmanlage sofort deaktivieren. Sie schalten den Türsensor-Trigger aus und schalten die Alarmanlage wieder ein.

  2. Zum Zeitpunkt $t = 520$ Sekunden triggern Sie den Fenstersensor, und das Alarmsignal ertönt (Sound = 0). Dieses Mal deaktivieren Sie die Alarmanlage nicht. Etwa zum Zeitpunkt $t = 600$ ruft das Sicherheitssystem die Polizei (call_police = 1). Die Signale Sound und call_police wechseln weiterhin alle 80 Sekunden zwischen null und eins hin und her.

  3. Zum Zeitpunkt $t = 1400$ Sekunden deaktivieren Sie die Alarmanlage. Die Signale Sound und call_police wechseln nicht mehr hin und her.

Im Simulation Data Inspector wird die Antwort der Signale Sound und call_police auf Ihre Aktionen angezeigt.

Siehe auch

Verwandte Themen