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

Simulinkmodell aus Matlab heraus simulieren

 

mikemodanoxxx
Forum-Anfänger

Forum-Anfänger



Beiträge: 41
Anmeldedatum: 23.04.09
Wohnort: Höchst/Odw
Version: R2007a
     Beitrag Verfasst am: 31.05.2012, 15:06     Titel: Simulinkmodell aus Matlab heraus simulieren
  Antworten mit Zitat      
Hallo,

ich würde gerne ein Simulink aus Matlab heraus immer schrittweise simulieren. Ich beschreibe am Besten erstmal kurz den Kontext:

- Ich habe ein C++ Programm, dass einen Regler darstellt und normalerweise an einen Roboter angebunden ist. Dieses Programm soll nun gegen ein Simulink-Modell getestet werden. Dafür erstetze ich das Roboter-Interface durch Funktionen, die quasi die Sensorwerte aus dem Modell auslesen und die Stellwerte auf das Modell geben.

- Mein Ziel ist also: Reglerwerte berechnen, an das Modell übergeben, bis zum nächsten Takt simulieren, Sensorwerte auslesen und wieder von vorne.

Im Netz scheint das Problem schrittweise zu simulieren nicht selten zu sein. Die Lösung die meistens benutzt wird scheint zu sein, sim() für eine feste Zeit zu benutzen, danach die Ausgabe/Zustände zu speichern und anschließend wieder eine neue Simulation zu starten. Das scheint mir irgendwie eine unbefriedigende Lösung zu sein. Was für Alternativen gibt es denn da? Ich habe noch den Befehl "model" gefunden (Link). Allerdings finde ich nicht heraus, wie man den gescheit benutzt. Man findet kaum Beispiele weil natürlich die Suche nach simulink model command zwangsläufig irgendwie Simulink-Modell zum Vorschein bringt.

Code:
load_system('simulink/simulinktest.mdl');
model = 'simulinktest';

x = [];
u = [];

[sys,x0,str,ts] = simulinktest([],[],[],'compile');
set_param('simulinktest','SimulationCommand','start');

for t=0:10
    set_param('simulinktest','SimulationCommand','start');
    set_param('simulinktest/Gain','Gain', num2str(t));
    derivs = simulinktest(t,x,u,'derivs');
    %dstates = simulinktest(t,x,u,'update');
    set_param('simulinktest','SimulationCommand','pause');
end
set_param('simulinktest','SimulationCommand','stop');
simulinktest([],[],[],'term');


Mit dem Code hier wird im Modell immer der Gain geändert (das Testmodell ist einfach eine konstante Quelle mit einem Gain-Block, den ich ändere. Anschließend geht alles in Senken rein wie Scope, simout, usw). Simulieren scheint er überhaupt nicht. Jedenfalls steht zB zu keinem Zeitpunkt die Variable von simout im Workspace. Auch nicht nach dem "stop".

Also kann mir jemand sagen was ich an dem Befehl falsch mache (und ob er überhaupt für sowas gedacht ist) oder ob es irgendwelche Alternativen gibt?
Private Nachricht senden Benutzer-Profile anzeigen


cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 01.06.2012, 14:00     Titel:
  Antworten mit Zitat      
Der "model"-Befehl, den du meinst, bezieht sich eigentlich auf den Modellnamen. Angenommen du hast ein Model namens "vdp" (siehe Demo), dann lautet der entsprechende Befehl z.B.
Code:
>> vdp([],[],[],'compile')



Aber zu deiner Frage:
Warum so kompliziert? Warum simulierst du nicht einfach mit:
Code:
>> output  = sim('mymodel.mdl','stoptime','1','fixedstep','2')
Private Nachricht senden Benutzer-Profile anzeigen
 
mikemodanoxxx
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 41
Anmeldedatum: 23.04.09
Wohnort: Höchst/Odw
Version: R2007a
     Beitrag Verfasst am: 02.06.2012, 14:19     Titel:
  Antworten mit Zitat      
Ja den ersten Befehl habe ich ja oben so benutzt.

Zu deinem zweiten Vorschlag: Was bringt das? Dein Befehl setzt doch nur die Stopzeit und ist dann quasi das gleiche was ich oben beschrieben habe. Also quasi sim(model, [t t+1])?!
Private Nachricht senden Benutzer-Profile anzeigen
 
buehrenm
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 15.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2013, 09:57     Titel: Aufruf von outputs fehlt
  Antworten mit Zitat      
Du hast es sicher schon selbst herausgefunden, aber bei dir fehlt der Aufruf von

outputs = simulinktest(t,x,u,'outpus');

und der Aufruf

dstates = simulinktest(t,x,u,'update');

darf nicht auskommentiert sein. So funktioniert es dann mit meinem Testmodell.

Mein Testmodell simuliert zwar korrekt, meine Scopes zeigen aber nichts an. Kennst du dafür vielleicht eine Lösung?
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.