无法在 MATLAB 中加载 C 库

Trouble loading C library in MATLAB

我正在尝试使用 MATLAB 通过 Phidg​​et 1063_1 控制器来控制步进电机。 Phidg​​ets 为其设备提供库和示例程序,我正在尝试 运行 他们的示例步进电机程序。该程序加载了一个 C 库(这是我在 MATLAB 中没有的经验)。这是我正在尝试的程序 运行:

function stepper

loadphidget21;

stepperHandle = libpointer('int32Ptr');
calllib('phidget21', 'CPhidgetStepper_create', stepperHandle);
calllib('phidget21', 'CPhidget_open', stepperHandle, -1);

valPtr = libpointer('int64Ptr', 0);

if calllib('phidget21', 'CPhidget_waitForAttachment', stepperHandle, 2500) == 0
    disp('Opened Stepper');

    t = timer('TimerFcn','disp(''waiting...'')', 'StartDelay', 1.0);

    %set parameters for stepper motor in index 0 (velocity, acceleration, current)
    %these values were set basd on some testing based on a 1063 and a stepper motor I had here to test with
    %might need to modify these values for your particular case
    calllib('phidget21', 'CPhidgetStepper_setVelocityLimit', stepperHandle, 0, 6200);
    calllib('phidget21', 'CPhidgetStepper_setAcceleration', stepperHandle, 0, 87543);
    calllib('phidget21', 'CPhidgetStepper_setCurrentLimit', stepperHandle, 0, 0.26);

    %IMPORTANT: If you are using a 1062, delete this line.  This command is only for the 1063 Bipolar stepper controller
    calllib('phidget21', 'CPhidgetStepper_setCurrentPosition', stepperHandle, 0, 0);

    start(t);
    wait(t);

    disp('Engage Motor 0');

    %engage the stepper motor in index 0
    calllib('phidget21', 'CPhidgetStepper_setEngaged', stepperHandle, 0, 1);
    start(t);
    wait(t);

    currPosition=0;
    calllib('phidget21', 'CPhidgetStepper_getCurrentPosition', stepperHandle, 0, valPtr);
    currPosition = get(valPtr, 'Value');

    disp('Move to 20000');

    %set motor to position 1 (20000)
    calllib('phidget21', 'CPhidgetStepper_setTargetPosition', stepperHandle, 0, 20000);

    %wait for motor to arrive
    while currPosition < 20000
        calllib('phidget21', 'CPhidgetStepper_getCurrentPosition', stepperHandle, 0, valPtr);
        currPosition = get(valPtr, 'Value');
    end
    disp('Motor reached target');

    start(t);
    wait(t);

    disp('Move to 0');

    %set motor to position 2 (0)
    calllib('phidget21', 'CPhidgetStepper_setTargetPosition', stepperHandle, 0, 0);

    %wait for motor to arrive
    while currPosition > 0
        calllib('phidget21', 'CPhidgetStepper_getCurrentPosition', stepperHandle, 0, valPtr);
        currPosition = get(valPtr, 'Value');
    end
    disp('Motor reached target');

    disp('Disengage Motor 0');

    %disengage the stepper motor in index 0
    calllib('phidget21', 'CPhidgetStepper_setEngaged', stepperHandle, 0, 0);
    start(t);
    wait(t);
else
    disp('Could Not Open Stepper');
end

disp('Closing Stepper');
% clean up
calllib('phidget21', 'CPhidget_close', stepperHandle);
calllib('phidget21', 'CPhidget_delete', stepperHandle);

disp('Closed Stepper');

当我 运行 它时,我得到以下错误:

>> stepper
Index exceeds matrix dimensions.

Error in loadlibrary>getLoadlibraryCompilerConfiguration (line 527)



Error in loadlibrary (line 263)



Error in loadphidget21 (line 12)
            [notfound,warnings]=loadlibrary('phidget21', 'phidget21Matlab_Windows_x64.h');

Error in stepper (line 3)
loadphidget21;

在其他一些帖子中,有人说当 C 编译器没有为 MATLAB 配置时会发生这种情况,为 mex 配置编译器应该可以解决这个问题。我也遇到了这个问题:

>> mex -setup
Error using mex
No supported compiler or SDK was found. For options, visit  http://www.mathworks.com/support/compilers/R2015a/win64.html.

阅读错误消息的最后一行:

No supported compiler or SDK was found. For options, visit http://www.mathworks.com/support/compilers/R2015a/win64.html.

您目前没有在您的系统上安装与 R2015 兼容的编译器。访问 link 以了解您的选择。您需要获得兼容的编译器才能使您的代码正常工作。

此外,当您访问该 MathWorks 页面时,会显示针对您的平台的免责声明:

For the 64-bit Windows platform, a C compiler is not supplied with MATLAB. A free download is available that is suitable for most users:

http://www.microsoft.com/en-us/download/details.aspx?id=8279

您正在尝试编译 C 代码,而 MATLAB 并未附带 C 编译器。下载带有 NET Framework 4 的 Microsoft SDK 7.1 版是编译代码的最简单解决方案。因此,从 Microsoft 下载上述 link 的 SDK,重新设置 mex 并再次尝试您的代码。