2016-01-11 2 views
0

Я использую GUIDE для matlab gui. Gui построен для связи с измерительным устройством keithley через GPIB. При использовании кнопки переключения для текущего измерения во время цикла я использую функцию pause() внутри цикла while для каждой итерации и ytranspose по результатам поиска массива y.Matlab gui с функцией паузы

function Measure_Callback(hObject, eventdata, handles) 

    global GPIB1 
    global filename 
    global timeStep 

    disp('Measurement in progress \n stopwatch starts!'); 
    tic 
    x=0; 
    n=0; 
    while get(hObject,'Value') 
     fprintf(GPIB1, 'printnumber(smua.measure.i(smua.nvbuffer1))'); 
     fprintf(GPIB1, 'printbuffer(1,1,nvbuffer1)'); 
     A = fscanf(GPIB1); 
     if length(A)<20 
      x = x+1; 
      n = n+1; 
      t(n) = toc ; 
      y(x) = str2double(A); 
      plot(t,y,'-bo',... 
        'LineWidth',2,... 
        'MarkerEdgeColor','k',... 
        'MarkerFaceColor',[.49 1 .63],... 
        'MarkerSize',10); 
      grid on 
      hold on 
     end 
     title('Current vs Time','FontSize', 15) 
     xlabel('Time [s]','FontSize', 15) 
     ylabel('Current [A]','FontSize', 15) 
     a = timeStep; 
     pause(a) 
    end 
    disp('Measurement terminated'); 
    disp('Elapsed time: '); 
    elapsedtime = toc; 
    elapsedtime_string = num2str(elapsedtime); 
    disp(elapsedtime_string); 
    ytrans = transpose(y); 
    csvwrite(filename,ytrans); 
    fprintf(GPIB1, 'smua.source.output = smua.OUTPUT_OFF'); 

Для функции паузы я Geting ошибку: ?? Ошибка использование ==> Пауза Ошибка при оценке UIControl Обратного звонка

Для функции транспонирования (у) Я также получаю сообщение об ошибке: его неопределенных у.

Не могу понять, почему эти ошибки и могут помочь. Спасибо!

+0

Вопросы по StackOverflow обычно должны содержать [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). Код, который вы опубликовали, не является полным и не поддается проверке. Пожалуйста, отредактируйте свой вопрос (http://stackoverflow.com/posts/34716775/edit), чтобы убедиться, что код в вашем вопросе ** Минимальный ** (только код, необходимый для воспроизведения), ** Завершить ** (весь код, необходимый для воспроизведения) и ** Подтверждаемый ** (мы должны иметь возможность воспроизвести проблему, используя только код в вашем вопросе, не меньше и ничего больше). – excaza

+0

Когда вы спрашиваете об ошибках и предупреждениях, также желательно, чтобы вы отправляли * цельное * сообщение и трассировку стека, а не перефразируя. – excaza

ответ

0

Прежде всего, как говорят люди, опубликуйте ошибки и код. Знаете ли вы, что длина (A) меньше 20 при первом запуске цикла? Потому что, если нет, A не определен, и вы не можете транспонировать то, чего там нет. Инициализируйте A перед циклом и посмотрите, сохраняется ли ошибка (или распечатайте длину (A), чтобы убедиться, что цикл введен в первый запуск).

Что касается ошибки паузы, убедитесь, что пауза - это int или double, а не строка. Если вы получите свой глобальный timeStep из поля GUI, это, вероятно, строка, и вам нужно сначала скрывать ее, чтобы удвоить ее.