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

Starten von Simulink-Modell aus GUI

 

Deniz
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2010, 18:21     Titel: Starten von Simulink-Modell aus GUI
  Antworten mit Zitat      
Guten Abend!
Ich habe mal eine Frage zur GUI, habe heute damit begonnen.
Ich möchte mein Simulink-Modell aus dem GUI heraus aufrufen und dem Modell auch Parameter übergeben, um verschiedene Werte berechnen zu können.
Ich habe es aber bisher noch nicht hinbekommen, dem Modell einen Wert zu übergeben. Die berechneten Werte wiederum sollen in einem Text-Kästchen im GUI wiedergegeben werden.
Bisher habe ich verschiedene Edit-Felder auf meine Oberfläche gezogen und in da entsprechende m-File folgenden Text eingefügt
Code:

function input1_editText_Callback(hObject, eventdata, handles)

input = str2num(get(hObject,'String'));

if (isempty(input))
     set(hObject,'String','0')
end
guidata(hObject, handles);
 

Somit steht in meinem Kästchen eine 0, wenn ich nichts eingebe. Wenn ich nun einen Wert eingebe, möchte ich, dass dieser Wert an mein Simulink-Model übergeben wird und mein Model mit diesem Wert die entsprechende Größe berechnet (also genau so, als würde ich in meinem Simulink-Model auf "run" drücken) und mir den berechneten Wert wieder an GUI liefert.

Hätte hier jemand einen Tip? Oder gibt es vllt gute tutorials hierfür? Im Endeffekt möchte ich mein erstelltes Simulink-Model aus GUI heraus steuern.
Zuvor hat mein Model die entsprechenden Werte aus einem M-File entnommen.
Vielen Dank für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2010, 17:01     Titel:
  Antworten mit Zitat      
also mit
Code:
und
Code:
kannst du an dein Modell Werte übergeben und auch auslesen.

Hoffe das hilft dir weiter.
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 01:09     Titel:
  Antworten mit Zitat      
Dankeschön!

Aber was muss ich denn für ein Symbol in meinem Simulink-Modell setzen, wenn ich einen berechneten Wert zurück bekommen möchte.

sprich ich übergebe meinem System einen Wert x und rechne dadurch y aus
(z.B. y=2x)

In meinem Simulink-Modell habe ich ja dann ein Out-Symbol oder einen Display am Ende der Gleichung angefügt.
Aber ich muss doch bestimmt einen anderen Block anfügen oder?

Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
Lord nibbler

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 09:18     Titel:
  Antworten mit Zitat      
Hallo,

ein to_Workspace Block, bei den sinks zu finden hilft hier weiter.

Gruß Lord nibbler
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 10:55     Titel:
  Antworten mit Zitat      
super! Dankeschön!
Private Nachricht senden Benutzer-Profile anzeigen
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 14:22     Titel:
  Antworten mit Zitat      
Also ich habe das mal versucht, aber irgendwie funktioniert es nicht
Hier mal mein Code:
Code:

function varargout = Versuch(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Versuch_OpeningFcn, ...
                   'gui_OutputFcn',  @Versuch_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end


function Versuch_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);


function varargout = Versuch_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;


function Temperatur1_edit1_Callback(hObject, eventdata, handles)


function Temperatur1_edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


function Start_pushbutton1_Callback(hObject, eventdata, handles)

Temp1=str2num(get(handles.Temperatur1_editText,'String'));
dru1=str2num(get(handles.Druck1_editText,'String'));

set_param('Pumpe/T1','Value',num2str(Temp1));
set_param('Pumpe/p1','Value',num2str(dru1));

set(handles.Enthalpie1_staticText,'String',h1);
set(handles.Entropie1_staticText,'String',s1);

guidata(hObject, handles);


function Druck1_edit2_Callback(hObject, eventdata, handles)


function Druck1_edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 


Kurz als Erklärung noch:
Mein Simulink-Model lautet "Pumpe" und ich möchte ihm aus dem GUI heraus die Parameter T1 und p1 übergeben (so sind sie im Model benannt).
Als Rückgabwert möchte ich aus meinem Model die Werte h1 und s1 bekommen(die Simout-Blöcke habe ich dementsprechend benannt).

Nur wo habe ich meinen Fehler?

Danke für die Hilfe!

Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 14:44     Titel:
  Antworten mit Zitat      
Was heißt den
Zitat:
irgendwie funktioniert es nicht
? Was genau funktioniert nicht? Die Parameter setzen? Lesen? Beides? Was macht er? Wo bricht er ab? Wie lautet die Fehlermeldung? Bitte gib alle Details bekannt die du kannst.
Vielleicht, kannst du auch ein Simulink-Modell uns zur Verfügung stellen. Würde vielleicht helfen.

Gruß
Peter
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 23:25     Titel:
  Antworten mit Zitat      
Also wenn ich das GUI öffne erscheint im Command-Window folgendes:

??? Error using ==>
@(hObject,eventdata)Versuch('Druck1_edit2_CreateFcn',hObject,eventdata,guidata(hObject))
Druck1_edit2_CreateF.

