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

Aus pop-up Parameter setzen

 

Deniz
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 22:25     Titel: Aus pop-up Parameter setzen
  Antworten mit Zitat      
Guten Abend an alle!
Ich erstelle mir gerade ein GUI, das ich mit einem Simulink-Modell verknüpfe.
Ich habe jetzt ein Pop-up Button eingebaut. Je nachdem welchen Fall ich auswähle, möchte ich meinem Modell bestimmte Werte übergeben. Es gelingt mir jedoch nicht, die Parameter zu übergeben.

In der Callback Function des Pop-up's habe ich es mit Variationen des set-Befehls probiert, aber anscheinend nie die richtige Syntax gefunden.
z.B.
set('SimulinkModelName','ParameterName',WertDesParameters);

als Erklärung. ich habe z.b. einen Wert x, der je nach case 1 oder case 2 den Wert x=5 oder x=7 annehmen soll im Model 'Rechnung'.
meine Idee war:
case1
set('Rechnung','x',5)
case2
set('Rechnung','x',7)
otherwise
end

so erkennt matlab das 'x' jedoch nicht.
Kann mir jemand sagen, wie der Befehl richtig lautet?

Vielen Dank für die Hilfe!

MfG
Deniz
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2010, 22:46     Titel: Re: Aus pop-up Parameter setzen
  Antworten mit Zitat      
Hallo Deniz,

ich habe noch nicht mit Simulink gearbeitet. Aber heißt es nicht "set_param" statt "set"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 22:55     Titel:
  Antworten mit Zitat      
Hi Jan,
ich habe es auch mit set_param probiert gehabt. hatte auch nicht funktioniert

Es kommt immer der Fehler
Undefined function or variable
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 09.12.2010, 08:40     Titel:
  Antworten mit Zitat      
Hallo Deniz,
möchte ich den Wert eines Konstant-Blocks verändern, nutze ich folgenden Befehl:

Modelname: Test
Blockname: Constant
Anzunehmender Wert: 4

Befehl dazu:



Code:

set_param('Test/Constant', 'Value', '4');
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 12:15     Titel:
  Antworten mit Zitat      
Hallo Peter,
danke erst mal für die Antwort!
Ich habe es ausprobiert, auch variiert, aber er erkennt meine Konstante einfach nicht.
Ich habe mal ein Bild meines Simulinks-Modell angefügt (v.a. wegen dem Pfad der Konstante)

Der Fehler lautet:
??? Error using ==> Clausius_Rankine_Kreisprozess>Start_Callback at 219
Error evaluating parameter 'Value' in 'blabla/Pumpe/Dichte_1/Constant2':
Undefined function or variable 'C_rho_fl'.

und mein Befehl:
Code:

