Передача значений из переключателей в скрипт в Matlab

Итак, я создал графический интерфейс в руководстве, которое выглядит так:

графический интерфейс пользователя

Я хочу получить доступ к данным с помощью радиокнопки, а затем изменить переменные в моей симуляции (битрейт и модуляция - это группы кнопок, улучшение - это одна радиокнопка). Например - в симуляции у меня есть переменная Rs=1e9, поэтому, когда выбрана кнопка 1 Гбит / с, я хочу, чтобы она оставалась 1e9, но если выбрана кнопка 10 Гбит / с, я хочу, чтобы она изменила свое значение на 10e9.

Затем после нажатия кнопки "Пуск" я хочу начать симуляцию (которая находится в другом файле.m) с заданными параметрами. Как мне это сделать? (Я знаю об идее ручек в Matlab, но я не знаю, как передать значение для моделирования)

Это код, который управляет графическим интерфейсом - генерируется руководством. Я добавил код, который запускает симуляцию и закрывает окно графического интерфейса.

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

1 ответ

Решение

Вы можете сделать это, используя объект "hObject"

Например: предположим, что у вас есть ползунок, каждый раз, когда ползунок перемещается, вызывается обратный вызов. Вы можете использовать его для хранения переменной. Затем, когда вы нажимаете кнопку, вы хотите использовать эти данные для чего угодно. Код является:

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

СПРАВКА: Matlab Docs

ОБНОВИТЬ

В вашем случае вы можете сделать это с другим подходом, если хотите. Когда вы нажимаете кнопку START, вы читаете состояние своих радиокнопок и передаете подходящее значение в функцию simulation_, которая, я полагаю, называется "имитация". В следующем примере я предполагаю, что у вас есть группа кнопок с именем (tag): uibuttongroup1, а внутри у вас есть две кнопки: radiobutton1 и 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)');
Другие вопросы по тегам