Hauptinhalt

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

Ausführung von Steuerungsdiagrammen mithilfe der zeitlichen Logik

Die zeitliche Logik steuert die Ausführung eines Diagramms in Bezug auf die Zeit. Bei Zustandsaktionen und Übergängen können Sie zwei Arten der zeitlichen Logik verwenden:

  • Ereignisbasierte zeitliche Logik verfolgt wiederkehrende Ereignisse. Sie können jedes explizite oder implizite Ereignis als Basisereignis verwenden.

  • Die absolute Zeitlogik verfolgt die verstrichene Zeit, seit ein Zustand aktiv wurde. Das Timing für zeitliche Logikoperatoren der Absolutzeit hängt vom Typ des Stateflow®-Diagramms ab:

    • Diagramme in einem Simulink®-Modell definieren die Absolutzeit-basierende zeitliche Logik in Bezug auf die Simulationszeit.

    • Eigenständige Diagramme in MATLAB® definieren die Absolutzeit-bezogene zeitliche Logik in Bezug auf die Istzeit, die auf eine Genauigkeit von 1 Millisekunde begrenzt ist.

Zeitliche Logikoperatoren

Mit den in diesem Diagramm aufgeführten Operatoren können Sie das Verhalten eines Stateflow-Diagramms auf der Grundlage der zeitlichen Logik definieren. Diese Operatoren können auftreten in:

  • on-Zustandsaktionen

  • Aktionen auf Übergangspfaden, die von einem Zustand ausgehen

Jeder zeitliche Logikoperator hat einen zugehörigen Zustand, d. h. den Zustand, in dem die Aktion auftritt oder von dem der Übergangspfad ausgeht. Das Stateflow-Diagramm setzt den von jedem Operator verwendeten Zähler jedes Mal zurück, wenn der zugehörige Zustand reaktiviert wird.

OperatorSyntaxBeschreibungBeispiel
after

after(n,E)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

E ist das Basisereignis für den Operator.

Gibt true zurück, wenn das Ereignis E mindestens n Mal aufgetreten ist, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Lassen Sie eine Zustandsmeldung anzeigen, wenn das Diagramm eine Übertragung des Ereignisses E verarbeitet, wobei es bei der dritten Übertragung von E nach der Aktivierung des Zustands beginnt.

on after(3,E):
   disp("ON");

Verlassen Sie den zugeordneten Zustand durch einen Übergang, wenn das Diagramm eine Übertragung des Ereignisses E verarbeitet, wobei es bei der fünften Übertragung von E nach der Aktivierung des Zustands beginnt.

after(5,E)

after(n,tick)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

Gibt true zurück, wenn das Diagramm mindestens n Mal aktiviert wurde, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt. Weitere Informationen finden Sie unter Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse.

Verlassen Sie den zugeordneten Zustand durch einen Übergang, wenn das Diagramm mindestens zum siebten Mal nach der Aktivierung des Zustands aufgerufen wurde, jedoch nur, wenn die Variable temp größer als 98.6 ist.

after(7,tick)[temp > 98.6]

after(n,sec)

after(n,msec)

after(n,usec)

n ist eine positive reelle Zahl oder ein Ausdruck, der einen positiven reellen Wert ergibt.

Gibt true zurück, wenn seit dem Aktivieren des zugehörigen Zustands mindestens n Zeiteinheiten vergangen sind. Anderenfalls gibt der Operator false zurück.

Geben Sie in Diagrammen im Simulink-Modell die Zeit in Sekunden (sec), Millisekunden (msec) oder Mikrosekunden (usec) an.

Geben Sie in eigenständigen Diagrammen in MATLAB die Zeit in Sekunden (sec) an. Der Operator erzeugt ein MATLAB timer-Objekt, das ein implizites Ereignis zum Aktivieren des Diagramms erzeugt. MATLAB timer-Objekte sind auf eine Genauigkeit von 1 Millisekunde begrenzt. Weitere Informationen finden Sie unter Events in Standalone Charts.

