Интерфейс 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;

Другие вопросы по тегам