switch get(handles.Arbeitsfluid,'Value')  
    case 1
        %s0=3.90E-01; % [kJ/kg*K] entropie bei umgebungsbedingung
        %v0=1.00E-03; % [m^3/kg] spezifisches volumen bei umgebungsbedingung
        %A_rho_fl = 1.5053957;
        %B_rho_fl = 0.03642;
        %C_rho_fl = 617.774;
        set_param('blabla/Pumpe/Dichte_1','Value','617.774');
        %D_rho_fl = 0.05871;
        %A_cp_af_a = 3092.00; % [J/(g*K]
        %B_cp_af_a = 12.328; % [J/(g*K]
        %C_cp_af_a = -0.044504; % [J/(g*K]
        %D_cp_af_a = 0.005226E-02; % [J/(g*K]
        %E_cp_af_a = 0.00E-03; % [J/(g*K];
    case 2
       
    otherwise
end
 


In case2 werden die gleichen Befehle stehen, nur mit anderen Werten.
Zudem sieht es hierbei so aus, als müsste ich meine Variable an jedem Ort extra definieren, damit er sie erkennt.
Ist es auch möglich, dass meine Variablen nur durch die Angabe meines Simulink-Models erkannt werden?

In meiner Pushbutton-Funktion werden meine Variablen ja auch allgemein erkannt.

MfG
Deniz

blabla.jpg
 Beschreibung:

Download
 Dateiname:  blabla.jpg
 Dateigröße:  60.93 KB
 Heruntergeladen:  451 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 09.12.2010, 12:26     Titel:
  Antworten mit Zitat      
Hallo Deniz,

kurz und knapp... 3 Punkte:
- Du musst den Blockname auch im Pfad angeben.
- Der Wert muss als String übergeben werden.
- Und die Variable C_rho_fl nicht auskommentieren, dann kennt er sie ja logischerweise auch nicht Wink


also entweder machst du das so:
Code:

set_param('blabla/Pumpe/Dichte_1/Constant2','Value','617.774');
 

oder so:
Code:

C_rho_fl = 617.774;
set_param('blabla/Pumpe/Dichte_1/Constant2','Value', num2str(C_rho_fl));
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 14:42     Titel:
  Antworten mit Zitat      
Hallo Peter,
habe deinen Vorschlag glaube ich auch schon probiert gehabt und habe es gerade nochmal versucht, es klappt so aber auch nicht.
Es kommt immer noch der Fehler:

??? Error using ==> Clausius_Rankine_Kreisprozess>Start_Callback at 219
Error evaluating parameter 'Value' in 'blabla/Pumpe/Dichte_1/Constant2':
Undefined function or variable 'C_rho_fl'.

in Zeile 219 wird mein Simulink Modell aufgerufen mit dem Befehl
Code:

options = simset('SrcWorkspace','current');
sim('blabla',[],options);
 


Wenn ich die Variablen in meiner Pushbutton-Function definiere, funktioniert auch alles wunderbar. Jedoch möchte ich ja eine Unterscheidung haben, damit man nicht per Hand die einzelnen Variablen verändern muss, wenn man mit einem anderen Medium in der Pumpe arbeiten möchte.

Ich weiß auch nicht, warum das alles nicht funktioniert...
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.12.2010, 15:06     Titel:
  Antworten mit Zitat      
Hallo Deniz,

Versuche doch mal den Debugger nach der Ursache des Problems suchen zu lassen:
Code:

Dann das Programm laufen lassen. Matlab stoppt dann, wenn der Fehler auftritt und Du kannst in Ruhe heraus finden, wieso die fehlende Variable nicht gefunden wird.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 15:22     Titel:
  Antworten mit Zitat      
Also er zeigt mir dann einen Fehler beim Aufrufen des Simulink-Models (Befehl sim(...))
Aber wie gesagt, wenn ich die Variablen in der Pushbutton function definiere gibt es keinen fehler, nur bei der Definition im Pop-up.
Deswegen wüsste ich auch nicht, was ich ändern sollte am Befehl sim.
Werde aber mal noch weiterschauen.

Gruß
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.12.2010, 16:40     Titel:
  Antworten mit Zitat      
Hallo Deniz,

Dann vermute ich, steht im Struct "options" irgendwo der String 'C_rho_fl', obwohl dort der Wert der Variablen C_rho_fl als String stehen sollte. Wenn dann Simulink versucht den Wert zu setzen, kann er mit C_rho_fl nichts anfangen, da diese Variable innerhlab des Models nicht bekannt ist.

Lösung: Das entsprechende Feld nicht als 'C_rho_fl' definieren, sondern als (mit geeignetem Format, ich nehme mal %g als Beispiel):
Code:
sprintf('%g', C_rho_fl)


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 17:00     Titel:
  Antworten mit Zitat      
Hi Jan!
Also den Befehl sprintf kenne ich nicht. Und ich weiß leider auch nicht welches "Feld" du meinst.
Wenn es nicht zu viele Umstände macht, könntest du es mir noch kurz erläutern bitte?
V.a. auch, wo ich den Befehl einfügen soll...und benötige ich dann den set_param-Befehl noch?

Dankeschön!
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 19:15     Titel:
  Antworten mit Zitat      
So, ich habe es jetzt endlich hinbekommen.
Ich darf die Fallunterscheidung nicht in der popup-function machen sondern setze die Fallunterscheidung in die Pushbutton-Function. Da muss man dann auch nicht mit dem set_param Befehl setzen, sondern einfach
Variablenname=Variablenwert.

Vielen Dank an alle für euere Bemühungen!

Deniz
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 - 2025 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.