2013-11-11 4 views
0

Я студент-инженер, совершенно новый для MATLAB. Я создал графический интерфейс для класса, который вычисляет напряжения и силы заданной цепи. Я хочу отображать силы тока как (А) и (мА). Программа в настоящее время вычисляет данные и отображает их в статических текстовых полях. Я использую группу кнопок с двумя переключателями внутри, работающими исключительно. Я использовал selectionChangeFcn следующим образом для управления кнопками.MATLAB GUI Radio Button переменная память

function group_SelectionChangeFcn(hObject, eventdata, handles) 

switch get(eventdata.NewValue,'Tag') % Get Tag of selected object. 
    case 'radiobutton1' 
     var=1; 
     set(handles.text1, 'String', '(A)'); 
    case 'radiobutton2' 
     var=1000; 
     set(handles.text1, 'String', '(mA)'); 
    otherwise  
end 

Выбор одной кнопки или текст других изменений в статических текстовых полях, и присваивает значение переменной. Основная часть кода программирования выполняется под кнопкой. Все переменные содержатся в этом коде и заполняются из полей редактирования. Все остальное отлично работает до сих пор. В случаях, когда я (А) или (мА) выводится в статическое текстовое поле, и вы можете видеть, что при работе с кнопками действительно отображаются разные значения. Моя проблема в этом; Я хочу использовать переменную var в коде, чтобы умножить мои данные ответа, чтобы она читалась либо в А, либо в мА. Как это;

set (handles.text36,'string',num2str(ir1*var,'%20.3f')) 

Я не могу заставить это работать, однако ошибка говорит о том, что var не определен. Похоже, что это делается при всех обстоятельствах. Я экспериментировал с перемещением кода в разные местоположения, но я не могу заставить его работать. Любая помощь или идеи будут оценены.

+0

Где находится ваш второй фрагмент кода? Если он не находится в 'group_SelectionChangeFcn', чем' var' не отображается в других функциях: http://www.mathworks.de/de/help/matlab/matlab_prog/base-and-function-workspaces.html – sebastian

ответ

0

Из того, что выглядит как var, определяется в инструкции switch, поэтому область видимости находится внутри коммутатора. Вы должны определить var вне коммутатора, чтобы открыть его область для функции.

Кроме того, при написании кода в переполнении стека разделите строку между абзацем и отступом на 4 пробела кода, и он будет отформатирован как блок кода, см. Ниже. Наконец, включите разрывы строк, чтобы можно было легко определить, где находятся ваши строки кода.

switch (...) 
    methods 
end 
+0

Нет такое строгое определение в Matlab. Если две части кода будут в одной и той же функции, все должно быть хорошо. Я предполагаю, что их нет, хотя ... – sebastian

+0

Спасибо. Я не был уверен. Попробуйте снять точки с запятой, чтобы узнать, какие значения назначаются и где и когда. – physics90

0

Вы могли бы извлечь выгоду из прочтения этих статей:

http://www.mathworks.de/de/help/matlab/matlab_prog/base-and-function-workspaces.html http://www.mathworks.de/de/help/matlab/creating_guis/ways-to-manage-data-in-a-guide-gui.html#f5-998711

Вы должны хранить var где-то, где он доступен из других GUI-функций.

Один из примеров: & магазин var в вашей первой функции, например. как часть структуры ручки:

% set var as a field on handles 
handles.var = 1000; 
% save the guidata - don't miss this! 
guidata(hObject, handles); 

В вашей второй функции, которые предполагается использовать вар теперь вы можете взять var из структуры ручки:

set(handles.text36,'string',num2str(ir1*handles.var,'%20.3f')) 
+0

Ha! Я предполагал, что строка набора была в том же вызове функции. – physics90

0

Основываясь на идее о том, что ваш набор линия не в той же функции, что и в других методах, вы должны иметь переменную, определенную глобально, отправленную через вызовы функций или сохраненную для дескрипторов или какого-либо другого объекта. Ниже приведен метод сохранения данных, доступ к которым возможен из любой функции.

Прежде всего, сохраните дескриптор главного gui, к корневому адресу. Назовите это в Main_OpeningFcn вашей программы.

setappdata(0, ‘mainGUI’, gcf); 

Затем в коде вызова

mainGUI = getappdata(0, ‘mainGUI’); 
var = someValue; 
setappdata(mainGUI, ‘var’, var); 

Это экономит переменную уаг внутри mainGUI. Теперь у вас есть доступ к var, где бы вы ни захотели, просто вызвав getappdata. Сначала вам нужно получить mainGUI, но это только одна строка. У Дуга Халла есть видео на MatLabCentral. Я могу найти ссылку для вас позже, которая обсуждает это более подробно. Одно из преимуществ этого метода заключается в том, что вам не нужно продолжать передавать структуру дескриптора, если вам это не нужно.