2015-07-20 2 views
1

Я пытаюсь использовать MATLAB для управления шаговым двигателем с помощью контроллера Phidget 1063_1. Phidgets предоставляет библиотеки и примеры программ для своих устройств, и я пытаюсь запустить их пример программы шагового двигателя. Программа загружает библиотеку C (что-то, с чем у меня нет в MATLAB). Это программа, которую я пытаюсь запустить:Проблемы с загрузкой библиотеки 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. 

ответ

3

Прочитайте самую последнюю строку сообщения об ошибке:

не поддерживается компилятором или SDK был найден. Для опций посетите http://www.mathworks.com/support/compilers/R2015a/win64.html.

У вас нет компилятора, совместимого с R2015, установленного в вашей системе. Посетите эту ссылку для своих опций. Чтобы получить код, вам необходимо получить совместимый компилятор.

Кроме того, когда вы посещаете, что MathWorks страница, отказ от ответственности показана для вашей платформы:

для 64-битной платформы Windows, компилятор Си не поставляются с MATLAB. Бесплатная загрузка доступна, который подходит для большинства пользователей:

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

Вы пытаетесь скомпилировать код C и MATLAB не приходят поставляются с компилятором. Загрузка Microsoft SDK версии 7.1 с помощью NET Framework 4 - это самое простое решение для компиляции кода. Таким образом, скачайте SDK из вышеуказанной ссылки от Microsoft, переустановите mex и повторите попытку кода.

+1

Спасибо. Я прошел процесс установки Windows SDK и NET framework 4, но я не обращал на это пристального внимания. Ускоренная установка SDK на самом деле потерпела неудачу, но я просто нажал «закончить» и перешел. Для тех, у кого возникли проблемы с установкой win SDK, попробуйте удалить все Resdistributables Visual C++ 2010 и переустановить. – Hadi

+0

@ Хэди - К сожалению! Рад, что ты это понял. Удачи! – rayryeng

Смежные вопросы