Setzen Sie die Variable temp immer dann auf LOW, wenn das Diagramm aufgerufen wird und wenn der zugeordnete Zustand mindestens 12,3 Sekunden lang aktiv ist.

on after(12.3,sec):
   temp = LOW;
at

at(n,E)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

E ist das Basisereignis für den Operator.

Gibt true zurück, wenn das Ereignis E genau n Mal eingetreten ist, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Anzeige einer Statusmeldung, wenn das Diagramm die dritte Übertragung des Ereignisses E verarbeitet, nachdem der Status aktiv wurde.

on at(3,E):
   disp("ON");

Übergang aus dem assoziierten Status, wenn das Diagramm die fünfte Übertragung des Ereignisses E verarbeitet, nachdem der Status aktiviert wurde.

at(5,E)

at(n,tick)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

Gibt true zurück, wenn das Diagramm genau n Mal aufgewacht ist, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt. Weitere Informationen finden Sie unter Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse.

Übergang aus dem assoziierten Zustand, wenn das Diagramm zum siebten Mal seit Aktivierung des Zustands aufwacht, aber nur, wenn die Variable temp größer als 98,6 ist.

at(7,tick)[temp > 98.6]

at(n,sec)

n ist eine positive reelle Zahl oder ein Ausdruck, der einen positiven reellen Wert ergibt.

Gibt true zurück, wenn genau n Sekunden vergangen sind, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Die Verwendung von at als Absolutzeit-Zeitlogik-Operator wird nur in eigenständigen Diagrammen in MATLAB unterstützt. Der Operator erzeugt ein MATLAB timer-Objekt, das ein implizites Ereignis zum Aktivieren des Diagramms erzeugt. MATLAB timer-Objekte sind auf eine Genauigkeit von 1 Millisekunde begrenzt. Weitere Informationen finden Sie unter Events in Standalone Charts.

Setzen Sie die Variable temp auf HIGH, wenn der Zustand genau 12,3 Sekunden lang aktiv war.

on at(12.3,sec):
   temp = HIGH;
before

before(n,E)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

E ist das Basisereignis für den Operator.

Gibt true zurück, wenn das Ereignis E weniger als n Mal eingetreten ist, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Der zeitliche Logikoperator before wird nur in Stateflow-Diagrammen in Simulink-Modellen unterstützt.

Zeigt Sie eine Statusmeldung an, wenn das Diagramm die erste und zweite Übertragung des Ereignisses E verarbeitet, nachdem der Zustand aktiv wurde.

on before(3,E):
   disp("ON");

Übergang aus dem assoziierten Zustand, wenn das Diagramm eine Übertragung des Ereignisses E verarbeitet, aber nur, wenn der Zustand für weniger als fünf Übertragungen von E aktiv war.

before(5,E)

before(n,tick)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

Gibt true zurück, wenn das Diagramm weniger als n Mal aktiviert wurde, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt. Weitere Informationen finden Sie unter Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse.

Der zeitliche Logikoperator before wird nur in Stateflow-Diagrammen in Simulink-Modellen unterstützt.

Übergang aus dem assoziierten Zustand, wenn das Diagramm aktiviert wird, aber nur, wenn die Variable temp größer als 98,6 ist und das Diagramm seit Aktivierung des Zustands weniger als sieben Mal aktiviert wurde.

before(7,tick)[temp > 98.6]

before(n,sec)

before(n,msec)

before(n,usec)

n ist eine positive reelle Zahl oder ein Ausdruck, der einen positiven reellen Wert ergibt.

Gibt true zurück, wenn seit dem Aktivieren des zugehörigen Zustands weniger als n Zeiteinheiten vergangen sind. Anderenfalls gibt der Operator false zurück.

Geben Sie die Zeit in Sekunden (sec), Millisekunden (msec) oder Mikrosekunden (usec) an.

Der zeitliche Logikoperator before wird nur in Stateflow-Diagrammen in Simulink-Modellen unterstützt.

Setzen Sie die Variable temp jedes Mal, wenn das Diagramm aktiviert wird, auf MED, aber nur, wenn der zugehörige Zustand weniger als 12,3 Sekunden lang aktiv war.

