|
|
Verzögerte Weitergabe von Variablen |
|
Michael89 |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 22.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2015a
|
|
|
|
|
|
Verfasst am: 22.08.2015, 20:52
Titel: Verzögerte Weitergabe von Variablen
|
|
|
|
|
Hallo zusammen,
ich erstelle im Moment ein Längsdynamikmodell eines Fahrzeuges mit Verbrennungsmotor. Seit einigen Tagen schon versuche ich, die Wahl des richtigen Ganges während der Fahrt zu berechnen.
Dazu habe ich in meinem Simulinkmodell eine Matlab Function, die als Eingänge alle möglichen Fahrzeugzustände (wie Gaspedalstellung, Motordrehzahl,...) und den momentan eingelegten Gang (z_Gang_ein) bekommt, Ausgang ist der Gang, der eingelegt werden soll und der dann an das Modell weitergegeben wird (z_Gang). (z_Gang ist ein Integer, zwischen 1 und 6)
Realisiert ist das ganze mit mehreren if-Bedingungen wie z.B., dass meine vorausberechnete Motordrehzahl nach dem Hochschalten nicht unter einen besitmmten Wert fallen darf. Als Ergebnis dieser if-Abfragen wird dann gegebenenfalls der Gang geändert.
Als Beispiel: (ich habs mal ausformuliert, im Code stehen bei mir natürlich Unmengen an Variablen und Formel)
Nun zu meinem Problem: Wenn die Matlab Function nach der Änderung des Ausgangs das nächste mal durchläuft, hat der Eingang nicht den aktuellen Wert, sondern immer noch den alten.
Wenn ich beispielsweise vom 1. in den 2. Gang schalte, ist mein Eingangswert für den aktuellen Gang noch immer auf 1. Es dauert einige Umläufe, bis die 2 auch am Eingang ankommt, bis dahin bekommt meine Function immer die Info, man wäre noch im ersten Gang. Dadurch kommt es zu völlig unsinnigen Aktionen, weil ja die Fahrzeugzustände nicht zum (angeblichen) Gang mehr passen.
Diese verzögerte Weitergabe habe ich mir im Debugging-Modus mit einer schrittweisen Abarbeitung angeschaut, ich verstehe aber nicht, wie es dazu kommt.
Es tritt auf, wenn ich den Ausgang direkt zum Eingang zurückführe (wobei mir ein wenig unwohl ist, weil ich damit ja eine algebraische Schleife erzeuge und nicht genau weiß, in welcher Reihenfolge was abgearbeitet wird), genauso wie wenn ich diese Verbindung nur indirekt habe, indem ich den Ausgang in einem Data Store Memory ablege und von dort wieder einlese. Ein Verzögerungsglied habe ich nicht dazwischen gebaut.
Woher kommt diese Verzögerung, ist das normal? Und was kann man dagegen machen? Als Ansatz hab ich mir überlegt, einen Zähler mitlaufen zu lassen, der nach einer Gangänderung ein weiteres Schalten erstmal verhindert (z.B. 10 Durchläufe lang), bis ich sicher bin, dass mein neuer Ausgang auch am Eingang angekommen ist. Besonders elegant ist das allerdings nicht.
Es wäre super, wenn mir jemand helfen könnte, ich glaube ich hab mit der verzögerten Weitergabe des Ausgangswertes jetzt endlich die Ursache für die Fehler in der Simulation gefunden, konnte aber zu dem Phänomen nirgends was finden.
|
|
|
|
|
Michael89 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 22.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2015a
|
|
|
|
|
|
Verfasst am: 24.08.2015, 21:58
Titel: Problem umgangen
|
|
Hallo,
ich hab das ganze jetzt anders gelöst, und zwar, indem ich eine persistent variable innerhalb der Matlab Function erstellt habe. Weil diese jetzt ihren Wert aus dem letzten Berechnungsschritt behält, muss ich den Ausgang nicht mehr zum Eingang zurückführen.
_________________
OS: Windows 7 x64
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|