WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Verzögerte Weitergabe von Variablen

 

Michael89
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.08.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 22.08.2015, 20:52     Titel: Verzögerte Weitergabe von Variablen
  Antworten mit Zitat      
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)

Code:

function z_Gang = fcn(z_Gang_ein, Motordrehzahl, Gaspedalstellung, usw.)

z_Gang = z_Gang_ein  % Definieren von z_Gang auf aktuellen Wert (den verliert er komischerweise nach jedem Durchlauf wieder)

if möglichst frühes Hochschalten gewünscht && Hochschalten möglich
z_Gang = z_Gang_ein + 1   % Hochschaltung
end


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.
Private Nachricht senden Benutzer-Profile anzeigen


Michael89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.08.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 24.08.2015, 21:58     Titel: Problem umgangen
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.