on before(12.3,sec):
   temp = MED;
every

every(n,E)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

E ist das Basisereignis für den Operator.

Gibt true bei jedem n-ten Auftreten des Ereignisses E zurück, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Zeigt eine Statusmeldung nach jeder dritten Verarbeitung einer Übertragung des Ereignisses E durch das Diagramm an, seit der Zustand aktiv wurde.

on every(3,E):
   disp("ON");

Verlässt den assoziierten Zustand nach jeder fünften Verarbeitung einer Übertragung des Ereignisses E durch das Diagramm, seit der Zustand aktiv wurde.

every(5,E)

every(n,tick)

n ist eine positive ganze Zahl oder ein Ausdruck, der einen positiven ganzzahligen Wert ergibt.

Gibt true bei jedem n-ten Mal zurück, wenn das Diagramm aktiviert wird, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt. Weitere Informationen finden Sie unter Kontrollieren des Diagrammverhaltens mithilfe impliziter Ereignisse.

Verlässt den assoziierten Zustand nach jedem siebten tick-Ereignis, seit der Zustand aktiv wurde, jedoch nur, wenn die Variable temp größer als 98,6 ist.

every(7,tick)[temp > 98.6]

every(n,sec)

n ist eine positive reelle Zahl oder ein Ausdruck, der einen positiven reellen Wert ergibt.

Gibt alle n Sekunden true zurück, seit der zugehörige Zustand aktiv wurde. Anderenfalls gibt der Operator false zurück.

Die Verwendung von every als Absolutzeit-Zeitlogik-Operator wird nur in eigenständigen Diagrammen in MATLAB unterstützt. Der Operator erzeugt ein MATLAB timer-Objekt, das ein implizites Ereignis zum Aktivieren des Diagramms erzeugt. MATLAB timer-Objekte sind auf eine Genauigkeit von 1 Millisekunde begrenzt. Weitere Informationen finden Sie unter Events in Standalone Charts.

Inkrementiert die Variable temp alle 12,3 Sekunden, die der Zustand aktiv ist, um 5.

on every(12.3,sec):
   temp = temp+5;
temporalCount

temporalCount(E)

E ist das Basisereignis für den Operator.

Gibt die Anzahl der Vorkommen des Ereignisses E zurück, seit der zugehörige Zustand aktiv wurde.

Die Verwendung von temporalCount als ereignisbasiertem zeitlichen Logikoperator wird nur in Stateflow-Diagrammen in Simulink-Modellen unterstützt.

Greift jedes Mal, wenn das Diagramm eine Übertragung des Ereignisses E verarbeitet, auf aufeinanderfolgende Elemente des Arrays M zu.

on E:
   y = M(temporalCount(E));
temporalCount(tick)

Gibt die Anzahl der Male zurück, die das Diagramm aktiviert wurde, seit der zugehörige Zustand aktiv wurde.

Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt.

Die Verwendung von temporalCount als ereignisbasiertem zeitlichen Logikoperator wird nur in Stateflow-Diagrammen in Simulink-Modellen unterstützt.

Speichert den Wert der Eingangsdaten u in aufeinanderfolgenden Elementen des Arrays M.

en,du:
   M(temporalCount(tick)+1) = u;

temporalCount(sec)

temporalCount(msec)

temporalCount(usec)

Gibt die Zeitspanne zurück, die seit dem Aktivieren des zugehörigen Zustands vergangen ist.

Geben Sie die Zeit in Sekunden (sec), Millisekunden (msec) oder Mikrosekunden (usec) an.

Speichert die Anzahl von Millisekunden, seit der Zustand aktiviert wurde.

en,du:
   y = temporalCount(msec);
elapsed

elapsed(sec)

Gibt die Zeitspanne zurück, die seit dem Aktivieren des zugehörigen Zustands vergangen ist.

Äquivalent zu temporalCount(sec).

Speichert die Anzahl von Sekunden, seit der Zustand aktiviert wurde.

en,du:
   y = elapsed(sec);
etEine alternative Methode zur Ausführung von elapsed(sec).

Wenn das Diagramm eine Übertragung des Ereignisses E verarbeitet, wird der assoziierte Zustand verlassen und die seit Aktivierung des Zustands vergangene Zeit angezeigt.

E{disp(et);}
count

count(C)

C ist ein Ausdruck, der true oder false ergibt.

Gibt die Anzahl der Male zurück, die das Diagramm aktiviert wurde, seit der bedingte Ausdruck C zu true wurde und der zugehörige Zustand aktiv wurde.

Das Stateflow-Diagramm setzt den Wert des Operators count zurück, wenn der bedingte Ausdruck C false oder der zugeordnete Zustand inaktiv wird.

In Diagrammen eines Simulink-Modells kann der Wert count von der Schrittweite abhängen. Das Ändern des Solvers oder der Schrittgröße für das Modell wirkt sich auf die vom Operator count ausgegebenen Ergebnisse aus.

Verlassen des zugeordneten Zustands durch einen Übergang, wenn die Variable x für mehr als fünf Diagrammausführungen größer oder gleich 2 gewesen ist.

[count(x>=2) > 5]

Speichern der Anzahl von Diagrammausführungen, seit die Variable x größer als 5 geworden ist.

en,du:
   y = count(x>5);
duration

duration(C)

duration(C,sec)

duration(C,msec)

duration(C,usec)

  • C ist ein Ausdruck, der true oder false ergibt.

Gibt die Zeitspanne zurück, die vergangen ist, seit der bedingte Ausdruck C zu true wurde und der damit verbundene Zustand aktiv wurde.

Geben Sie die Zeit in Sekunden (sec), Millisekunden (msec) oder Mikrosekunden (usec) an. Die Standardeinheit ist Sekunden.

Das Stateflow-Diagramm setzt den Wert des Operators duration zurück, wenn der bedingte Ausdruck C false oder der zugeordnete Zustand inaktiv wird.

Der zeitliche Logikoperator duration wird in eigenständigen Diagrammen in MATLAB nicht unterstützt.

Verlassen des Zustands durch einen Übergang, wenn die Variable x für mehr als 0,1 Sekunden größer oder gleich 0 gewesen ist.

[duration(x>=0) > 0.1]

Speichert die Anzahl von Millisekunden, seit die Variable x größer als 5 geworden und der Zustand aktiv geworden ist.

en,du:
   y = duration(x>5,msec);

Sie können Anführungszeichen für die Schlüsselwörter 'tick', 'sec', 'msec' und 'usec' verwenden. Zum Beispiel ist after(5,'tick') äquivalent zu after(5,tick).

Hinweis

Die zeitlichen Logikoperatoren after, at, before und every vergleichen den Schwellenwert n mit einem internen Zähler vom Typ Ganzzahl. Wenn n eine Festkommazahl ist, die entweder durch eine Steigung, die keine ganzzahlige Potenz von zwei ist, oder durch eine Abweichung ungleich Null definiert ist, kann der Vergleich aufgrund von Rundungen zu unerwarteten Ergebnissen führen. Weitere Informationen finden Sie unter Relational Operations for Fixed-Point Data.

Beispiele für zeitliche Logik

Definieren von Zeitverzögerungen

Dieses Beispiel zeigt, wie zwei absolute Zeitverzögerungen in einem zeitkontinuierlichen Diagramm definiert werden.

Die Ausführung des Diagramms erfolgt in folgenden Schritten:

  1. Wenn das Diagramm aktiviert wird, wird zuerst der Zustand Input aktiviert.

  2. Nach 5,33 Millisekunden Simulationszeit erfolgt der Übergang von Input zu Output.

  3. Der Zustand Input wird inaktiv und der Zustand Output wird aktiv.

  4. Nach 10,5 Sekunden Simulationszeit erfolgt der Übergang von Output zu Input.

  5. Der Zustand Output wird inaktiv und der Zustand Input wird aktiv.

Die Schritte 2 bis 5 werden wiederholt, bis die Simulation endet.