??? Error using ==> struct2handle
Error while evaluating uicontrol CreateFcn

??? Error using ==>
@(hObject,eventdata)Versuch('Temperatur1_edit1_CreateFcn',hObject,eventdata,guidata(hObject))
Temperatur1_edit1_Cr.

??? Error using ==> struct2handle
Error while evaluating uicontrol CreateFcn

Es scheint wohl so, dass das Parametersetzen nicht funktioniert.
Nach der Betätigung des Pushbuttons kommen folgende Meldungen:

??? Error using ==>
@(hObject,eventdata)Versuch('Druck1_edit2_Callback',hObject,eventdata,guidata(hObject))
Druck1_edit2_Callbac.

??? Error while evaluating uicontrol Callback

??? Error using ==>
@(hObject,eventdata)Versuch('Start_pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Start_pushbutton1_Ca.

??? Error while evaluating uicontrol Callback

??? Error using ==>
@(hObject,eventdata)Versuch('Start_pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Start_pushbutton1_Ca.

??? Error while evaluating uicontrol Callback

Leider kann ich mit diesen Meldungen nichts anfangen...ich habe versucht Tipps aus dem Forum und aus Tutorials einzubauen, aber wohl nicht richtig.

Wie ich gerade sehe, muss ich auch noch einen Parameter p2 übergeben.

Das Model habe ich angehängt.

MfG
Deniz

Pumpe.jpg
 Beschreibung:

Download
 Dateiname:  Pumpe.jpg
 Dateigröße:  85.79 KB
 Heruntergeladen:  1116 mal
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: 03.12.2010, 01:06     Titel:
  Antworten mit Zitat      
Hallo Deniz,

Die Fehlermeldungen sehen merkwürdig aus. Sie enthalten nämlcih keine Fehlermeldung, sondern nur den Ort, wo der Fehler auftrat. Fehlen da vielleicht noch die bedeutenden ersten Zeilen?!

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: 03.12.2010, 10:39     Titel:
  Antworten mit Zitat      
Ich habe gerade noch einmal nachgeschaut und das ist alles was an Meldungen auftritt.
Jetzt habe ich gerade das M-File neu abgespeichert und es kam die Meldung:
Cannot run this file, because C:\.......\Versuch.mdl. shadows it. Delete this file.
Habe nicht bemerkt, dass ich ein gleichnamiges Simulink-Model besitze.
Jetzt treten beim Starten des GUIs keine Medlungen mehr auf, sondern erst nach der Durchführung. Und zwar:
??? Attempt to reference field of non-structure array.

Error in ==> Versuch>Start_pushbutton1_Callback at 108
Temp1=str2num(get(handles.Temperatur1_editText,'String'));

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> Versuch at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)Versuch('Start_pushbutton1_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback

Diese Meldung ist hofftl mehr nach deinem Geschmack! Smile

Danke für die Hilfe!

Gruß, Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2010, 10:12     Titel:
  Antworten mit Zitat      
Zitat:

??? Attempt to reference field of non-structure array.

Error in ==> Versuch>Start_pushbutton1_Callback at 108
Temp1=str2num(get(handles.Temperatur1_editText,'String'));


Also wenn ich das richtig interpretiere würde ich behaupten, dass "Temperatur1_editText" nicht in dem struct "handles" enthalten ist.

sicher dass du das anlegst? bzw. dass handles ein struct ist?
guck dir mal im Debug-Modus das handles an der Stelle an.

Weil laut der Fehlermeldung will er auf etwas zugreifen, was es nicht gibt.

Gruß
Peter
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2010, 18:32     Titel:
  Antworten mit Zitat      
Danke dir!
Das hat gestimmt. Die Bezeichnung lautet nämlich 'Temperatur1_edit1'.
Ich habe es jetzt hinbekommen, meine Parameter zu setzen, jedoch schaffe ich es noch nicht, ausgerechnete Ergebnisse zurück zu bekommen.

beim Setzen lautet mein Code in der pushbutton-function:

Code:

T1=str2num(get(handles.Temperatur1_edit1,'String'))
p1=str2num(get(handles.Druck1_edit2,'String'))
 


Ich habe einen Block toWorkspace angelegt in meinem Modell und will den in einem Kästchen ausgeben mit dem Titel
Enthalpie1_staticText1

Bisher habe ich es aber nicht geschafft, den berechneten Wert ins GUI zu laden.

Gruß
Deniz
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 14:37     Titel:
  Antworten mit Zitat      
kann im Moment keine GUI mit Modell erstellen um das selbst zu testen aber Verusch mal folgendes:

der Workspace erstellt ja eine Variable "simout" als defaulteinstellung

einfach beim drücken des Pushbuttons deinem Kästchen folgende Zeile zuweisen:

Code:

num2str(simout.signals.values(length(simout.signals.values)))
 


aus dem command Window kann ich damit direkt auf den letzten Wert dieser Variable zugreifen

Gruß
Peter[/code]
 
Deniz
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 31.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 14:08     Titel:
  Antworten mit Zitat      
Danke dir!
Habe es gerade ausprobiert und so funktioniert es!
Super!

MfG
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.