GUIDE - zapisywanie wyników

MATLAB GUIDE

MATLAB GUIDE prawdopodobnie powoli zacznie odchodzić na emeryturę, jednak póki co jest jeszcze popularnym narzędziem. GUIDE jest intuicyjny w użyciu, jednak od czasu do czasu pojawiają się problemy z osiągnięciem przez użytkownika zamierzonego efektu. Dziś o dosyć częstym problemie – jak zmusić narzędzie do zapisania wyniku pracy w formie matlabowej zmiennej. W czym rzecz? Programy tworzone z pomocą GUIDE nie muszą stanowić zamkniętego, gotowego rozwiązania jakiegoś problemu. Zazwyczaj są jedynie pomocą na drodze do osiągnięcia końcowego wyniku. Często zdarza się, że chcemy przetworzyć jakieś dane i pośredni wynik zamierzamy poddać dalszej analizie w MATLABie, a tutaj GUIDE nie chce od razu współpracować. Poniżej program, który przemnaża dane wejściowe przez dwa.

Przykładowe GUI jest bardzo proste

Wygenerowany kod pozostaje bez zmian za wyjątkiem sekcji pushbutton1_Callback, gdzie znajdują się 3 wiersze:

x = get(handles.edit1, 'String');
y = str2num(x) * 2;
set(handles.text2, 'String', num2str(y));

Aplikacja działa oczywiście bezbłędnie, jednak chcielibyśmy, żeby po wciśnięciu przycisku "Oblicz" wynik trafił również do zmiennej w workspace, dlatego należy wprowadzić pewne zmiany.
Aplikację stworzoną w GUIDE można uruchomić, prosząc o zwrócenie argumentu wyjściowego, a my decydujemy, co ma tam trafić.

Po pierwsze zatem, na liście wygenerowanych funkcji należy znaleźć OutputFcn i zapisać, co chcielibyśmy otrzymać.

varargout{1} = handles.text2.String;

Jeśli na tym etapie spróbujemy przetestować aplikację, okaże się, że nie wszystko działa jeszcze  jak powinno.
Out = X2
   Out = 'Wynik'
Wynik pojawi się jak tylko uruchomimy aplikację, zanim zdążymy „wyklikać” cokolwiek. W naszym przypadku będzie to po prostu słowo ‘Wynik’.

Kolejna niezbędna zmiana, to modyfikacja ostatniej linii w OpenningFnc. Znajduje się tam polecenie uiwait(handles.figure1), należy usunąć poprzedzający je znak komentarza. Dzięki temu MATLAB wstrzyma się z wykonaniem OutputFnc do czasu aż mu na to pozwolimy. Dane na wyjściu mogą pojawić się w momencie wciśnięcia przycisku pushbutton1, stąd kolejna modyfikacja.

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
x = get(handles.edit1, 'String');
y = str2num(x) * 2;
set(handles.text2, 'String', num2str(y));
uiresume(handles.figure1);

Teraz aplikacja powinna działać zgodnie z planem, w momencie wciśnięcia przycisku zostaną wykonane obliczenia, a wynik trafi do Command Window.

(Visited 325 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *