Skip to content

오버라이드 구동 (Override Move)

개요

위치 오버라이드 구동: 모션을 수행하고 있는 중에 목표 거리를 변경하는 것을 의미한다. 속도 오버라이드 구동: 모션이 진행되는 도중에 작업 속도를 변경하는 것을 의미한다.

Override

위치 오버라이드는 AxmOverridePos 함수 이용, 속도 오버라이드는 AxmOverrideVel 함수를 이용한다.
AxmOverrideVelAtPos 함수는 어느 위치 지점과 오버라이드할 속도를 입력시켜 특정 위치를 지나면 오버라이드 되도록 사용할 수 있다.

Override

예제 코드 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);