Wenn ein Diagramm eine diskrete Abtastzeit hat, erfolgt jede Aktion im Diagramm zu ganzzahligen Vielfachen dieser Abtastzeit. Wenn der Simulink®-Solver beispielsweise einen festen Schritt von 0,1 Sekunden verwendet, erfolgt der erste Übergang vom Zustand Input zum Zustand Output bei t = 0,1 Sekunden. Dieses Verhalten tritt auf, weil der Solver das Diagramm nicht genau bei t = 5,33 Millisekunden aktiviert. Stattdessen aktiviert der Solver das Diagramm in ganzzahligen Vielfachen von 0,1 Sekunden, z. B. t = 0,0 und 0,1 Sekunden.

Ermitteln der verstrichenen Zeit

In diesem Beispiel stellt ein Step (Simulink)-Block eine Einheit für die schrittweise Eingabe in ein Stateflow-Diagramm dar.

Das Diagramm bestimmt, wann die Eingabe u gleich 1 ist:

  • Wenn die Eingabe vor t = 2 Sekunden gleich 1 ist, erfolgt ein Übergang von Start zu Fast.

  • Wenn die Eingabe zwischen t = 2 und t = 5 Sekunden gleich 1 ist, erfolgt ein Übergang von Start zu Medium.

  • Wenn die Eingabe nach t = 5 Sekunden gleich 1 ist, erfolgt ein Übergang von Start zu Slow.

Verwenden der absoluten Zeitlogik in aktivierten Subsystemen

Sie können die absolute Zeitlogik in einem Diagramm verwenden, das sich in einem bedingt ausgeführten Subsystem befindet. Wenn das Subsystem deaktiviert ist, wird das Diagramm inaktiv und der zeitliche Logikoperator pausiert, während das Diagramm im Ruhezustand ist. Der Operator setzt die Simulationszeit nicht fort, bis das Subsystem wieder aktiviert und das Diagramm aktiv ist.

Dieses Modell verfügt über ein aktiviertes Subsystem, bei dem der Parameter States when enabling auf held gesetzt ist.

Das Subsystem enthält ein Diagramm, das den Operator after verwendet, um einen Übergang auszulösen.

Der Signal Editor (Simulink)-Block liefert ein Eingabesignal mit diesen Eigenschaften:

  • Das Signal aktiviert das Subsystem bei t = 0.

  • Das Signal deaktiviert das Subsystem bei t = 2.

  • Das Signal aktiviert das Subsystem bei t = 6 erneut.

Dieses Diagramm zeigt die gesamte im Diagramm verstrichene Zeit. Wenn das Eingabesignal das Subsystem zum Zeitpunkt t = 0 aktiviert, wird der Zustand A aktiv. Während das System aktiviert ist, erhöht sich die verstrichene Zeit. Wenn das Subsystem bei t = 2 deaktiviert wird, geht das Diagramm in den Ruhezustand über und die verstrichene Zeit wird nicht mehr erhöht. Für 2 < t < 6 bleibt die verstrichene Zeit bei 2 Sekunden eingefroren, da das System deaktiviert ist. Wenn das Diagramm bei t = 6 aktiviert wird, beginnt die verstrichene Zeit wieder, sich zu erhöhen.

Der Übergang von Zustand A zu Zustand B hängt von der verstrichenen Zeit ab, während Zustand A aktiv ist, nicht von der Simulationszeit. Daher erfolgt der Übergang bei t = 9, wenn die verstrichene Zeit im Zustand A 5 Sekunden beträgt. Wenn der Übergang stattfindet, ändert sich der Ausgabewert y von 0 auf 1.

Dieses Modellverhalten gilt nur für Subsysteme, bei denen Sie den Parameter für die Blockaktivierung States when enabling auf held setzen. Wenn Sie den Parameter auf reset setzen, wird das Diagramm vollständig neu initialisiert, wenn das Subsystem erneut aktiviert wird. Standardübergänge werden ausgeführt und alle Zähler der zeitlichen Logik werden auf 0 zurückgesetzt.

Notation für ereignisbasierte zeitliche Logik in Übergängen

