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

event listener callback.. richtiges handle übergeben

 

neoneonoe
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 10.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2010, 13:08     Titel: event listener callback.. richtiges handle übergeben
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem. Ich kommuniziere mit meinem Simulink Model mit meiner GUI über die add_exec_event_listener funktion. Ich will mir die Ergebnisse aus dem Display Block in Simulink parallel zum laufenden Model in meiner GUI mir anzeigen lassen. Ich kann die werte schon richtig übergeben und direkt auslesen, aber in der listener funktion nicht an meine GUI übergeben da iich nicht weis wie ich das richtige hObject oder handle auf meine Figure krieg.
hier mein code:
Code:
%
function addEventListener(hObject, eventdata, handles)  %ADD EVENT LISTENER



handles = guidata(hObject);

handles.viewing(1).blockName = sprintf('%s/Display1',handles.modelName);
handles.viewing(1).blockHandle = get_param(handles.viewing(1).blockName,'Handle');
handles.viewing(1).blockEvent = 'PostOutputs';
handles.viewing(1).blockFcn = @displayAnzeige;



handles.eventHandle(1) = add_exec_event_listener(handles.viewing(1).blockName, ...
                    handles.viewing(1).blockEvent, handles.viewing(1).blockFcn);
               
guidata(hObject,handles);
 


und hier der code zum anzeigen auf meine GUI

Code:

function displayAnzeige(block, eventdata)  %EVENT LISTENER FCN
%wird von eventlistener aufgerufen!!
%liest datei von Display String aus!
%handles = guidata(gcbo)
%%%%%%%%%%%%%%%%%%%% %%%%%disp1Obj = get_param('SelectSignal/Display1','RuntimeObject');
%%%%%%%%%%%%%%%%%%%%%%%%%%vGUI1 = disp1Obj.InputPort(1).Data;
%%%%%%%%%%%%%%%%%%%%%%%%%%vGUI1 = vGUI.Data
vGUI = get(block.InputPort(1));
vGUI1 = vGUI.Data;
handles = guidata(SelectSignalGUI);
%handles.output = hObject;

set(handles.vGUI_string,'String', num2str(vGUI1));
guidata(SelectSignalGUI, handles);
 

in vGUI1 steht der richtige wert drinnen, aber hier wird es kompliziert,
ich bekomme meine aktuelle GUI handle struktur nicht in diese unterfunktion displayAnzeige rein!
die funktion display anzeige erhält 2 Parameter, den Block Parameter und event parameter, ich kann hier leider nicht das aktuelle hObject übergeben.
wie bekomme ich den aktuellen Status meiner GUI hier rein, ohne dass er mir die GUI neu in ihrem grundzustand läd? in meiner GUI sind noch weitere checkboxen, bei denen der aktivierungszustand gespeichert bleiben sollte..

ich bitte um hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


ceeroover
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2011, 12:22     Titel:
  Antworten mit Zitat      
Hallo neoneonoe,

gibts da mittlerweile eine Lösung? Ich stehe vor genaue dem gleichen Problem. Ich will eine Excel Datei auf neue Eingaben überwachen und dafür eine Funktion für die entsprechenden Events schreiben. Das Problem ist, dass ich als handle in dieser Event Funktion immer nur das Excel Com Object bekomme und keinen Zugriff auf die GUI Daten habe (siehe Anhang)

Danke und Gruß

TestActXEx1l.m
 Beschreibung:

Download
 Dateiname:  TestActXEx1l.m
 Dateigröße:  3.71 KB
 Heruntergeladen:  572 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
ceeroover
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 22:48     Titel:
  Antworten mit Zitat      
Ich hatte mal wieder Zeit und hab es über eine etwas umständliche Lösung mittlerweile hinbekommen. Vielleicht findet es der ein oder andere ja nützlich:

Prinzip:

Die GUI mit dem Event-Callback wird nicht direkt gestartet sondern über einen Skript. Dadurch ist im Workspace das Handle zur Figure bekannt und kann in der Callback Funktion mittels evalin() und guidata() extrahiert und aktualisiert werden.

Masterskript:

Code:

hfig=openfig('MyGUI');
test=guihandles(hfig);
 


Excelserver in CreateFuncion der MyGui.m starten und 'SheedChange' Event registrieren:

Code:

% --- Executes during object creation, after setting all properties.
function figure1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Connect to Excel
handles.Excel = actxserver('excel.application');
% Get Workbook object
handles.WB = handles.Excel.Workbooks.Open(fullfile(pwd, 'test.xlsx'),0,false);
handles.Excel.Visible=1;
handles.Excel.registerevent({'SheetChange',@ComCallback});
handles.pdata=zeros(100,1);
% Update handles structure
guidata(hObject, handles);

% ComCallback:
function ComCallback(varargin)
test1=evalin('base','test');
data=guidata(test1.figure1);
% ...
% ... z.B.
WB=varargin{1,3};
data.bspvalue=WB.Cells.Range('A1').Value;
% Daten aktualisieren
guidata(test1.figure1,data);
 


in test1 stehen dann alle handles zu den Objekten (Figure, Axes etc...) und in data alles was in den regulären GUI Callbacks in handles gespeichert wurde. Nach der Aktualisierung kann man auf die neuen Variablen in handles in allen GUI Callbacks zugreifen.

Ich bin allerdings nach wie vor offen für elegantere Lösungen . Cool

Grüße
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.