2017-06-08 1 views
0

donc j'ai créé l'interface graphique dans le guide qui ressemble à ceci:Passage des valeurs de boutons radio dans le script Matlab

GUI

Je veux accéder aux données de bouton radio, puis modifier les variables dans ma simulation (Bitrate et Modulation sont les groupes de boutons, l'amélioration est un bouton radio unique). Par exemple - dans la simulation j'ai une variable Rs=1e9, donc quand le bouton 1Gbps est sélectionné, je veux qu'il reste 1e9, mais si le bouton 10Gbps est sélectionné, je veux qu'il change sa valeur à 10e9.

Ensuite, après avoir appuyé sur le bouton Démarrer, je veux démarrer ma simulation (qui se trouve dans un fichier .m différent) avec des paramètres donnés. Comment puis-je le faire? (Je sais à propos de l'idée de gérer dans matlab, mais je ne sais pas comment passer la valeur à la simulation)

C'est le code qui contrôle gui - généré par le guide. J'ai ajouté du code qui démarre la simulation et ferme la fenêtre gui.

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 

Répondre

0

Vous pouvez le faire en utilisant l'objet « hObject »

Comme ceci: Supposons que vous ayez un curseur, chaque fois que le curseur est déplacé le rappel est appelé. Vous pouvez l'utiliser pour stocker une variable. Ensuite, lorsque vous appuyez sur un bouton, vous voulez utiliser ces données pour n'importe quoi. Le code est:

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 

RÉFÉRENCE: Matlab Docs

MISE À JOUR

Dans votre cas, vous pouvez le faire avec une autre approche si vous voulez. Lorsque vous appuyez sur le bouton START, vous lisez l'état de vos boutons radio et transmettez la valeur appropriée à votre simulation_function que je suppose qu'elle est appelée "simulation". Dans l'exemple suivant, je suppose que vous avez un bouton-groupe appelé (tag): uibuttongroup1, et à l'intérieur vous avez deux boutons: radiobutton1 et 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

Désolé, mais je ne comprends toujours pas comment transmettre ces données à le script avec la simulation. – dawzaw

+0

Ok. J'ai oublié d'écrire que mon script n'était pas une fonction. Donc je le transforme en fonction. Mais en utilisant votre code, j'obtiens une autre erreur: 'switch get (get (handles.Bitrate, 'SelectedObject'), 'Tag') case 'onegbps', bitrate = 1e9; case 'tengbps', débit binaire = 10e9; fin message = sprintf ('Attendre - c'est une très longue simulation! \ NCliquez sur le bouton OK et attendez'); uiwait (msgbox (message)); evalin ('base', 'simulation (débit, modulation, vrai)'); L'erreur: 'Erreur lors de l'utilisation d'evalin Fonction non définie ou variable 'bitrate'' – dawzaw

+0

Ok, j'ai corrigé votre réponse - evalin (' base ', [' simulation ('num2str (bitrate)') ']) – dawzaw