Hauptinhalt

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

hasChangedTo

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

Beschreibung

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

Beispiel

Beispiele

alle erweitern

Wechseln Sie den Zustand, wenn sich der Wert eines Elements von M seit dem letzten Zeitschritt oder Eingangsereignis geändert hat und der aktuelle Wert der M-Matrix gleich matrixValue ist.

[hasChangedTo(M,matrixValue)]

Stateflow chart that uses the hasChangedTo 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 auf den Wert 7 geändert hat.

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

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

Stateflow chart that uses the hasChangedTo operator in a transition.

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

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

Stateflow chart that uses the hasChangedTo operator in a transition.

Übergang aus dem Zustand, wenn ein Feld der Struktur struct seit dem letzten Zeitschritt oder Eingangsereignis seinen Wert geändert hat und der aktuelle Wert von struct gleich structValue ist.

[hasChangedTo(struct,structValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

[hasChangedTo(struct.field,5)]

Stateflow chart that uses the hasChangedTo 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 aktuellen 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 hasChangedTo-Operator Änderungen des Datenwerts zwischen den Eingangsereignissen erkennen.

  • Wenn das Diagramm in das Datenobjekt schreibt, aber den Datenwert nicht ändert, gibt der hasChangedTo-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 hasChangedTo(x,1) 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 hasChangedTo verwenden, das zeilendominierte Array-Layout (row-major array layout) aktiviert ist, führt die Code-Generierung zu einem Fehler. Bevor Sie Code in Diagrammen generieren, die hasChangedTo verwenden, aktivieren Sie das nach Spalten geordnete Array-Layout (column-major array layout). Siehe Select Array Layout for Matrices in Generated Code.

Versionsverlauf

Eingeführt in R2007a