Hauptinhalt

hasChangedFrom

Erkennen von Änderungen in Daten von einem bestimmten Wert im Stateflow-Diagramm

Beschreibung

tf = hasChangedFrom(data,value) gibt 1 (true) zurück, wenn der Wert von data zu Beginn des vorherigen Zeitschritts gleich value ist und zu Beginn des aktuellen Zeitschritts einen anderen Wert aufweist. Andernfalls gibt der Operator 0 (false) zurück.

Beispiel

Beispiele

alle erweitern

Wechseln Sie den Zustand, wenn der vorherige Wert der Matrix M gleich matrixValue war und sich der Wert eines Elements von M seit dem letzten Zeitschritt oder Eingangsereignis verändert hat.

[hasChangedFrom(M,matrixValue)]

Stateflow chart that uses the hasChangedFrom 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 vom Wert 7 geändert hat.

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

[hasChangedFrom(M(1,3),7)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(M[0][2],7)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

Wechseln Sie den Zustand, wenn der vorherige Wert der Struktur struct gleich structValue war und sich der Wert eines Felds von struct seit dem letzten Zeitschritt oder Eingangsereignis verändert hat.

[hasChangedFrom(struct,structValue)]

Stateflow chart that uses the hasChangedFrom operator in a transition.

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

[hasChangedFrom(struct.field,5)]

Stateflow chart that uses the hasChangedFrom 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.

Wert der Daten zum vorherigen Zeitschritt, angegeben als der gleiche Datentyp von data. value muss ein Ausdruck sein, der zu einem Wert aufgelöst wird, der mit data vergleichbar ist:

  • Wenn data ein Skalar ist, muss value als Skalar aufgelöst werden.

  • Wenn data eine Matrix ist, dann muss value eine Matrix mit den gleichen Dimensionen wie data ergeben.

    Alternativ kann value in einem Diagramm, das C als Aktionssprache verwendet, in einen Skalarwert aufgelöst werden. Das Diagramm verwendet die Skalarexpansion zum Vergleich von data mit einer Matrix, deren Elemente alle dem durch value angegebenen Wert entsprechen. Siehe Zuweisen von Werten zu allen Elementen einer Matrix.

  • Wenn data eine Struktur ist, muss value in eine Struktur aufgelöst werden, deren Feldspezifikation genau mit data übereinstimmt.

Einschränkungen

  • Kann nicht in einer Stateflow-Wahrheitstabelle verwendet werden.

Tipps

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

  • Wenn das Diagramm in das Datenobjekt schreibt, aber den Datenwert nicht ändert, gibt der hasChangedFrom-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 hasChangedFrom(x,0) 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 hasChangedFrom verwenden, das zeilendominierte Array-Layout aktiviert ist, führt die Codegenerierung zu einem Fehler. Bevor Sie Code in Diagrammen generieren, die hasChangedFrom verwenden, aktivieren Sie das spaltendominierte Array-Layout. Siehe Select Array Layout for Matrices in Generated Code.

Versionsverlauf

Eingeführt in R2007a