Hauptinhalt

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

hasChanged

Erkennen von Datenänderungen seit dem letzten Zeitschritt im Stateflow-Diagramm

Beschreibung

tf = hasChanged(data) gibt 1 (true) zurück, wenn der Wert von data zu Beginn des aktuellen Zeitschritts sich vom Wert von data zu Beginn des letzten Zeitschritts unterscheidet, bei dem das Diagramm aktiviert wurde. Andernfalls gibt der Operator 0 (false) zurück.

Beispiel

Beispiele

alle erweitern

Wechseln Sie den Zustand, wenn sich ein Element der M-Matrix seit dem letzten Zeitschritt oder Eingangsereignis geändert hat.

[hasChanged(M)]

Stateflow chart that uses the hasChanged operator in a transition.

Wechseln Sie den Zustand, wenn sich der Wert des Elements in Zeile 1 und Spalte 3 der M-Matrix seit dem letzten Zeitschritt oder Eingangsereignis geändert hat.

Verwenden Sie in Diagrammen, die MATLAB® als Aktionssprache verwenden, Folgendes:

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

Verwenden Sie in Diagrammen, die C als Aktionssprache verwenden, Folgendes:

[hasChanged(M[0][2])]

Stateflow chart that uses the hasChanged operator in a transition.

Wechseln Sie den Zustand, wenn sich der Wert eines beliebigen Feldes der struct-Struktur seit dem letzten Zeitschritt oder Eingangsereignis geändert hat.

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

Wechseln Sie den Zustand, wenn sich der Wert des Feldes struct.field seit dem letzten Zeitschritt oder Eingangsereignis geändert hat.

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged operator in a transition.

Eingabeargumente

alle erweitern

Stateflow®-Daten, angegeben als:

  • Skalar

  • Matrix oder ein Element einer Matrix

  • Struktur oder ein Feld in einer Struktur

  • Gültige Kombination von Strukturfeldern oder Matrixelementen

Wenn data eine Matrix ist, gibt der Operator true zurück, wenn er eine Änderung in einem der Elemente von data erkennt. Sie können auch Elemente einer Matrix indizieren, indem Sie Zahlen oder Ausdrücke verwenden, die zu einer Ganzzahl ausgewertet werden. Siehe Operationen für Vektoren und Matrizen in Stateflow.

Wenn data eine Struktur ist, gibt der Operator true zurück, wenn er eine Änderung in einem der Felder von data erkennt. Sie können Felder in einer Struktur auch mithilfe der Punktnotation indizieren. Siehe Index and Assign Values to Stateflow Structures.

Das Argument data darf kein nicht-trivialer Ausdruck oder eine benutzerdefinierte Code-Variable sein.

Eigenständige Diagramme in MATLAB unterstützen keine Änderungserkennung an einem Element einer Matrix oder einem Feld in einer Struktur.

Einschränkungen

  • Kann nicht in einer Stateflow-Wahrheitstabelle verwendet werden.

Tipps

  • Wenn mehrere Eingangsereignisse im selben Zeitschritt auftreten, kann der hasChanged-Operator Änderungen des Datenwerts zwischen den Eingangsereignissen erkennen.

  • Wenn das Diagramm in das Datenobjekt schreibt, aber den Datenwert nicht ändert, gibt der hasChanged-Operator false zurück.

  • Der Typ des Stateflow-Diagramms bestimmt den Umfang der Daten, die von den Änderungserkennungsoperatoren unterstützt werden:

    • Eigenständige Stateflow-Diagramme in MATLAB: nur Local

    • In Simulink®-Modellen, Diagramme, die MATLAB als Aktionssprache verwenden: nur Input

    • In Simulink-Modellen, Diagramme, die C als Aktionssprache verwenden: Input, Output, Local oder Data Store Memory

  • In einem eigenständigen Diagramm in MATLAB kann ein Änderungserkennungsoperator Änderungen in Daten erkennen, die in einem Aufruf der Funktion step angegeben sind, da diese Änderungen vor Beginn des aktuellen Zeitschritts auftreten. Wenn beispielsweise x gleich Null ist, gibt der Ausdruck hasChanged(x) true zurück, wenn Sie das ch-Diagramm mit dem folgenden Befehl ausführen:

    step(ch,x=1);
    Im Gegensatz dazu kann ein Änderungserkennungsoperator keine Änderungen in Daten erkennen, die durch Zuweisungen in Zustands- oder Übergangsaktionen im gleichen Zeitschritt verursacht werden. Stattdessen erkennt der Operator die Wertänderung zu Beginn des nächsten Zeitschritts.

  • Wenn Sie in einem Diagramm in einem Simulink-Modell die Diagrammoption Initialize Outputs Every Time Chart Wakes Up aktivieren und eine Ausgabe als Argument des Operators hasChanged verwenden, wird immer false zurückgegeben. Weitere Informationen finden Sie unter Initialize outputs every time chart wakes up.

  • Wenn in Diagrammen, die hasChanged verwenden, das spaltendominierte Array-Layout aktiviert ist, führt die Code-Generierung zu einem Fehler. Bevor Sie Code in Diagrammen generieren, die hasChanged verwenden, aktivieren Sie das Spalten-Major-Array-Layout. Siehe Select Array Layout for Matrices in Generated Code.

Versionsverlauf

Eingeführt in R2007a