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

Integrator funktioniert nicht wie erwartet

 

christian_2
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2022, 11:55     Titel: Integrator funktioniert nicht wie erwartet
  Antworten mit Zitat      
Hallo zusammen,

in meinem Simulinkmodell habe ich einen Integrator, der sich in meinem Modell nicht so verhält, wie ich das erwarte (siehe Anlage 1).
Man sieht am Scope im Zeitbereich zwischen 18 s und 23 s, dass das Eingangssignal des Integrators null ist, das Ausgangssignal des Integrators aber kontinuierlich kleiner wird.
Dieses Verhalten hat 'mein' Integrator, den ich mittels eines Memory-Blocks aufgebaut habe, nicht. 'Mein' Integrator tut das, was man (oder ich) erwarte.

Ich finde das Ergebnis 'erschreckend', weil ich mich jetzt frage, ob 'sowas' in anderen Modellen auch schon passiert ist, ohne dass ich es gemerkt habe.
Das Eingangssignal des Integrators ist m. E. nichts "Besonderes". Ich verwende den Integrator in einem PID-Regler (siehe Anlage 2).

Ich habe die Signale am Eingang und am Ausgang mal mittels 'To Workspace' aufgezeichnet.
Dann habe ich ein neues Testmodell aufgebaut und den Integrator mit den Eingangswerten beaufschlagt. Das Ergebnis war unterschiedlich!
In dem Testmodell verhielt sich der Integrator so, wie man es erwartet. Wie kann das sein?
Die Löser-Einstellungen (ode4, konstante Schrittweite von 0.1 s) habe ich gleich eingestellt.

Das Eingangssignal ist kontinuierlich (Anlage 3). An den Parametern des Integrators habe ich beim Einfügen des Blocks nichts geändert (Anlage 4). Die Löser-Einstellungen sind auch nicht besonders spektakulär (Anlage 5: Integrationsschrittweite = 0.1, t_Sim = 80).

Ein Matlab-Neustart führt zum gleichen Ergebnis.
Der Fehler tritt mit Matlab 2019b und Matlab 2020b gleichermaßen auf. Betriebssystem Windows 10.

Ich habe keine Idee mehr, wie ich die Ursache des Problems weiter eingrenzen könnte. Gerne hätte ich das Modell mitgeschickt, aber erstens ist das "Arbeit" und zweitens enthält das Modell zwei FMUs, die ohne Lizenzen nicht funktionieren (GT und Flowmaster).

Viele Grüße
Christian

Anlage_5.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_5.jpg
 Dateigröße:  73.07 KB
 Heruntergeladen:  121 mal
Anlage_4.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_4.jpg
 Dateigröße:  35.76 KB
 Heruntergeladen:  121 mal
Anlage_3.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_3.jpg
 Dateigröße:  43 KB
 Heruntergeladen:  107 mal
Anlage_2.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_2.jpg
 Dateigröße:  96.6 KB
 Heruntergeladen:  112 mal
Anlage_1.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_1.jpg
 Dateigröße:  86.3 KB
 Heruntergeladen:  117 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.12.2022, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

mindestens die Hälfte der Simulink-Anwender dürften Integrator-Blöcke in ihren Modellen haben. Dass es dort einen Bug gibt, der niemandem aufgefallen ist (sonst wäre das Problem im aktuelleren Release wohl behoben), kann ich mir kaum vorstellen.

Die Frage ist, was ist in deinem eigentlichen Modell anders als in dem Testmodell? Ich fürchte, dass zumindest ich dir ohne ein Modell, in dem man das Beispiel nachvollziehen kann, nicht werde helfen können. Vielleicht kannst du versuchen, die FMUs durch andere Blöcke, die annähernd ein ähnliches Verhalten haben, zu ersetzen.

Eine Alternative kann sein, dass du dich an den Technischen Support von MathWorks wendest. Dass die Leute dort dir ohne ein Modell, in dem der Fehler auftritt, weiterhelfen können, kann ich aber nicht versprechen.

Auch wenn ich nicht denke, dass das was ändert, würde ich mal den automatisch voreingestellten Solver oder ode45 versuchen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
christian_2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2022, 15:05     Titel:
  Antworten mit Zitat      
Hallo Harald,

erstmal Danke für Deine schnelle Antwort.

Ich schätze schon, dass sich der Integrator so verhält, wie sich der Programmierer das gedacht hat. Mein Problem ist, dass ich offensichtlich nicht weiß, 'wie' ich den Block anwenden muss, damit das heraus kommt, was ich erwarte.


Beim Mittagessen hatte ich noch einmal eine gute Idee.

Ich hatte ja schon geschrieben, dass ich die Ein- und Ausgangssignale aufgezeichnet habe und dann in einem Testmodell versucht habe, den Fehler zu reproduzieren.

Jetzt habe ich es so gemacht, dass ich die Signale aufgezeichnet habe, dann habe ich alles gelöscht, bis auf den Integrator.
Den Integrator habe ich dann mit dem "From workspace" verbunden und dann habe ich simuliert.

Interessanterweise konnte ich den 'Fehler' NICHT reproduzieren.


Das bedeutet jetzt also folgendes:
1. Es kann nicht an den Blockeinstellungen liegen (den habe ich ja nicht geändert)
2. Es kann auch nicht an den Löser-Einstellungen liegen (ist ja das selbe Modell).

(Apropos Löser-Einstellungen: Ich habe nicht nur ode4 versucht, sondern auch die Einstellung 'Auto'. Das Ergebnis war aber das gleiche.)


