|
|
Simulink-Modell bei größerer Step-Size nicht ausführbar |
|
ratsplayer |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 07.07.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 12:42
Titel: Simulink-Modell bei größerer Step-Size nicht ausführbar
|
|
|
|
|
Hi,
ich befinde mich im Informatik-Studium und arbeite aktuell mit Matlab-Simulink. Ich habe ein fertiges Fahrdynamikmodell, welches ich anpassen und in eine Simulations-Software integrieren muss.
Das Modell läuft auf einer Step-Size von 1/1000. Ich benötige allerdings für die Simulationssoftware eine Step-Size von 1/120 (120Hz). Die Anpassung ist maximal bis 1/610 möglich (getestet).
Wenn ich versuche die Step-Size zu ändern und das Modell auszuführen, erhalte ich mehrere solcher Errors:
Derivative input x of 'Modellname/Integrator' at time 0.xxx is Inf or NaN. Stopping simulation. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances)".
Es werden mir dann, wenn ich die Errors auswähle immer die Integratoren angezeigt. Diese haben wohl bei dieser Step-Size zu verschiedenen Zeitpunkten als Input INF oder NaN.
Ich habe bereits versucht eine Schaltung vorzuschalten, die bei Inf oder NaN den Reset-Port des Integrators aktiviert, leider führt das nicht zur Problemlösung.
Auch durch Googlen bin ich nicht auf eine Problemlösung gestoßen, obwohl ich verschiedene Foren-Einträge mit dem selben Fehler gefunden habe.
Hat jemand eine konkrete Idee, warum das Modell mit einer größeren Step-Size nicht mehr läuft?
Ich verwende aktuell noch Matlab R2012b.
Im Modell ist Fixed-Step mit ODE5 konfiguriert.
Auch mit anderen Solvern (Fixed-Step) lässt sich das Problem nicht lösen.
Leider darf ich weder das Modell noch Modell-Teile veröffentlichen.
Vielen Dank im Voraus und viele Grüße
ratsplayer
|
|
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 13:15
Titel:
|
|
|
|
|
Nicht jeder Solver ist für ein gegebenes Modell bei jeder Schrittweite stabil. Es kann also passieren, dass die Simulation bei zu große Schrittweiten instabil wird, obwohl das System an sich stabil ist. Da hilft entweder, dem Betreuer/Vorgesetzten zu sagen, dass er nochmal über sein Problem nachdenken soll (leider sind viele dazu nicht bereit) oder die Wahl eines anderen (impliziten) Solvers. Explizite Solver (wie der ODE5) sind nicht grundsätzlich stabil. Ich bin mir nicht mehr ganz sicher, aber wenn ich mich recht erinnere, können instabile Eigenwerte bei impliziten Solvern stabil erscheinen - da muss man dann ein bisschen aufpassen, dass man keinen Quatsch simuliert.
Ansonsten sollte man, bevor man einfach mal eben die Schrittweite um Faktor 10 reduziert, kurz nochmal über Shannon meditieren und überlegen, ob man das wirklich tun will. Auch hier vielleicht nochmal den Betreuer triggern. Bei einer Abtastrate von 120Hz werden im Ergebnis nur Frequenzen bis 60Hz abgebildet sein. Und entsprechend müssen auch die Eingangsdaten aufbereitet werden. Je nach dem, was man so an Filtertechnik rumstehen hat, kann es einem passieren, dass man mit der Grenzfrequenz für das Antialiasing-Filter sehr niedrig landet (niedrig im Sinne von deutlich unter 10Hz). Da verschätzt man sich sehr schnell ganz ordentlich. Wahlweise muss man die Eingangsdaten mit einer höheren Frequenz abtasten, als das Modell läuft (oversampling) und kann dann ein bisschen am Analog-Filter sparen.
Kurz: Dein Problem sollte lösbar sein, stell aber auf jeden Fall nochmal sicher, ob es wirklich gelöst werden soll.
|
|
|
ratsplayer |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 07.07.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 13:31
Titel:
|
|
|
|
|
Hi,
erstmal vielen Dank für deine ausführliche Antwort.
Welchen Solver würdest du empfehlen? Beim Rumexperimentieren mit verschiedenen Solvern wurde mir immer die selbe Fehlermeldung angezeigt.
Ich bin leider kein Matlab-Simulink-Experte, möglicherweise fehlt es mir auch etwas am grundlegenden Verständnis des Problems.
Die Eingangswerte stammen alle von der Simulationssoftware, es handelt sich also nicht um Werte aus der Natur, ich gehe davon aus, dass somit die meisten Filter nicht nötig sind.
Das Problem mit der Abtastrate wirkt sich doch eigentlich nur auf die Qualität der Ausgänge aus, oder? Ich frage mich aber, warum die Simulation gar nicht möglich ist. Auch verstehe ich nicht wirklich, wie die Simulation instabil werden kann.
Was ist neben der Wahl eines anderen Solvers notwendig um das Problem zu lösen?
Die Vorgabe von 120Hz ist durch die Hardware/Simulationssoftware gegeben. Aus dem Modell wird über C++-Code eine "DPU" (dll) für die Simulationssoftware SILAB erstellt.
Gruß
ratsplayer
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 13:53
Titel:
|
|
|
|
|
Zur Wahl des richtigen Solvers gibt es einen tollen Artikel von Mathworks: http://de.mathworks.com/help/simulink/ug/choosing-a-solver.html
Meiner Meinung nach einer der besten Texte überhaupt zu dem Thema - die verlinkten Artikel zum gleichen Thema gehören auch dazu. Stell Dich auf ein bisschen Mathematik ein. Auch die Artikel auf Wikipedia (auch die englischen) sind zu dem Thema nicht verkehrt.
Die Simulation darf die Eingangswerte dann auch nur mit 120Hz liefern. Wenn alles auf einem System läuft, wird sie das aber sicherlich tun. Die Auswirkung der langsamen Abtastung ist vor allem, dass Du keine schnellen Vorgänge abbilden kannst. Wenn das Auto durch ein Schlagloch auf der Autobahn simuliert werden soll, wird die Simulation zwar ein Ergebnis liefern, aber das hat vielleicht nicht unbedingt etwas mit dem zu tun, was ein echtes Auto machen würde, da die Simulation ja nur alle 1s/120 hinguckt. Alles, was dazwischen passiert, siehst Du nicht. Darüber sollte sich aber der Aufgabensteller bewusst sein (nicht unbedingt der Fall).
Zum Problem: es kann sein, dass das Modell zeitdiskret aufgebaut ist. Dann hat eine Änderung des Solvers von Simulink keine Auswirkungen. Das kannst Du schnell rausbekommen, wenn Du "discrete (no continous states)" als solver einstellst. Keine Fehlermeldung -> Modell ist zeitdiskret. Fehlermeldung: wenigstens ein Element ist nicht zeitdiskret, was aber nicht heißen muss, dass das Modell an sich nicht zeitdiskret aufgebaut ist.
|
|
|
ratsplayer |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 07.07.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 14:38
Titel:
|
|
Hi,
vielen Dank nochmals für deine schnelle Antwort.
Ich habe den Artikel mal grob durchgelesen und werde in den nächsten Tagen mal mit den Solvern experimentieren.
Das die Ergebnisse durch eine größere Schrittweite schlechter werden ist mir klar. In erster Linie geht es mir allerdings erstmal darum, dass ich das Modell in der Simulationssoftware ans laufen bekomme. Die Ergebnisse würde ich dann mal mit den Ergebnissen einer kleineren Schrittweite vergleichen.
Testweise habe ich den Solver bereits auf "discrete (no continous states)" gestellt und erhalte weiterhin Fehlermeldungen.
Ich werde parallel zum Testen der Solver mal versuchen herauszufinden, ob es eventuell eine Möglichkeit gibt, das Modell mit 610Hz in der Simulationssoftware ausführen zu können. Hardware-Kosten sollten hierbei eigentlich keine Rolle spielen.
Gruß
ratsplayer
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 07.07.2015, 14:38
Titel:
|
|
Ich würde gerne zunächst mehr wissen was "in eine Simulationssoftware integrieren" bedeutet. Was ist das für eine Software, wie fuktioniert die Integration und was wird da simuliert was Simulink nicht kann. Ist es eine Co-Simulation?
Andreas
|
|
|
ratsplayer |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 07.07.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 18:05
Titel:
|
|
Hi,
es handelt sich um die Simulationssoftware SILAB (https://wivw.de/de/silab/). Diese ist wie ein Framework aufgebaut. Es besteht die Möglichkeit selbsterstellte "DPUs" (Data Processing Units) zu erzeugen und integrieren.
Diese DPUs kann man erstellen, in dem man aus dem Simulink-Modell C/C++-Code erzeugt, diesen an die Anforderungen von SILAB anpasst, kompiliert und builded.
Die DPUs sind DLL-Dateien, die von SILAB ausgeführt werden. Die Eingänge der Modelle werden dabei von SILAB beschrieben und SILAB verwendet die Werte aus den Ausgängen zur Simulation.
SILAB kann sowohl auf einem einzigen Rechner ausgeführt werden, sich aber auch auf mehrere Rechner splitten, wobei dann jeder Rechner eine eigene Aufgabe übernimmt (Sound, Bildschirmausgaben, ...).
Der Rechner, der in diesem Fall das Modell ausführen soll, führt die Simulation mit 120Hz aus.
Gruß
ratsplayer
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 08.07.2015, 07:15
Titel:
|
|
Sehr schön, das heisst technologisch geht es über einen kompletten "Export" des Simulink Modells als C Code. Das bedeutet wiederum, alle Möglichkeiten das Modell selber mit den gewünschten Eigenschaften lauffähig zu machen sind witzlos, wenn sie nicht C-Code fähig sind.
Meine Idee ist daher vielleicht nicht hilfreich. Ich kenne mich mit Codegenerierung kaum aus, es käme halt auf einen Versuch an.
In den Configuration Parameters man spezielle und zusätzliche Outputs einstellen, Save options -> Refine Output oder die anderen Möglichkeiten.
Es müsste auch Möglichkeiten "Downsample" oder so geben.
Andreas
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 09:30
Titel:
|
|
Refine wäre genau das Gegenteil vom gewünschten, Downsample kann ich bei mir (2014b) nicht entdecken. Vielleicht hast Du aber mit "Produce specified output only" glück, wenn Du dort
0:(1/120):inf
für die Zeitpunkte vorgibst.
Falls das funktioniert, musst Du wieder mit Shannon aufpassen, da das letztendlich auch eine langsame Abtastung eines Signals ist, das sich schneller ändert, als Du abtastest.
|
|
|
ratsplayer |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 07.07.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 16:12
Titel:
|
|
Hi,
danke euch allen für eure Antworten.
Ich habe alles Mögliche durchprobiert, im Endeffekt werde ich die Frequenz irgendwo zwischen 610 und 1000Hz belassen.
Ich habe ein anderes Problem behoben, das Modell lässt sich jetzt in der Simulationssoftware verwenden (noch nicht perfekt, aber läuft erstmal grundsätzlich).
Viele Grüße
ratsplayer
|
|
|
|
|
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.
|
|