Это утверждение не внутри какой-либо функции - PullRequest
3 голосов
/ 12 апреля 2020

Я получаю ошибку разбора в строке 51 (начиная с startw = input ('Введите начальную длину волны:')), но я понятия не имею, почему. Ошибка читается как таковая; Строка: 51 Колонка: 1 Это утверждение не внутри какой-либо функции. (Это следует за END, который завершает определение функции "OpticalFunction".) Рассматриваемая строка при запуске на сценарии Matlab сама по себе работает отлично.

function OpticalFunction
daq.reset
clear, close all
clc;
s = daq.createSession('ni'); 
% Creates the session object
s.addDigitalChannel('Dev1','Port0/Line0:7','OutputOnly');
% Adds 8 digital output channels (numbered 0:7) on the DAQ card

% The following creates the uicontrols
onoff = uicontrol('Style','togglebutton','String','go',...
'Position',[20 200 70 40],'Callback',@move_buggy);

forwards = uicontrol('Style','pushbutton','String','forwards',...
'Position',[20 150 70 40],'Callback',@go_forward);

backwards = uicontrol('Style','pushbutton','String','backwards',...
'Position',[20 100 70 40],'Callback',@go_backward);

nout = [51 102 204 153]; % decimal sequence for forward motion

% This is the callback function for the toggle button.
% It moves the buggy when the toggle button is pressed.
% 'hObject' is the handle for the uicontrol calling the function.
function move_buggy(hObject,eventdata)
   while hObject.Value == hObject.Max
       for n=1:4
       output_data=dec2binvec(nout(n),8);
       % high state=1 low state=0
       outputSingleScan(s,output_data);
       % outputs the data in output_data to the device
       pause(1.6) 
       % use this to change the speed of the motor
       end
   end
end
% These are the callbacks for the pushbuttons.
% They set the direction of travel for the motors.

   function go_forward(hObject,eventdata)
       nout = [51 102 204 153];
   end

   function go_backward(hObject,eventdata)
       nout = [153 204 102 51];
   end
end 

%%

startw = input('Enter starting wavelength: ');
deend = input('Desired final wavelength: ');
r = 11/62; % this is the rate of wavelegth change with time for GaAs
r = 29.5/66; %this is the rate of wavelenght change with time for GaP 
% comment off the r value not used

OpticalFunction
% calls on the function optical thing

1 Ответ

1 голос
/ 12 апреля 2020

Сообщение об ошибке довольно ясно: это утверждение, которое не находится внутри функции. Когда первый оператор в M-файле function, это M-файл функции, он определяет одну функцию и не может содержать никаких операторов вне функций.

Если вы хотите иметь скрипт M- файл, вам нужно поместить сам скрипт вверху файла, а любые локальные функции должны быть определены внизу.

Это строго отличается от того, как это делает Octave, где определение функции должно предшествовать строка сценария, которая его использует. MATLAB и Octave не могут совместно использовать скрипты, которые определяют локальные функции. Решение состоит в том, чтобы определить функции в отдельных файлах.

...