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

Handle-Übergabe in automatisch aufgerufener Funktion

 

jamesbizarre
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 09:15     Titel: Handle-Übergabe in automatisch aufgerufener Funktion
  Antworten mit Zitat      
Liebe user,

ich habe ein Problem, was das ewig interessante Thema handle-Übergabe betrifft.

Ich schreibe derzeit ein GUI, mitdem ich eine Simulink-Simulation parametrieren und grafisch darstellen kann. Dazu habe ich Eventlistener in einige Gain-Blöcke in meinem Blockdiagramm eingebaut.
Bei Start der Simulation werden mir die aktuellen Werte der Gain-Blöcke in die 'UpdateGUI'-Funktion übergeben, womit ich diese in Matlab verwenden kann.

Die Funktion sieht folgendermaßen aus:

Code:
Code:
global axes_system

rto = get_param([config.simulink.modelname,'/l_xact'],'RuntimeObject');
xact =10^3*(rto.OutputPort(1).Data);
t = get_param(modelname,'SimulationTime');
sim_plot(xact,axes_system);



Wie ihr seht, habe ich die Achsen, in die die Werte geplottet werden sollen, global deklariert, da mir die handles-Struktur in der automatisch geöffneten Funktion nicht zur Verfügung steht.

Da ich mehrere listener verwende, und auch einige text-fields aktualisieren will, nehmen die globalen Variablen langsam überhand.

Hat jemand vielleicht eine Idee, wie ich es schaffe die handles-Struktur in der Funktion zu nutzen?

Vielen Dank bereits im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2012, 09:53     Titel:
  Antworten mit Zitat      
Hallo,

was spricht dagegen, die Handles-Struktur an die Funktion zu übergeben?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jamesbizarre
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 10:09     Titel:
  Antworten mit Zitat      
Hallo Harald.

Ich weiß leider nicht, wie das gehen soll, ohne globale Variablen zu deklarieren.

Wenn ich die Funktion selbst aufrufen würde, könnte ich die handles als Eingabeparameter mitgeben.
Da die Funktion aber von Simulink aus aufgerufen wird, und die handles des GUIs meines Wissens nach dort nicht hinterlegt sind, würde das ja nicht funktionieren.

Wenn ich mich irre lasse ich mich gerne eines besseren belehren Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
jamesbizarre
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 10:22     Titel:
  Antworten mit Zitat      
Ich sehe gerade, dass die handles in meiner listener-funktion in Simulink in der ersten Zeile eingeschaltet werden, also müssten sie ja in Simulink hinterlegt sein.

Code:
%The GUI handles are by default hidden, turn them on                          
set(0,'ShowHiddenHandles','on');                                              
%Set up the arguments that will go into the gain block event callback listener
blk = get_param('Model/l_xact', 'RuntimeObject');
event = 'PostOutputs';                                                        
listener = @updategui_xact;                                                  
%Create the listener                                                          
h = add_exec_event_listener(blk, event, listener);  


Wie kann ich diese denn jetzt an die callback-funktion updategui_xact übergeben?

Code:
listener = @updategui_xact(handles)
hat bei mir nur zum Fehler "unbalanced bracket parenthesis" geführt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2012, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

welche sonstigen Eingabeargumente hat updategui_xact denn?

Wenn es keine hat, versuch mal:
Code:
listener = @() updategui_xact(handles)  

Wenn es welche hat, dann:
Code:
listener = @(in1, in2, ...) updategui_xact(in1, in2, ..., handles)  


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jamesbizarre
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2012, 12:26     Titel:
  Antworten mit Zitat      
Super danke!

ich habe als Parameter noch varargin.
Mit Lösung zwei hat es funktioniert! Smile
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.