2015-07-20 77 views
1

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

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. 

回答

3

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

没有支持的编译器或SDK被发现。有关选项,请访问http://www.mathworks.com/support/compilers/R2015a/win64.html

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

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

对于64位Windows平台,C编译器不与MATLAB提供。免费下载是可用的,适合大多数用户:

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

您试图编译C代码和MATLAB不来随C编译器。使用.NET Framework 4下载Microsoft SDK版本7.1是让您的代码编译的最简单的解决方案。因此,从Microsoft的上述链接下载SDK,重新设置mex并再次尝试您的代码。

+1

谢谢。我已经完成了Windows SDK和.NET Framework 4的安装过程,但我没有密切关注它。 win SDK安装实际上已经失败,但我只是点击“完成”并继续前进。 对于在安装win SDK时遇到问题的人,请尝试卸载所有Visual C++ 2010 Resdistributable并重新安装。 – Hadi

+0

@Hadi - 哎呀!很高兴你想出来了。祝你好运! – rayryeng