Интерфейс MATLAB Slider с фоновым переключателем для управления сервоприводами обратной связи
Я пытаюсь реализовать серводвигатель с программой управления с обратной связью в MATLAB для нескольких серводвигателей. Цель состоит в том, чтобы прочитать аналоговый выход сервопривода, сравнить его с пользовательским значением с ползунка (ов), записать новую позицию в сервопривод и продолжить запись или мониторинг аналогового выхода, чтобы убедиться, что сервопривод поддерживает последнее пользовательское значение. У меня возникли проблемы, потому что я не могу определить оптимальный поток, чтобы всегда держать графический интерфейс открытым и принимать пользовательские значения, пока цикл while работает в фоновом режиме. Ниже приведена общая структура, которую я хотел бы, чтобы код выводил:
test_gui %calls GUI figure with slider bar
Окно GUI с ползунком выскакивает
%Callback for when user slides bar
function slider(i)_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
load('user.mat'); %Load previous user input
sze=size(user,1);
user(sze+1,1)=get(hObject,'Value'); %Add new user input to previous input
save('user.mat','user') %Save variable to be accessed by outer loop
'user' передается в непрерывный цикл while, который записывает положение сервопривода
while user ~= 'c' %Continue to run until close window callback
load('user.mat'); %load user input from callback
Write_Servoi(a,user(end,:),add,speed,pinin,myServo) %Writes to servo(s) based on last input, allows servo(s) to maintain position if torqued out of position
end
Во время этого цикла while я бы хотел, чтобы пользователь мог постоянно менять ползунок и отправлять значение этого ползунка в цикл while для записи в сервопривод. Тем не менее, я не могу понять, как обновить пользователя в цикле while.
Если у кого-то есть идеи, как заставить это работать, пожалуйста, дайте мне знать. Я был бы очень признателен за любую помощь. Я открыт для изменения структуры до тех пор, пока поставленные цели будут выполнены.
Роберт
1 ответ
Чтобы обновить пользовательскую переменную, вам нужно убедиться, что она правильно загружена. призвание load
без вывода не всегда загружает вашу переменную в рабочее пространство функции.
Вместо load('user.mat');
вам нужно загрузить ваш файл как структуру, а затем извлечь вашу переменную из структуры. Для этого сделайте следующее:
s=load('user.mat');
user=s.user;