오버라이드 구동 (Override Move)
개요
위치 오버라이드 구동: 모션을 수행하고 있는 중에 목표 거리를 변경하는 것을 의미한다. 속도 오버라이드 구동: 모션이 진행되는 도중에 작업 속도를 변경하는 것을 의미한다.
위치 오버라이드는 AxmOverridePos 함수 이용, 속도 오버라이드는 AxmOverrideVel 함수를 이용한다.
AxmOverrideVelAtPos 함수는 어느 위치 지점과 오버라이드할 속도를 입력시켜 특정 위치를 지나면 오버라이드 되도록 사용할 수 있다.
예제 코드 1
//0축을 절대 좌표로 100위치까지 대칭 S자 구동 모드로 이동 (속도 100, 가속도 200, 시점 탈출)
long lAxisNo = 0;
AxmMotSetAbsRelMode(lAxisNo, 0);
AxmMotSetProfileMode(lAxisNo, 3);
AxmOverrideSetMaxVel(lAxisNo, 500); // 오버라이드 속도 최고 속도 설정
// 속도를 처음 지정한 속도보다 크게하기 위해서는 반드시 이 함수를 사용한다.
AxmMoveStartPos(lAxisNo, 100, 100, 200, 200);
AxmOverrideVel(lAxisNo, 500); // 속도를 500으로 조정
// 0축의 구동이 종료되기 전 절대 좌표 2000으로 조정
double dOverridePosition = 2000;
AxmOverridePos(lAxisNo, dOverridePosition);
// 0축의 구동이 종료되기 전 속도를 50으로 조정
double dOverrideVelocity = 50;
AxmOverrideVel(lAxisNo, dOverrideVelocity);
예제 코드 2
// 0축을 1000까지 보내는데, 200 위치를 지날 때 속도를 100으로 오버라이드 시킨다.
long lAxisNo = 0;
double dMaxVelocity = 20;
double dMaxAccel = 100;
double dMaxDecel = 100;
double dOverrideVelocity = 100;
double dOverridePosition = 200;
double dPosition = 1000;
long lTarget = 1; // [0] Command Position , [1] Actual Position
AxmOverrideVelAtPos(lAxisNo, dPosition, dMaxVelocity, dMaxAccel, dMaxDecel,dOverridePosition, dOverrideVelocity, lTarget);
예제 코드 3
// Ex15_AXM_OverrideDrive.cpp : Defines the entry point for the console application.
// Override Drive Example
#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);
//상대 위치 S자 속도 프로파일을 사용
AxmMotSetAbsRelMode(AXIS_0, 1);
AxmMotSetProfileMode(AXIS_0, 3);
//Servo On
AxmSignalServoOn(AXIS_0, ENABLE);
// help Message
printf("[INFORMATION]*********************************** \n");
printf("[ESC] : Exit \n");
printf("[1] : 상대 좌표 100 위치를 향해 속도 100으로 구동 시작 \n");
printf("[2] : 위치를 200으로 오버라이드 \n");
printf("[3] : 속도를 50으로 오버라이드 \n");
printf("[4] : -200까지 구동을 시작하고, -100에서 속도를 50으로 오버라이드 \n");
printf("************************************************ \n");
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 위치까지 대칭 S자 구동 모드로 이동
AxmOverrideSetMaxVel(AXIS_0, 500); // 오버라이드 속도 최고 속도 설정
AxmMoveStartPos(AXIS_0, 100, 100, 200, 200);
break;
case '2': // 0축의 구동이 종료되기 전에 좌표 200으로 조정
AxmOverridePos(AXIS_0, 200);
break;
case '3': // 0축의 구동이 종료되기 전에 속도를 50으로 조정
AxmOverrideVel(AXIS_0, 50);
break;
case '4':
//0축이 200까지 구동을 시작하고 100위치가 되면 속도를 50으로 오버라이드한다.
AxmOverrideVelAtPos(AXIS_0,-200,100,200,200,-100,50, COMMAND);
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");
}
오버라이드 구동 함수
AxmOverridePos
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 AxmOverridePos(long lAxisNo, double dOverridePos);
C#
uint AxmOverridePos(int lAxisNo, double dOverridePos);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dOverridePos | 번경 할 이동 거리 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
-
AxmMoveStartPos 와 같은 단축 위치 지정 모션 함수를 이용하여 모션 중일 때 이 함수를 사용하여, 구동 시작 시 설정한 최종 목표 위치를 새로운 위치값으로 변경한다.
-
모션 가속, 등속 중일 때 사용 가능하며, 모션이 감속 중이거나 정지한 후에 지령을 내려도 무시된다. 따라서 사용자가 오버라이드 지령을 내려도 무시되면 이미 모션이 완료된 상태라고 인지하여야 한다.
-
직선, 원호, 스플라인, 헬리컬 보간 작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
주의 사항
-
오버라이드 함수는 반드시 구동 중에 호출되어야 한다. 구동이 끝난 후에 호출되면 무시 된다. 위치 오버라이드의 경우 반대 방향으로 방향 전환은 한번만 가능하다.
-
오버라이드 할 위치값은 현재 구동 방향에 대한 Relative 형태의 이동 거리 값으로 들어가기 때문에 위치는 반드시 Relative 형태의 위치값으로 넣어준다.
-
최초 구동 거리보다 작은 값으로 오버라이드 시 현재 구동 거리가 오버라이드 거리를 이미 지났을 경우 감속 정지 후 오버라이드 위치인 반대 방향으로 구동을 한다. 이때 또 다시 오버라이드를 실행하면 무시된다.
예제 코드
AxmMotSetProfileMode(0, 4); // 비대칭 S Curve.
AxmMotSetAbsRelMode(0, 0);
AxmMoveStartPos(0, 1000, 200, 800, 800);
// 0축 구동 중 위치 2000으로 오버라이드.
AxmOverridePos (0, 2000);
AxmOverrrdeSetMaxVel
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 | ||||||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmOverrideSetMaxVel(long lAxisNo, double dOverrideMaxVel);
C#
uint AxmOverrideSetMaxVel(int lAxisNo, double dOverrideMaxVel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dOverrideMaxVel | 오버라이드 할 최대 속도 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
- 단축 모션이 진행되고 있는 중에 속도를 오버라이드 하고자 할 때 사용한다.
- AxmMoveStartPos 와 같은 단축 모션 함수를 사용하여 구동 중 속도를 변경할 때, 변경될 속도 중 최고 값을 정해주는 기능을 한다.
- 구동 중 속도 변경(낮은 속도->높은 속도)을 할 구동 함수 실행 전에 매번 실행을 해야한다.
주의 사항
속도 오버라이드를 여러 번 한다면 그 중에 최고 속도를 설정해야 한다.
예제 코드
AxmOverrideSetMaxVel(0, 500); // 오버라이드 최대 값 설정.
AxmMotSetProfileMode(0, 4); // 비대칭 S Curve.
AxmMotSetAbsRelMode(0, 0);
AxmMoveStartPos(0, 1000, 200, 800, 800);
// 0축 모션 구동 중 속도값을 500으로 오버라이드.
AxmOverrideVel (0, 500);
AxmOverridePosSetFunction
Purpose
지정 축의 AxmOverridePos 함수에 대한 위치 판단 특수 기능 사용 유무를 설정한다.
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 | |||||||||
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 | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmOverridePosSetFunction(long lAxisNo, DWORD uUsage, long lDecelPosRatio, double dReserved);
C#
uint AxmOverridePosSetFunction(int lAxisNo, uint uUsage, int lDecelPosRatio, double dReserved);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] uUsage | 위치 판단 특수 기능 사용 유무 |
[in] lDecelPosRatio | 감속 거리에 대한 %값 |
[in] dReserved | 사용하지 않음 (예약) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
- 지정 축의 AxmOverridePos 함수에 대한 위치 판단 특수 기능을 설정한다.
- AxmMoveStartPos 로 구동 중 위치 변경 가능 위치를 감속 거리의 DecelPosRatio(%)를 기준으로 Override 사용 유무를 판단한다.
- 즉 DecelPosRatio 를 50%로 하였을 때 DecelPos 가 50%이하 일 때 Override 기능을 실행하면 실행 되지 않는다.
예제 코드
// 0축의 Override 특수 기능을 Enable하고 DecelPosRatio를 30%로 설정한다.
AxmOverridePosSetFunction(0, ENABLE, 30, NULL);
AxmOverridePosGetFunction
Purpose
지정 축의 AxmOverridePos 함수에 대한 위치 판단 특수 기능 사용 유무를 반환한다.
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 | |||||||||
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 | |||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
Format
C++
DWORD AxmOverridePosGetFunction(long lAxisNo, DWORD *upUsage, long *lpDecelPosRatio, double *dpReserved);
C#
uint AxmOverridePosGetFunction(int lAxisNo, ref uint upUsage, ref int lpDecelPosRatio, ref double dpReserved);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[out] upUsage | 위치 판단 특수 기능 사용 유무 반환 값 |
[out] lpDecelPosRatio | 감속 거리에 대한 % 반환 값 |
[out] dpReserved | 사용하지 않음 (예약) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
지정 축의 AxmOverridePos 함수에 대한 위치 판단 특수 기능을 반환한다.
예제 코드
// 0축의 Override 특수 기능을 반환한다.
DWORD uUsage;
double dPosRatio;
AxmOverridePosGetFunction(0,&uUsage, &dPosRatio, NULL);
AxmOverrideVel
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 AxmOverrideVel(long lAxisNo, double dOverrideVelocity);
C#
uint AxmOverrideVel(int lAxisNo, double dOverrideVelocity);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dOverrideVelocity | 변경할 구동 속도[Unit/Sec] |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
단축 모션이 진행되고 있는 중에 속도를 오버라이드 하고자 할 때 사용한다.
먼저 이 함수를 사용하기 위해서 AxmMoveStartPos 와 같은 단축 모션 함수를 이용하여 모션 중일 때 사용하여야 한다.
모션 가속 또는 등속 중일 때 사용 가능하며 감속 중이거나 정지한 후에 지령을 내려도 무시된다.
따라서 사용자가 오버라이드 지령을 내려도 무시되면 이미 모션이 완료되었거나 감속 중이라고 인지하여야 한다.
직선, 원호, 스플라인, 헬리컬 보간 작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
EX> 속도 오버라이드를 두 번 한다면
-
구동 속도와 오버라이드 할 속도 중 높은 속도를 AxmOverrideSetMaxVel 에 설정
-
AxmMoveStartPos 구동 함수를 실행하여 지정 축을 첫 번째 속도로 구동(Move 함수 모두 포함) 시킨다.
-
지정 축이 구동 중(Move 함수 모두 포함)일 때, 속도를 두 번째 속도로 AxmOverrideVel 가변 설정한다.
주의 사항
-
AxmOverrideVel 함수를 사용하기 전에 AxmOverrideSetMaxVel 최고로 설정할 수 있는 속도를 설정해놓는다.
-
가속 구간과 감속 구간에는 오버라이드를 할 수 없으므로 반드시 등속 구간에 오버라이드를 수행한다.
예제 코드
AxmOverrideSetMaxVel(0, 500); // 오버라이드 최대 값 설정.
AxmMotSetProfileMode(0, 4); // 비대칭 S Curve.
AxmMotSetAbsRelMode(0, 0);
AxmMoveStartPos(0, 1000, 200, 800, 800);
// 0축 모션 구동 중 속도값을 500으로 오버라이드.
AxmOverrideAccelVelDecel (0, 500, 4000, 4000);
AxmOverrideVelAtPos
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 AxmOverrideVelAtPos(long lAxisNo, double dPos, double dVel, double dAccel, double dDecel, double dOverridePos, double dOverrideVelocity, long lTarget);
C#
uint AxmOverrideVelAtPos(int lAxisNo, double dPos, double dVel, double dAccel, double dDecel, double dOverridePos, double dOverrideVelocity, int lTarget);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (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] dOverridePos | 속도를 변경할 위치 |
[in] dOverrideVelocity | 변경할 구동 속도 |
[in] lTarget | 속도를 변경할 위치 소스 선택: AXT_MOTION_SELECTION_DEF - [00h]목표 위치(Cmd 위치) - [01h]실제 위치(Encoder 위치) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
설정한 위치까지 이동하면서 사용자가 지정한 특정 위치에서 설정한 속도로 변경한다.
특정 위치에서 고속이나 저속으로 이동해야 할 경우 사용하는 함수이다.
AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면 Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로 간주되어 반환되지 않는다. (AxmSignalSetInpos 함수 참고)
주의 사항
AxmOverrideVelAtPos 함수를 사용하기 전 AxmOverrideSetMaxVel 를 이용하여 최고로 설정할 수 있는 속도를 설정해 놓는다.
예제 코드
// 0축 50000만큼 100의 속도와 200의 가속율로 구동, 10000 위치에서 500 속도 오버라이드.
AxmOverrideSetMaxVel(0, 500);// 오버라이드 최대 값 설정.
AxmOverrideVelAtPos (0, 50000, 100, 200, 200, 10000, 500, ACTUAL);
AxmOverrideAccelVelDecel
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 AxmOverrideAccelVelDecel(long lAxisNo, double dOverrideVelocity, double dMaxAccel, double dMaxDecel);
C#
uint AxmOverrideAccelVelDecel(int lAxisNo, double dOverrideVelocity, double dMaxAccel, double dMaxDecel);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dOverrideVelocity | 변경할 구동 속도[Unit/Sec] |
[in] dMaxAccel | 변경할 구동 가속도[Unit/Sec^2] |
[in] dMaxDecel | 변경할 구동 감속도[Unit/Sec^2] |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
단축 모션이 진행되고 있는 중에 속도를 오버라이드 하고자 할 때 사용한다.
먼저 이 함수를 사용하기 위해서 AxmMoveStartPos 와 같은 단축 모션 함수를 이용하여 모션 중일 때 사용하여야 한다.
모션 가속 또는 등속 중일 때 사용 가능하며 감속 중이거나 정지한 후에 지령을 내려도 무시된다.
따라서 사용자가 오버라이드 지령을 내려도 무시되면 이미 모션이 완료되었거나 감속 중이라고 인지하여야 한다.
직선, 원호, 스플라인, 헬리컬 보간 작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
EX> 속도 오버라이드를 두 번 한다면
- 구동 속도와 오버라이드 할 속도 중 높은 속도를 AxmOverrideSetMaxVel 에 설정
- AxmMoveStartPos 구동 함수를 실행하여 지정 축을 첫 번째 속도로 구동(Move 함수 모두 포함) 시킨다.
- 지정 축이 구동 중(Move 함수 모두 포함)일 때, 속도를 두 번째 속도로 AxmOverrideAccelVelDecel 가변 설정한다.
주의 사항
- AxmOverrideVel 함수를 사용하기 전에 AxmOverrideSetMaxVel 최고로 설정할 수 있는 속도를 설정해놓는다.
- 가속 구간과 감속 구간에는 오버라이드를 할 수 없으므로 반드시 등속 구간에 오버라이드를 수행한다.
예제 코드
AxmOverrideSetMaxVel(0, 500); // 오버라이드 최대 값 설정.
AxmMotSetProfileMode(0, 4); // 비대칭 S Curve.
AxmMotSetAbsRelMode(0, 0);
AxmMoveStartPos(0, 1000, 200, 800, 800);
// 0축 모션 구동 중 속도값을 500으로 오버라이드.
AxmOverrideAccelVelDecel (0, 500, 4000, 4000);
AxmOverrideAccelVelDecelAtPos
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 | ||
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 AxmOverrideAccelVelDecelAtPos(long lAxisNo, double dPos, double
dVel, double dAccel, double dDecel, double dOverridePos, double
dOverrideVel, double dOverrideAccel, double dOverrideDecel, long lTarget);
C#
uint AxmOverrideAccelVelDecelAtPos(int lAxisNo, double dPos, double
dVel, double dAccel, double dDecel, double dOverridePos, double
dOverrideVel, double dOverrideAccel, double dOverrideDecel, int lTarget);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (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] dOverridePos | 속도를 변경할 위치 |
[in] dOverrideVel | 변경할 구동 속도 |
[in] dOverrideAccel | 변경할 가속도 (가속 구간이 2개 존재 할 때 유효하며, 2 번째 가속 구간의 가속도) |
[in] dOverrideDecel | 변경할 감속도 (감속 구간이 2개 존재 할 때 유효하며, 2 번째 감속 구간의 감속도) |
[in] lTarget | [00h]속도를 변경할 위치 소스 선택: AXT_MOTION_SELECTION_DEF - [00h]목표 위치(Cmd 위치) - [01h]실제 위치(Encoder 위치) [EtherCAT의 경우 지원 안함] |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[1152] AXT_RT_NETWORK_ERROR : 네트워크에 연결된 슬레이브 노드가 연결되지 않았거나 연결 상태 불량
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
[4151] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 다른 모션 구동 함수를 실행함
Description
설정한 위치까지 이동하면서 사용자가 지정한 특정 위치에서 설정한 속도 및 가속도, 감속도로 변경한다.
특정 위치에서 고속이나 저속으로 이동해야 할 경우 사용하는 함수이다.
AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면
Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로
간주되어 반환되지 않는다. (AxmSignalSetInpos 함수 참고)
예제 코드
// 0축 50000만큼 100의 속도와 200의 가속율로 구동, 10000 위치에서 500 속도, 1000의 가속율로 오버라이드.
AxmOverrideVelAtPos (0, 50000, 100, 200, 200, 10000, 500, 1000, 1000, ACTUAL);
AxmOverrideVelAtMultiPos
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 | |||||
PCIe-Rxx05-ECAT | PCIe-Rxx05-ECAT-E | ||||||||||
Servo | PM | Servo | PM | ||||||||
O | O | O | O |
Format
C++
DWORD AxmOverrideVelAtMultiPos(long lAxisNo, double dPos, double dVel,
double dAccel, double dDecel, long lArraySize, double* dpOverridePos,
double* dpOverrideVel, long lTarget, DWORD uOverrideMode);
C#
uint AxmOverrideVelAtMultiPos(int lAxisNo, double dPos, double dVel,
double dAccel, double dDecel, int lArraySize, double[] dpOverridePos,
double[] dpOverrideVel, int lTarget, uint uOverrideMode);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (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] lArraySize | 위치 배열의 개수 |
[in] dpOverridePos | 속도를 변경할 위치 배열 |
[in] dpOverrideVelocity | 변경할 구동 속도 배열 |
[in] lTarget | 변경할 구동 속도 배열 |
[in] lTarget | 속도를 변경할 위치 소스 선택: AXT_MOTION_SELECTION_DEF - [00h] 목표 위치(Cmd 위치) - [01h] 실제 위치(Encoder 위치) |
[in] uOverrideMode | 오버라이드 시작 방법을 지정함 - [00h] 지정한 위치에서 지정한 속도로 오버라이드를 시작함 - [01h] 지정한 위치에서 지정한 속도가 되도록 미리 오버라이드를 시작함 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이 아닐 경우
Description
사용자가 지정한 다수의 설정 위치까지 이동하면서 사용자가 지정한 특정 위치에서 설정한 속도로 변경한다.
특정 위치에서 고속이나 저속으로 이동해야 할 경우 사용하는 함수이다.
집중형 보드의 경우 설정 위치의 개수에 대한 제약이 없으나 PCI-R1604(A5N)의 경우 4 개,
PCI-R1604-MLII(SIGMA V)의 경우 7 개의 위치 설정 개수에 대한 제약이 있고 OverrideMode 의 경우 집중형 제어기만 지원이 가능하다.
AxmStatusReadInMotion 함수에 의해 모션 중인지 확인할 수 있다.
AxmSignalSetInpos 함수를 사용하는 경우에는 Inposition 입력 신호가 Enable 로 설정되어 있다면
Command 펄스 출력이 완료되어도 INP 입력이 ON 되기 전까지는 모션이 완료되지 않은 것으로
간주되어 반환되지 않는다. (AxmSignalSetInpos 함수 참고)
주의 사항
AxmOverrideVelAtMultiPos 함수를 사용하기 전 AxmOverrideSetMaxVel 최고로 설정할 수 있는 속도를 설정해 놓는다.
예제 코드
// 0축 50000만큼 100의 속도와 200의 가속율로 구동, 10000 위치에서 500 속도로 20000 위치에서
1000 속도로 지정한 위치에서 지정한 속도로 오버라이드를 시작함.
double dPos[2] = {10000, 20000};
double dVel[2] = {500, 1000};
AxmOverrideSetMaxVel(0, 1000);// 오버라이드 최대 값 설정.
AxmOverrideVelAtPos (0, 50000, 100, 200, 200, 2, dPos, dVel, ACTUAL, OVERRIDE_POS_START);
AxmOverrideLinePos
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 | ||
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 AxmOverrideLinePos(long lCoordNo, double *dpOverridePos);
C#
uint AxmOverrideLinePos(int lCoordNo, ref double dpOverridePos);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dpOverridePos | 오버라이드 위치 배열 |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[1152] AXT_RT_NETWORK_ERROR : 네트워크에 연결된 슬레이브 노드가 연결되지 않았거나 연결 상태가 불량
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이어야 하는데 모션 구동 중이 아닐 때
Description
AxmLineMove 같은 다축 직선 보간 함수를 이용하여 모션 중일 때, 이 함수를 사용하여 구동 시작 시
설정한 최종 목표 위치를 새로운 위치값으로 변경한다.
정지한 후에는 해당 지령을 내려도 무시된다. 따라서 사용자가 오버라이드 지령을 내려도 무시되면
이미 모션이 완료된 상태라고 인지하여야 한다.
직선, 원호, 스플라인, 헬리컬 보간 작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
주의 사항
오버라이드 할 위치값은 현재 구동 방향에 대한 Relative 형태의 이동 거리값으로 들어가기 때문에 위치는 반드시 Relative 형태의 위치값으로 넣어준다.
예제 코드
long lAxis[2];
double dPos[2];
long lPosSize = 2;
long lCoordinate = 0;
dPos[0] = 2000;
dPos[1] = 2000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordinate);
AxmContiSetAxisMap(lCoordinate, lPosSize, lAxis);
//절대 위치 구동.
AxmContiSetAbsRelMode(lCoordinate, 0);
// 직선 보간 구동.
AxmLineMove(lCoordinate, dPos, 200, 400, 400);
// 0번 좌표계 다축 직선 보간 구동 중 4000, 4000 위치로 오버라이드
dPos[0] = 4000;
dPos[1] = 4000;
AxmOverrideLinePos(lCoordinate, dPos);
AxmOverrideLineVel
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 | ||
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 AxmOverrideLineVel(long lCoordNo, double dOverrideVel, double *dpDistance);
C#
uint AxmOverrideLineVel(int lCoordNo, double dOverrideVel, ref double dpDistance);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lAxisNo | 채널(축) 번호 (0 ~ (최대 축 수 - 1)) |
[in] dOverrideVel | 오버라이드 속도 |
[in] dpDistance | 오버라이드 될 좌표계의 각 축별의 속력 비율 배열 - 다축 직선 속도 보간에서만 유효한 변수 - 다축 직선 위치 보간에서 는 해당 변수를 참조하지 않는다. |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[1152] AXT_RT_NETWORK_ERROR : 네트워크에 연결된 슬레이브 노드가 연결되지 않았거나 연결 상태가 불량
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이어야 하는데 모션 구동 중이 아닐 때
Description
다축 직성 보간 구동이 진행되고 있는 중에 속도를 오버라이드하고자 할 때 사용한다.
먼저 이 함수를 사용하기 위해서 AxmLineMove 와 같은 다축 직선 보간 구동을 이용하여 모션중일 때 사용하여야 한다.
정지한 후에는 해당 지령을 내려도 무시된다. 따라서 사용자가 오버라이드 지령을 내려도 무시되면 이미 모션이 완료된 상태라고 인지하여야 한다.
직선, 원호, 스플라인, 헬리컬 보간작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
주의 사항
-
dpDistance 는 기존 구동 중인 좌표계가 다축 직선 속도 보간일 때만 유효하며, 다축 직선 위치 보간일때는 유효하지 않다.
-
dpDistance 의 배열 값은 오버라이드 할 좌표계의 각 축별 속력을 비율로 나타내는 인자이므로 구동하고자 하는 축별 속력 비율을 넣어준다.
예제 코드
long lAxis[2];
double dPos[2];
double dVelRatio[2];
long lPosSize = 2;
long lCoordinate = 0;
dPos[0] = 2000;
dPos[1] = 2000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordinate);
AxmContiSetAxisMap(lCoordinate, lPosSize, lAxis);
//절대위치 구동.
AxmContiSetAbsRelMode(lCoordinate, 0);
// 직선보간 구동.
AxmLineMove(lCoordinate, dPos, 200, 400, 400);
// 0번 좌표계 다축 직선 보간 구동 중 400 속도로 오버라이드
dVelRatio[0] = 1.0;
dVelRatio[1] = 1.0;
AxmOverrideLineVel(lCoordinate, 400, dVelRatio);
AxmOverrideLineAccelVelDecel
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 | ||
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 AxmOverrideLineAccelVelDecel(long lCoordNo, double
dOverrideVelocity, double dMaxAccel, double dMaxDecel, double *dpDistance);
C#
uint AxmOverrideLineAccelVelDecel(int lCoordNo, double
dOverrideVelocity, double dMaxAccel, double dMaxDecel, ref double dpDistance);
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in] lCoordNo | 좌표계 번호 |
[in] dOverrideVelocity | 오버라이드 속도 |
[in] dMaxAccel | 오버라이드 가속도 |
[in] dMaxDecel | 오버라이드 감속도 |
[in] dpDistance | 오버라이드 될 좌표계의 각 축별의 속력 비율 배열 - 다축 직선 속도 보간에서만 유효한 변수 - 다축 직선 위치 보간에서 는 해당 변수를 참조하지 않는다. |
Return Values
[0000] AXT_RT_SUCCESS : AXL 라이브러리 초기화 성공
[1152] AXT_RT_NETWORK_ERROR : 네트워크에 연결된 슬레이브 노드가 연결되지 않았거나 연결 상태가 불량
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
[4151] AXT_RT_MOTION_ERROR_IN_NONMOTION : 모션 구동 중이어야 하는데 모션 구동 중이 아닐 때
Description
다축 직성 보간 구동이 진행되고 있는 중에 속도 및 가속도, 감속도를 오버라이드하고자 할 때 사용한다.
먼저 이 함수를 사용하기 위해서 AxmLineMove 와 같은 다축 직선 보간 구동을 이용하여 모션 중일 때 사용하여야 한다.
정지한 후에는 해당 지령을 내려도 무시된다. 따라서 사용자가 오버라이드 지령을 내려도 무시되면 이미 모션이 완료된 상태라고 인지하여야 한다.
직선, 원호, 스플라인, 헬리컬 보간 작업을 수행하는 경우는 오버라이드를 사용할 수 없다.
주의 사항
-
dpDistance 는 기존 구동 중인 좌표계가 다축 직선 속도 보간일 때만 유효하며, 다축 직선 위치 보간일때는 유효하지 않다.
-
dpDistance 의 배열 값은 오버라이드 할 좌표계의 각 축별 속력을 비율로 나타내는 인자이므로 구동하고자 하는 축별 속력 비율을 넣어준다.
예제 코드
long lAxis[2];
double dPos[2];
double dVelRatio[2];
long lPosSize = 2;
long lCoordinate = 0;
dPos[0] = 2000;
dPos[1] = 2000;
lAxis[0] = 0;
lAxis[1] = 1;
AxmContiWriteClear(lCoordinate);
AxmContiSetAxisMap(lCoordinate, lPosSize, lAxis);
//절대 위치 구동.
AxmContiSetAbsRelMode(lCoordinate, 0);
// 직선 보간 구동.
AxmLineMove(lCoordinate, dPos, 200, 400, 400);
// 0번 좌표계 다축 직선 보간 구동 중 400 속도, 1000 가속율로 오버라이드
dVelRatio[0] = 1.0;
dVelRatio[1] = 1.0;
AxmOverrideLineAccelVelDecel(lCoordinate, 400, 1000, 1000, dVelRatio);