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

Pushbutton Callback in Timer

 

gydoh
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2016, 16:38     Titel: Pushbutton Callback in Timer
  Antworten mit Zitat      
Hey,

ich habe eine GUI ohne guide erstellt. In der GUI habe ich einen timer, der alle 5 Sekunden eine neue Datei lädt und mein GuI aktualisiert. Des weiteren habe ich eine Tabelle in der aktuelle Werte erscheinen sollen, sobald ein Button gedrückt wird. Das funktioniert auch solang ich keinen Timer habe sondern nur eine Datei lade und mir die Werte anzeigen lasse. Sobald aber der Timer läuft und ich auf den Button drücke, erscheint folgender Fehler:

Undefined function 'ButtonU1Callback' for input arguments of type 'matlab.ui.control.UIControl'.

Error while evaluating UIControl Callback


Hier ein Teil meines Codes:
Code:
% Creating the GUI
MainWindow = figure('Name','Harmonischen- und Leistungsanalyse', ...
                    'NumberTitle','off', ...
                    'Units', 'Normalized', ...
                    'Position', [0.1 0.05 0.5 0.87]);

tableH = uitable (tabHarmonics, ...
                  'Units','Normalized', ...
                  'Fontsize', 10, ...
                  'Position', [0.1 0.2 0.273 0.7]);

ButtonPanel = uipanel (tabHarmonics, ...
                       'Title', 'Selection', ...
                       'Units','Normalized', ...
                       'Fontsize', 10, ...
                       'Position', [0.45 0.4 0.2 0.5]);
                       
ButtonU1 = uicontrol (ButtonPanel, ...
                      'Style', 'Pushbutton', ...
                      'String', 'Voltage U1', ...
                      'Units', 'Normalized', ...
                      'Fontsize', 10, ...
                      'Position', [0.1 0.85 0.8 0.1], ...
                      'Callback', @ButtonU1Callback);

% Timer
t=timer('ExecutionMode','fixedRate','Period',3.0,'TimerFcn',@DatenLesen);
start (t)

function DatenLesen(hObject,eventdata)

% hier werden Daten gelesen und verarbeitet
% weiter unten im Timer kommt mein Pushbutton Callback

function ButtonU1Callback (hObject, eventdata)
[Volt_U1,Freq_U1,nU1] = Harmonics (U1_fft, x_HzU1, N2U1);
ColNames = {'Voltage / kV','Frequency / Hz'};
set(tableH,'data',[Volt_U1,Freq_U1],'ColumnName',ColNames','RowName',{nU1});

THD_U1 = THD (U1_fft);
set(txtTHDval, 'String', num2str(THD_U1));
end
end
 


Kann mir jemand sagen was das Problem ist?
Danke schonmal!
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: 06.02.2016, 00:17     Titel:
  Antworten mit Zitat      
Hallo,

ist ButtonU1Callback in einer eigenen .m-Datei abgespeichert? Falls nicht, bitte mal das versuchen.

Generell sind reproduzierbare Beispiele hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.02.2016, 08:15     Titel:
  Antworten mit Zitat      
Moin,

ich mag mich ja irren, aber müsste die Syntax nicht so sein?

Code:

function [] = mygui()
% Creating the GUI
MainWindow = figure('Name','Harmonischen- und Leistungsanalyse', ...
                    'NumberTitle','off', ...
                    'Units', 'Normalized', ...
                    'Position', [0.1 0.05 0.5 0.87]);

tableH = uitable (tabHarmonics, ...
                  'Units','Normalized', ...
                  'Fontsize', 10, ...
                  'Position', [0.1 0.2 0.273 0.7]);

ButtonPanel = uipanel (tabHarmonics, ...
                       'Title', 'Selection', ...
                       'Units','Normalized', ...
                       'Fontsize', 10, ...
                       'Position', [0.45 0.4 0.2 0.5]);
                       
ButtonU1 = uicontrol (ButtonPanel, ...
                      'Style', 'Pushbutton', ...
                      'String', 'Voltage U1', ...
                      'Units', 'Normalized', ...
                      'Fontsize', 10, ...
                      'Position', [0.1 0.85 0.8 0.1], ...
                      'Callback', @ButtonU1Callback);

% Timer
t=timer('ExecutionMode','fixedRate','Period',3.0,'TimerFcn',@DatenLesen);
start (t)

    function DatenLesen(hObject,eventdata)

    % hier werden Daten gelesen und verarbeitet
    % weiter unten im Timer kommt mein Pushbutton Callback
    end

    function ButtonU1Callback (hObject, eventdata)
        [Volt_U1,Freq_U1,nU1] = Harmonics (U1_fft, x_HzU1, N2U1);
        ColNames = {'Voltage / kV','Frequency / Hz'};
        set(tableH,'data',[Volt_U1,Freq_U1],'ColumnName',ColNames','RowName',{nU1});

        THD_U1 = THD (U1_fft);
        set(txtTHDval, 'String', num2str(THD_U1));
    end
end
 


Oder wie bei guide gui's alle function getrennt untereinander.

Edit: Wenn die gui natürlich immer nur in der DatenLesen funktion hängt, geht es wohl nur über Haralds Vorschlag.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2016, 09:54     Titel:
  Antworten mit Zitat      
Selbst wenn ich den Pushbutton callback in eine eigene m.-Datei schreibe, passiert nichts. Es werden keine Werte aktualisiert.

Und DSP du hast natürlich recht. Ich habe nicht den kompletten Code gepostet. Sorry!

Hat noch jemand eine Idee, wie ich mein Problem beheben kann?

Viele Grüße
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: 11.03.2016, 12:18     Titel: Re: Pushbutton Callback in Timer
  Antworten mit Zitat      
Hallo gydoh,

In Deinem Original-Code ist der ButtonU1Callback eine "nested function" der Funktion DatenLesen. Damit ist er nicht öffentlich sichtbar:
Code:
function DatenLesen(hObject,eventdata)
  function ButtonU1Callback (hObject, eventdata)
    ...
  end
end

Besser:
Code:
function DatenLesen(hObject,eventdata)
end

function ButtonU1Callback (hObject, eventdata)
  ...
end

Nun hast Du aber versuche eine eigene M-Funktion ButtonU1Callback.m zu schreiben, und es "passiert nichts". Was heißt das nun genau? Keine Fehlermeldung mehr?

Du kannst den Debugger verwenden und Breakpoints setzen. Wenn Du dann zeilenweise durch den Code gehst, fällt Dir das Problem wahrscheinlich schnell auf.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2016, 11:31     Titel:
  Antworten mit Zitat      
Hey,

probiere ich es so wie du vorgeschlagen hast, Jan, dann können die Variablen, die ich in der Funktion DatenLesen berechne nicht an die Funktion Harmonics im ButtonU1Callback übergeben übergeben werden. Das selbe passiert wenn ich die funktion in einer eigenen M-Funktion habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2016, 09:39     Titel:
  Antworten mit Zitat      
Muss ich die Variablen, die ich übergeben möchte noch in handles abspeichern und dann übergeben? Wenn ja, kann mir jemand sagen, wie ich das am besten mache?
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: 18.03.2016, 23:17     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Das Standard-Vorgehen dafür ist:
Code:
function XYZ_Callback(ObjectH, EventData)
handles = guidata(ObjectH);  % Aktuellen Wert des Structs bekommen
...
handles.Newdata = rand(10);  % Erstellen oder Ändern der Werte
...
guidata(ObjectH, handles);  % Abspeichern der aktuellen Werte
 

Gruß, Jan
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.