Das bedeutet also (meiner Meinung nach), dass es doch an dem Eingangssignal des Integrators liegen muss, womit ich ehrlich gesagt nicht gerechnet hätte.

Im Anhang 3 war ja zu sehen, dass das Signal kontinuierlich ist. Ich habe im Internet gelesen, dass diskrete Signale zu anderen Ergebnissen führen können, gegenüber kontinuierlichen Signalen. Und nachdem ich gesehen habe, dass das Signal kontinuierlich ist, dachte ich, dass hier alles in Ordnung wäre.

Der Versuch von oben bedeutet aber auch, dass Simulink nicht das Original-Signal aufgezeichnet hat, sondern etwas anderes (sonst hätte ja das gleiche ungewollte Verhalten herauskommen müssen). Das bedeutet dann auch, dass ich hier im Chat auch keinen Workspace abspeichern kann, damit andere das Problem nachvollziehen können.


Jedenfalls muss es am Signal liegen, dass nicht so integriert wird, wie ich mir das vorstelle. Ich frage mich jetzt, wie kann ich herausfinden, was mit dem Signal nicht stimmt?
Ich weiß:
- es ist kontinuierlich
- es ist eindimensional
- es hat konstante Schrittweite (habe ich mit einem Scope überprüft)

Was gibt es denn noch für eine Signaleigenschaft, die zu so einem Ergebnis bei einem Integrator führen kann? Mir fehlt da irgendwo die Phantasie bzw. das Wissen.
Seit etwa 22 Jahren verwende ich in Simulink Integratoren. Aber so ein Verhalten habe ich noch nie gesehen. Wobei ich auch gestehen muss, dass ich natürlich nicht immer überprüft habe, dass auch das rauskommt, was ich erwarte. Für mich war ein Integrator in etwa so ein Block, wie "Product" oder "Sum". Diese Blöcke rechnet man ja auch nicht "zu Fuß" nach (oder nur einmal).
Private Nachricht senden Benutzer-Profile anzeigen
 
christian_2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2022, 15:17     Titel:
  Antworten mit Zitat      
Hallo noch einmal,

mein Problem habe ich jetzt lösen können. Ich habe den Block "Rate Transition" vor den Integrator gesetzt. Jetzt kommt das Ergebnis heraus, was ich erwartet habe.

Allerdings hilft mir das nur bedingt weiter, weil ich nicht verstehe, warum das so funktioniert. Außerdem möchte ich wissen, wann man das machen muss und wann nicht, um zukünftig keine Fehler zu machen.

In der Hilfe zum Block steht:
'Handle transfer of data between blocks operating at different rates'.

Ich denke mir, wenn das Signal kontinuierlich ist, dann habe ich doch keine unterschiedlichen "Rate".
Und warum wurde das mit "Information Overlays-> Sample Time" nicht angezeigt?

Gibt es eine andere Möglichkeit mir das von Simulink anzeigen zu lassen ("unterschiedliche Raten")?

Was kann/muss ich tun, damit ich zukünftig diesen Fehler nicht mehr ungewollt mache? Warum sind genau diese Ergebnisse herausgekommen und nicht andere? Das muss man doch irgendwie nachvollziehen können.

VG
Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
christian_2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 16.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2022, 15:49     Titel:
  Antworten mit Zitat      
Hallo noch ein letztes Mal vor Weihnachten,

ein Arbeitskollege hatte noch die Idee, einen diskreten Integrator zu verwenden.
Was soll ich sagen, es funktioniert Question
Das hat mich jetzt vollständig verwirrt (siehe Anlage).


Zusammengefasst:

1.
Ich habe ein kontinuierliches Signal und verwende den dafür vorgesehenen 'normalen' Integrator. Dann kommen 'falsche' Ergebnisse heraus.

2.
Ich verwende den Integrator, der für diskrete Signale vorgesehen ist, für mein kontinuierliches Signal. In diesem Fall kommt das richtige Ergebnis heraus.

Allerdings erzeugt dieser Block dann natürlich auch ein diskretes Ausgangssignal (siehe Anlage).


Ich weiß jetzt einfach nicht, welche Schlüsse ich für die Zukunft daraus ziehen soll...

Jedenfalls mache ich jetzt Feierabend und wünsche allen schöne Weihnachten und ein schönes neues Jahr.

Ich lese und antworte hier erst wieder in der 2. KW.

VG
Christian

Anlage_1_1.jpg
 Beschreibung:

Download
 Dateiname:  Anlage_1_1.jpg
 Dateigröße:  55.96 KB
 Heruntergeladen:  110 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2022, 11:00     Titel:
  Antworten mit Zitat      
Hallo,

ich bin mehr auf der MATLAB-Seite unterwegs, versuche mich aber dennoch mal an ersten Antworten.

Wenn man verschiedene Abtastraten hat, unbedingt Rate Transition-Blöcke verwenden. An welcher Stelle die Umwandlung erfolgt, kann die Modell-Dynamik verändern. Daher ist es wichtig, dass man den Block verwendet, um da die Umwandlung haben, wo man sie möchte.

Hast du das Modell ausgeführt oder zumindest aktualisiert, nachdem du das mit den Sample Times eingestellt hast?

Ich würde letztlich ein Gespräch mit einem Experten bei MathWorks empfehlen. Falls du da keine Kontakte hast, bietet sich der Technische Support an. Alternativ kannst du mir eine PN mit Kontaktdaten (Email-Adresse) schicken, und ich schaue da nach einem Ansprechpartner für dich.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.