Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
#1

GUI: расчет фазированной антенной решетки

30.05.2013, 18:00. Просмотров 4795. Ответов 43
Метки faq+ (Все метки)

Добрый вечер!
Узнал что в matlab можно создавать приложения, но к сожалению, не знаю как... Сам интерфейс сделал, а как каждой кнопке присвоить значения не знаю. Кто делал, подскажите как? Смотрел видеокурс по youtube, но как-то не помагло...
Может быть у мня слишком запутанный код?
Могу выложить архив с подробным описанием и интерфейсом.
Кому не сложно, помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 18:00
Ответы с готовыми решениями:

Как построить кристаллические решетки в Matlab?
Как можно построить(визуализировать в 3D) кристаллические решетки (например,...

Сдвиг антенной решетки
Есть 2 антенные решетки отдаленные друг от друга на расстоянии 1λ. Для них...

Диаграмма направленности антенной решетки
Есть формулы диаграммы направленности и главных максимумов(тета и альфа),...

Квадратурный мост для антенной решетки
Всем привет, у меня есть задание рассчитать и спроектировать антенную решетку....

Определить число максимумов в спектре дифракционной решетки, период дифракционной решетки.
Дифракционная решетка шириной 12 мм содержит 4800 штрихов. Определить: 1) число...

43
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
30.05.2013, 18:31 #2
Значит интерфейс уже нарисовал?
Теперь попридумуй названия элементам интерфейса. В guide делаеш двойной щелчёк на элементе интерфейса, находиш свойство Tag и пишеш туда название.
Дальше нажимаеш кнопку Editor в guide. Появляется програмный код связаный с этим интерфейсом.
В OpeningFcn прописываш переменные которые хочеш передать в интерфейс с основной програмы. Вот так например:
Matlab M
1
2
3
Lw=varargin{1};
LwSum=varargin{2};
L=varargin{3};
В OutputFcn прописываеш переменные которые хочеш получить из интерфейса. Например:
Matlab M
1
2
3
4
varargout{1} = handles.exit;
InpT=get(handles.InputTab,'Data');
varargout{2} = InpT(:,1:end-1);
varargout{3} = str2num(get(handles.Distance,'String'));
0
Зосима
4928 / 3297 / 312
Регистрация: 02.04.2012
Сообщений: 6,206
Записей в блоге: 15
Завершенные тесты: 1
30.05.2013, 18:54 #3
Ну и все задание (шо ты конкрэтно хочешь сделать) вместе с архивом файлов тоже не помешали бы
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
30.05.2013, 19:00  [ТС] #4
Не понял...
Скидываю свой м-файл и созданный интерфейс...
Может по ходу того, что необходимо поучить, будет легче?
matlab.rar
Там в м-файле, что-то будет не понятно, я объясню...
Я новичок в matlab и поэтому там всё каряво, но работает...
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
30.05.2013, 19:27 #5
у меня не работает, пишет
Matlab M
1
2
3
4
Undefined function or variable 'D'.
Error in FAR1_file (line 73)
dlmwrite('prym.txt', D, '-append', 'delimiter','
', 'newline', 'pc')
и я не вижу чтоб ты в FAR1_file.m вызывал функцию интерфейса:
Matlab M
1
2
[Nx,Ny,dx,dy,delx,dely,theta,fi,lym,psi]= FAR1; 
%ну или чего ты там хотел чтоб появилось в рабочем пространстве
хотя я обычно из функции вызывал интерфейсную програму, а не из скрипта. Так что тебе не обязательно передавать даные при вызове. Можно и так:
Matlab M
1
assignin('base', 'Nx', Nx);
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
30.05.2013, 20:55  [ТС] #6
Вы без комментариев открыли весь файл? Если поставить комментарий на гексагональную решётку, то будет работать, я новичок и не знаю почему так происходит, а в отдельности каждый файл работает. По поводу интерфейса у меня вообще тёмный лес...

Цитата Сообщение от tvoretsmira Посмотреть сообщение
[Nx,Ny,dx,dy,delx,dely,theta,fi,lym,psi]= FAR1;
%ну или чего ты там хотел чтоб появилось в рабочем пространстве
здесь я хотел зделать, чтобы при выходе сохранялись параметры, но не доделал, так как не знаю как сделать правильно...

Добавлено через 2 минуты
У меня есть другой файл описывающий интерфейс, который похож на мой, но его нельзя распространять так как он личная программа преподавателя.
Могу скинуть на почту, но не в форум.

Добавлено через 1 час 15 минут
Я понял в чём ошибка, там вместо D надо поставит T где сохранение файла.
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
30.05.2013, 21:49 #7
Не ждите что я вам напишу програму интерфейса. Делайте сами и задавайте вопросы.

Вот, я тут кое что уже связал с интерфейсом. Я и не знаю толком как оно долно быть. Вобщем смотрите вложение:
запускать с файла FAR1_file
При нажатии на Вид АР FAR1_file получает данные и продолжает работать
Dimast2.rar
1
Махалов
4 / 4 / 0
Регистрация: 28.12.2012
Сообщений: 23
30.05.2013, 22:21 #8
Привет я тож новичок и может напишу не в тему но могу подкинуть свою програмку которую сделал для лабораторной работы может по примеру будет проще разобраться. Пример элементарный .задание звучит так:
Считайте массив из файла ,отсортируйте его(c выводом в окно Static Text),и запишите в новый файл.Все это необходимо создать с интерфейсом в GUI.
Имеется три кнопочки для выполнения задачи: Загрузить,Сортировать,Сохранить.
Так же имелась проблема ,так как переменные не сохрвнялись: решилось все добавлением из demo-примера GUI части кода с внесением изменений под название своих объектов и названии своей программы:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function initialize_gui(fig_handle, handles, isreset)
% If the metricdata field is present and the reset flag is false, it means
% we are we are just re-initializing a GUI by calling it from the cmd line
% while it is up. So, bail out as we dont want to reset the data.
if isfield(handles, 'metricdata') && ~isreset
    return;
end
 
handles.metricdata.density = 0;
handles.metricdata.volume  = 0;
 
set(handles.density, 'String', handles.metricdata.density);
set(handles.volume,  'String', handles.metricdata.volume);
set(handles.mass, 'String', 0);
 
set(handles.unitgroup, 'SelectedObject', handles.english);
 
set(handles.text4, 'String', 'lb/cu.in');
set(handles.text5, 'String', 'cu.in');
set(handles.text6, 'String', 'lb');
 
% Update handles structure
guidata(handles.figure1, handles);
...
А вообще все классно расказано в книге Ануфриева

P.S Простое и удобное для программирования всяких кнопочек и объектов(лично я так делаю):на объекте правой клавишей, затем пункт View Callbacks=>Callbacks и тебя сразу выкидывает имено на ту функцию которая отвечает за действие этого объекта, кнопочки и т.д.... и не надо шарить по коду...
1
Махалов
4 / 4 / 0
Регистрация: 28.12.2012
Сообщений: 23
30.05.2013, 22:36 #9
вот прога сама
1
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (4.4 Кб, 32 просмотров)
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 07:55  [ТС] #10
Я вижу в файле, что к каждой кнопке появились значения в файле в виде:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Nx_Callback(hObject, eventdata, handles)
% hObject    handle to Nx (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Hints: get(hObject,'String') returns contents of Nx as text
%        str2double(get(hObject,'String')) returns contents of Nx as a double
 
 
% --- Executes during object creation, after setting all properties.
function Nx_CreateFcn(hObject, eventdata, handles)
% hObject    handle to Nx (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
 
% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
Теперь нреобходимо к ним привязать моё значение Nx? Как это вообще делается?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
31.05.2013, 09:23 #11
А я не вижу никаких значений.
Ты просто просто привёл функцию, которая выполняется после введения в edit text Nx строки 'String' и функцию, которая исполняется при создании объекта интерфейса (uicontol со свойством 'Style'= 'edit').
Чтобы получить численное значение надо введённую пользователем строку 'String' конвертировать в клас double используя функцию str2double, как и написано в коментариях:
Matlab M
1
str2double(get(hObject,'String'))
Или, если надо получить значение в другой функции интерфейса, кроме тех что ты привёл, то используется:
Matlab M
1
str2double(get(handles.Nx,'String'))
Хотя и в тех что ты привёл обращение к объекту через handles.Nx будет работать.
2
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 12:09  [ТС] #12
Я возможно так Вас не пойму, попробую сделать пример аналогичный, но простой, чтобы всё понять....
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 12:48  [ТС] #13
Можете показать как всё делается на элементарном примере, а я по аналогии попробую сделать...

FaR.rar

Я вообще плохо разбираюсь в программировании, но хотел бы научиться, а времени совсем нет и интерфейс необходимо предоставить уже на следующей неделе.
Мне необходимо увидеть на простом примере как происходит процесс привязки значений к кнопкам.
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
31.05.2013, 15:42 #14
Смотри, спрашивай
FaR_tm.rar
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 17:08  [ТС] #15
Я вижу, что приложение работает. Но происходят ошибки когда заходишь в primer.fig, а самое главное я его потом закрыть не могу, что происходит? А потом можно сделать чтобы вся прога рабтала без м-файла, как exe?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
31.05.2013, 18:23 #16
Всего не предусмотриш, кто ж знал что вы будете открывать primer.fig. Програма запускается со скрипта в файле primerchik.m. А окно не закрыватся потому что я удалил delete(hObject) в CloseRequestFcn. Глупость конечно.
Замените функции на эти и будет нормально:

Matlab M
1
2
figure1_CloseRequestFcn(hObject, eventdata, handles)
delete(hObject)
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function varargout = primer_OutputFcn(hObject, eventdata, handles) 
if isempty(handles)% Если закрыть окно интерфейса handles станет пустым масивом
  varargout{1}=[];
  varargout{2}=[];
  varargout{3}=[];
  varargout{4}=1; %как то же надо сообщить скрипту primechik.m 
% что пользователь закрыл окно
else
  varargout{1} = handles.axes1;
  varargout{2} = str2double(get(handles.edit1,'String')); %Am
  varargout{3} = str2double(get(handles.edit2,'String')); %b
  varargout{4} = 0;
end
Добавлено через 14 минут
Цитата Сообщение от Dimast Посмотреть сообщение
А потом можно сделать чтобы вся прога рабтала без м-файла, как exe?
Пишете в командном окне deploytool
Вводите название. Выбираете Windows Stand Alone application

Нажимаете Add main file и выбираете файл из которого програма начинается.
Нажимаете Add files/folders и выбираете файлы остальные файлы нужные для работы программы. Например: primer.m и primer.fig
Жмёте кнопку build
и ждётё пока Матлаб сделает exe файл.

Но у того кто этот файл будет запускать должна быть такая же win32 или win64 операционная система как и у вас. У него должно быть установлено Matlab Compiler Runtime при чём той версии которая была у вас на момент компиляции.
Вы можете перейти на вкладку Package и нажать на Add MCR. MCRInstaller весит где-то 300MB. Что конечно не очень удобно.
Наверно можно сделать как-то через Java. Я не знаю как.
Может кто подскажет?
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 21:20  [ТС] #17
У меня всеравно ничего не получается, я просто не понимаю, что надо записывать в сам м-файл, а что необходимо в м-файл интерфейса... Возникают всякие ошибки...
Мне необходимо всё увидеть самому в живую... Видимо большая ошибка, создавать интерфейс сложного примера, не умея делать лёгкий?
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 21:37  [ТС] #18
Вот получается какая-то ерунда, единственное, что работает - это сохранение txt файла
fara.rar
вообще всё сложно
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
31.05.2013, 21:45 #19
Matlab M
1
2
3
Undefined function or variable 'p1'.
Error in FAR1_file (line 90)
disPx = floor((psi/p1)+0.5).*p1;
Откуда p1 должно было взятся?
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
31.05.2013, 22:09  [ТС] #20
Объясню подробно!
По умолчанию на панели должны стоять цифры, которые я выставил, должен быть включен cos на пьедестале и прямоугольная решётка. Дискретное фазирование при этом должно быть выключено. p1 это дискретное фазирование и его необходимо заменить на D. При нажатии кнопки Вид АР должны появиться квадратики на экране (при отключенном дискретном фазировании каким то образом должна ставиться в plot вместо Px-K1 и наоборот) как это сделать я не знаю, при нажатии кнопки Показать Амплитуды и фазы должен появиться текст у квадратиков, сохранить-работает, при нажатии кнопки Амплитуда и фаза токов должны высветиться две таблицы (1-ar1 или ar2, вторая K1 или Px), там же должна быть кнопка показать Гистограммы (как кнопку в кнопке сделать я не знаю).
Вот как то так.
0
31.05.2013, 22:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 22:09

Как запустить qt gui программу, как демон, без gui, скрыв gui?
Как запустить qt gui программу, как демон, без gui, скрыв gui? В gui браузер...

nRF24L01+ с антенной. Аппаратная закладка.
Эту тему создал для информирования участников форума. Несколько дней парился...

nRF24L01 с антенной. Народ! Нужна ваша помощь!
1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru