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

Wie auf den Workspace von einem Function-File aus zugreifen?

 

GrossmeisterBee
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 27.04.08
Wohnort: Ilmenau
Version: 7
     Beitrag Verfasst am: 20.11.2008, 18:54     Titel: Wie auf den Workspace von einem Function-File aus zugreifen?
  Antworten mit Zitat      
Servus!

Ich bin grad ein bisschen am verzweifeln. Ich muss unbedingt von einem Function-File aus auf die Variablen im Workspace zugreifen können. Hintergrund ist, dass ich aus einer Function heraus ein Simulink-Model laufen lassen will und das kann nur auf den "Grund"-Workspace zugreifen.

Wenn ich die Function also zum laufen bringen will muss das hinhauen. Der Global-Workspace nützt mir nix, weil Simulink darauf auch nicht zugreifen kann. Die Variablen direkt in Simulink zu definieren hilft auch nicht, da die Function ja gerade dafür gedacht ist, bestimmte Variablen des Simulink-Modells zu verändern.

Hintergrund ist der, dass die Function die notwendige Reglereinstellung für eine geforderte Überschwingweite berechnet. Im Simulink-Model wird immer ein Sprung am Eingang drauf gegeben. Also bissel akademische Regelkreis-Spielerei.

Das sieht grundsätzlich so aus:
Code:

function krue = ueber(dh, typ)
% Berechnet die Reglerverstaerkung
% Fuer gegebenen Ueberschwingwert

Ks1 = 4;
Ks2 = 1;
Ks3 = 0.5;

T1 = 0.25;
T2 = 1;
T3 = 1;
T4 = 2;

pver = 1;
piver = 1;
pidver = 1;

dh = 1 + dh*0.01;

[t, x, y] = sim('simulink1', 120);
ymax = max(y);
div = dh - ymax;

switch(typ)
   
    case 'p'
        schalt = 3;
        while(abs(div) >= 0.001)
           
            if(sign(div) == 1)
                pver = pver + 0.001;
            else
                pver = pver - 0.001;
            end
           
            [t, x, y] = sim('simulink1', 120);
            ymax = max(y);
            div = dh - ymax;
        end
        k = pver;

... noch mehrere cases ...
end

krue = k;
 


Wär echt super, wenn Jemandem dazu was einfallen würde. Weil im Moment hänge ich an dieser Stelle. Ich will nicht für jeden Regler (P, PI, PID) ein eigenes M-File schreiben, das sieht einfach blöd aus. Ausserdem ist die Interaktion mit dem Benutzer über Functions viel besser als wenn ich die Pramater über input() in einem Skript abfragen würde. Das ginge zwar auch, aber ich wills erstmal mit der function machen.

Vielen Dank für eure Hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2008, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

hilft dir vielleicht
Code:
weiter?

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
GrossmeisterBee
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 27.04.08
Wohnort: Ilmenau
Version: 7
     Beitrag Verfasst am: 22.11.2008, 18:33     Titel:
  Antworten mit Zitat      
Code:

das war der benötigte Befehl! Ich konnte mein Problem jetzt so lösen:
Code:
% Streckenverstaerkungen
Ks1 = 4;    assignin('base', 'Ks1', Ks1);
Ks2 = 1;    assignin('base', 'Ks2', Ks2);
Ks3 = 0.5;  assignin('base', 'Ks3', Ks3);

% Zeitkonst.
T1 = 0.25;  assignin('base', 'T1', T1);
T2 = 1;     assignin('base', 'T2', T2);
T3 = 1;     assignin('base', 'T3', T3);
T4 = 2;     assignin('base', 'T4', T4);
TN = 1;     assignin('base', 'TN', TN);
TV = 1;     assignin('base', 'TV', TV);

% Fuer die Schleifen
pver = 1;   assignin('base', 'pver', pver);
piver = 1;  assignin('base', 'piver', piver);
pidver = 1; assignin('base', 'pidver', pidver);

Ich hab also alle Variablen sozusagen doppelt initialisiert. In der Function und dann nochmal im Base-Workspace. In den Schleifen musste ich das dann auch nochmal machen.

Mensch, danke nochmal für deine Hilfe. Ohne wär ich echt aufgeschmissen gewesen Wink.

Schönes WE dann noch,
GMB
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.