In Stateflow-Diagrammen in Simulink-Modellen unterstützen die Operatoren after, at und before zwei unterschiedliche Notationen, um ereignisbasierte zeitliche Logik in einem Übergang auszudrücken.

  • Die Trigger-Notation definiert einen Übergang, der nur vom Basisereignis für den zeitlichen Logikoperator abhängt. Die Trigger-Notation folgt dieser Syntax:

    temporalLogicOperator(n,E)[C]
    wobei gilt:

    • temporalLogicOperatorist ein boolescher zeitlicher Logikoperator.

    • n ist die Anzahl der Vorkommen des Operators.

    • E ist das Basisereignis des Operators.

    • C ist ein optionaler Bedingungsausdruck.

    Wenn Sie die Trigger-Notation verwenden, kann der Übergang nur dann erfolgen, wenn das Diagramm eine Übertragung des Basisereignisses E verarbeitet.

  • Die Bedingte Notation definiert einen Übergang, der von Basis- und Nicht-Basis-Ereignissen abhängt. Die bedingte Notation folgt dieser Syntax:

    F[temporalLogicOperator(n,E) && C]
    wobei gilt:

    • temporalLogicOperatorist ein boolescher zeitlicher Logikoperator.

    • n ist die Anzahl der Vorkommen des Operators.

    • E ist das Basisereignis des Operators.

    • F ist ein optionales Nicht-Basis-Ereignis

    • C ist ein optionaler Bedingungsausdruck.

    Wenn Sie die bedingte Notation mit einem Nicht-Basis-Ereignis F verwenden, kann der Übergang nur erfolgen, wenn das Diagramm eine Übertragung von F verarbeitet. Wenn Sie das Nicht-Basis-Ereignis weglassen, kann der Übergang erfolgen, wenn das Diagramm ein explizites oder implizites Ereignis verarbeitet.

    Die bedingte Notation für zeitliche Logikoperatoren wird in eigenständigen Diagrammen in MATLAB nicht unterstützt.

Diese Übergangskennzeichnung zeigt beispielsweise über die Trigger-Notation einen Übergang aus dem zugehörigen Zustand an, wenn das Diagramm eine Übertragung des Basisereignisses E verarbeitet, beginnend mit der fünften Übertragung von E, nachdem der Zustand aktiv wurde.

after(5,E)

Im Gegensatz dazu zeigt diese Übergangskennzeichnung mit einer bedingten Notation einen Übergang aus dem zugehörigen Zustand an, wenn der Zustand für mindestens fünf Übertragungen des Basisereignisses E aktiv war, auch wenn das Diagramm keine Übertragung von E verarbeitet.

[after(5,E)]

Hinweis

Der Operator every unterstützt Trigger- und bedingte Notationen. Für diesen Operator sind jedoch beide Notationen gleichwertig. Die Übergangsbezeichnungen every(5,E) und [every(5,E)] zeigen einen Übergang aus dem zugehörigen Zustand an, wenn das Diagramm die k-te Übertragung des Basisereignisses E verarbeitet, nachdem der Zustand aktiv wurde, wobei k ein Vielfaches von fünf ist.

Bewährte Verfahren für die zeitliche Logik

Vermeiden von zeitlicher Logik auf Übergangspfaden ohne einen Zustand als Quelle

Der Wert eines zeitlichen Logikoperators hängt davon ab, wann der zugehörige Zustand aktiv wurde. Damit jeder zeitliche Logikoperator einen eindeutigen zugehörigen Zustand hat, verwenden Sie diese Operatoren nur in:

  • on-Zustandsaktionen

  • Aktionen auf Übergangspfaden, die von einem Zustand ausgehen

Verwenden Sie keine zeitlichen Logikoperatoren für Standardübergänge oder Übergänge in grafischen Funktionen, da diese Übergänge nicht von einem Zustand ausgehen.

Verwenden von absoluter zeitlicher Logik anstelle von tick in Diagrammen in Simulink-Modellen

In Diagrammen in einem Simulink-Modell ist der Wert von Verzögerungsausdrücken, die eine zeitliche Logik mit absoluter Zeit verwenden, semantisch unabhängig von der Abtastzeit des Modells. Im Gegensatz dazu hängen Verzögerungsausdrücke, die eine auf dem impliziten Ereignis tick basierende zeitliche Logik verwenden, von der vom Simulink-Solver verwendeten Schrittweite ab.

Zusätzlich wird die absolute Zeitlogik in Diagrammen mit Eingangsereignissen unterstützt. Das implizite Ereignis tick wird nicht unterstützt, wenn ein Stateflow-Diagramm in einem Simulink-Modell über Eingangsereignisse verfügt.

Vermeiden der Verwendung von at für die absolute zeitliche Logik in Diagrammen in Simulink-Modellen

In Diagrammen in einem Simulink-Modell wird die Verwendung von at als absoluter zeitlicher Logikoperator nicht unterstützt. Verwenden Sie stattdessen den Operator after. Nehmen wir zum Beispiel an, Sie möchten eine Zeitverzögerung mit dem Ausdruck at(5.33,sec) definieren.

Chart with a transition that uses at as an absolute-time temporal logic operator.

Um einen Laufzeitfehler zu vermeiden, ändern Sie die Übergangsbezeichnung in after(5.33,sec).

Chart with a transition that uses after as an absolute-time temporal logic operator.

Unerwartete Ergebnisse bei großen Parameterwerten

Eine absolute zeitliche Logikbedingung in Stateflow, wie after(x,sec), wird möglicherweise nicht zum erwarteten Zeitpunkt nach dem Eintritt in einen Zustand mit den folgenden Bedingungen zu true ausgewertet:

  • Das Diagramm hat eine periodische diskrete Abtastzeit.

  • Die Diagrammlogik sorgt dafür, dass der Zustand länger als 2147418 Zeiteinheiten aktiv bleibt. Die Zeiteinheiten sind die kleinsten Zeiteinheiten in jedem zeitlichen Logikausdruck, der von diesem Zustand verwendet wird. Wenn der Zustand beispielsweise zwei ausgehende Übergänge hat, von denen einer after(x,sec) und der andere after(x,msec) verwendet, sind die Zeiteinheiten msec (milliseconds).

In der Regel treten unerwartete Ergebnisse auf, wenn die Zeitdauer im Zustand größer als 2147418 Zeiteinheiten ist. Dies kann sich jedoch je nach Abtastzeit des Diagramms ändern.

Vermeiden der Verwendung von every für die absolute zeitliche Logik in Diagrammen in Simulink-Modellen

In Diagrammen in einem Simulink-Modell wird die Verwendung von every als absoluter zeitlicher Logikoperator nicht unterstützt. Verwenden Sie stattdessen einen äußeren Schleifen-Übergang mit dem Operator after. Nehmen wir zum Beispiel an, Sie möchten während der Ausführung des Diagramms alle 2,5 Sekunden eine Statusmeldung für einen aktiven Zustand drucken.

Chart with a state action that uses every as an absolute-time temporal logic operator.

Um einen Laufzeitfehler zu vermeiden, ersetzen Sie die Zustandsaktion durch einen äußeren Schleifen-Übergang.

Chart with a self-loop transition that uses after as an absolute-time temporal logic operator.

Fügen Sie einen Verlaufsknoten im Zustand hinzu, damit das Diagramm die Einstellungen des Zustands vor jedem Schleifen-Übergang speichert. Weitere Informationen finden Sie unter Wiederaufnahme früherer Aktivitäten unterhalb der Zustandsebene durch Verwendung von Verlaufsknoten.

Vermeiden der Verwendung von zeitlicher Logik in Übergangspfaden mit mehreren Quellen in eigenständigen Diagrammen in MATLAB

Eigenständige Diagramme in MATLAB unterstützen nicht die Verwendung von zeitlichen Logikoperatoren auf Übergangspfaden, die mehr als einen Zustand als Quelle haben. Zum Beispiel erzeugt dieses eigenständige Diagramm einen Laufzeitfehler, weil der zeitliche Logikausdruck after(10,sec) einen Übergangspfad auslöst, der mehr als einen Zustand als Quelle hat.

