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

Verändern eines Block-Paramters über Matlab Function

 

simben
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 09:54     Titel: Verändern eines Block-Paramters über Matlab Function
  Antworten mit Zitat      
Guten Tag,

ich habe in Sumlink ein mechanisches Modell aufgebaut, um einen Stoß zu simulieren. Der Stoß soll zwischen zwei Körpern stattfinden, wobei diese über einen CAD-Import ihre Eigenschaften (wie z.B. die Masse) erhalten. Daher arbeite ich in dem hochgeladenen Simulink-Modell mit Blöcken aus SimMechanics.
Stoßen die zwei Körper zusammen, stoppt das Simulationsmodell und die Geschwindigkeiten der Körper werden neu berechnet und den Joint-Blöcken übergeben. Dies geschieht über eine eingebettete Matlab-Function. Danach soll das Simulationsmodell mit den neuen Anfangsbedingungen weiterlaufen.
Soweit die Vorstellung.

Ich bekomme jedoch die Fehlermeldung, dass die Parameter während der Simulation nicht geändert werden können, obwohl ich in der Matlab-Function über set_param die Simulation stoppe. Dabei vermute das Problem bei der Matlab-Function, welche ja auch ein Block innerhalb des Modelles ist. Würde ich ein ähnliches externes M-File erstellen habe ich aber das Problem, dass ich nicht weiß wie die Geschwindkeiten ausgelesen werden können.

Somit möchte ich gerne wissen:
Was muss ich an der Matlab-Function ändern, sodass die Geschwindigkeiten eingetragen werden?

Wie kann ich die Geschwingkeit aus dem Joint-Block zu einem bestimmten Zeitpunkt auslesen?

Viele Grüße

Stoss_2Koerper_Function.slx
 Beschreibung:

Download
 Dateiname:  Stoss_2Koerper_Function.slx
 Dateigröße:  24.46 KB
 Heruntergeladen:  416 mal
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 11:16     Titel:
  Antworten mit Zitat      
Wenn Du das Modell stoppst, kann doch die embedded matlab function gar nicht mehr aufgerufen werden. Und wenn sie aufgerufen wird, ist die Simulation nicht gestoppt.

Du kannst aber in den Model Properties unter Callbacks deine Aktionen, die nach dem stoppen ausgeführt werden sollen unter StopFcn eintragen.
Private Nachricht senden Benutzer-Profile anzeigen
 
simben
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 13:11     Titel:
  Antworten mit Zitat      
Vielen Dank für den Hinweis!

Ich habe die Variante über die StopFcn im Callback bereits im Vorfeld schon ausprobiert, habe aber dabei zwei Probleme:

1. Wie lese ich die Geschwindigkeiten zum Stoßzeitpunkt aus?

2. Gebe ich zum Testen Geschwindigkeiten nach dem Stoß vor, kann die Simulation aus der StopFcn nicht neu gestartet werden. Es erschient leider auch keine Fehlermeldung dazu.

Stoss_2Koerper_Callback.slx
 Beschreibung:

Download
 Dateiname:  Stoss_2Koerper_Callback.slx
 Dateigröße:  23.88 KB
 Heruntergeladen:  400 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2015, 16:14     Titel:
  Antworten mit Zitat      
1. Du kannst Simulink in den model configurations parameters sagen, dass es den final state in den workspace schreiben soll. Da musst Du dann nur noch rausfinden, welcher Zustand Deine Drehzahl ist.

2. Das ist denkbar, dass das nicht geht, weil das Modell sich dann ja selbst aufruft. Das ist vermutlich nicht möglich. Dann brauchst Du wohl ein Skript, was die Aufrufe für Dich macht:

Code:

initalState = 10;
while 1
   sim('stoss_modell');
   initialState = xFinal(4); %xFinal kann Simulink ausgeben, die 4 musst Du durch die richtige Zahl ersetzen.
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
simben
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 18:56     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für die Unterstützung. Der erste Hinweis, wie die berechneten Werte (hier die Geschwindigkeiten) herausgelesen werden können, hat super geklappt.
Damit kann ich nun mit den Werten arbeiten und die Simulation läuft nun so, wie ich es mir vorgestellt habe.

Viele Grüße und nochmals vielen Dank!
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.