단축 구동 (Single Move)
모션 구동의 가장 기본이 되는 구동은 단축 구동이다. 단축 구동은 크게 위치 구동(Position Drive), 속도 구동(Velocity Drive), 신호 검색 구동(Signal Search Drive), 원점 검색 구동(Home Search Drive)으로 나뉜다.
1. 위치 구동
위치 구동은 기구부를 원하는 위치로 이동시키기 위한 명령이다. 위치 구동을 위한 함수로는 AxmMovePos 와 AxmMoveStartPos 가 있다. 두 함수는 설정한 거리 또는 위치로 입력해준 속도 및 가속도로 이동하도록 하는데, AxmMovePos 함수는 종점 탈출 함수로 구동이 종료되어야 프로그램의 다음 명령을 실행시키고, AxmMoveStartPos 함수는 시점 탈출 함수로 동작이 시작되고 바로 프로그램의 다음 명령을 수행한다.
AxmMovePos 함수를 사용한다면 좌표계와 속도 프로파일을 따로 설정하는 함수를 사용하고, 이동량, 속도, 가속도를 설정한다. 아래와 같이 대칭 프로파일 구동일 경우 입력한 감속도는 무시되며 입력한 가속도가 가감속 시 적용된다.
//0축을 절대 좌표로 100 위치까지 대칭 S자 구동 모드로 이동 (속도 100, 가속도 200)
long lAxisNo = 0;
DWORD uAbsRelMode = 0;
DWORD uProfileMode = 3;
AxmMotSetAbsRelMode(lAxisNo, uAbsRelMode);
AxmMotSetProfileMode(lAxisNo, uProfileMode);
double dPosition = 100;
double dMaxVelocity = 100;
double dMaxAccel = 200;
double dMaxDecel = 200;
AxmMovePos(lAxisNo, dPosition, dMaxVelocity, dMaxAccel, dMaxDecel);
AxmMoveStartPos 함수를 사용한다면 구동이 시작되자마자 바로 다음 함수가 실행되는데, 만약 다음 함수가 구동 함수라면 반드시
AxmStatusReadInMotion 함수를 이용하여 구동 여부를 확인하고 구동 종료 후 다음 구동 명령을 수행해야 한다.
구동 중일 때는 모든 모션 구동 명령이 에러를 반환하고 실행되지 않기 때문이다.
여기서 AxmStatusReadInMotion 함수는 모션 구동 중이면 TRUE, 구동 중이 아니면 FALSE를 반환한다.
//0축을 상대 좌표로 100 위치까지 비대칭 S자 구동 모드로 이동 (속도 100, 가속도 200, 감속도 100)
long lAxisNo = 0;
DWORD uAbsRelMode = 1;
DWORD uProfileMode = 4;
AxmMotSetAbsRelMode(lAxisNo, uAbsRelMode);
AxmMotSetProfileMode(lAxisNo, uProfileMode);
double dPosition = 100;
double dMaxVelocity = 100;
double dMaxAccel = 200;
double dMaxDecel = 100;
AxmMoveStartPos(lAxisNo, dPosition, dMaxVelocity, dMaxAccel, dMaxDecel);
DWORD uStatus;
AxmStatusReadInMotion(lAxisNo, &uStatus);
while(uStatus){
AxmStatusReadInMotion(lAxisNo, &uStatus);
}
// Ex5_AXM_PositionMove.cpp : Defines the entry point for the console application.
// 위치 구동 함수로 100만큼 이동 후 다시 -100만큼 이동 후 종료한다.
#include "stdafx.h"
#include "AXL.h"
#include <conio.h>
#include "stdio.h"
#define AXIS_0 0
void main(void)
{
// 라이브러리를 초기화한다.
// 7은 IRQ를 뜻한다. PCI에서 자동으로 IRQ가 설정된다.
DWORD Code = AxlOpen(7);
if (Code == AXT_RT_SUCCESS)
{
printf("라이브러리가 초기화되었습니다.\n");
//모션 모듈이 있는지 검사
DWORD uStatus;
Code = AxmInfoIsMotionModule(&uStatus);
if(Code == AXT_RT_SUCCESS)
{
if(uStatus == STATUS_EXIST)
{
printf("모션 모듈이 존재합니다.\n");
// 0축의 +End limit 과 -End limit 의 Active level을 HIGH로 설정한다.
AxmSignalSetLimit(AXIS_0, 0, HIGH, HIGH);
// 0축의 Inpositon 신호의 입력 레벨을 HIGH로 설정한다.
AxmSignalSetInpos(AXIS_0, HIGH);
// 0축의 알람 신호의 입력 레벨을 LOW로 설정한다.
AxmSignalSetServoAlarm(AXIS_0, LOW);
// 0축의 비상 정지 신호(ESTOP)의 Active 입력 레벨을 HIGH로 설정한다.
AxmSignalSetStop(AXIS_0, 0, HIGH);
//0축 지령 값을 mm단위가 되도록한다.
AxmMotSetMoveUnitPerPulse(AXIS_0, 10, 10000);
//0축에 초기 속도를 1로 설정한다. Default : 1
AxmMotSetMinVel(AXIS_0, 1);
//0축의 펄스 출력 방식을 TwoCwCcwHigh로 한다.
AxmMotSetPulseOutMethod(AXIS_0, TwoCcwCwHigh);
//지정 축에 Encoder 입력 방식을 4체배로 설정한다.
AxmMotSetEncInputMethod(AXIS_0, ObverseSqr4Mode);
//현재 위치를 원점으로 설정한다.
AxmStatusSetActPos(AXIS_0, 0.0);
AxmStatusSetCmdPos(AXIS_0, 0.0);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
printf("0축을 절대 좌표로 100위치까지 대칭 S자 구동(속도 100, 가속도 200, 종점 탈출)\n");
printf("아무 키나 누르면 구동을 시작합니다.\n");
getch();
AxmMotSetAbsRelMode(AXIS_0, 0);
AxmMotSetProfileMode(AXIS_0, 3);
AxmMovePos(AXIS_0, 100, 100, 200, 200);
printf("0축을 상대 좌표로 -100 위치까지 비대칭 S자 구동 (속도 100, 가속도 200, 시점 탈출)\n");
printf("아무 키나 누르면 구동을 시작합니다.\n");
getch();
AxmMotSetAbsRelMode(AXIS_0, 1);
AxmMotSetProfileMode(AXIS_0, 4);
AxmMoveStartPos(AXIS_0, -100, 100, 200, 200);
//현재 구동 중이면 대기한다.
DWORD uStatus;
AxmStatusReadInMotion(AXIS_0, &uStatus);
while(uStatus)
{
AxmStatusReadInMotion(AXIS_0, &uStatus);
}
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( NOT STATUS_EXIST ) code 0x%x\n",Code);
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( Return FALSE ) code 0x%x\n",Code);
}
else
printf ("AxlOpen() : ERROR code 0x%x\n",Code);
// 라이브러리를 종료한다.
if (AxlClose())
printf("라이브러리가 종료되었습니다.\n");
else
printf("라이브러리가 정상적으로 종료되지 않았습니다.\n");
}
2. 속도(조그) 구동
속도 구동은 속도, 가속도, 가속 시간을 정하여 종료 명령이 나올 때까지 계속 움직이는 형태의 구동이다.
속도 구동 함수는 모두 펄스가 시작되는 시점에서 함수를 벗어나는 펄스 시점 탈출 함수이다.
속도 구동을 하기 위해서는 AxmMoveVel 함수를 사용하는데, AxmMoveVel 함수는 일정한 직선 속도로 이동하도록 하는 명령이다.
구동 방향은 속도값의 부호로 결정된다.
//0축을 (+)방향으로 속도 100, 대칭 S자 속도 프로파일로 구동을 시작한다.
long lAxisNo = 0;
DWORD uProfileMode = 3;
AxmMotSetProfileMode(lAxisNo, uProfileMode);
double dMaxVelocity = 100;
double dMaxAccel = 200;
double dMaxDecel = 200;
AxmMoveVel(lAxisNo, dMaxVelocity, dMaxAccel, dMaxDecel);
//0축을 (-)방향으로 속도 100, 대칭 사다리꼴 속도 프로파일로 구동을 시작한다.
long lAxisNo = 0;
DWORD uProfileMode = 0;
AxmMotSetProfileMode(lAxisNo, uProfileMode);
double dMaxVelocity = -100;
double dMaxAccel = 200;
double dMaxDecel = 200;
AxmMoveVel(lAxisNo, dMaxVelocity, dMaxAccel, dMaxDecel);
이렇게 속도 구동 함수를 시작하면 정지 명령을 내릴 때까지 계속 구동하게 된다.
구동의 정지는 뒤에서 상세히 언급할 것이며, 아래와 같이 하면 된다.
//0축의 구동을 설정된 감속도로 감속하면서 정지하도록 한다.
long lAxisNo = 0;
AxmMoveSStop(lAxisNo);
// Ex6_AXM_VelocityMove.cpp : Defines the entry point for the console application.
// 속도 구동 함수를 이용하여 구동하고, 정지 명령에 의해 구동을 종료한다.
#include "stdafx.h"
#include "AXL.h"
#include <conio.h>
#include "stdio.h"
#define AXIS_0 0
void main(void)
{
// 라이브러리를 초기화한다.
// 7은 IRQ를 뜻한다. PCI에서 자동으로 IRQ가 설정된다.
DWORD Code = AxlOpen(7);
if (Code == AXT_RT_SUCCESS)
{
printf("라이브러리가 초기화되었습니다.\n");
//모션 모듈이 있는지 검사
DWORD uStatus;
Code = AxmInfoIsMotionModule(&uStatus);
if(Code == AXT_RT_SUCCESS)
{
if(uStatus == STATUS_EXIST)
{
printf("모션 모듈이 존재합니다.\n");
// 0축의 +End limit 과 -End limit 의 Active level을 HIGH로 설정한다.
AxmSignalSetLimit(AXIS_0, 0, HIGH, HIGH);
// 0축의 Inpositon 신호의 입력 레벨을 HIGH로 설정한다.
AxmSignalSetInpos(AXIS_0, HIGH);
// 0축의 알람 신호의 입력 레벨을 LOW로 설정한다.
AxmSignalSetServoAlarm(AXIS_0, LOW);
// 0축의 비상 정지 신호(ESTOP)의 Active 입력 레벨을 HIGH로 설정한다.
AxmSignalSetStop(AXIS_0, 0, HIGH);
//0축의 지령 값을 mm 단위가 되도록한다.
AxmMotSetMoveUnitPerPulse(AXIS_0, 10, 10000);
//0축의 초기 속도를 1로 설정한다. Default : 1
AxmMotSetMinVel(AXIS_0, 1);
//0축의 펄스 출력 방식을 TwoCcwCwHigh로 한다.
AxmMotSetPulseOutMethod(AXIS_0, TwoCcwCwHigh);
//지정 축의 Encoder 입력 방식을 4체배로 설정한다.
AxmMotSetEncInputMethod(AXIS_0, ObverseSqr4Mode);
//현재 위치를 원점으로 설정한다.
AxmStatusSetActPos(AXIS_0, 0.0);
AxmStatusSetCmdPos(AXIS_0, 0.0);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
// help Message
printf("[INFORMATION]*************** \n");
printf("[ESC] : Exit after Servo Off \n");
printf("[1] : (+)방향으로 속도 구동 시작 \n");
printf("[2] : (-)방향으로 속도 구동 시작 \n");
printf("[3] : STOP \n");
printf("**************************** \n");
DWORD uStatus;
BOOL fExit = FALSE;
while (!fExit) // 무한 루프
{
if (kbhit()) // 아무 키나 누르면
{
int ch = getch();
switch (ch)
{
case 27: // Esc key
fExit = TRUE;
AxmSignalServoOn(AXIS_0, DISABLE); //Servo Off
break;
case '1':
// 구동 중이 아니라면, (+)방향으로 대칭 사다리꼴 속도 프로파일로 연속 구동한다.
AxmStatusReadInMotion(AXIS_0, &uStatus);
if(!uStatus)
{
AxmMotSetProfileMode(AXIS_0, 0);
AxmMoveVel(AXIS_0, 100, 200, 200);
}
break;
case '2':
// 구동 중이 아니라면, (-)방향으로 대칭 S자 속도 프로파일로 연속 구동한다.
AxmStatusReadInMotion(AXIS_0, &uStatus);
if(!uStatus)
{
AxmMotSetProfileMode(AXIS_0, 3);
AxmMoveVel(AXIS_0, -100, 200, 200);
}
break;
case '3': //구동 중이라면, 감속 정지한다.
AxmStatusReadInMotion(AXIS_0, &uStatus);
if(uStatus)
AxmMoveSStop(AXIS_0);
break;
}
}
} //End of While()
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( NOT STATUS_EXIST ) code 0x%x\n",Code);
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( Return FALSE ) code 0x%x\n",Code);
}
else
printf ("AxlOpen() : ERROR code 0x%x\n",Code);
// 라이브러리를 종료한다.
if (AxlClose())
printf("라이브러리가 종료되었습니다.\n");
else
printf("라이브러리가 정상적으로 종료되지 않았습니다.\n");
}
3. 신호 검색 구동
신호 검색 구동이란 Limit 신호나 범용 입출력 신호 등의 검출 대상을 미리 설정하고, 일정 속도로 움직이다가 설정한 신호가 감지될 경우 정지하는 구동을 뜻한다.
신호 검색 구동은 특정 신호가 검색되면 감속 또는 급정지하는 AxmMoveSignalSearch 함수와 신호가 검색되면 그 위치를 저장하는 AxmMoveSignalCapture 함수가 있다.
검색할 수 있는 신호는 아래의 표에서와 같이 8개의 신호가 있는데, 각각 Up Edge와 Down Edge가 있으므로 총 16개의 신호가 있다.
정의 | 값 | 검출 신호 |
---|---|---|
PosEndLimit | 0x0 | +Elm(End limit) +방향 리미트 센서 신호 |
NegEndLimit | 0x1 | -Elm(End limit) -방향 리미트 센서 신호 |
PosSloLimit | 0x2 | 사용하지 않음 |
NegSloLimit | 0x3 | 사용하지 않음 |
HomeSensor | 0x4 | IN0(ORG) 원점 센서 신호 |
EncodZPhase | 0x5 | IN1(Z상) Encoder Z상 신호 |
UniInput02 | 0x6 | IN2(범용) 범용 입력 2번 신호 |
UniInput03 | 0x7 | IN3(범용) 범용 입력 3번 신호 |
신호 검색 구동을 하기 위해서는 AxmMoveSignalSearch 함수를 사용하는데, 이 함수는 특정 입력 신호의 Edge를 검출하여 급정지 또는 감속 정지하는 함수로
검출할 입력 신호와 선택한 입력 신호의 Edge 방향, 구동 방향, 속도 및 가속도, 정지 방법를 입력 받는다.
여기서 구동 방향은 속도값의 부호에 따라 결정된다. 특히 이 함수는 다음 그림에서와 같이 해당 신호가 검출된 후에 감속을 시작하므로
정확한 신호 위치의 검색을 위해서는 신호 검색 구동에서 감속 정지 한 후에 반대 방향으로 신호를 저속 검색하면서 해당 신호에서 급정지하는 방법을 사용하여야 한다.
// -방향으로 이동하면서 홈 센서의 Up Edge를 찾는다.
long lAxisNo = 0;
double dMaxVelocity = -100;
double dMaxAccel = 200;
long lDetectSignal = HomeSensor;
long lSignalEdge = UP_EDGE;
long lSignalMethod = 0; // [0]감속 정지, [1]급정지
AxmMoveSignalSearch(lAxisNo, dMaxVelocity, dMaxAccel, lDetectSignal, lSignalEdge, lSignalMethod);
// +방향으로 천천히 이동하면서 홈 센서의 Down Edge를 검색한 후 급정지한다.
double dMaxVelocity = 20;
double dMaxAccel = 0;
long lDetectSignal = HomeSensor;
long lSignalEdge = DOWN_EDGE;
long lSignalMethod = 1; // [0]감속 정지, [1]급정지
AxmMoveSignalSearch(lAxisNo, dMaxVelocity, dMaxAccel, lDetectSignal,lSignalEdge,lSignalMethod);
단순히 신호가 검색되는 위치에 정지시키는 것 뿐만 아니라 해당 신호의 위치를 확인하고자 한다면 AxmMoveSignalCapture 함수를 사용하면 된다.
이 함수를 호출하면 해당 신호 검색을 시작하고 신호가 검색되면 해당 위치를 저장하게 되는데, AxmMoveGetCapturePos 함수를 사용하여 저장된 위치를 확인할 수 있다.
저장되는 위치는 Command Position 또는 Actual Position 값 중 하나이며, 이를 통해 원점으로부터의 거리를 확인할 수 있다.
// +방향으로 이동하면서 +ELM의 Up Edge를 찾는다.
long lAxisNo = 0;
double dMaxVelocity = 100;
double dMaxAccel = 200;
long lDetectSignal = PosEndLimit;
long lSignalEdge = UP_EDGE
long lTarget = 0; //[0] Command Position, [1] Actual Position
long lSignalMethod = 0 //[0]감속 정지, [1]급정지
AxmMoveSignalCapture(lAxisNo, dMaxVelocity, dMaxAccel, lDetectSignal, lSignalEdge, lTarget, lSignalMethod);
//+ELM 센서의 위치를 확인한다.
double dCapPotition;
AxmMoveGetCapturePos(lAxisNo, &dCapPotition);
printf(“+ELM센서의위치 : %f”, dCapPotition);
// Ex7_AXM_SignalSearchDrive.cpp : Defines the entry point for the console application.
// 신호 검색 구동 함수를 이용해서 리미트 센서와 홈 센서로 이동한다.
#include "stdafx.h"
#include "AXL.h"
#include <conio.h>
#include "stdio.h"
#define AXIS_0 0
void main(void)
{
// 라이브러리를 초기화한다.
// 7은 IRQ를 뜻한다. PCI에서 자동으로 IRQ가 설정된다.
DWORD Code = AxlOpen(7);
if (Code == AXT_RT_SUCCESS)
{
printf("라이브러리가 초기화되었습니다.\n");
//모션 모듈이 있는지 검사
DWORD uStatus;
Code = AxmInfoIsMotionModule(&uStatus);
if(Code == AXT_RT_SUCCESS)
{
if(uStatus == STATUS_EXIST)
{
printf("모션 모듈이 존재합니다.\n");
// 0축의 +End limit 과 -End limit 의 Active level 을 HIGH로 설정한다.
AxmSignalSetLimit(AXIS_0, 0, HIGH, HIGH);
// 0축의 Inpositon 신호 입력 레벨을 HIGH로 설정한다.
AxmSignalSetInpos(AXIS_0, HIGH);
// 0축의 알람 신호 입력 레벨을 LOW로 설정한다.
AxmSignalSetServoAlarm(AXIS_0, LOW);
// 0축의 비상 정지 신호(ESTOP) Active 입력 레벨을 HIGH로 설정한다.
AxmSignalSetStop(AXIS_0, 0, HIGH);
//0축 지령 값을 mm단위가 되도록 한다.
AxmMotSetMoveUnitPerPulse(AXIS_0, 10, 10000);
//0축의 초기 속도를 1로 설정한다. Default : 1
AxmMotSetMinVel(AXIS_0, 1);
//0축의 펄스 출력 방식을 TwoCwCcwHigh로 한다.
AxmMotSetPulseOutMethod(AXIS_0, TwoCcwCwHigh);
//지정 축의 Encoder 입력 방식을 4체배로 설정한다.
AxmMotSetEncInputMethod(AXIS_0, ObverseSqr4Mode);
//현재 위치를 원점으로 설정한다.
AxmStatusSetActPos(AXIS_0, 0.0);
AxmStatusSetCmdPos(AXIS_0, 0.0);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
// help Message
printf("[INFORMATION]*************** \n");
printf("[ESC] : Exit \n");
printf("[1] : +ELM센서의 Up Edge를 감지할 때까지 +방향으로 이동 후 사다리꼴 감속 정지
\n");
printf("[2] : -ELM센서의 Up Edge 를 감지할 때까지 –방향으로 이동 후 S-커브 감속 정지
\n");
printf("[3] : IN/OUT5(ORG) DownEdge를 감지할 때까지 +방향으로 이동 후 급정지 \n");
printf("**************************** \n");
DWORD uPositiveStatus, uNegativeStatus, uHomeStatus;
BOOL fExit = FALSE;
while (!fExit) // 무한 루프
{
if (kbhit()) // 아무 키나 누르면
{
int ch = getch();
switch (ch)
{
case 27: // Esc key
fExit = TRUE;
AxmSignalServoOn(AXIS_0, DISABLE); //Servo Off
break;
case '1':
// 0축에 100의속도와 200의 가감속도로 사다리꼴 구동
// +ELM센서의 Up Edge를 감지할 때까지 +방향으로 구동 후 감속 정지한다.
AxmMotSetProfileMode(AXIS_0, 0);
AxmMoveSignalSearch(AXIS_0, 100, 200, PosEndLimit,UP_EDGE,0);
break;
case '2':
// 0축에 100의속도와 200의가감속도로 S자구동,
// -ELM센서의 Up Edge를 감지할 때까지 –방향으로 구동 후 감속 정지한다.
AxmMotSetProfileMode(AXIS_0, 3);
AxmMoveSignalSearch(AXIS_0, -100, 200, NegEndLimit, UP_EDGE,0);
break;
case '3':
// 0축에 20의 속도로 홈 센서의 Down Edge를 감지할 때까지 +방향으로 구동
후 급정지
AxmMoveSignalSearch(AXIS_0, 20, 0, HomeSensor, DOWN_EDGE,1);
break;
}
}
// 각 센서의 신호 상태를 확인한다.
AxmSignalReadLimit(AXIS_0, &uPositiveStatus, &uNegativeStatus);
AxmSignalReadInputBit(AXIS_0, 0, &uHomeStatus);
printf("\r신호상태 : P_Elm(%d),N_Elm(%d),Home(%d)",uPositiveStatus, uNegativeStatus, uHomeStatus);
} //End of While()
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( NOT STATUS_EXIST )code 0x%x\n",Code);
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( Return FALSE ) code 0x%x\n",Code);
}
else
printf ("AxlOpen() : ERROR code 0x%x\n",Code);
// 라이브러리를 종료한다.
if (AxlClose())
printf("\n라이브러리가 종료되었습니다.\n");
else
printf("\n라이브러리가 정상적으로 종료되지 않았습니다.\n");
}
4. 원점 검색 구동
하드웨어 초기화, 파라미터 설정, 서보 온의 과정으로 모션 구동에 작업이 준비되어 있다 하더라도
좌표계의 방향만 설정되어 있을 뿐 좌표계의 기준이 되는 원점은 설정이 되어 있지 않은 상태이다.
기구부가 사용자가 원하는 일정한 위치로 이송되기 위해서는 정확한 원점이 보장되어야 한다.
원점 검색을 하는 방법에는 크게 신호 검색 구동 함수를 이용하는 방법과 원점 검색 함수를 이용하는 방법이 있다. 신호 검색을 이용하여 홈 검색을 수행하기 위해서는 상당히 번거로운 작업들이 이루어져야 하므로 이러한 과정을 더 편하게 하기 위해 홈 검색 함수를 제공한다.
원점 검색 함수를 이용하기 위해서는 AxmHomeSetMethod 함수와 AxmHomeSetVel 함수로 홈 검색에 필요한 데이터들을 설정하고, AxmHomeSetStart 함수를 호출하여 홈 검색을 시작하면 된다.
원점 검색 함수는 개별적인 스레드를 생성하여 작동하므로, 만약 여러 축의 원점 검색을 해야 하는 경우라면 각각의 원점 검색 명령을 열거해서 사용하면 된다.
원점 검색 방법 및 속도 설정
원점 검색은 기구부에 따라 여러 가지 신호 검색 순서가 발생할 수 있지만, AXL의 원점 검색 함수는 아래의
7단계의 원점 검색 시퀀스로 이루어지며, -방향으로 원점 검색을 실행할 경우, 원점 검색 단계는 다음과 같다.
1단계: -방향으로 이동하면서 홈 센서의 Rising Edge 신호를 검색하여 감속 정지
(홈 센서가 이미 HIGH 상태라면 1단계를 생략)
2단계: +방향으로 이동하면서 홈 센서의 Falling Edge 신호를 검색하여 감속 정지
3단계: -방향으로 이동하면서 홈 센서의 Rising Edge신호를 검색하여 급정지
< Z 상 검색을 사용하지 않은 경우 >
4단계: +방향으로 이동하면서 홈 센서의 Falling Edge신호를 검색하여 급정지
5단계: -방향으로 이동하면서 홈 센서의 Rising Edge신호를 검색하여 급정지
< Z 상 검색을 사용한 경우 >
4단계: +방향으로 이동하면서 Z 상의 Falling Edge신호를 검색하여 급정지
5단계: -방향으로 이동하면서 Z 상의 Rising Edge신호를 검색하여 급정지
6단계: Offset 값이 있다면 Offset 값 만큼 추가 이동
7단계: 사용자 설정 시간 동안 대기 후 위치값을 0으로 설정
- Step별 원점 검출 속도 설정의 이해 (Z 상 검색을 사용 할 경우)
① VelFirst, AccFirst사용
HmDir 방향으로 원점센서를 고속 검출하고 HAccF 감속도로 감속 정지
② VelSecond, AccSecond사용
HmDir 반대 방향으로 원점센서의 Down Edge를 검출하고 HAccF 감속도로 감속 정지
③ VelThird사용
HmDir 방향으로 원점센서의 Up Edge를 검출하고 급정지
④ VelLast 사용
HmDir 반대 방향으로 Z상의 Down Edge를 검출하고 급정지
⑤ VelLast 사용
HmDir 방향으로 Z상의 Up Edge를 검출하고 급정지
- Offset 값 설정의 이해
기구적인 원점 센서 검출이 완료된 후 특정 위치로 옮겨 원점을 설정해야 될 경우 Offset에 값을 지정하면
원점 센서 검출이 완료된 후 자동으로 해당 Offset만큼 이동 완료 후 원점을 재설정하게 된다.
이때 주의할 것은 (+)나 (-)Limit을 벗어나지 않는 범위에서 Offset을 지정해야 된다.
그렇지 않을 경우 원점 검색을 정상적으로 수행할 수 없다.
- 원점 검색 함수와 관련된 파라미터 및 설명
원점 검색 관련 설정 변수 | 변수 설명 |
---|---|
HmSig | 원점 센서로 사용할 신호를 설정 예) 원점 센서(4), +Limi 센서(0) 등 |
HmLev | 원점 센서의 Active Level을 설정 예) 0: A 접점, 1: B 접점 |
HmDir | 원점 센서 검출 시 초기 검색 진행 방향을 설정 예) 1: (+)방향, 0: (-)방향 |
Zphas | 원점 센서 검출 후 엔코더 Z상 검출 여부 설정 예) 1: 사용함, 0: 사용 안함 4번 Step에서 Z상의 Down Edge를 검출하고 5번 Step에서 Z상의 Up Edge를 재 검출함으로써 원점 검색 속도와 정밀도를 높이기 위해 사용 |
VelFirst | 원점 검색 시 초기 고속 검출 속도 (초기 원점 센서가 감지되지 않았을경우) |
VelSecond | 원점 검색 시 1차 센서 검출 후 반대 방향으로 빠져나오는 속도 |
VelThird | 원점 검색 시 1차 센서 검출 후 재검색을 진행하는 속도 |
VelLast | 원점 검색 시 최종 검출 속도 설정 [원점 검색의 정밀도 결정] |
AccFirst | 원점 검색 시 초기 고속 검출 가속도 |
AccSecond | 원점 검색 시 1차 센서 검출 후 반대 방향으로 빠져나오는 가속도 |
HClrTim | 원점 검색 완료 후 Command, Actual(Encoder) 위치를 Clear하기 전 대기 시간 |
HOffset | 원점 검색 완료 후 기구 원점 재설정 시 이동 Offset 값 |
주의 사항
레벨을 잘못 설정 시 -방향으로 설정해도 +방향으로 동작할 수 있으며, 홈을 찾는데 있어 문제가 될 수 있다.
// 원점 검색 방법을 설정하는 함수
long lAxisNo = 0; //원점 검색이 이루어질 축 번호
long nHmDir = 0; //원점 검색 1단계의 이동 방향, (-)방향을 입력
DWORD uHomeSignal = HomeSensor; //신호 검색 구동에서의 신호들을 사용
DWORD uZphas = 1; // Z상 검출 유무, 1이면 검출, 0이면 검출 안 함
double dHomeClrTime = 2000.0; // 원점 검색 Enc 값 Set하기 위한 대기 시간
double dHomeOffset = 0.0; // 원점 검색 후 Offset값 만큼 추가적으로 이동
AxmHomeSetMethod(lAxisNo,nHmDir,uHomeSignal,uZphas,dHomeClrTime,dHomeOffset);
// 원점 검색 시 사용될 속도를 설정
double dVelFirst = 100; //1단계에서의 속도
double dVelSecond = 20; //2단계에서의 속도
double dVelThird = 10; //3단계에서의 속도
double dvelLast = 10; // index검색 및 정밀하게 검색하기 위한 속도 (Offset 값 이동 시 적용)
double dAccFirst = 200; //1단계에서의 가속도
double dAccSecond = 40; //2단계에서의 가속도
AxmHomeSetVel(lAxisNo, dVelFirst, dVelSecond, dVelThird, dvelLast, dAccFirst, dAccSecond);
여기서 원점 검색 속도는 1단계에서는 고속으로 하여도 되나, 2단계와 3단계는 정밀한 작업이 이루어지므로 매우 작은 값으로 하여야 한다.
또한 가속도도 1단계는 적당한 가속도를 선택하면 되지만, 2단계는 상당히 큰 값을 설정하는 것이 바람직하다.
때로는 기구부의 상태에 따라 위에서 제공하는 원점 검색 시퀀스를 사용할 수 없는 경우가 있는데,
그럴 때는 신호 검색 구동 함수를 이용하여 자신의 기구부에 맞는 원점 검색 시퀀스를 작성하여 사용해야 한다.
- 원점 검색 진행률 확인
원점 검색 실행 시 원점 검색 진행률을 확인할 수 있다.
진행률은 AxmHomeGetRate 함수를 이용하여 확인하며, 특정 단계를 넘어가면 값이 증가하고, 0에서 시작하여 100이되면 원점 검색이 종료되었음을 의미한다.
//0축의 홈 검색 진행률을 확인한다.
long lAxisNo = 0;
DWORD uHomeMainStepNumber, uHomeStepNumber;
AxmHomeGetRate(lAxisNo, &uHomeMainStepNumber , &uHomeStepNumber);
printf(“현재 진행률 : %d ”, uHomeStepNumber);
// uHomeMainStepNumber은 겐트리일 경우 마스터,슬레이브가 동작하는지 확인할 때 이용한다.
// 마스터 축 동작일때는 0을 리턴, 슬레이브 동작일 때는 10을 리턴한다.
- 원점 검색 완료 확인
사용자가 원점 검색 함수를 실행하면 라이브러리 내부에서는 새로운 스레드를 만들어 원점 검색을 실행하게 되고, 원점 검색이 끝나면 원점 검색의 결과를 리턴한다.
원점 검색의 결과를 확인하기 위해서는 AxmHomeGetResult 함수를 사용하며 아래와 같이 사용할 수 있다.
//원점 검색의 결과를 반환한다.
long lAxisNo = 0;
DWORD uHomeResult;
AxmHomeGetResult(lAxisNo, &uHomeResult);
정의 | 설명 |
---|---|
HOME_ERR_UNKNOWN | 알 수 없는 축 번호로 원점 검색을 시작하려 할 때 |
HOME_ERR_GNT_RANGE | 겐트리 구동 축의 Master 축과 Slave 축의 원점 검색 결과가 설정한 OffsetRange를 벗어났을 경우 |
HOME_ERR_USER_BREAK | 원점 검색 중 사용자가 정지 명령을 실행했을 경우 |
HOME_ERR_VELOCITY | 원점 검색 속도 설정이 되어있지 않을 경우 |
HOME_ERR_AMP_FAULT | 원점 검색 중 서보팩 알람이 발생 할 경우 |
HOME_ERR_NEG_LIMIT | (+)방향으로 원점 센서 검출 중 (-)리미트 센서가 감지될 경우 |
HOME_ERR_POS_LIMIT | (-)방향으로 원점 센서 검출 중 (+)리미트 센서가 감지될 경우 |
HOME_ERR_NOT_DETECT | 원점 센서가 감지되지 않을 경우 |
HOME_SEARCHING | 현재 원점 검색이 진행 중일 경우 |
HOME_SUCCESS | 원점 검색이 성공적으로 종료 됐을 경우 |
5. 모션 구동 정지
모션 구동의 마무리 단계인 모션의 정지에는 급정지, 감속 정지, 특정 감속도를 통한 정지 방식이 있다.
급정지를 구현할 때에는 AxmMoveEStop, 감속 정지를 구현할 때에는 AxmMoveSStop, 특정 감속도를 통한 정지를 할 때는 AxmMoveStop 함수를 각각 사용하여 모션을 정지시킨다.
특히 AxmMoveStop 은 감속도를 설정하도록 되어 있는데, 이 함수가 호출되면 기존의 입력된 감속도는 무효가 되고 새로 입력되는 감속도로 감속 정지하게 된다.
이 감속도를 0으로 하면 AxmMoveEStop, 원래의 감속도로 설정하면 AxmMoveSStop 과 같은 기능이 된다.
// 0축에서 모션 구동을 급정지한다.
long lAxisNo = 0;
AxmMoveEStop(lAxisNo);
// 0축에서 모션 구동을 감속 정지한다.
long lAxisNo = 0;
AxmMoveSStop(lAxisNo);
// 0축에서 모션 구동을 100의 감속도로 정지한다.
long lAxisNo = 0;
double dMaxDecel = 100;
AxmMoveStop(lAxisNo, dMaxDecel);
// Ex8_AXM_HomeSearchDrive.cpp : Defines the entry point for the console application.
//원점 검색 함수를 이용하여 원점 검색을 한다.
#include "stdafx.h"
#include "AXL.h"
#include <conio.h>
#include "stdio.h"
#define AXIS_0 0
void main(void)
{
// 라이브러리를초기화한다.
// 7은 IRQ를뜻한다. PCI에서 자동으로 IRQ가 설정된다.
DWORD Code = AxlOpen(7);
if (Code == AXT_RT_SUCCESS)
{
printf("라이브러리가 초기화되었다.\n");
//모션 모듈이 있는지 검사
DWORD uStatus;
Code = AxmInfoIsMotionModule(&uStatus);
if(Code == AXT_RT_SUCCESS)
{
if(uStatus == STATUS_EXIST)
{
printf("모션모듈이존재한다.\n");
// 0축의 +End limit과 -End limit의 Active level을 HIGH로 설정한다.
AxmSignalSetLimit(AXIS_0, 0, HIGH, HIGH);
// 0축의 Inpositon 신호 입력 레벨을 HIGH로 설정한다.
AxmSignalSetInpos(AXIS_0, HIGH);
// 0축의 알람 신호 입력 레벨을 LOW로 설정한다.
AxmSignalSetServoAlarm(AXIS_0, LOW);
// 0축의 비상 정지 신호(ESTOP)의 Active 입력 레벨을 HIGH로 설정한다.
AxmSignalSetStop(AXIS_0, 0, HIGH);
//0축 지령 값을 mm단위가 되도록한다.
AxmMotSetMoveUnitPerPulse(AXIS_0, 10, 10000);
//0축에 초기 속도를 1로 설정한다. Default : 1
AxmMotSetMinVel(AXIS_0, 1);
//0축의 펄스 출력 방식을 TwoCwCcwHigh로 한다.
AxmMotSetPulseOutMethod(AXIS_0, TwoCcwCwHigh);
//지정 축에 Encoder 입력 방식을 4체배로 설정한다.
AxmMotSetEncInputMethod(AXIS_0, ObverseSqr4Mode);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
// 원점 검색 방법을 설정
long lAxisNo = 0; //원점 검색이 이루어질 축 번호
long nHmDir = 0; //원점 검색 1단계의 이동 방향, (-)방향을 입력
DWORD uHomeSignal = HomeSensor; //신호 검색 구동에서의 신호들을 사용
DWORD uZphas = 1; //Z상 검출 유무, 1이면 검출하고, 0이면 안 함
double dHomeClrTime = 2000.0; //원점 검색 Enc 값 Set하기 위한 대기 시간
double dHomeOffset = 0.0; //원점 검색 후 Offset 값만큼 추가적으로 이동
AxmHomeSetMethod(AXIS_0,nHmDir,uHomeSignal,uZphas,dHomeClrTime,dHomeOffset);
// 원점 검색시 사용될 속도를 설정
double dVelFirst = 100; //1단계에서의 속도
double dVelSecond = 20; //2단계에서의 속도
double dVelThird = 10; //3단계에서의 속도
double dvelLast = 10; // index검색 및 정밀하게 검색하기 위한 속도
double dAccFirst = 200; //1단계에서의 가속도
double dAccSecond = 40; //2단계에서의 가속도
AxmHomeSetVel(AXIS_0, dVelFirst, dVelSecond, dVelThird, dvelLast, dAccFirst,dAccSecond);
// help Message
printf("[INFORMATION]*************** \n");
printf("[ESC] : Exit \n");
printf("[1] : 원점 검색 시작\n");
printf("[2] : 원점 검색 종료\n");
printf("**************************** \n");
DWORD uHomeResult;
DWORD uHomeMainStepNumber , uHomeStepNumber;
BOOL fExit = FALSE;
while (!fExit) // 무한 루프
{
if (kbhit()) // 아무 키나 누르면
{
int ch = getch();
switch (ch)
{
case 27: // Esc key
fExit = TRUE;
AxmSignalServoOn(AXIS_0, DISABLE); //Servo Off
break;
case '1':// 0축에 원점 검색 중이 아니라면, 원점 검색을 시작한다.
AxmHomeGetResult(AXIS_0, &uHomeResult);
if(uHomeResult) //원점 검색 진행 중 : 0, 원점 검색 완료 : 1
{
AxmHomeSetStart(AXIS_0);
printf("\n원점 검색을 시작한다.\n");
}
break;
case '2': //0축에 원점 검색 진행 중이라면, 원점 검색을 종료시킨다.
AxmHomeGetResult(AXIS_0, &uHomeResult);
if(uHomeResult == HOME_SEARCHING)//원점 검색 진행 중 : 0
{
AxmMoveSStop(AXIS_0);
printf("\n원점 검색을 종료한다.\n");
}
break;
}
}
//현재 원점 검색 진행률을 확인
AxmHomeGetRate(AXIS_0, &uHomeMainStepNumber,&uHomeStepNumber);
printf("\r 원점 검색 진행률 : %d ", uHomeStepNumber);
} //End of While()
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( NOT STATUS_EXIST ) code 0x%x\n",Code);
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( Return FALSE ) code 0x%x\n",Code);
}
else
printf ("AxlOpen() : ERROR code 0x%x\n",Code);
// 라이브러리를 종료한다.
if (AxlClose())
printf("\n라이브러리가 종료되었다.\n");
else
printf("\n라이브러리가 정상적으로 종료되지 않았다.\n");
}
6. 모션 구동 상태 확인
모션 구동을 하면 모션 제어기로부터 위치 정보가 모터 드라이브로 전달되며, 기구부가 지령된 거리 만큼 움직인다.
이러한 모션 구동에서 현재의 위치나 속도, 구동 상태, 정지 원인 등의 정보를 확인하는 것을 구동 및 정지 상태 모니터링이라한다.
현재 위치 및 지령 위치 확인
모션 제어기에서 현재 얼마만큼의 이동을 명령하고 있는지, 모터의 엔코더에서 피드백 된 실제 기구부의
이동거리는 얼마인지 등을 확인할 수 있다. 특정 축의 Actual 위치를 확인할 때에는 AxmStatusGetActPos 함수를 사용하고 사용 예는 아래와 같다.
//0축의 현재 위치를 확인한다.
long lAxisNo = 0;
double dPosition;
AxmStatusGetActPos(lAxisNo, &dPosition);
printf(“0축의 실제 위치 : %f”, dPosition);
Command 위치를 확인할 때에는 AxmStatusGetCmdPos 함수를 사용하고 예는 아래와 같다
//0축의 지령 위치를 확인한다.
long lAxisNo = 0;
double dPosition;
AxmStatusGetCmdPos(lAxisNo, &dPosition);
printf(“0축의지령위치 : %f”, dPosition);
Command 위치와 Actual 위치의 차이 값을 확인할 때에는 AxmStatusReadPosError 함수를 사용하고 예는 아래와 같다.
//0축의 지령 위치와 실제 위치의 차이를 확인한다.
long lAxisNo = 0;
double dError;
AxmStatusReadPosError(lAxisNo, &dError);
printf(“0축의 지령 위치와 실제 위치의 차 : %f”, dError);
현재 속도 확인
속도 확인은 기구부의 현재 구동 속도를 얻어오는 것을 뜻한다. 현재 구동 속도를 확인할 때에는 AxmStatusReadVel 함수를 사용하고 예는 아래와 같이 한다.
//0축의 현재 속도를 확인한다.
long lAxisNo = 0;
double dVelocity;
AxmStatusReadVel(lAxisNo, &dVelocity);
printf(“0축의 현재 속도 : %f”, dVelocity);
모션 구동 여부 확인
지정 축의 펄스 출력 상태를 확인하는 것으로, 간단히 말하자면 기구부가 움직이고 있는지 구동이 끝났는지
를 확인하는 것을 뜻한다. 특정 축이 움직이고 있는지를 확인할 때에는 AxmStatusReadInMotion 함수를 사용 한다.
//0축이 구동을 하고 있는지를 확인한다.
long lAxisNo = 0;
DWORD uStatus;
AxmStatusReadInMotion(lAxisNo, &uStatus);
구동 상태 정보 확인
지정 축의 DriveStatus 레지스터를 확인함으로써 특정 축의 구동 상태를 읽어올 수 있다.
특정 축의 구동상태를 확인하기 위해서는 AxmStatusReadMotion 함수를 사용한다.
//0축의 구동 상태를 읽어온다.
long lAxisNo = 0;
DWORD uStatus;
AxmStatusReadMotion(lAxisNo, &uStatus);
AxmStatusReadMotion 함수는 여기서 언급하는 정보 외에도 각각 보다 세부적인 정보를 추가적으로 확인할 수 있으므로 해당 칩의 매뉴얼을 참조하기 바란다. 특히, 많이 사용하는 값은 다음과 같다.
- 주로 사용되는 Drive Status
정의 | 설명 |
---|---|
QIDRIVE_STATUS_0 | BUSY (DRIVE 중) |
QIDRIVE_STATUS_1 | DOWN (감속 DRIVE 중) |
QIDRIVE_STATUS_2 | CONST (정속 DRIVE 중) |
QIDRIVE_STATUS_3 | Up (가속 DRIVE 중) |
QIDRIVE_STATUS_4 | 연속 드라이브 구동 중 |
QIDRIVE_STATUS_5 | 지정 거리 드라이브 구동 중 |
QIDRIVE_STATUS_6 | MPG 드라이브 구동 중 |
정지 상태 정보 확인
지정 축의 EndStatus 레지스터를 확인함으로써 특정축의 종료상태를 확인할 수 있다.
특정 축의 종료 상태를 확인하기 위해서는 AxmStatusReadStop 함수를 사용한다.
//0축의 종료 상태를 확인한다.
long lAxisNo = 0;
DWORD uStatus;
AxmStatusReadStop(lAxisNo, &uStatus);
AxmStatusReadStop 함수는 라이브러리 매뉴얼에서 살펴볼 수 있듯이 여러 가지의 정지 상태를 반환하므로,
현재 어떤 이유로 정지되었는지를 확인할 수 있는데, 0을 반환했다면, 정상적으로 구동을 종료했다는 의미이고,
0이 아닌 값을 반환한다면 해당하는 종료원인에 의해 종료되었다고 볼 수 있다.
주로 사용하는 값은 다음과 같다.
- 주로 사용되는 End Status
정의 | 설명 |
---|---|
QIEND_STATUS_0 | 정방향 리미트 신호(PELM)에 의한 종료 |
QIEND_STATUS_1 | 역방향 리미트 신호(NELM)에 의한 종료 |
QIEND_STATUS_4 | 정방향 소프트 리미트 급정지 기능에 의한 구동 종료 |
QIEND_STATUS_5 | 역방향 소프트 리미트 급정지 기능에 의한 구동 종료 |
QIEND_STATUS_6 | 정방향 소프트 리미트 감속 정지 기능에 의한 구동 종료 |
QIEND_STATUS_7 | 역방향 소프트 리미트 감속 정지 기능에 의한 구동 종료 |
QIEND_STATUS_8 | 서보 알람 기능에 의한 구동 종료 |
QIEND_STATUS_9 | 비상 정지 신호 입력에 의한 구동 종료 |
QIEND_STATUS_10 | 급정지 명령에 의한 구동 종료 |
QIEND_STATUS_11 | 감속 정지 명령에 의한 구동 종료 |
서보 Alarm Code 및 서보 Alarm History 확인
네트워크 타입 서보 드라이브(PCI-R1604를 사용하는 A4N 서보, PCI-R1604-MLII 를 사용하는 SGDV 서보)는 세부적인 알람 내용 및 알람 내역을 읽어볼 수 있다.
알람 코드에 대한 정의 파일이 제공되며, 지정한 축의 알람 코드를 읽어 알람 코드의 내용을 사용자 프로그램에서 사용할 수 있다.
현재 발생한 알람 코드를 확인하기 위해서는 먼저 알람 코드에 대한 요청(AxmStatusRequestServoAlarm)을 하여야 한다.
이후 알람 코드 요청 결과는 AxmStatusReadServoAlarm로 받아 볼 수 있으며, 알람 코드의 해석에는 AxmStatusGetServoAlarmString 를 사용한다.
또한 알람 내역을 확인하기 위해서는 알람 내역 요청(AxmStatusRequestServoAlarmHistory)을 하고, 이후 알람 내역을 AxmStatusReadServoAlarmHistory 로 받아 본다.
알람 내역의 해석은 AxmStatusGetServoAlarmString 를 사용한다.
현재 서보 드라이버에 저장된 알람 내역을 지우기 위해서는 AxmStatusClearServoAlarmHistory 를 사용한다.
// 0축의 알람 코드를 확인한다.(Imidiate : 0, Blocking : 1, Non Blocking :2 );
long lAxisNo = 0;
DWORD uAlarmCode;
DWORD uReturn;
char strAlarm[1025] = "";
AxmStatusRequestServoAlarm(lAxisNo);
if(uReturn == AXT_RT_SUCCESS)
{
uReturn = AxmStatusRequestServoAlarm(lAxisNo, 1, &uAlarmCode);
if (uReturn == AXT_RT_SUCCESS)
{
AxmStatusGetServoAlarmString(lAxisNo, uAlarmCode, 1024, strAlarm);
printf("알람코드[0x%X] : %s\n", uAlarmCode, strAlarm);
}
}
// Ex9_AXM_MotionStatus1.cpp : Defines the entry point for the console application.
// 상대 위치 구동 함수를 이용하여 200만큼 (+)방향으로 이동하면서 이동 거리 및 속도를 확인
#include "stdafx.h"
#include "AXL.h"
#include <conio.h>
#include "stdio.h"
#define AXIS_0 0
void main(void)
{
// 라이브러리를 초기화한다.
// 7은 IRQ를 뜻한다. PCI에서 자동으로 IRQ가 설정된다.
DWORD Code = AxlOpen(7);
if (Code == AXT_RT_SUCCESS)
{
printf("라이브러리가 초기화되었습니다.\n");
//모션 모듈이 있는지 검사
DWORD uStatus;
Code = AxmInfoIsMotionModule(&uStatus);
if(Code == AXT_RT_SUCCESS)
{
if(uStatus == STATUS_EXIST)
{
printf("모션 모듈이 존재합니다.\n");
// 0축의 +End limit 과 -End limit 의 Active level 을 HIGH로 설정한다.
AxmSignalSetLimit(AXIS_0, 0, HIGH, HIGH);
// 0축의 Inpositon 신호의 입력 레벨을 HIGH로 설정한다.
AxmSignalSetInpos(AXIS_0, HIGH);
// 0축의 알람 신호의 입력 레벨을 LOW로 설정한다.
AxmSignalSetServoAlarm(AXIS_0, LOW);
// 0축의 비상 정지 신호(ESTOP)의 Active 입력 레벨을 HIGH로 설정한다.
AxmSignalSetStop(AXIS_0, 0, HIGH);
//0축 지령 값을 mm단위가 되도록 한다.
AxmMotSetMoveUnitPerPulse(AXIS_0, 10, 10000);
//0축의 초기 속도를 1로 설정한다. Default : 1
AxmMotSetMinVel(AXIS_0, 1);
//0축의 펄스 출력 방식을 TwoCwCcwHigh로 한다.
AxmMotSetPulseOutMethod(AXIS_0, TwoCcwCwHigh);
//지정 축에 Encoder 입력 방식을 4체배로 설정한다.
AxmMotSetEncInputMethod(AXIS_0, ObverseSqr4Mode);
AxmMotSetAbsRelMode(AXIS_0, 0); //절대 위치 구동
AxmMotSetProfileMode(AXIS_0, 3); //대칭 S자 구동
// 원점 검색 방법을 설정
AxmHomeSetMethod(AXIS_0,-1,HomeSensor,1,2000.0,0.0);
// 원점 검색 시 사용될 속도를 설정
AxmHomeSetVel(AXIS_0, 100, 20, 10, 10, 200, 40);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
//원점을 검색한다.
printf("아무키나누르면원점검색을시작합니다.\n");
getch();
AxmHomeSetStart(AXIS_0);
//현재 원점 검색 진행률을 확인
DWORD uHomeMainStepNumber , uHomeStepNumber;
DWORD uHomeResult;
AxmHomeGetResult(AXIS_0, &uHomeResult);
while(!uHomeResult)
{
AxmHomeGetResult(AXIS_0, &uHomeResult);
AxmHomeGetRate(AXIS_0,&uHomeMainStepNumber , &uHomeStepNumber);
printf("\r 원점 검색 중 . . . %d % ", uHomeStepNumber);
}
printf("\n[INFORMATION]***************************** \n");
printf("AP : Actual Position \n");
printf("CP : Command Position \n");
printf("Error : Actual Position - Command Position \n");
printf("CV : Command Velocity \n");
printf("****************************************** \n");
printf("0축을 S자 속도 프로파일로 (+)방향 200만큼 이동(속도:100, 가속도:200, 시점 탈출)\n");
printf("아무 키나 누르면 구동을 시작합니다.");
getch();
AxmMoveStartPos(AXIS_0, 200, 100, 200, 200);
// 구동되고 있는 동안 구동 상태를 확인한다.
DWORD uStatus;
double dActualPosition, dCommandPosition, dError, dVelocity;
AxmStatusReadInMotion( AXIS_0, &uStatus);
while(uStatus)
{
AxmStatusReadInMotion( AXIS_0, &uStatus);
AxmStatusGetActPos(AXIS_0, & dActualPosition); //0축의 현재 위치를 확인.
AxmStatusGetCmdPos(AXIS_0, & dCommandPosition);
//0축의 지령 위치를 확인.
AxmStatusReadPosError(AXIS_0, & dError);
//0축의 지령 위치와 실제 위치의 차이를 확인.
AxmStatusReadVel(AXIS_0, & dVelocity); //0축의 현재 속도를 확인.
printf("\rAP:%.1f, CP:%.1f, Error:%.1f, CV:%.1f ", dActualPosition, dCommandPosition,
dError, dVelocity );
} //End of While()
printf("\n구동을완료하였습니다.\n");
AxmSignalServoOn(AXIS_0, DISABLE); //Servo Off
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( NOT STATUS_EXIST ) code 0x%x\n",Code)
}
else
printf ("AxmInfoIsMotionModule() : ERROR ( Return FALSE ) code 0x%x\n",Code);
}
else
printf ("AxlOpen() : ERROR code 0x%x\n",Code);
// 라이브러리를 종료한다.
if (AxlClose())
printf("\n라이브러리가 종료되었습니다.\n");
else
printf("\n라이브러리가 정상적으로 종료되지 않았습니다.\n");
}
7. 단축 구동 함수
AxmMovePos
Purpose
지정 축의 설정된 위치까지 설정된 속도와 가속율로 구동을 한다.
모션 구동이 완료된 후에 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMovePos(long lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
C#
uint AxmMovePos(int lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in] dPos | 구동 거리 |
[in] dVel | 속도 |
[in] dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS: 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE: Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING: 홈을 찾고있는 중일 때 또는 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR: 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 하나의 축에 대하여 현재의 위치에서 지정한 거리(절대/상대)만큼 이동을 수행한다.
- AxmMotSetAbsRelMode 함수를 이용하여 절대/상대 모드를 선택하고, AxmMotSetProfileMode 함수를 이용하여 프로파일 모드를 선택한다.
- 지정 축의 설정된 위치까지 설정된 속도와 가속도로 구동을 한다. 펄스 출력이 종료되는 시점에서 함수를 벗어난다.
- 함수 시작 후 구동 종료할 때까지 CPU 의 process 를 점유하게 되므로 주의해서 사용해야 한다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 없다.
- 절대 위치 모드인 경우에는 설정한 위치값이 이동할 절대 위치값이 되고, 상대 위치 모드인 경우에는 설정한 위치값은 이동할 거리량이 된다. 예를 들어 위치값을 ‘100’으로 입력한 경우, 절대 위치 모드인 경우는 ‘100’의 위치로 이동하여 정지하게 되며, 상대 위치 모드인 경우는 현재 위치에서 ‘100’ 만큼 이동하게 된다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료해도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 모션 구동 종료 플래그가 설정되지 않는다.
(AxmSignalSetInpos 함수 참고) - AxmGantrySetEnable 을 이용해서 마스터, 슬레이브를 사용할 경우 슬레이브 축에 명령을 내렸을 경우에는 명령이 무시된다.
예제 코드
C++
// 0축에 절대 좌표로 2000만큼 100의 속도와 200의 가속율로 사다리꼴 구동, 구동이 종료될 때까지
기다렸다가
// 함수를 빠져나온다.
AxmMovePos (0, 2000, 100, 200, 200);
AxmMoveMultiPos
Purpose
여러 개의 축에 대해서 현재의 위치에서 지정한 거리만큼 이동을 동시에 시작한다.
이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작한다. 이 함수는 여러 축이 동기를 맞추어 작업을 시작해야하는 경우에 사용한다.
펄스 출력이 종료되는 시점에서 함수를 벗어난다. 동시 구동에 사용할 축은 별도의 케이블 연결없이 같은 보드 내의 축들로 구성되어야 하며, 보드 간 축들의 동기 제어는 동기 신호 전용 케이블을 연결해야 한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveMultiPos(long lArraySize, long *lpAxesNo, double *dpPos, double *dpVel, double *dpAccel, double *dpDecel);
C#
uint AxmMoveMultiPos(int lArraySize, int[] lpAxesNo, double[] dpPos, double[] dpVel, double[] dpAccel, double[] dpDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lArraySize | 축 사이즈 |
[in] lpAxesNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) 배열 |
[in] dpPos | 구동 거리 배열 |
[in] dpVel | 속도 배열 |
[in] dpAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
[in] dpDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 다축에 대하여 현재의 위치에서 지정한 거리(절대/상대) 만큼 이동을 수행한다.
- AxmMotSetAbsRelMode 함수를 이용하여 각 축의 절대/상대 좌표계를 선택하고 AxmMotSetProfileMode 함수를 이용하여 각각의 프로파일을 설정한다.
- 지정 축의 설정된 위치까지 설정된 속도와 가속도로 구동을 한다.
- 펄스 출력이 종료되는 시점에서 함수를 벗어난다.
- 함수 시작 후 구동을 종료할 때까지 CPU 의 process 를 점유하게 되므로 주의해서 사용하여야 한다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 없다.
- 절대 위치 모드인 경우에는 설정한 위치값이 이동할 절대 위치값이 되고, 상대 위치 모드인 경우에는 설정한 위치값은 이동할 거리량이 된다.
예를 들어 위치값을 ‘100’으로 입력한 경우, 절대 위치 모드인 경우에는 ‘100’의 위치로 이동하여 정지하게 되며, 상대 위치 모드인 경우에는 현재 위치에서 ‘100’ 만큼 이동하게 된다. - AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다.
(AxmSignalSetInpos 함수 참고)
예제 코드
C++
// 절대 좌표로 2000만큼 100의 속도와 200의 가속율로 사다리꼴 구동, 구동이 시작되면 함수를 빠져 나온다.
long lAxis[2];
double dPos[2], dVel[2], dAccel[2];
for( int i=0; i<2; i++)
{
AxmMotSetProfileMode(i, 3);
AxmMotSetAbsRelMode(i, 1);
lAxis[i] = i;
dPos[i] = 2000;
dVel[i] = 100;
dAccel[i] = 200;
}
AxmMoveMultiPos (2, lAxis, dPos, dVel, dAccel, dAccel);
AxmMoveStartPos
Purpose
지정 축의 설정된 위치까지 설정된 속도와 가속율로 구동을 한다.
펄스 출력이 시작되는 시점에서 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStartPos(long lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
C#
uint AxmMoveStartPos(int lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in] dPos | 구동 거리 |
[in] dVel | 속도 |
[in] dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 또는 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 하나의 축에 대하여 현재의 위치에서 지정한 거리(절대/상대) 만큼 이동을 수행한다.
- AxmMotSetAbsRelMode 함수를 이용하여 절대/상대 모드를 선택하고 AxmMotSetProfileMode 함수를 이용하여 프로파일을 선택한다.
- 절대 위치 모드인 경우에는 설정한 위치값이 이동할 절대 위치값이 되고, 상대 위치 모드인 경우에는 설정한 위치값은 이동할 거리량이 된다.
예를 들어 위치값을 ‘100’으로 입력한 경우, 절대 위치 모드인 경우에는 ‘100’의 위치로 이동하여 정지하게 되며, 상대 위치 모드인 경우는 현재 위치에서 ‘100’만큼 이동하게 된다. - AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다. 이 내용은 AxmSignalSetInpos 함수를 참고하기 바란다.
- AxmGantrySetEnable 을 이용하여 마스터, 슬레이브를 사용할 경우 슬레이브 축에 명령을 내렸을 경우에는 명령이 무시된다.
- 속도의 이해
속도 = 거리의 변화 / 시간의 변화
거리 = 속도 x 시간
속도는 시간의 변화에 대한 거리의 변화 비율이므로, 속도의 단위는 mm/s와 같은 것을 이용한다.
여기서는 mm는 이동거리 밀리미터를 나타내고, s는 시간 초를 나타낸다.
따라서 속도가 2 mm/s라고 하면 시간이 1초 변할 때, 거리는 2mm가 변한다는 의미다.
- 가속도 (가속도의 단위는 Unit/pulse 를 1/1 로 한 경우에 PPS[Pulses/sec])의 이해
가속도가 0이라면 속도의 변화가 없다는 것을 의미한다.
즉 일정한 속도로 움직이게 된다. 가속의 단위는 mm/s2 을 사용한다.
여기서는 mm는 이동거리 밀리미터를 나타내고, s2는 시간의 제곱이다.
가속도 = 속도의 변화 / 시간의 변화
예제 코드
C++
// 0축에 절대 좌표로 2000 만큼 100의 속도와 200의 가속율로 사다리꼴 구동, 구동이 시작되면 함 수를 빠져 나온다.
AxmMoveStartPos(0, 2000, 100, 200, 200);
AxmMoveStartMultiPos
Purpose
여러 개의 축에 대하여 현재의 위치에서 지정한 거리만큼 이동을 동시에 시작한다. 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작한다. 이 함수는 여러 축이 동기를 맞추어 작업을 시작해야하는 경우에 사용한다. 펄스 출력이 시작되는 시점에서 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStartMultiPos(long lArraySize, long *lpAxisNo, double *dpPos, double *dpVel, double *dpAccel, double *dpDecel);
C#
uint AxmMoveStartMultiPos(int lArraySize, int[] lpAxisNo, double[] dpPos, double[] dpVel, double[] dpAccel, double[] dpDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lArraySize | 축 사이즈 |
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) 배열 |
[in] dpPos | 구동 거리 배열 |
[in] dpVel | 속도 배열 |
[in] dpAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
[in] dpDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 하나의 축에 대하여 현재의 위치에서 지정한 거리(절대/상대) 만큼 이동을 수행한다.
- AxmMotSetAbsRelMode 함수를 이용하여 절대/상대 모드를 선택하고 AxmMotSetProfileMode 함수를 이용하여 프로파일을 설정한다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- 절대 위치 모드인 경우에는 설정한 위치값이 이동할 절대 위치값이 되고, 상대 위치 모드인 경우는 설정한 위치값은 이동할 거리량이 된다.
예를 들어, 위치값을 ‘100’으로 입력한 경우 절대 위치 모드인 경우에는 ‘100’의 위치로 이동하여 정지하게 되며, 상대 위치 모드인 경우에는 현재 위치에서 ‘100’ 만큼 이동하게 된다. - 다축 동시 제어는 여러 개의 축을 완전한 동기를 맞추어 동시에 제어하는 기능을 말한다.
- 만일 속도 프로파일을 동일하게 설정하였다면 여러 개의 제어 대상 축이 시작 및 종료 시점은 물론이고 가속/감속 구간까지 완전히 동기를 맞추어 제어될 수 있다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다.
(AxmSignalSetInpos 함수 참고)
예제 코드
C++
// 절대 좌표로 2000만큼 100의 속도와 200의 가속율로 사다리꼴 구동, 구동이 시작되면 함수를 빠져나온다.
long lAxis[2]; double dPos[2], dVel[2], dAccel[2];
for( int i=0; i<2; i++)
{
AxmMotSetProfileMode(i, 3);
AxmMotSetAbsRelMode(i, 1);
lAxis[i] = i;
dPos[i] = 2000;
dVel[i] = 100;
dAccel[i] = 200;
}
AxmMoveStartMultiPos (2, lAxis, dPos, dVel, dAccel, dAccel);
AxmMoveStartPosWithList
Purpose
지정 축에 대해서 절대/상대 좌표로 설정된 위치까지 설정된 속도, 가속율로 구동을 한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | |||||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmMoveStartPosWithList(long lAxisNo, double dPosition, double *dpVel, double *dpAccel, double *dpDecel, long lListNum);
C#
uint AxmMoveStartPosWithList(int lAxisNo, double dPosition, double[] dpVel, double[] dpAccel, double[] dpDecel, int lListNum);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in] dPosition | 구동 거리 |
[in] dpVel | 속도 배열 |
[in] dpAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
[in] dpDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) 배열 |
[in] lListNum | 속도, 가속율을 설정할 리스트 개수 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 하나의 축에 대하여 현재의 위치에서 지정한 거리(절대/상대) 만큼 이동을 수행한다.
- 속도 프로파일은 비대칭 사다리꼴로 고정된다.
- 가감속도 설정 단위는 기울기로 고정된다.
- dVel[1] == dVel[3]을 반드시 만족해야 하며, dVel[2]로 정속 구동 구간이 발생 할 수 있도록 dPosition 이 충분히 큰 값이어야 정상적으로 구동이 가능하다.
예를 들어, dPosition 이 10000 일 때
dVel[0] = 300, dAccel[0] = 200, dDecel[0] = 0; <== 가속
dVel[1] = 500, dAccel[1] = 100, dDecel[1] = 0; <== 가속
dVel[2] = 700, dAccel[2] = 200, dDecel[2] = 250; <== 가속, 등속, 감속
dVel[3] = 500, dAccel[3] = 0, dDecel[3] = 150; <== 감속
dVel[4] = 200, dAccel[4] = 0, dDecel[4] = 350; <== 감속
즉
dAccel != 0.0 이고 dDecel == 0.0 일 경우, 이전 속도에서 감속없이 지정 속도까지 가속.
dAccel != 0.0 이고 dDecel != 0.0 일 경우, 이전 속도에서 지정 속도까지 가속 후 등속 이후 감속.
dAccel == 0.0 이고 dDecel != 0.0 일 경우, 이전 속도에서 다음 속도까지 감속 이며 펄스가 종료되는 시점에서 함수를 벗어난다.
예제 코드
C++
// 절대 좌표로 10000만큼 100의 속도와 200의 가감속율, 200의 속도와 300의 가감속율로 구동
long lAxis = 0, lListNum = 2;
double dPos = 10000, dVel[2], dAccel[2], dDecel[2];
dVel[0] = 100;
dVel[1] = 200;
dAccel[0] = 200;
dAccel[1] = 300;
dDecel[0] = 200;
dDecel[1] = 300;
AxmMoveStartPosWithList (lAxis, dPos, dVel, dAccel, dDecel, lListNum);
AxmMoveStartPosWithPosEvent
Purpose
설정한 거리만큼 또는 위치까지 대상 축의 위치가 증감할 때 이벤트가 발생한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | ||||||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStartPosWithPosEvent(long lAxisNo, double dPos, double dVel, double dAccel, double dDecel, long lEventAxisNo, double dComparePosition, DWORD uPositionSource)
C#
uint AxmMoveStartPosWithPosEvent(int lAxisNo, double dPos, double dVel, double dAccel, double dDecel, int lEventAxisNo, double dComparePosition, uint uPositionSource);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in] dPos | 구동 거리 |
[in] dVel | 속도 (+방향: 0 이상값 , -방향: 0 이하값) |
[in] dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] lEventAxisNo | 시작 조건 발생 축 |
[in] dComparePosition | 시작 조건 발생 축의 조건 발생 위치 |
[in] uPositionSource | 시작 조건 발생 축의 조건 발생 위치 기준 선택 [0] COMMAND [1] ACTUAL |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
설정한 거리만큼 또는 위치까지 대상 축의 위치가 증감할 때 이동을 시작한다.
예약 후 취소는 AxmMoveStop, AxmMoveEStop, AxmMoveSStop 을 이용하며 이동 축과 시작 조건 발생 축은 4 축 단위 하나의 그룹(2V04 의 경우 같은 모듈)에 존재 하여야 한다.
예제 코드
C++
// 0축을 10000까지 100의 속도로 200의 가감속율로 구동한다. 0축의 Command 지령이 5000에 위치 했을 때 이벤트가 발생한다.
long lAxis = 0;
double dPos = 10000, dVel = 100, dAccel = 200, dDecel = 200;
long lEventAxisNo = 0;
double dComparePosition = 5000;
DWORD uPositionSource = 0;
AxmMoveStartPosWithPosEvent(lAxis, dPos, dVel, dAccel, dDecel, lEventAxisNo, dComparePosition, uPositionSource);
AxmMoveVel
Purpose
지정 축에 설정된 속도로 구동하는 속도 모드 구동 함수이다.
모션 구동이 시작되는 시점에서 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveVel(long lAxisNo, double dVel, double dAccel, double dDecel);
C#
uint AxmMoveVel(int lAxisNo, double dVel, double dAccel, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in] dVel | 속도(+방향: 0 이상값 , -방향: 0이하값) |
[in] dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
목표 속도까지 가속한 후에 속도를 유지하며, 정지 함수 호출 또는 외부 센서 신호에 의해 정지 시킬 수 있으며, 지정한 방향으로의 모션을 계속 수행한다.
AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
AxmGantrySetEnable 을 이용하여 마스터, 슬레이브를 사용할 경우 또는 슬레이브 축에 명령을 내렸을 경우에는 명령이 무시된다.
예제 코드
C++
// 0축에 절대 좌표로 100의 속도와 200의 가속율로 속도 구동을 한다.
AxmMoveVel(0, 100, 200, 200);
AxmMoveStartMultiVel
Purpose
지정된 다축에 설정된 속도로 구동하는 속도 모드 구동 함수이다.
모션 구동이 시작되는 시점에서 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStartMultiVel(long lArraySize, long *lpAxisNo, double *dpVel, double *dpAccel, double *dpDecel);
C#
uint AxmMoveStartMultiVel(int lArraySize, int[] lpAxesNo, double[] dpVel, double[] dpAccel, double[] dpDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lArraySize | 축 사이즈 |
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) 배열 |
[in] dpVel | 속도(+방향: 0 이상값 , -방향: 0이하값) 배열 |
[in] dpAccel | 가속도 배열 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dpDecel | 감속도 배열 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 다축 동시 제어는 여러 개의 축을 완전한 동기를 맞추어 동시에 제어하는 기능을 말한다.
- 만일 속도 프로파일을 동일하게 설정하였다면 여러 개의 제어 대상 축이 시작 및 종료 시점은 물론이고, 가속/감속 구간까지 완전히 동기를 맞추어 제어될 수 있다.
- 여러 개의 축에 대하여 Velocity Move 작업을 동시에 시작한다.
- Velocity Move 는 작업 속도까지 가속한 후에 작업 속도를 유지하며 정지 함수가 호출될 때까지 또는 외부 센서에 의해 정지할 수 있으며, 지정한 방향으로 모션을 계속 수행한다.
- 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작하고 여러 축이 동기를 맞추어 작업을 시작해야 하는 경우 유용하게 사용될 수 있다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
예제 코드
C++
// 0축, 1축을 S커브 프로파일로 100의 속도와 200의 가속율로 속도 구동을 한다.
long lAxis[2];
double dPos[2],dVel[2];
double dAccel[2],dDecel[2];
for( int i=0; i<2; i++)
{
AxmMotSetProfileMode(i, 4);
AxmMotSetAbsRelMode(i, 0);
lAxis[i] = i;
dVel[i] = 100;
dAccel[i] = 200;
dDecel[i] = 200;
}
AxmMoveStartMultiVel(2, lAxis, dVel, dAccel, dDecel);
AxmMoveStartLineVel
Purpose
지정된 다축에 대하여 설정된 속도와 가속율로 지속적으로 속도 모드 구동을 한다.
펄스 출력이 시작되는 시점에서 함수를 벗어나며, Master 축은(Distance 가 가장 큰) dVel 속도로 움직이며, 나머지 축들은 Distance 비율로 움직인다. 속도는 해당 Chip 중 축 번호가 가장 낮은 축의 속도만 읽힌다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | |||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStartLineVel(long lArraySize, long *lpAxisNo, double *dpDis, double dVel, double dAccel, double dDecel);
C#
uint AxmMoveStartLineVel(int lArraySize, int[] lpAxisNo, double[] dpDis, double dVel, double dAccel, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lArraySize | 축 사이즈 |
[in] lpAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) 배열 |
[in] dpDis | 이동거리 배열 |
[in] dVel | 속도 (+방향: 0 이상값 , -방향: 0 이하값) |
[in] dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in] dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 다축 동시 제어는 여러 개의 축을 완전한 동기를 맞추어 동시에 제어하는 기능을 말한다.
- 만일 속도 프로파일을 동일하게 설정하였다면 여러 개의 제어 대상 축이 시작 및 종료 시점은 물론이고, 가속/감속 구간까지 완전히 동기를 맞추어 제어될 수 있다.
- 여러 개의 축에 대하여 Velocity Move 작업을 동시에 시작한다.
- Velocity Move 는 작업 속도까지 가속한 후에 작업 속도를 유지하며, 정지 함수가 호출될 때까지 또는 외부 센서에 의해 정지할 수 있으며, 지정한 방향으로 모션을 계속 수행한다.
예제 코드
C++
// 0축, 1축을 S커브 프로파일로 3000의 거리를 100의 속도와 200의 가속율로 속도 구동을 한다.
long lpAxis[2];
double dpDis[2],dPos[2],dVel[2];
doubledAccel[2],dDecel[2];
for( int i=0; i<2; i++)
{
AxmMotSetProfileMode(i, 4);
AxmMotSetAbsRelMode(i, 0);
lpAxis[i] = i;
dpDis[i] = 3000;
dVel[i] = 100;
dAccel[i] = 200;
dDecel[i] = 200;
}
AxmMoveStartLineVel (2, lpAxis, dpDis ,dVel, dAccel, dDecel);
AxmMoveToAbsPos
Purpose
지정 축의 설정한 절대 위치로 사다리꼴 속도 프로파일을 이용하여 이동한다.
펄스가 출력되는 시점에서 함수를 벗어난다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | ||||||||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | |||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmMoveToAbsPos(long lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
C#
uint AxmMoveToAbsPos(int lAxisNo, double dPos, double dVel, double dAccel, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dPos | 구동 거리 |
[in]dVel | 속도 |
[in]dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in]dDecel | 감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 또는 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
하나의 축에 대하여 현재의 위치에서(구동 중) 지정한 거리(절대) 만큼 이동한다. 항상 위치 및 속도, 가감속도를 변경 가능하며, 반대 방향 위치 변경 기능을 포함한다. 속도 프로파일은 사다리꼴 전용으로 펄스가 출력되는 시점에서 함수를 벗어난다.
예제 코드
// 구동 중 0축에 절대 좌표로 200만큼 100의 속도와 200의 가속율로 사다리꼴 구동,
// 구동과 동시에 함수를 빠져나온다.
AxmMoveToAbsPos (0, 200, 100, 200, 200);
AxmMoveSignalSearch
Purpose
지정 축에 설정된 신호를 검출한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | |||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveSignalSearch(long lAxisNo, double dVel, double dAccel, long lDetectSignal, long lSignalEdge, long lSignalMethod);
C#
uint AxmMoveSignalSearch(int lAxisNo, double dVel, double dAccel, int lDetectSignal, int lSignalEdge, int lSignalMethod);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dVel | 속도(+방향: 0 이상값 , -방향: 0 이하값) |
[in]dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in]lDetectSignal | 검출 신호 설정: AXT_MOTION_HOME_DETECT_SIGNAL_DEF - [00h]+Elm(End limit) +방향 리미트 센서 신호 - [01h]-Elm(End limit) -방향 리미트 센서 신호 - [02h]Reserved - [03h]Reserved - [04h]IN0(ORG) 원점 센서 신호 - [05h]IN1(Z상) Encoder Z상 신호 - [06h]IN2(범용) 범용 입력 2번 신호 - [07h]IN3(범용) 범용 입력 3번 신호 |
[in]lSignalEdge | 검출 신호의 Edge 방향 설정: AXT_MOTION_EDGE_DEF - [00h]다운 에지 - [01h]업 에지 |
[in]lSignalMethod | 정지 모드: AXT_MOTION_STOPMODE_DEF - [00h]급정지 - [01h]감속 정지 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 지정 축에 설정된 신호를 검출한다. 리미트 센서 신호나 원점 센서 신호, 서보 드라이버의 Z 상 신호 또는 범용 입력 신호들의 Edge 를 검출할 수 있다.
- 주로 원점 검색 구동 함수 구현 시 사용하는 함수이다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다. (AxmSignalSetInpos 함수 참고)
주의 사항
- lDetectSignal 이 PosEndLimit, NegEndLimit(0,1) 을 찾을 경우, 신호의 Active Level 상태를 검출한다.
- SignalMethod 를 EMERGENCY_STOP(0)로 사용할 경우 가감속이 무시되며 지정된 속도로 가속 급정지하게 된다.
예제 코드
// 0축의 Z상 신호를 만나면 감속 정지하면서 Falling Edge 검출
AxmMoveSignalSearch (0, 100, 200, 5, 0, 0);
AxmMoveSignalCapture
Purpose
지정 축으로 구동 중 설정된 신호를 검출하고 그때의 위치를 자동 저장하기 위한 구동 함수이다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | ||||||||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | |||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveSignalCapture(long lAxisNo, double dVel, double dAccel,
long lDetectSignal, long lSignalEdge, long lTarget, long
lSignalMethod);
C#
uint AxmMoveSignalCapture(int lAxisNo, double dVel, double dAccel,
int lDetectSignal, int lSignalEdge, int lTarget, int lSignalMethod);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dVel | 속도(+방향: 0 이상 값 , -방향: 0 이하 값) |
[in]dAccel | 가속도 (가속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec^2]) |
[in]lDetectSignal | 검출 신호 설정: AXT_MOTION_HOME_DETECT_SIGNAL_DEF - [00h] +Elm(End limit) +방향 리미트 센서 신호 - [01h] -Elm(End limit) -방향 리미트 센서 신호 - [02h] Reserved - [03h] Reserved - [04h] IN0(ORG) 원점 센서 신호 - [05h] IN1(Z상) Encoder Z상 신호 - [06h] IN2(범용) 범용 입력 2번 신호 - [07h] IN3(범용) 범용 입력 3번 신호 |
[in]lSignalEdge | 검출 신호의 Edge 방향 설정: AXT_MOTION_EDGE_DEF - [00h] 다운 에지 - [01h] 업 에지 |
[in]lTarget | 검출할 위치 소스 설정: AXT_MOTION_SELECTION_DEF - [00h]목표 위치 (Cmd 위치를 저장함) - [01h]실제 위치 (ACT (1) : Encoder 위치를 저장함) |
[in]lSignalMethod | 정지 모드: AXT_MOTION_STOPMODE_DEF - [00h]급정지 - [01h]감속 정지 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : Gantry Slave 축에 Move 명령이 내려졌을 때
[4201] AXT_RT_MOTION_HOME_SEARCHING : 홈을 찾고있는 중일 때 다른 모션 함수들을 사용할 때
[4255] AXT_RT_MOTION_SETTING_ERROR : 속도, 가속도, 저크, 프로파일 설정이 잘못됨
Description
- 지정 축에서 설정된 신호를 검출하고 그 위치를 저장하기 위해 이동하는 함수이다.
- 리미트 센서 신호나 원점 센서 신호 ,서보 드라이버의 Z 상 신호 또는 범용 입력 신호들의 Edge 를 검출할 수 있다.
- 신호 검출 시 Cmd 위치나 Encoder 위치를 저장할 수 있다.
- 저장된 위치는 ‘AxmMoveGetCapturePos’ 함수를 이용하여 확인할 수 있다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다. (AxmSignalSetInpos 함수 참고)
주의 사항
- lDetectSignal 이 PosEndLimit , NegEndLimit(0,1) 을 찾을 경우 신호의 레벨 Active 상태를 검출하게 된다.
- SignalMethod 를 EMERGENCY_STOP(0)로 사용할 경우 가감속이 무시되며, 지정된 속도로 가속 급정지하게 된다.
예제 코드
// 0축의 Z상 신호 Falling Edge 검출 시 감속 정지하면서 Encoder 위치 저장.
AxmMoveSignalCapture(0, 100, 200, 5, 0, ACTUAL, 0);
AxmMoveGetCapturePos
Purpose
AxmMoveSignalCapture 함수에서 저장된 위치값을 확인하는 함수이다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | ||||||||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveGetCapturePos(long lAxisNo, double *dpCapPos);
C#
uint AxmMoveGetCapturePos(int lAxisNo, ref double dpCapPos);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]dpCapPos | 신호 검출 시 위치값 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4162] AXT_RT_NOT_CAPTURED : 위치가 저장되지 않았을 때
Description
- AxmMoveSignalCapture 구동 함수에서 지정한 신호가 검출되면 H/W 버퍼에 자동저장되고 그 저장된 위치값을 확인하는 함수이다.
- 최초 실행 시 AxmMoveSignalCapture 에 의해 성공적으로 위치값이 저장되어 있다면 AXT_RT_SUCCESS를 리턴하며 유효한 위치값이 반환되지만, 만약 그렇지 않다면 AXT_RT_NOT_CAPTURED를 리턴하므로 함수 실행 결과를 확인하여야 한다.
- AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
- AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다. 이 내용은 AxmSignalSetInpos 함수를 참고하기 바란다.
주의 사항
- 이 함수는 H/W 버퍼에서 위치값을 읽어오며, 한번 읽으면 H/W 버퍼는 초기화 된다.
예제 코드
// Z상 검출 시 위치 확인.
double dPos;
AxmMoveGetCapturePos (0, &dPos);
AxmHomeSetSignalLevel
Purpose
지정 축의 Home 입력 신호의 출력 레벨을 설정한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | |||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | |||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetSignalLevel(long lAxisNo, DWORD uLevel);
C#
uint AxmHomeSetSignalLevel(int lAxisNo, uint uLevel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]uLevel | [01h]Home 신호의 Active Level: AXT_MOTION_LEVEL_MODE_DEF - [00h] B 접점(Normal Close) - [01h] A 접점(Normal Open) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
사용자가 지정한 축의 Home 입력 레벨을 설정한다. 범용 입력 0 을 Home 신호로 사용한다. 현재의 Home 신호 Level 을 읽기 위해서는 AxmHomeReadSignal 함수를 사용하여 확인할 수 있다.
주의 사항
원점 레벨을 잘못 설정할 경우 현재의 홈 상태에 따라 -방향으로 설정해도 +방향으로 동작할 수 있으며, 홈을 찾는데 있어서 문제가 될 수 있다.
Mechatrolink-II Slave 모듈인 SGDV 및 PL2910 은 원점 레벨 변경을 지원하지 않으며, A 접점으로만 동작한다.
예제 코드
// 0 축에 홈 입력 신호 레벨을 설정한다.
AxmHomeSetSignalLevel(0, HIGH);
// 0축의 Home 입력 신호 레벨 값을 확인.
DWORD uState;
AxmHomeGetSignalLevel(0, &uState);
AxmHomeGetSignalLevel
Purpose
지정 축의 Home 신호의 출력 레벨 설정을 반환한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | |||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | |||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetSignalLevel(long lAxisNo, DWORD *upLevel);
C#
uint AxmHomeGetSignalLevel(int lAxisNo, ref uint upLevel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]upLevel | [01h]Home 신호의 Active Level: AXT_MOTION_LEVEL_MODE_DEF - [00h] B 접점(Normal Close) - [01h] A 접점(Normal Open) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
AxmHomeSetSignalLevel로 설정한 Home 입력 레벨을 반환한다.
예제 코드
// 0 축에 홈 입력 신호 레벨을 설정한다.
AxmHomeSetSignalLevel(0, HIGH);
// 0축의 Home 입력 신호 레벨 값을 확인.
DWORD uState;
AxmHomeGetSignalLevel(0, &uState);
AxmHomeReadSignal
Purpose
지정 축의 Home 신호의 입력 상태를 반환한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeReadSignal(long lAxisNo, DWORD *upStatus);
C#
uint AxmHomeReadSignal(int lAxisNo, ref uint upStatus);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]upStatus | 신호의 입력 상태: AXT_MOTION_SIGNAL_LEVEL_DEF - [00h]비활성화 - [01h]활성화 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
현재 Home 신호의 입력 상태를 반환한다.
예제 코드
// 0축에 Home 신호의 입력 확인.
DWORD upStatus;
AxmHomeReadSignal (0, &upStatus);
AxmHomeSetMethod
Purpose
해당 축의 원점 검색을 수행하기 위해서는 반드시 원점 검색 관련 파라미터들이 설정되어 있어야 한다. 만약 AxmMotLoadParaAll 함수를 이용하여 초기화가 정상적으로 수행되었다면 별도의 설정은 필요하지 않다. 원점 검색 방법 설정에는 검색 진행 방향, 원점으로 사용할 신호, 원점 센서 Active Level, 엔코더 Z 상 검출 여부 등이 있다. (자세한 내용은 AxmMotLoadParaAll 설명 부분 참조)
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetMethod(long lAxisNo, long lHmDir, DWORD uHomeSignal,
DWORD uZphas, double dHomeClrTime, double dHomeOffset);
C#
uint AxmHomeSetMethod(int lAxisNo, int lHmDir, uint uHomeSignal, uint
uZphas, double dHomeClrTime, double dHomeOffset);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]lHmDir | [00h]원점 검색을 초기에 진행할 방향 설정: AXT_MOTION_MOVE_DIR_DEF - [00h]반시계 방향 - [01h]시계 방향 |
[in]uHomeSignal | [04h]원점 검색에 사용할 신호 설정: AXT_MOTION_HOME_DETECT_SIGNAL_DEF - [00h]+Elm(End limit) +방향 리미트 센서 신호 - [01h]-Elm(End limit) -방향 리미트 센서 신호 - [04h]IN0(ORG) 원점 센서 신호 |
[in]uZphas | [00h]1차 원점 검색 완료 후 엔코더 Z상 검출 유무 설정 - [00h]Z상 검출 사용하지 않음 - [01h]Z상 검출 +방향 사용 - [02h]Z상 검출 –방향 사용 |
[in]dHomeClrTime | [1000.0]원점 검색 완료 후 지령 위치와 Encoder 위치를 Clear하기 위해 대기하는 시간설정 [mSec단위] |
[in]dHomeOffset | [0.0]원점 검색이 완료된 후 기구 원점으로 이동 후 원점 재설정할 위치 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
Description
해당 축의 원점 검색을 수행하기 위해서는 반드시 원점 검색 관련 파라미터들이 설정되어 있어야 한다. 만약 AxmMotLoadParaAll 설정 파일을 이용하여 초기화가 정상적으로 수행되었다면 별도의 설정은 필요하지 않다. 원점 검색 방법 설정에는 검색 진행 방향, 원점으로 사용할 신호, 엔코더 Z 상 검출 여부 등이 있다. 원점 센서 Active Level 은 AxmHomeSetSignalLevel 함수를 사용하여 별도로 설정한다. (자세한 내용은 AxmMotLoadParaAll 설명 부분 참조)
주의 사항
원점 레벨을 잘못 설정할 경우 현재의 홈 상태에 따라 -방향으로 설정해도 +방향으로 동작할 수 있으며, 홈을 찾는데 있어 문제가 될 수 있다.
예제 코드
long lHmDir = 1; DWORD uHmsig = 4;
DWORD uZphas = 0; double dHClrTim = 2000.0, dHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, uHmsig, uZphas, dHClrTim, dHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
// (-)방향으로 원점 검색, Home Sensor 이용, Home Sensor Type A 접점, Z상 검출 사용 안함, Offset 이동 안 함으로 설정.
AxmHomeGetMethod(0, &lHmDir, &uHmsig, &uZphas, &dHClrTim, & dHOffset);
AxHomeGetMethod
Purpose
해당 축의 원점 검색을 수행하기 위해서는 반드시 원점 검색 관련 파라미터들이 설정되어 있어야 한다. 만약 AxmMotLoadParaAll 설정 파일을 이용하여 초기화가 정상적으로 수행되었다면 별도의 설정은 필요하지 않다. 원점 검색 방법 설정에는 검색 진행 방향, 원점으로 사용할 신호, 엔코더 Z 상 검출 여부 등이 있고, 본 함수를 통해 해당 값을 읽어올 수 있다. (자세한 내용은 AxmMotLoadParaAll 설명 부분 참조)
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetMethod(long lAxisNo, long *lpHmDir, DWORD *upHomeSignal, DWORD *upZphas, double *dpHomeClrTime, double *dpHomeOffset);
C#
uint AxmHomeGetMethod(int lAxisNo, ref int lpHmDir, ref uint upHomeSignal, ref uint upZphas, ref double dpHomeClrTime, ref double dpHomeOffset);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]lpHmDir | [00h]원점 검색을 초기에 진행할 방향 설정: AXT_MOTION_MOVE_DIR_DEF - [00h]반시계 방향 - [01h]시계 방향 |
[out]upHomeSignal | [04h]원점 검색에 사용할 신호 설정: AXT_MOTION_HOME_DETECT_SIGNAL_DEF - [00h]+Elm(End limit) +방향 리미트 센서 신호 - [01h]-Elm(End limit) -방향 리미트 센서 신호 - [04h]IN0(ORG) 원점 센서 신호 |
[out]upZphas | [00h]1차 원점 검색 완료 후 엔코더 Z상 검출 유무 설정 - [00h]Z상 검출 사용하지 않음 - [01h]Z상 검출 +방향 사용 - [02h]Z상 검출 –방향 사용 |
[out]dpHomeClrTime | [1000.0]원점 검색 완료 후 지령 위치와 Encoder위치를 Clear하기 위해 대기하는 시간설정 [mSec단위] |
[out]dpHomeOffset | [0.0]원점 검색이 완료된 후 기구 원점으로 이동 후 원점을 재설정할 위치 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
해당 축의 원점 검색을 수행하기 위해서는 반드시 원점 검색 관련 파라미터들이 설정되어 있어야 한다. 만약 AxmMotLoadParaAll 설정 파일을 이용하여 초기화가 정상적으로 수행되었다면 별도의 설정은 필요하지 않다. 원점 검색 방법 설정에는 검색 진행 방향, 원점으로 사용할 신호 엔코더 Z 상 검출 여부 등이 있고, 본 함수를 통해 해당 값을 읽어 올 수 있다. 원점 센서 Active Level 은 AxmSignalGetHomeLevel 함수를 사용하여 별도로 읽어온다. (자세한 내용은 AxmMotLoadParaAll 설명 부분 참조).
예제 코드
long lHmDir = 1;
DWORD uHmsig = 4;
DWORD uZphas = 0;
double dHClrTim = 2000.0, dHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, uHmsig, uZphas, dHClrTim, dHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
// (-)방향으로 원점 검색, Home Sensor 이용, Home Sensor Type A 접점, Z상 검출 사용 안함, Offset 이동 안 함으로 설정.
AxmHomeGetMethod(0, &lHmDir, &uHmsig, &uZphas, &dHClrTim, &dHOffset);
AxmHomeSetFineAdjust
Purpose
해당 축의 원점 검색 방법 미세조정 파라미터를 설정한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetFineAdjust(long lAxisNo, double dHomeDogLength, long lLevelScanTime, DWORD uFineSearchUse, DWORD uHomeClrUse);
C#
uint AxmHomeSetFineAdjust(int lAxisNo, double dHomeDogLength, uint lLevelScanTime, uint uFineSearchUse, uint uHomeClrUse);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dHomeDogLength | 첫번째 Step에서 HomeDog가 센서를 지나쳤는지 확인하기 위한 Dog 길이를 설정. [단위는 AxmMotSetMoveUnitPerPulse 함수로 설정한 단위] |
[in]lLevelScanTime | 두번째 Step(원점 센서를 빠져나가는 동작)에서 Level 상태를 확인할 Scan 시간 을 설정. [msec단위] |
[in]uFineSearchUse | 기본 원점 검색 시 5Step을 사용하는데 3Step만 사용하도록 설정 - [00h] USE (3 Step 사용) - [01h] UNUSE (5 Step 사용) |
[in]uHomeClrUse | 원점 검색 후 지령 값과 Encoder 값을 0으로 자동 설정하는지 선택 - [00h] USE - [01h] UNUSE |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
Description
해당 축의 원점 검색 방법에 관련된 미세조정 파라미터를 설정한다. 기본 값은 다음과 같으며 설정 하지 않아도 무방하다. HomeDogLenth : 500, SanTime : 100msec, FineSearchUse : USE, HomeClrUse : USE
예제 코드
// Dog 길이 500 pulse, Scan Time 100msec, 3 Step 사용, 지령 값 및 Encoder 값 0으로 자동 설정.
long lLevelScanTime = 100;
DWORD uFineSearchUse = 0, uHomeClrUse = 0;
double dHomeDogLength = 500.0;
AxmHomeSetFineAdjust(0, dHomeDogLength, lLevelScanTime, uFineSearchUse, uHomeClrUse);
AxmHomeGetFineAdjust
Purpose
해당 축에 설정되어 있는 원점 검색 관련 미세조정 파라미터들을 반환한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetFineAdjust(long lAxisNo, double *dpHomeDogLength, long *lpLevelScanTime, DWORD *upFineSearchUse, DWORD *upHomeClrUse);
C#
uint AxmHomeGetFineAdjust(int lAxisNo, ref double dpHomeDogLength, ref uint lpLevelScanTime, ref uint upFineSearchUse, ref uint upHomeClrUse);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]dpHomeDogLength | 첫번째 Step에서 HomeDog가 센서를 지나쳤는지 확인하기 위한 Dog 길이를 설정. [단위는 AxmMotSetMoveUnitPerPulse 함수로 설정한 단위] |
[out]lpLevelScanTime | 두번째 Step(원점 센서를 빠져나가는 동작)에서 Level 상태를 확인할 Scan 시 간을 설정. [msec단위] |
[out]upFineSearchUse | 기본 원점 검색 시 5 Step을 사용하는데 3 Step만 사용하도록 설정 - [00h] USE (3 Step 사용) - [01h] UNUSE (5 Step 사용) |
[out]upHomeClrUse | 원점 검색 후 지령 값과 Encoder 값을 0으로 자동 설정하는지 선택 - [00h] USE - [01h] UNUSE |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
해당 축의 원점 검색 방법에 관련된 미세조정 파라미터 값들을 반환한다.
예제 코드
// 원점 검색 관련 미세조정 파라미터의 값을 읽어온다.
DWORD *upFineSearchUse, *upHomeClrUse;
double *dpHomeDogLength;
long *lpLevelScanTime;
AxmHomeSetFineAdjust(0, dpHomeDogLength,lpLevelScanTime,upFineSearchUse,upHomeClrUse);
AxmHomeSetVel
Purpose
원점을 빠르고 정밀하게 검색하기 위해 여러 단계의 스텝으로 원점을 검색한다. 이때 각 스텝에 사용 될 속도를 설정한다.
이 속도들의 설정 값에 따라 원점 검색 시간과, 원점 검색 정밀도가 결정된다.
각 스텝 별 속도 설정은 장비에 맞게 적절히 바꿔가면서 각 축의 원점 검색 속도를 설정하면 된다.
(자세한 내용은 AxmMotLoadParaAll 함수 설명 부분 참조)
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetVel(long lAxisNo, double dVelFirst, double dVelSecond, double dVelThird, double dVelLast, double dAccFirst, double dAccSecond);
C#
uint AxmHomeSetVel(int lAxisNo, double dVelFirst, double dVelSecond, double dVelThird, double dvelLast, double dAccFirst, double dAccSecond);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dVelFirst | [100.0]원점 센서가 감지되어 있지 않을 때 원점 검색 진행 방향으로 구동할 속도 |
[in]dVelSecond | [100.0]원점 센서가 감지되어 있을 때 원점 검색 진행 반대 방향으로 구동할 속도 |
[in]dVelThird | [20.0]1차 원점 센서 검출 후 재검색할 때 사용될 구동 속도 |
[in]dvelLast | [1.0]마지막 원점 검출 시 사용될 구동 속도(Z상 검출 사용 시 속도, 원점 센서 정밀 검출 속도) |
[in]dAccFirst | [400.0]원점 센서가 감지되어 있지 않을 때 원점 검색 진행 방향으로 구동할 때 사용될 가속/감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec]) |
[in]dAccSecond | [400.0]원점 센서가 감지되어 있을 때 원점 검색 진행 반대 방향으로 구동할 때 사용될 가속/감속도 (감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
[4253] AXT_RT_MOTION_VELOCITY_OUTOFBOUND : 구동 속도값이 0 으로 설정됨
Description
원점을 빠르고 정밀하게 검색하기 위해 여러 단계의 스텝으로 원점을 검색한다. 이때 각 스텝에 사용될 속도를 설정한다.
이 속도들의 설정 값에 따라 원점 검색 시간과, 원점 검색 정밀도가 결정된다.
각 스텝 별 속도들을 적절히 바꿔가면서 각 축의 원점 검색 속도를 설정하면 된다.
(자세한 내용은 AxmMotLoadParaAll 함수 설명 부분 참조)
예제 코드
long lHmDir = 1;
DWORD uHmsig = 4;
DWORD uZphas = 0;
double dHClrTim = 2000.0, dHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, uHmsig, uZphas, dHClrTim, dHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
// (-)방향으로 원점 검색, Home Sensor 이용, Home Sensor Type A 접점, Z상 검출 사용 안 함, Offset 이동 안 함으로 설정.
AxmHomeGetMethod (0, &lHmDir, &uHmsig, &uZphas, &dHClrTim, &dHOffset);
AxmHomeGetVel
Purpose
원점을 빠르고 정밀하게 검색하기 위해 여러 단계의 스텝으로 원점을 검출한다. 이때 각 스텝에 사용될 속도를 반환한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetVel(long lAxisNo, double *dpVelFirst, double *dpVelSecond, double *dpVelThird, double *dpVelLast, double *dpAccFirst, double *dpAccSecond);
C#
uint AxmHomeGetVel(int lAxisNo, ref double dpVelFirst, ref double dpVelSecond, ref double dpVelThird, ref double dpVelLast, ref double dpAccFirst, ref double dpAccSecond);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]dpVelFirst | [100.0]원점 센서가 감지되어 있지 않을 때 원점 검색 진행 방향으로 구동할 속도 |
[out]dpVelSecond | [100.0]원점 센서가 감지되어 있을 때 원점 검색 진행 반대 방향으로 구동할 속도 |
[out]dpVelThird | [20.0]1차 원점 센서 검출 후 재검색할 때 사용될 구동 속도 |
[out]dpVelLast | [1.0]마지막 원점 검출 시 사용될 구동 속도(Z상 검출 사용 시 속도, 원점 센서 정밀 검출 속도) |
[out]dpAccFirst | [400.0]원점 센서가 감지되어 있지 않을 때 원점 검색 진행 방향으로 구동할 때 사용될 가속/감속도(감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec]) |
[out]dpAccSecond | [400.0]원점 센서가 감지되어 있을 때 원점 검색 진행 반대 방향으로 구동할 때 사용될 가속/감속도(감속도의 단위는 Unit/pulse를 1/1로 한 경우에 PPS[Pulses/sec]) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
원점을 빠르고 정밀하게 검색하기 위해 여러 단계의 스텝으로 검출한다. 이때 각 스텝에 사용 될 속도를 설정한다.
이 속도들의 설정 값에 따라 원점 검색 시간과, 원점 검색 정밀도가 결정된다.
각 스텝 별 속도들을 적절히 바꿔가면서 각 축의 원점 검색 속도를 설정하면 된다.
(자세한 내용은 AxmMotLoadParaAll 함수 설명 부분 참조)
참고 사항
필요한 데이터만 가지고 올 경우 필요하지 않는 변수에 NULL 을 넣어 사용 가능하다.
예제 코드
long lHmDir = 1;
DWORD uHmsig = 4;
DWORD uZphas = 0;
double dHClrTim = 2000.0, dHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, uHmsig, uZphas, dHClrTim, dHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
// (-)방향으로 원점 검색, Home Sensor 이용, Home Sensor Type A 접점, Z상 검출 사용 안함, Offset 이동 안 함으로 설정.
AxmHomeGetMethod (0, &lHmDir, &uHmsig, &uZphas, &dHClrTim, &dHOffset);
AxmHomeGetVel(0, & dVelFirst, & dVelSecond, & dVelThird, & dVelLast, &dAccFirst, & dAccSecond);
AxmHomeSetStart
Purpose
원점 검색 시작 함수를 사용하면 라이브러리 내부에서 해당 축의 원점 검색을 순차적으로 수행한 후 자동 종료된다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetStart(long lAxisNo);
C#
uint AxmHomeSetStart(int lAxisNo);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) (0 ~ n-1) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4152]AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
Description
원점 검색 시작 함수를 사용하면 라이브러리 내부에서 해당 축의 원점 검색을 순차적으로 수행한 후 자동 종료된다.
주의 사항
진행 방향과 반대 방향의 리미트 센서가 들어와도 진행 방향의 센서가 ACTIVE 되지 않으면 동작한다. 원점 검색이 시작되어 진행 방향의 리미트 센서가 들어오면 리미트 센서가 감지되었다고 간주되어 다음 단계로 진행된다.
예제 코드
DWORD uHomeResult;
if(AxmHomeSetStart (0) == AXT_RT_SUCCESS) // 원점 검색 시작 함수 실행.
printf(“0축 원점 검색을 시작한다.”);
else{
AxmHomeGetResult(0, & uHomeResult);
printf(“0축 원점 검색을 시작할 수 없습니다. [에러 코드:%d]”, uHomeResult);
}
AxmHomeSetResult
Purpose
원점 검색 함수를 이용하여 원점 검색이 성공적으로 수행되고 나면 검색 결과를 출력한다.
원점 검색 함수를 이용하여 원점 검색이 성공적으로 수행되고 나면 검색 결과가 HOME_SUCCESS로 설정된다.
이 함수는 사용자가 원점 검색을 수행하지 않고 결과를 임의로 설정할 수 있다.
실제 원점 검색 완료 후 예외 상황이 발생하면 원점 검색을 다시 수행해야 한다.(위치가 틀어지게 될 경우).
장비 프로그램에서 원점 검색 결과를 보고 이동을 판단할 경우 이 함수를 이용하여 HOME_SUCCESS 외의 값으로 설정하여 원점 검색을 다시 수행하도록 해야 한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeSetResult(long lAxisNo, DWORD uHomeResult);
C#
uint AxmHomeSetResult(int lAxisNo, uint uHomeResult);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 원점 검색 결과를 임의로 설정할 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]uHomeResult | 원점 검색 결과: AXT_MOTION_HOME_RESULT_DEF - [01h] 원점 검색이 성공적으로 종료됐을 경우 - [02h] 현재 원점 검색이 진행 중일 경우 - [10h] 겐트리 구동 축의 Master축과 Slave축의 원점 검색 결과가 설정한 Offset Range를 벗어났을 경우 - [11h] 원점 검색 중 사용자가 정지 명령을 실행했을 경우 - [12h] 원점 검색 속도 설정 값 중 한 개라도 0보다 작거나 같을 경우 - [13h] 원점 검색 중 서보팩 알람이 발생할 경우 - [14h] (+)방향으로 원점 센서 검출 중 (-)리미트 센서가 감지될 경우 - [15h] (-)방향으로 원점 센서 검출 중 (+)리미트 센서가 감지될 경우 - [16h] 원점 센서가 감지되지 않을 경우 - [FFh] 알 수 없는 채널(축) 번호(0 ~ (최대 축 수 - 1))로 원점 검색을 시작하려 했을 경우 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
Description
원점 검색 함수를 이용하여 성공적으로 원점 검색이 수행되고 나면 검색 결과가 HOME_SUCCESS로 설정된다. 이 함수는 사용자가 원점 검색을 수행하지 않고 결과를 임의로 설정할 수 있다. 실제 원점 검색 완료 후 정상 구동 중 예외 상황이 발생하면 원점 검색 결과를 HOME_ERR_USER_BREAK 등의 값으로 설정을 변경할 수 있다.
예제 코드
if(AxmHomeSetResult (0, HOME_ERR_USER_BREAK) == AXT_RT_SUCCESS)
{
printf(“0축 원점 검색 결과를 사용자 BREAK로 설정하였습니다.”);
}
else
{
printf(“0축 원점 검색 결과 설정을 실패하였습니다.”);
}
BOOL bRun = TRUE;
DWORD uHomeResult;
AxmHomeSetStart (0);
while(bRun)
{
//원점 검색 함수를 이용하여 성공적으로 원점 검색이 수행되고 나면 검색 결과를 출력한다.
AxmHomeGetResult(0, &uHomeResult);
switch(uHomeResult)
{
case HOME_ERR_UNKNOWN:
printf(“알 수 없는 축 번호임”);
bRun=FALSE;
break;
case HOME_ERR_GNT_RANGE:
printf(“Gantry Offset을 벗어났음”);
bRun=FALSE;
break;
case HOME_ERR_USER_BREAK:
printf(“원점 검색을 정지함”);
bRun=FALSE;
break;
case HOME_ERR_VELOCITY:
printf(“속도 설정이 되어있지 않음.”);
bRun=FALSE;
break;
case HOME_ERR_AMP_FAULT:
printf(“서보팩 알람이 발생했음”);
bRun = FALSE;
break;
case HOME_ERR_NEG_LIMIT:
printf(“(-)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_ERR_POS_LIMIT:
printf(“(+)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_SEARCHING:
printf(“현재 원점 검색 진행 중임”);
Sleep(100);
break;
case HOME_SUCCESS:
printf(“원점 검색 성공함”);
bRun = FALSE;
break;
}
}
AxmHomeGetResult
Purpose
원점 검색 함수의 검색 결과를 확인한다. 원점 검색이 시작되면 곧바로 HOME_SEARCHING으로 설정되며 원점 검색에 실패하면 실패 원인이 설정된다. 실패 원인을 제거한 후 다시 원점 검색을 진행하면 된다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetResult(long lAxisNo, DWORD *upHomeResult);
C#
uint AxmHomeGetResult(int lAxisNo, ref uint upHomeResult);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 원점 검색 결과를 임의로 설정 할 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[out]upHomeResult | 원점 검색 결과: AXT_MOTION_HOME_RESULT_DEF - [01h] 원점 검색이 성공적으로 종료됐을 경우 - [02h] 현재 원점 검색이 진행 중일 경우 - [10h] 겐트리 구동 축의 Master축과 Slave축의 원점 검색 결과가 설정한 OffsetRange를 벗어났을 경우 - [11h] 원점 검색 중 사용자가 정지 명령을 실행했을 경우 - [12h] 원점 검색 속도 설정 값 중 한 개라도 0보다 작거나 같을 경우 - [13h] 원점 검색 중 서보팩 알람이 발생할 경우 - [14h] (+)방향으로 원점 센서 검출 중 (-)리미트 센서가 감지될 경우 - [15h] (-)방향으로 원점 센서 검출 중 (+)리미트 센서가 감지될 경우 - [16h] 원점 센서가 감지되지 않을 경우 - [FFh] 알 수 없는 채널(축) 번호(0 ~ (최대 축 수 - 1))로 원점 검색을 시작하려 했을 경우 |
원점 검색 성공 후 다시 원점 검색을 수행하게되면 원점 검색 결과가 초기화되어 재설정된다. 다시 진행 중 정지 명령(AxmMoveSStop)함수를 이용하여 정지하면 HOME_USER_BREAK 로 설정된다.
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
원점 검색 함수의 검색 결과를 확인한다. 원점 검색이 시작되면 HOME_SEARCHING 으로 설정되며 원점 검색에 실패하면 실패 원인이 설정된다. 실패 원인을 제거한 후 다시 원점 검색을 진행하면 된다. 검색 결과 값은 라이브러리가 Close 된 후, 다시 Open 시에도 값이 유지되지만, 서보드라이브가 Off 시 해당 값은 초기화된다.
예제 코드
if(AxmHomeSetResult (0, HOME_ERR_USER_BREAK) == AXT_RT_SUCCESS)
{
printf(“0축 원점 검색 결과를 사용자 BREAK로 설정하였습니다.”);
}else{
printf(“0축 원점 검색 결과 설정을 실패하였습니다.”);
}
BOOL bRun = TRUE;
DWORD uHomeResult;
AxmHomeSetStart (0);
while(bRun)
{
// 원점 검색 결과 확인.
AxmHomeGetResult(0, &uHomeResult);
switch(uHomeResult)
{
case HOME_ERR_UNKNOWN:
printf(“알 수 없는 축 번호임”);
bRun = FALSE;
break;
case HOME_ERR_GNT_RANGE:
printf(“Gantry Offset을 벗어났음”);
bRun = FALSE;
break;
case HOME_ERR_USER_BREAK:
printf(“원점 검색을 정지함”);
bRun = FALSE;
break;
case HOME_ERR_VELOCITY:
printf(“속도 설정이 되어있지 않음.”);
bRun = FALSE;
break;
case HOME_ERR_AMP_FAULT:
printf(“서보팩 알람이 발생했음”);
bRun = FALSE;
break;
case HOME_ERR_NEG_LIMIT:
printf(“(-)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_ERR_POS_LIMIT:
printf(“(+)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_SEARCHING:
printf(“현재 원점 검색 진행 중임”);
Sleep(100);
break;
case HOME_SUCCESS:
printf(“원점 검색 성공함”);
bRun = FALSE;
break;
}
}
AxmHomeGetRate
Purpose
원점 검색 시작되면 진행률을 확인할 수 있다. 원점 검색이 완료되면 성공 여부와 관계없이 100 을 반환하게 된다. 원점 검색 성공 여부는 AxmHomeGetResult 함수를 이용하여 확인할 수 있다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmHomeGetRate(long lAxisNo, DWORD *upHomeMainStepNumber, DWORD *upHomeStepNumber);
C#
uint AxmHomeGetRate(int lAxisNo, ref uint upHomeMainStepNumber, ref uint upHomeStepNumber);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 원점 검색 진행률을 확인할 채널(축) 번호(0부터 시작함) |
[out]upHomeMainStepNumber | Main Step 진행율( 0 – 100) - 겐트리가 FALSE일 경우 upHomeMainStep Number이 0일 때면 선택 한 축만 진행 사항이고, 홈 진행률은 upHomeStepNumber로 알 수 있다. - 겐트리가 TRUE일 경우 upHomeMainStep Number이 0일 때면 마스터 홈이 진행 사항이고, 마스터 홈 진행률은 upHomeStep Number로 알 수 있다. - 겐트리가 TRUE일 경우 upHomeMainStep Number이 10일 때면 슬레이브 홈이 진행 사항이고, 마스터 홈 진행률은 upHomeStepNumber 로 알 수 있다. |
[out]upHomeStepNumber | 원점 검색 진행률을 확인 - [0]라이브러리가 초기화되어 있지 않을 경우, 유효하지 않은 채널(축) 번호(0 ~ (최대 축 수 - 1)) 일 경우 원점 검색이 진행 중이지 않을 경우(단위:%) - [0~99]원점 검색 진행률(단위: %) - [100]원점 검색이 완료됐을 경우(단위:%) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
원점 검색이 시작되면 진행률을 확인할 수 있다. 원점 검색이 완료되면 성공 여부와 관계없이 진행률로 100 을 반환하게 된다. 원점 검색 성공 여부는 AxmHomeGetResult 함수를 이용하여 확인할 수 있다.
예제 코드
BOOL bRun = TRUE;
DWORD uHomeResult, uHomeStepNumber,uHomeMainStepNumber;
AxmHomeSetStart(0);
while(bRun)
{
AxmHomeGetResult(0, &uHomeResult);
switch(uHomeResult)
{
case HOME_ERR_UNKNOWN:
printf(“알 수 없는 축 번호임”);
bRun = FALSE;
break;
case HOME_ERR_GNT_RANGE:
printf(“Gantry Offset을 벗어났음”);
bRun = FALSE;
break;
case HOME_ERR_USER_BREAK:
printf(“원검 검색을 정지함”);
bRun = FALSE;
break;
case HOME_ERR_VELOCITY:
printf(“속도 설정이 되어있지 않음.”);
bRun = FALSE;
break;
case HOME_ERR_AMP_FAULT:
printf(“서보팩 알람이 발생했음”);
bRun = FALSE;
break;
case HOME_ERR_NEG_LIMIT:
printf(“(-)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_ERR_POS_LIMIT:
printf(“(+)리미트 센서가 검출됨”);
bRun = FALSE;
break;
case HOME_SEARCHING:
// 진행률 확인 .
AxmHomeGetRate( 0, &uHomeMainStepNumber , &uHomeStepNumber);
printf(“\t현재 원점 검색 %d% 진행 중”, uHomeStepNumber);
Sleep(100);
break;
case HOME_SUCCESS:
printf(“원점 검색 성공함”);
bRun = FALSE;
break;
}
}
AxmMoveStartTorque
Purpose
지정 축의 설정한 토크 및 속도값으로 모터를 구동한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | ||||||||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | ||||||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmMoveStartTorque(long lAxisNo, double dTorque, double dVel, DWORD uAccFilterSel, DWORD uGainSel, DWORD uSpdLoopSel);
C#
uint AxmMoveStartTorque(int lAxisNo, double dTorque, double dVel, uint uAccFilterSel, uint uGainSel, uint uSpdLoopSel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dTorque | 최대 출력 토크에 대한 %값 |
[in]dVel | 최대 모터 구동 속도에 대한 %값 |
[in]uAccFilterSel | 가속 모드 설정 - [00h] LINEAR_ACCDCEL - [01h] EXPO_ACCELDCEL - [02h] SCURVE_ACCELDECEL |
[in]uSpdLoopSel | 제어 Loop 설정 - [00h] PI_LOOP - [01h] P_LOOP |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
설정한 토크 및 속도값으로 모터를 구동한다. PCI-R1604MLII 전용 함수이며 Sigma 5 전용 함수이다.
구동 방향은 dTorque 값이 양수이면 CW, 음수이면 CCW 로 구동한다.
예제 코드
// 0축을 최대 출력의 50% 토크와 50%의 속도로 CW구동, 구동이 시작되면 함수를 빠져나온다.
Double dTorduq = 50;
Double dVel = 50;
AxmMoveStartTorque(0, dTorduq, dVel, 0, 0, 0);
AxmMoveTorqueStop
Purpose
지정 축의 토크 구동을 정지한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | ||||||||||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | ||||||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmMoveTorqueStop(long lAxisNo, DWORD uMethod);
C#
uint AxmMoveTorqueStop(int lAxisNo, uint uMethod);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]uMethod | 정지 모드 설정 - [00h] 1ST 또는 2ND의 일정한 리니어 감속률에 따른 정지 - [01h] 즉시 정지 - [02h] 정지를 위한 일정한 리니어 감속률에 따른 정지 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
현재 구동 중인 토크 구동을 정지하는 함수. AxmMoveStartTorque 후 반드시 AxmMoveTorqueStop 를 실행하여야 한다.
예제 코드
// 0축 토크 구동 정지.
AxmMoveTorqueStop(0, 0);
AxmMoveStop
Purpose
현재 구동 중인 모션 동작을 사용자가 준 감속율로 정지하는 함수이다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveStop(long lAxisNo, double dDecel);
C#
uint AxmMoveStop(int lAxisNo, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
[in]dDecel | 정지 시 감속율 값 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
현재 구동 중인 모션 동작을 임의의 감속율로 중지하는 함수이다.
예제 코드
// 0축 모션 구동 급정지.
AxmMoveStop(0, 0);
AxmMoveEStop
Purpose
현재 구동 중인 모션 동작을 급정지하는 함수이다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveEStop(long lAxisNo);
C#
uint AxmMoveEStop(int nAxisNo);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
현재 구동 중인 모션 동작을 감속없이 급정지하는 함수이다.
예제 코드
// 0축 모션 구동 급정지.
AxmMoveEStop(0);
AxmMoveSStop
Purpose
현재 구동 중인 모션 동작을 감속 정지하는 함수이다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O | O | O | O | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
O | O | O | O | O | O | O | O | O | O | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | O | O | O | O | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveSStop(long lAxisNo);
C#
uint AxmMoveSStop(int lAxisNo);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
현재 구동 중인 처음에 사용자가 입력한 가속도만큼 모션 동작을 감속하면서 정지하는 함수이다.
예제 코드
// 0축 모션 구동 감속 정지.
AxmMoveSStop(0);
AxmMoveCoordStop
Purpose
Coordinate Motion 을 경로상에서 감속정지(dDecel) 시킨다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | |||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveCoordStop(long lCoordNo, double dDecel);
C#
uint AxmMoveCoordStop(int lCoordNo, double dDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lCoordNo | 좌표계 번호(0~7) |
[in]dDecel | 감속도 |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[4111]AXT_RT_MOTION_INVALID_FILE_LOAD : 모션 설정 값이 저장된 파일의 로드가 안됨
Description
Coordinate Motion 을 경로상에서 감속정지(dDecel)시킨다.
예제 코드
long lAxis[2];
double dPos[2], dDecel = 1000;
long lPosSize = 2;
long lCoordNo = 0;
dPos[0] = 4000;
dPos[1] = 4000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordNo);
AxmContiSetAxisMap(lCoordNo, lPosSize, lAxis);
//상대 위치 구동.
AxmContiSetAbsRelMode(lCoordNo, 1);
// 직선 보간 구동.
AxmLineMove(lCoordNo, dPos, 200, 400, 400);
//0번 좌표계를 감속도 1000으로 정지시킨다.
AxmMoveCoordStop(lCoordNo, dDe
AxmMoveCoordEStop
Purpose
Coordinate Motion 을 경로상에서 급정지시킨다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | |||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveCoordEStop(long lCoordNo);
C#
uint AxmMoveCoordEStop(int lCoordNo);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lCoordNo | 좌표계 번호(0~7) |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[4112] AXT_RT_MOTION_INVALID_FILE_SAVE : 모션 설정값을 저장하는 파일 저장에 실패함
Description
Coordinate Motion 을 경로상에서 급정지시킨다.
예제 코드
long lAxis[2];
double dPos[2], dDecel = 1000;
long lPosSize = 2;
long lCoordNo = 0;
dPos[0] = 4000;
dPos[1] = 4000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordNo);
AxmContiSetAxisMap (lCoordNo, lPosSize, lAxis);
//상대위치 구동.
AxmContiSetAbsRelMode(lCoordNo, 1);
// 직선보간 구동.
AxmLineMove(lCoordNo, dPos, 200, 400, 400);
//0번 좌표계를 급정지시킨다.
AxmMoveCoordEStop(lCoordNo);
AxmMoveCoordSStop
Purpose
Coordinate Motion 을 경로상에서 감속정지 시킨다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
PCI-Rxx04-SIIIH | PCIe-Rxx04-SIIIH | PCIe-Rxx05-MLIII | PCIe-RxxIF-ECAT | ||||||||
MR-J4-B | PM | MR-J4-B | PM | SGDV | SGD7 | PM | Servo | PM | |||
O | O | O | O | O | |||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmMoveCoordSStop(long lCoordNo);
C#
uint AxmMoveCoordSStop(int lCoordNo);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lCoordNo | 좌표계 번호(0~7) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
Description
Coordinate Motion 을 경로상에서 감속정지 시킨다. 감속도는 Motion 을 구동시킨 함수에서 설정한 값을 따른다.
예제 코드
long lAxis[2];
double dPos[2], dDecel = 1000;
long lPosSize = 2;
long lCoordNo = 0;
dPos[0] = 4000;
dPos[1] = 4000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordNo);
AxmContiSetAxisMap(lCoordNo, lPosSize, lAxis);
//상대위치 구동.
AxmContiSetAbsRelMode(lCoordNo, 1);
// 직선보간 구동.
AxmLineMove(lCoordNo, dPos, 200, 400, 400);
//0번 좌표계를 감속정지시킨다.
AxmMoveCoordSStop(lCoordNo);