Verfasst am: 18.12.2013, 02:55
Titel: Aktuelle Werte aus dem Scope Sink
Hallo Leute,
ich simuliere zurzeit ein instionäres system in simulink und Ich gebe meine ergebnisse mit scoop als array dem workspace.
ich würde mir gerne die aktuellen werte mit Hilfe von einem Script aus Simulink holen und im laufe der simulation aus sie einfluss zu nehmen. ich muss diese werte während der simulation an vorgabewerten anpassen. eine art regelung aber von matlab aus.
zunächst geht es aber nur darum aktuelle werte aus simulink zu holen.
Das dürfte normalerweise nicht schwer sein- aber ich komme mit dem befehl: get_param nicht weiter. es funktioniert bei keinem sink. weder beim scope noch beim out noch beim to workspace.
vielleicht kann mir da jemand helfen? leider sehr wichtig, weil es um meine diplomarbeit geht.
ich komme jedoch leider nicht wirklich voran. mein Problem sieht folgendermaßen aus:
Ich habe einen Kreislauf, der mit eine Leistung heraus gibt. Diese Leistung soll aber angepasst werden und zwar durch die änderung vom Hub eines Kompressors. Diese anpassung soll während der Simulation erfolgen und mir an Ende den passende Hub herausgeben.
Ich habe versucht das ganze bisher so wie unten zu lösen. leider ohner erfolg. Die Idee war die Leistung aus einem Display herauszulesen und sie dann in Integer umwandeln. Anschließend mit Hilfe von fsolve oder lsqnonlin den Hub anzupassen.
weiss vielleicht jemand warum es nicht klappt. lsqnonlin passt den Hub leider überhaupt nicht an
Code:
%t_air in °C
function[t,x,y]=AufrufSimulink(t_air);
Aussentemp=num2str(t_air);
set_param('SS_Cycle_WP_Regler2/Environment','T_inf',Aussentemp);
hub=num2str(h);
set_param('SS_Cycle_WP_Regler2/h','Value',hub) [t,x,y]=sim('SS_Cycle_WP_Regler2',[0,80]);
%Display mit Q_ist aus der Simulation auslesen
obj_myDisplay= get_param('SS_Cycle_WP_Regler2/Display','RuntimeObject');
%Wert aus dem Display als Integer
Q_ist=obj_myDisplay.InputPort(1).Data;
%Q_soll abhängigkeit von umgebungstemperatur
Q_soll=((-0.6743*t_air)+7.0132)*1000;
Meine erste Antwort was für einen anderen thread gedacht, kannst sie ignorieren. Es scheint so, dass du ein Teil in Simulink und einen anderen Teil in einer Matlab Funktion berechnest. Hast du versucht deine Matlab Funktion in einen "Interpreted Matlab Function" Block zu verwenden? Den müsstest du dann rückgekoppelt in deinem Model einbauen. So könntest du deine Anpassungen machen.
bei mir sind es level2 sfunctions, die unter den subsystemen von simulink stecken. ich gebe am ende über demox alle ergebnisse raus. und eben die leistung soll mit dem hub gekoppelt sein.
ich habe leider keine chance die matlab funktionen zu verändern. die sind alle als level2sfunctions fix.
klappt es mit event listeners also doch nicht?
wie könnte man sonst während einer simulation einen wert abfangen um ihn dann anzupassen?
Mit den event listener kannst du von einzelnen Blöcken die Ausgänge, währen der Simulation, beobachten und z.B. wenn ein neuer Wert vor liegt ein Callback Funktion starten. Die könnte dann etwas machen. Ich bin mir nicht sicher, ob es dir hier etwas bringt. Theoretisch könntest du in der Funktion auch einzelne Parameter dann in Simulink ändern. Vielleicht guckst du dir das Beispiel im zweiten Link an. Das ist genau das in einem Beispiel Modell dargestellt.
Könntest du vielleicht ein Skizze von deinem vorhaben machen? Ich kann mir nicht vorstellen wieso (wo) man ein Wert abfangen möchte? In simulink kann man doch die Signalausgänge beliebig verschalten. Oder willst du auf interne Variablen der sfunction zugreifen?
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.