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

Setzen von mehreren Variablen durch ein popupmenu

 

ND1988
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 09:19     Titel: Setzen von mehreren Variablen durch ein popupmenu
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem bei der Programmierung des Interfaces zu meinem Programm.

Es geht um folgenden Code

Code:
% --- Executes on selection change in popupmenuform.
function popupmenuform_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenuform (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenuform contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenuform

contents = get(hObject,'Value')

switch contents
   
    case 1
        frequencyratio =1
        phaseshift = pi/2
       
    case 2
        frequencyratio = 2
        phaseshift = 0
       
    case 3
        frequencyratio = 1/2
        phaseshift = 0
    otherwise
end


% --- Executes on button press in pushbuttonstart.
function pushbuttonstart_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

length = str2num(get(handles.editlength,'String'));
linearfeedrate = str2num(get(handles.editlinearfeedrate,'String'));
width = str2num(get(handles.editwidth,'String'));
frequency = str2num(get(handles.editfrequency,'String'));
frequencyratio = %HIER SOLLEN DIE VARIABLEN ÜBERNOMMEN WERDEN
phaseshift = %HIER SOLLEN DIE VARIABLEN ÜBERNOMMEN WERDEN
name = 'test'

Laserwobble(length, linearfeedrate, width, frequency, frequencyratio, phaseshift, name)


Ich möchte die beiden veränderten Variablen, später beim drücken auf den Start-Knopf in der Funktion Laserwobble verwenden.

Kann mit jemand behilflich sein?
Danke!
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: 26.01.2016, 09:33     Titel:
  Antworten mit Zitat      
Hallo,

das kann man mit guidata lösen.

Code:

 % --- Executes on selection change in popupmenuform.
function popupmenuform_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenuform (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenuform contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenuform

contents = get(hObject,'Value')

switch contents
   
    case 1
        handles.frequencyratio =1
        handles.phaseshift = pi/2
       
    case 2
        handles.frequencyratio = 2
        handles.phaseshift = 0
       
    case 3
        handles.frequencyratio = 1/2
        handles.phaseshift = 0
    otherwise
end
     % save the changes to the structure
      guidata(gcbo,handles);
end


% --- Executes on button press in pushbuttonstart.
function pushbuttonstart_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

length = str2num(get(handles.editlength,'String'));
linearfeedrate = str2num(get(handles.editlinearfeedrate,'String'));
width = str2num(get(handles.editwidth,'String'));
frequency = str2num(get(handles.editfrequency,'String'));

% Get the structure using guidata in the local function
myhandles = guidata(gcbo);

% myhandles.frequencyratio und myhandles.phaseshift sind nun in der Funktion bekannt und können verwendet werden.

% Vermutlich geht auch folgende Variante ohne guidata, da ja handles bereits als Funktionsinput deklariert ist
name = 'test'

Laserwobble(length, linearfeedrate, width, frequency, handles.frequencyratio, handles.phaseshift, name)
 


Es ist nicht sinnvoll Variablennamen wie length zu verwenden, welche bereits eine Matlabfunktion ist.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 09:57     Titel:
  Antworten mit Zitat      
Hallo DSP,

vielen Dank. Jetzt gehts! Smile

Habe es zwar noch ein wenig abändern müssen weil er wegen dem end nach
Code:
% save the changes to the structure
      guidata(gcbo,handles);

gemeckert hat.

Jetzt schaut das ganze so aus:
Code:
% --- Executes on selection change in popupmenuform.
function popupmenuform_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenuform (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenuform contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenuform

contents = get(hObject,'Value');

switch contents;
   
    case 1
        handles.frequencyratio = 1;
        handles.phaseshift = pi/2;
        % save the changes to the structure
      guidata(gcbo,handles);
       
    case 2
        handles.frequencyratio = 2;
        handles.phaseshift = 0;
        % save the changes to the structure
      guidata(gcbo,handles);
       
    case 3
        handles.frequencyratio = 1/2;
        handles.phaseshift = 0;
        % save the changes to the structure
      guidata(gcbo,handles);
    otherwise  
end


% --- Executes on button press in pushbuttonstart.
function pushbuttonstart_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


weldlength = str2num(get(handles.editlength,'String'));
linearfeedrate = str2num(get(handles.editlinearfeedrate,'String'));
width = str2num(get(handles.editwidth,'String'));
frequency = str2num(get(handles.editfrequency,'String'));
frequencyratio = handles.frequencyratio;
phaseshift = handles.phaseshift;

name = 'test'

Laserwobble(weldlength, linearfeedrate, width, frequency, frequencyratio, phaseshift, name)
 


Die Variable hab ich in allen meinen Programmen nun geändert!
Nochmal Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
ND1988
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 10:03     Titel:
  Antworten mit Zitat      
Noch eine Frage:

Jetzt muss ich erstmal in dem popmenu einen Eintrag aktiv auswählen, sonst kommt:
Code:
Reference to non-existent field 'frequencyratio'.

Error in GUI>pushbuttonstart_Callback (line 126)
frequencyratio = handles.frequencyratio;
 


kann man da was dagegen machen Smile Standardmäßig sollen es einfach die Werte des ersten case sein die später dem programm übergeben werden.

Danke
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: 26.01.2016, 10:08     Titel:
  Antworten mit Zitat      
Das verstehe ich ehrlich gesagt nicht ganz. Evtl. ist das so eine Sache von guide, welcher ja deinen Code erzeugt hat. Normalerweise muss eine function mit end abgeschlossen werden, was hier aber eindeutig fehlt oder nicht sichtbar ist.

Code:

function popupmenuform_Callback(hObject, eventdata, handles)

    contents = get(hObject,'Value')

    switch contents

        case 1
            handles.frequencyratio =1
            handles.phaseshift = pi/2

        case 2
            handles.frequencyratio = 2
            handles.phaseshift = 0

        case 3
            handles.frequencyratio = 1/2
            handles.phaseshift = 0
        otherwise

    end % end switch
   
    % save the changes to the structure
    guidata(gcbo,handles);
   
end % function end
 


Zu deiner 2. Frage:

Du musst handles.frequencyratio initialisieren. Am besten in der OpeningFcn, so fern du mit guide arbeitest:

Code:

function MYGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   unrecognized PropertyName/PropertyValue pairs from the
%            command line (see VARARGIN)

% Choose default command line output for untitled2
handles.output = hObject;

% hier Daten initialisieren
handles.frequencyratio  = 0;
handles.phaseshift = 0;

% Update handles structure
guidata(hObject, handles);
 
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.