Standalone chart containing a temporal logic expression on the transition path originating from states Positive and Negative to state End.

Um das Problem zu lösen, verwenden Sie Ausdrücke der zeitlichen Logik auf separaten Übergangspfaden, die jeweils einen einzigen Zustand als Quelle haben.

Standalone chart using temporal logic expressions on separate transition paths.

Vermeiden der Vermischung von absoluter zeitlicher Logik und Bedingungen in Übergangspfaden von eigenständigen Diagrammen in MATLAB

In eigenständigen Diagrammen in MATLAB erstellen die Operatoren after, at und every MATLAB timer-Objekte, die implizite Ereignisse zum Aktivieren des Diagramms generieren. Die Kombination dieser Operatoren mit Bedingungen auf demselben Übergangspfad kann zu unbeabsichtigtem Verhalten führen:

  • Wenn eine Bedingung auf dem Übergangspfad falsch ist, wenn der timer das Diagramm aktiviert, führt das Diagramm die Aktionen during und on des aktiven Zustands aus.

  • Das Diagramm setzt das timer-Objekt, das mit den Operatoren after und at verknüpft ist, nicht zurück. Wenn die Bedingung auf dem Übergangspfad zu einem späteren Zeitpunkt wahr wird, findet der Übergang erst statt, wenn ein anderes explizites oder implizites Ereignis das Diagramm aktiviert.

In diesem Diagramm beispielsweise kombiniert der Übergangspfad von Zustand A zu Zustand B den zeitlichen Logikauslöser after(1,sec) und die Bedingung [guard]. Der Übergang von Zustand A zu Zustand C hat den Auslöser after(5,sec) der absoluten zeitlichen Logik. Jeder Übergang ist mit einem timer-Objekt verbunden, das ein implizites Ereignis generiert. Anfangs ist die lokale Variable guard false.

Chart combining an absolute-time temporal logic trigger and a condition on the same transition path.

Wenn Sie das Diagramm ausführen, wird Zustand A aktiv. Das Diagramm führt die Aktion entry aus und zeigt die Meldung Hello! an. Nach 1 Sekunde aktiviert der timer, der mit dem Übergang von A zu B verbunden ist, das Diagramm. Da der Übergang nicht gültig ist, führt das Diagramm die Aktion during im Zustand A aus und zeigt die Meldung Hello! ein zweites Mal an.

Angenommen, nach 2 Sekunden erhält das Diagramm das Eingangsereignis E. Das Diagramm führt die Aktion on im Zustand A aus und ändert den Wert von guard in true. Da das Diagramm den timer, der mit dem Operator after verbunden ist, nicht zurücksetzt, findet der Übergang von A zu B erst statt, wenn ein anderes Ereignis das Diagramm aktiviert.

Nach 5 Sekunden aktiviert der timer, der mit dem Übergang von A zu C verbunden ist, das Diagramm. Da der Übergang von A zu B gültig ist und eine höhere Ausführungsreihenfolge hat, wird der Übergang zu Zustand C im Diagramm nicht berücksichtigt und die Meldung Farewell! wird nicht angezeigt. Stattdessen wird Zustand B aktiv und das Diagramm zeigt die Meldung Good bye! an.

Verwenden von Diagrammen mit diskreten Abtastzeiten für eine effizientere Codegenerierung

Der für diskrete Diagramme, die sich nicht in einem ausgelösten oder aktivierten Subsystem befinden, generierte Code verfolgt mit Ganzzahl-Zählern die Zeit, anstatt sich auf die von Simulink bereitgestellte Zeit zu verlassen. Dieses Verhalten ermöglicht eine effizientere Codegenerierung in Bezug auf Overhead und Speicher und ermöglicht die Verwendung dieses Codes in den Simulationsmodi Software-in-the-Loop (SIL) und Processor-in-the-Loop (PIL). Weitere Informationen finden Sie unter SIL and PIL Simulations (Embedded Coder).

Siehe auch

| | | | | | | | | (Simulink) | (Simulink)

Themen