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

Real-Time-Workshop (RTW) - Ändern der stepSize zur Laufzeit

 

EliteTUM
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 26.04.2011, 09:37     Titel: Real-Time-Workshop (RTW) - Ändern der stepSize zur Laufzeit
  Antworten mit Zitat      
Hallo,

ich arbeite momentan mit einer Executable die aus C-Code compiliert wurde. Dieser wiederrum wurde mit Hilfe des Real-Time-Workshop aus einem komplexen Simulink-Modell erzeugt. Die Executable läuft über längere Zeit, die Simulation wird aber zwischendrin öfters auch mal pausiert. Um Rechenleistung zu sparen würden wir gerne, wenn die Simulation pausiert wurde, die Schrittweite vergrößern. Ist dies generell möglich? Hat da jemand Erfahrung mit? Meine bisherige Recherche ergab keine eindeutige zufriendstellende Antwort dazu.

Ungefähre Modellbeschreibung:
Es handelt sich um ein komplexes Modell mit einer festen Simulationsschrittweite von 2ms. Die erzeugte Executable steh über TCP/IP-Verbindung mit einer externen Software in Verbindung, deren Rechenschrittweite 40ms beträgt. Die externe Software steuert unsere Simulink-Executable. Intern innerhalb unseres Simulink-Modells wird die Simulation mit Hilfe einer S-Function gesteuert (d.h. Start, Stop, Pause der Simulation). Sobald die Simulation von extern pausiert wird, läuft die Simulink-Executable weiter mit einer Simulationsfrequenz von 2ms weiter ohne jedoch irgendwelche Berechnungen anzustellen. Dies ist eine unnötig hohe Belastung des Rechners (CPU-Lüfter läuft dauerhaft auf Maximum) und soll wenn möglich unterbunden werden indem während des Pausierens die Simulationsschrittweite auf 40ms (wie die externe Anwednung) angehoben wird. Sobald wir wieder einen Start-Befehl bekommen würden wir gerne zurück auf 2ms zurückschalten und weiter simulieren.

Mein bisherige Ansatz, der aber nicht funktionierte, war:

Die S-Function welche die externen Steuerbefehle (Start, Stop, Pause) erhält und intern die Simulink-Executable steuert ist in C geschrieben. Die Funktion mdlOutputs() ist dabei die Funktion welche zu jedem Simulationsschritt einmal aufgerufen wird und die S-Function-Blockausgänge errechnet. Sollten wir nun ein Pause-Signal erhalten, habe ich versucht einfach immer ein "sleep(...)"-Befehl einzubauen, so dass wir innerhalb dieser Funktion 40ms warten. Dies hatte jedoch keinerlei Wirkung. Anscheinend wird der Aufruf der Funktion "mdlOutputs()" extern jeweils nach Ablauf der stepSize() getriggert ohne auf die Beendigung des vorherigen Aufrufes zu warten. Jemand eine Idee, ob die Änderung der Stepsize wie gewollt möglich ist?

Bin für jede Hilfe und Anregung dankbar!
_________________

- EliteTUM
_____________________________________
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.04.2011, 10:21     Titel:
  Antworten mit Zitat      
Hallo,

nach meinem Verständnis ist eine Änderung der Schrittweite während der Laufzeit nicht möglich.
Was funktionieren könnte: das ganze Modell in ein Enabled Subsystem einbauen, dessen Steuersignal:
- 1 ist, wenn normal simuliert wird.
- ein Puls-Signal ist, das alle 40 ms auf 1 geht, wenn die andere SW pausiert.
Das hätte meines Erachtens den gewünschten Effekt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
EliteTUM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 26.04.2011, 10:40     Titel:
  Antworten mit Zitat      
argh, auf einen ähnlichen Vorschlag bin ich bei meiner Recherche auch gestoßen. Hätte gehofft, das ganze lediglich durch Abändern meiner S-Function oder schlimmstenfalls der RTW-Main-C-File zu erreichen. Am Simulink-Modell will ich nur ungern "rumpfuschen". Sollte zwar kein Problem sein weil ich im Endeffekt das ganze bisherige Modell in ein Sub-Modell eine Ebene tiefer packe, aber das Modell ist extrem komplex (mehr als tausend Blöcke). Mal schauen, zur Not muss halt unnötig Prozessor-Abwärme produziert werden Wink

Danke für den Tipp!
_________________

- EliteTUM
_____________________________________
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du könntest auch mit einer Modell-Referenz arbeiten.
Damit würde das ursprüngliche Modell nicht angetastet.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
EliteTUM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 21.04.11
Wohnort: München
Version: ---
     Beitrag Verfasst am: 26.04.2011, 11:44     Titel:
  Antworten mit Zitat      
guter Tipp, ich versuchs mal. Danke!
Muss nur meine S-Functions durchgehen ob die von einer festen Simulationszeit ausgehen. Manche haben nämlich einen simplen Zeit-Counter integriert der bei jedem Simulationsschritt mitzählt (weshalb auch immer Smile )und bei sich ändernder Schrittweite ist das natürlich sinnlos.
_________________

- EliteTUM
_____________________________________
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 26.04.2011, 21:01 Uhr von _Peter_
Von Programmierung nach Simulink
 
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.