Verfasst am: 31.05.2012, 15:06
Titel: Simulinkmodell aus Matlab heraus simulieren
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';
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?
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.
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])?!
Verfasst am: 15.06.2013, 09:57
Titel: Aufruf von outputs fehlt
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?
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
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.