【问题标题】:This statement is not inside any function该语句不在任何函数内
【发布时间】:2020-07-25 03:44:21
【问题描述】:

我在第 51 行收到一个解析错误(从 startw = input('输入起始波长:') 开始),但我不知道为什么。错误是这样写的;行:51 列:1 此语句不在任何函数内。 (它遵循终止函数“OpticalFunction”定义的 END。)在 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

【问题讨论】:

    标签: matlab function daq-mx


    【解决方案1】:

    错误信息很清楚:它是一个不在函数内部的语句。当M文件中的第一条语句为function时,它是一个函数M文件,它定义了一个单独的函数,不能包含函数之外的任何语句。

    如果你想有一个脚本M文件,你需要把脚本本身放在文件的顶部,任何局部函数都必须定义在底部。

    这与 Octave 的做法完全不同,其中函数定义必须位于使用它的脚本行之前。 MATLAB 和 Octave 不能共享定义局部函数的脚本。解决方案是在单独的文件中定义函数。

    【讨论】:

    • 很抱歉,如果这是一个简单的问题,我在 Matlab 上不太擅长,您的回答非常有用,感谢您的回答。我还有一个问题,当我在底部创建一个本地函数时,它应该与它所在的文件具有相同或不同的名称。提前致谢
    • @Harry:本地函数可以有任何你想给它们起的名字。它们将隐藏在别处定义的函数,因此如果您调用本地函数“size”,那么该脚本文件中将不再提供正常的 size 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多