2017-06-08 3 views
0

Also habe ich GUI in Führung, die wie folgt aussieht:Werte von Radiobuttons in das Skript in Matlab Passing

GUI

Ich möchte Taste für den Zugriff auf Daten von Radio und dann die Variablen in meiner Simulation ändern (Bitrate und Modulation sind die Schaltflächengruppen, Improvement ist eine einzelne Optionsschaltfläche. Zum Beispiel - in der Simulation habe ich eine Variable Rs=1e9, also wenn 1Gbps Knopf ausgewählt ist, möchte ich, dass es 1e9 bleibt, aber wenn 10Gbps Knopf ausgewählt ist, will ich, dass es seinen Wert zu 10e9 ändert.

Dann, nachdem ich den Startknopf gedrückt habe, möchte ich meine Simulation (die sich in einer anderen .m Datei befindet) mit gegebenen Parametern starten. Wie kann ich es tun? (Ich weiß über Griffe Idee in Matlab, aber ich weiß nicht, wie man Wert an die Simulation übergeben)

Das ist der Code, der GUI steuert - generiert von Guide. Ich habe Code hinzugefügt, der die Simulation startet und das Fenster schließt.

function varargout = gui_final(varargin) 


% Begin initialization code - DO NOT EDIT 
gui_Singleton = 1; 
gui_State = struct('gui_Name',  mfilename, ... 
        'gui_Singleton', gui_Singleton, ... 
        'gui_OpeningFcn', @gui_final_OpeningFcn, ... 
        'gui_OutputFcn', @gui_final_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 
% End initialization code - DO NOT EDIT 


% --- Executes just before gui_final is made visible. 
function gui_final_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 gui_final 
handles.output = hObject; 

% Update handles structure 
guidata(hObject, handles); 

% UIWAIT makes gui_final wait for user response (see UIRESUME) 
% uiwait(handles.figure1); 


% --- Outputs from this function are returned to the command line. 
function varargout = gui_final_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT); 
% hObject handle to figure 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Get default command line output from handles structure 
varargout{1} = handles.output; 


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

message = sprintf('Wait - this is a very long simulation!\nClick the OK button and wait'); 
uiwait(msgbox(message)); 
evalin('base', 'simulation'); 


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

% Hint: get(hObject,'Value') returns toggle state of dfe 


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

% Hint: get(hObject,'Value') returns toggle state of ook 

Antwort

0

Sie können es das Objekt „hObject“

Wie dies mit: Nehmen wir an, dass Sie einen Schieber haben, jedes Mal wird der Schieber der Rückruf bewegt aufgerufen wird. Sie können damit eine Variable speichern. Dann, wenn Sie eine Taste drücken, möchten Sie diese Daten für was auch immer verwenden. Der Code ist:

function slider_callback(hObject,eventdata) 
    sval = hObject.Value; 
    diffMax = hObject.Max - sval; 
    data = struct('val',sval,'diffMax',diffMax); 
    hObject.UserData = data; 
    % For R2014a and earlier: 
    % sval = get(hObject,'Value'); 
    % maxval = get(hObject,'Max'); 
    % diffMax = maxval - sval;  
    % data = struct('val',sval,'diffMax',diffMax); 
    % set(hObject,'UserData',data); 

end 

function button_callback(hObject,eventdata) 
    h = findobj('Tag','slider1'); 
    data = h.UserData; 
    % For R2014a and earlier: 
    % data = get(h,'UserData'); 
    display([data.val data.diffMax]); 
end 

REFERENZ: Matlab Docs

UPDATE

In Ihrem Fall, dass Sie es mit einem anderen Ansatz tun können, wenn Sie wollen. Wenn Sie den Knopf START drücken, lesen Sie den Status Ihrer Optionsfelder und übergeben den entsprechenden Wert an Ihre Simulationsfunktion, die vermutlich "Simulation" genannt wird. Im folgenden Beispiel nehme ich an, dass Sie auf eine Schaltfläche-Gruppe (Tag) genannt haben: uibuttongroup1, und in dir zwei Tasten haben: radiobutton1 und radiobutton2

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

%Check which radio button is pressed 
switch get(get(handles.uibuttongroup1,'SelectedObject'),'Tag') 
    case 'radiobutton1', myParameter = 1e9; 
    case 'radiobutton2', myParameter = 10e9; 
end 
%Execute simulation 
clc 
close all 

message = sprintf('Wait - this is a very long simulation!\nClick the OK button and wait'); 
uiwait(msgbox(message)); 
evalin('base', 'simulation(myParameter)'); 
+0

Sorry, aber ich verstehe immer noch nicht, wie diese Daten zu übergeben das Skript mit der Simulation. – dawzaw

+0

Ok. Ich habe vergessen zu schreiben, dass mein Skript keine Funktion war. Also verwandle ich es in eine Funktion. Aber mit Ihrem Code bekomme ich einen anderen Fehler: 'switch get (get (handles.Bitrate, 'SelectedObject'), 'Tag') Fall 'ongbps', Bitrate = 1e9; Fall 'tengbps', Bitrate = 10e9; Ende message = sprintf ('Warte - das ist eine sehr lange Simulation! \ NKlicke auf OK und warte'); uiwait (msgbox (Nachricht)); Evalin ('Basis', 'Simulation (Bitrate, Modulation, wahr)'); '. Der Fehler: 'Fehler mit evalin Undefinierte Funktion oder Variable 'bitrate'.' – dawzaw

+0

Ok, korrigierte ich Ihre Antwort - evalin (' Basis ', [' Simulation ('num2str (Bitrate)')]] – dawzaw