Skip to content

겐트리 구동 (Gantry Move)

두 축이 아래의 그림에서와 같이 기구적으로 Link되어있는 겐트리 구동시스템을 제어하기 위해 갠트리 구동 함수를 지원한다. 이 함수를 이용해 Master축을(짝수인 축 번호) 겐트리 제어로 설정하면 해당 Slave축은 Master축과 동기되어 구동된다. 만약 겐트리 설정이후 Slave축에 구동명령이나 정지 명령등을 내려도 모두 무시된다.

Gantry

Note) 갠트리 구동을 위한 두 축은 반드시 같은 보드에 속한 축을 선택하여야 한다.

겐트리 구동 설정 및 해제

갠트리 구동을 설정하기 위해서는 AxmGantrySetEnable 함수를 사용하여 갠트리 구동을 Enable해주면 된다. 겐트리 시스템의 경우 각각의 로봇을 평행으로 놓고 기구적으로 Link하는 구조로 조립 후 Master축과 Slave 축의 원점센서가 일정 값의 오차를 가지게 된다. 원점검색을 하게 되면 두축의 원점센서가 가지는 오차를 마 지막에 보상해 주게 된다. 기구조립시 발생하는 센서간의 오차를 AxmGantrySetEnable함수 실행시 dSlOffset에 설정하여 보상한다.

//0축과 1축을이용하여갠트리구동을시작한다.
long lMasterAxisNo = 0;
long lSlaveAxisNo = 1;
DWORD uGantryOn;
DWORD bSlHomeUse=FALSE; //[0] : Home 축만원점검색선택
//[1] : Home축과 Slave축에원점검색같이선택
double dSlOffset =0; //마스터와슬레이브홈센서들간의기구적인 Offset값
double dSlOffsetRange=10; //원점검색시마스터홈센서와슬레이브홈센서간의오차한계
AxmGantrySetEnable(lMasterAxisNo, lSlaveAxisNo, uSlHomeUse, dSlOffset, dSlOffsetRange);
// 사용자가직접설정한값을읽어낼수있다.
AxmGantryGetEnable(lMasterAxisNo, &SlHomeUse, &dSlOffset,&dSlORange, &uGatryOn);

이렇게 설정한 후에 Master축인 0축에 내리는 명령대로 0축과 1축이 동일하게 구동된다. 그리고 1축에 내리 는 명령은 모두 무시된다. 홈검색을 하고자 한다면 이 상태에서 0축에 대한 홈검색 함수를 실행시키면 된다.

//갠트리구동에서원점을검색한다.
long MasterAxisNo= 0;
long nHmDir=-1; //-1 : (-)방향 , 1 : (+)방향
DWORD nHmSig=4; //[0]PELM, [1]NELM, [2]PSLM, [3]NSLM, [4]IN0, [5]IN1, [6]IN2, [7]IN3 
BOOL bZphas=TRUE; //Z상검출유무
double dHClrTime = 100.0; //엔코더클리어하기위한대기시간
double dHOffset = 0.0;
AxmHomeSetMethod(MasterAxisNo, nHmDir, nHmSig, bZphas, dHClrTime, dHOffset);
double dVelF = 10000; //원점센서가감지되어있지않을때원점검색진행방향으로구동할속도
double dVelA = 1000; //원점센서가감지되어있을때원점검색진행반대방향으로구동할속도
double dVelL = 500; //1차원점검색후재검색할때사용할속도
double dvelI = 10; //마지막원점검출시사용할속도
double dAccF = 20000; //원점센서가감지되지않을때원점센서방향으로구동할가감속도
double dAccA = 10000; //원점센서가감지되었을때진행반대방향으로구동할가감속도
AxmHomeSetVel(MasterAxisNo, dVelF, dVelA, dVelL, dvelI, dAccF, dAccA);
AxmHomeSetStart(MasterAxisNo);

겐트리 구동을 종료하기 위해서는 AxmGantrySetDisable함수를 사용한다

//겐트리구동을종료한다.
long lMasterAxisNo = 0;
long lSlaveAxisNo = 1;
AxmGantrySetDisable(lMasterAxisNo, lSlaveAxisNo);

갠트리 구동에서의 홈 검색

갠트리 설정 후 원점검색은 Master축과 Slave축을 고려해서 이루어 져야 한다. 일반적으로 master축의 홈센 서를 먼저 찾은 후 slave축의 홈센서을 찾는데, AXL 에서는 AxmGantrySetEnable 로 갠트리 제어로 설정한 다음, Master 축에 대해서 단축 원점검색 함수만 사용하여 Slave 홈검색 까지 자동으로 검색하는 기능을 제 공한다. 다음의 원점 관련 설정 변수를 설정하고 단축 원점 구동과 동일하게 실행하면 간단히 원점 검색을 완료 할 수 있다.

원점검색관련설정변수 변수설명
HmSig 원점센서로 사용할 신호를 설정 예) 원점센서(4), +Limit센서(0) 등
HmLev 원점센서의 Active Level을 설정 예) 0: A접점, 1: B접점
HmDir 원점센서 검출시 초기 검색진행 방향을 설정 예) 1: (+)방향, -1: (-)방향
Zphas 원점센서 검출 후 엔코더 Z상을 검출 여부 설정
VelFirst 원점검색 시 초기 고속검출 속도 (초기 원점센서가 감지되지 않았을 경우)
VelSecond 원점검색 시 1차 센서 검출 후 반대 방향으로 빠져나오는 속도
VelThird 원점검색 시 1차 센서 검출 후 재 검색 진행하는 속도
VelLast 원점검색 시 최종 검출 속도 설정 [원점검색의 정밀도 결정]
AccFirst 원점검색 시 초기 고속검출 가속도
AccSecond 원점검색 시 1차 센서 검출 후 반대 방향으로 빠져나오는 가속도
HClrTim 원점검색 완료 후 Command, Actual(Encoder)위치를 Clear전 대기시간
HOffset 원점검색 완료 후 기구원점 재 설정 시 이동 Offset 값

● Step별 원점검출 속도 설정 및 홈검색 시퀀스의 이해

Step 1. Master축의 홈센서를 먼저 찾는다. Maste축만 위치 0으로 만든다.

Step 2. Slave축의 홈센서를 찾는다. (Step 2가 완료된 후 Master 축의 위치 정보는 Gantry 구조물의 조립 상태에 대한 Master 축과 Slave축의 Offset 값으로 해석할수 있는데, 기구물의 홈센서의 이격량과 Gantry 구 조물의 비틀림량이 반영된 값이라 할 수 있다.이 값은 Gantry 구조물의 비틀림량을 무시할수 있을 수준으로 세팅1)되었다면 AxmGantrySetEnable의 SlOffset 입력으로 사용될 수 있다. 초기 Slave offset 값을 측정하기 위해서는 Gantry 구조물의 비틀림량을 무시할수 있을 수준으로 세팅1) 하고, AxmGantrySetEnable에 입력되 는 SlHomeUse 값에 ‘2’를 입력하여 원점 검색이 Step 2에서 완료하도록 하여 Master 축의 현재값을 Slave offset값으로 사용하면 된다. 이 후 AxmGantrySetEnable에 입력되는 SlHomeUse 값에 ‘1’을 입력하고 SlOffset에 측정한 Slave offset 값의 반대 부호값으로 입력하여 사용한다.)

Note1) Gantry 구조물의 비틀림 최소화 방법

  1. 볼스크류 타입의 경우 서보 OFF 상태에서 Gantry 구조물을 Stoper 쪽으로 밀착시킨 이후 서보 ON 하여 원점 검색을 시작한다.(일반적으로 기구물이 Stopper 쪽에서 직교하도록 설계되어 있다는 가정)

  2. 리니어 모터 타입의 경우 서보 OFF 상태에서 홈센서 근처로 Gantry 구조물을 이동한 이후 서보 ON하여 원점 검색을 시작한다.

  3. Master와 Slave의 Link를 풀고 Slave축은 Slave offset만큼 이동하고 Master축을 0의 위치로 이동한 다. 다음 다시 Link시킨다.

  4. 홈 Offset 만큼 이동해준다음 위치를 0로 만든다. 홈 Offset이 없을경우 이동하지않고 위치를 0로 만든다.

Gantry home

// Ex19_AXM_GentryDrive.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
#define AXIS_1 1
void main(void)
{
    // 라이브러리를초기화한다.
    // 7은 IRQ를뜻한다. PCI에서자동으로 IRQ가설정된다.
    DWORD Code = AxlOpen(7);
    if (Code == AXT_RT_SUCCESS)
    {
        printf("라이브러리가초기화되었습니다.\n");
        //모션모듈이있는지검사
        DWORD dwStatus;
        Code = AxmInfoIsMotionModule(&dwStatus);
        if(Code == AXT_RT_SUCCESS)
        {
            if(dwStatus == STATUS_EXIST)
            {
                printf("모션모듈이존재합니다.\n");
                for(int nAxisNo = 0; nAxisNo<2; nAxisNo++)
                {
                    // 0축의 +End limit 과 -End limit 의 Active level 을 HIGH와급정지로설정
                    AxmSignalSetLimit(nAxisNo, 0, HIGH, HIGH);
                    // 0축의 Inpositon 신호의입력레벨을 HIGH로설정한다.
                    AxmSignalSetInpos(nAxisNo, HIGH);
                    // 0축의알람신호의입력레벨을 LOW로설정한다.
                    AxmSignalSetServoAlarm(nAxisNo, LOW);
                    // 0축의비상정지신호(ESTOP)의 Active 입력레벨을 HIGH로설정한다.
                    AxmSignalSetStop(nAxisNo, 0, HIGH);
                    //0축지령값을 mm단위가되도록한다. 
                    AxmMotSetMoveUnitPerPulse(nAxisNo, 10, 10000);
                    //0축에초기속도를 1로설정한다. Default : 1
                    AxmMotSetMinVel(nAxisNo, 1);
                    //0축의펄스출력방식을 TwoCwCcwHigh로한다.
                    AxmMotSetPulseOutMethod(nAxisNo, TwoCcwCwHigh);
                    //지정축에 Encoder 입력방식을 4체배로설정한다.
                    AxmMotSetEncInputMethod(nAxisNo, ObverseSqr4Mode);
                    // 원점검색방법을설정
                    AxmHomeSetMethod(nAxisNo,-1,HomeSensor,1,2000.0,0.0);
                    // 원점검색시사용될속도를설정
                    AxmHomeSetVel(nAxisNo, 100, 20, 10, 10, 200, 40);
                    //Servo On
                    AxmSignalServoOn(nAxisNo, ENABLE);
                }
                //갠트리구동을설정한다.
                long lMasterAxisNo = AXIS_0;
                long lSlaveAxisNo = AXIS_1;
                BOOL bSlHomeUse = FALSE; // TRUE : 마스터홈센서를찾은후슬레이브홈센서도찾음
                double dSlOffset = 0; // 마스터와슬레이브홈센서들간의 Offset
                double dSlOffsetRange = 10; // 원점검색시마스터홈센서와슬레이브홈센서간의오차한계
                AxmGantrySetEnable(lMasterAxisNo, lSlaveAxisNo, bSlHomeUse, dSlOffset, dSlOffsetRange);
                // help Message
                printf("[INFORMATION]*********************************** \n"); 
                printf("갠트리구동이설정되었습니다.\n아무키나누르면구동을시작\n");
                printf("************************************************ \n");
                //아무키나누를때까지대기
                getch();
                printf("\n갠트리구동의원점을검색한다.\n");
                // 원점검색방법을설정
                AxmHomeSetMethod(lMasterAxisNo,-1,HomeSensor,1,2000.0,0.0);
                // 원점검색시사용될속도를설정
                AxmHomeSetVel(lMasterAxisNo, 100, 20, 10, 10, 200, 40);
                //원점을검색한다.
                AxmHomeSetStart(lMasterAxisNo); 
                //현재원점검색진행률을확인
                DWORD uHomeMainStepNumber , uHomeStepNumber_0;
                AxmHomeGetRate(lMasterAxisNo, &uHomeMainStepNumber ,&uHomeStepNumber_0);
                while(uHomeStepNumber_0 < 100)
                {
                    AxmHomeGetRate(lMasterAxisNo, &uHomeMainStepNumber ,&uHomeStepNumber_0);
                    printf("\r원점검색중... %d ", uHomeStepNumber_0); 
                }
                printf("\r원점검색완료\n"); 
                printf("Master 축을 100만큼구동시킨다.\n");
                AxmMoveStartPos(lMasterAxisNo, 100, 100, 200, 200);
                //구동중인지확인한다.
                DWORD uStatus;
                AxmStatusReadInMotion(lMasterAxisNo, &uStatus);
                while(uStatus) 
                {
                    AxmStatusReadInMotion(lMasterAxisNo, &uStatus);
                }
                //갠트리구동을종료한다.
                AxmGantrySetDisable(lMasterAxisNo,lSlaveAxisNo);
                //Servo Off
                AxmSignalServoOn(nAxisNo, DISABLE);
                AxmSignalServoOn(nAxisNo, DISABLE);
            }
            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");
}

겐트리 구동 함수 리스트

Function Description
AxmGantrySetEnable 모션모듈은 두 축이 기구적으로 Link되어있는 갠트리 구동시스템 제어를지원한다. 이 함수를 이용해 Master축을 갠트리 제어로 설정하면 해당Slave축은 Master축과 동기되어 구동된다. 만약 갠트리 설정 이후 Slave축에 구동명령이나 정지 명령등을 내려도 모두 무시된다.
AxmGantryGetEnable 이 함수를 이용해 Master축을 갠트리 제어로 설정할 때 설정한 파라메타를 반환한다.
AxmGantrySetDisable 갠트리 제어로 설정후 원점검색을 수행하면 Master축이 원점검색을 수행한 후 Slave축이 원점검색을 수행 한다. 이 함수는 원점검색 이후 Master축 원점과 Slave축 원점간의 오차 값을 확인 할 때 사용한다.
AxmGantrySetCompensationGain 겐트리 제어 시스템의 동기 보상 기능을 설정한다.
주의사항 : (MLII 전용 함수)
AxmGantryGetCompensationGain 겐트리 제어 시스템의 동기 보상 기능 설정을 반환한다.
주의사항 : (MLII 전용 함수)

겐트리 구동 함수 소개

AxmGantrySetEnable

Purpose

이 함수를 이용해 Master 축을 갠트리 제어로 설정하면 해당 Slave 축은 Master 축과 동기 시킨다. 갠트리 제어 기능을 활성화 시키고 이후 Slave 축에 구동명령이나 정지 명령등을 내려도 모두 무시된다.

Format

C++
DWORD AxmGantrySetEnable(long lMasterAxisNo, long lSlaveAxisNo, DWORD 
uSlHomeUse, double dSlOffset, double dSlOffsetRange);
Visual Basic
Function AxmGantrySetEnable(ByVal lMasterAxisNo As Long, ByVal 
lSlaveAxisNo As Long, ByVal uSlHomeUse As Long, ByVal dSlOffset As 
Double, ByVal dSlOffsetRange As Double) As Long
Delphi
function AxmGantrySetEnable(lMasterAxisNo : LongInt; lSlaveAxisNo : 
LongInt; uSlHomeUse : DWord; dSlOffset : Double; dSlOffsetRange : 
Double): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo Master채널(축) 번호(0 ~ (최대축수 – 1))
[in]lSlaveAxisNo Slave채널(축) 번호(0 ~ (최대축수 – 1))
[in]uSlHomeUse Master와 같이 Slave축도 원점검색을 같이 찾을것인지 선택인자
- [00h] Master 축만에 원점검색 선택
- [01h] Master축 과 Slave축에 원점검색 같이 선택 확인
- [02h] Master 축과 Slave축의 센서의 오차 값 확인
[in]dSlOffset Master축의 원점센서와 Slave축 원점센서간의 기구적인 오차 값
[in]dSlOffsetRange 원점검색시 Master축의 원점센서와 Slave축 원점센서간에 허용할 최대 오차값 지정

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 겐트리 구성 하려는 축이 구동 중 일 때
[4154] AXT_RT_MOTION_ERROR_GANTRY_ENABLE : 겐트리 Enable 상태에서또 Enable 시켰을 때
[4204] AXT_RT_MOTION_HOME_ERROR_GANTRY : 겐트리 구성 하려는 축이 홈을 찾고 있는 중 일 때
* See error code Table for more information on status error codes

Description

이 함수를 이용해 Master 축을 갠트리 제어로 설정하면 해당 Slave 축은 Master 축과 동기되어 구동된다. 만약 갠트리 설정 이후 Slave 축에 구동명령이나 정지 명령등을 내려도 모두 무시된다.

주의사항: 갠트리 ENABLE 시 슬레이브축은 모션중 AxmStatusReadMotion함수로 확인하면 InMotion 중으로 True 로 확인되어야 한다. 만약 InMotion 이 False 되면 Gantry Enable 이 되지 않았으므로 알람발생 여부 혹은 Limit 신호 발생 여부를 확인한다.

갠트리 제어로 설정후 원점검색을 수행하면 Master 축이 원점검색을 수행한 후 Slave 축이 원점검색을 수행 한다. 이 함수는 원점검색 이후 Master 축 원점과 Slave 축 원점간의 오차 값을 확인 할 때 사용한다

▶uSlHomeUse: 슬레이축 홈사용 우뮤 ( 0 – 2)
0 : 슬레이브축 홈을 사용안하고 마스터축을 홈을 찾는다.
1 : 마스터축 , 슬레이브축 홈을 찾는다. 슬레이브 dSlOffset 값 적용해서 보정함.
2 : 마스터축 , 슬레이브축 홈을 찾는다. 슬레이브 dSlOffset 값 적용해서 보정안함.

▶Slave 축의 Offset 값을 알아내는방법.

A. 마스터, 슬레이브 모두 서보온을 시킨다.

B. AxmGantrySetEnable 함수에서 uSlHomeUse = 2 로 설정후 AxmHomeSetStart 함수를 이용해서 홈을 찾는다.

C. 홈을 찾고 나서 마스터축의 Command 값을 읽어보면 마스터축과 슬레이브축의 틀어진 Offset 값을 볼수있다.

D. Offset 값을 읽어서 AxmGantrySetEnable 함수의 dSlOffset 인자에 넣어준다.

E. dSlOffset 값을 넣어줄때 마스터축에 대한 슬레이브 축 값이기 때문에 부호를 반대로-dSlOffset 넣어준다.

F. dSIOffsetRange 는 Slave Offset 의 Range 범위를 말하는데 Range 의 한계를 지정하여 한계를 벗어나면 에러를 발생시킬때 사용한다.

G. AxmGantrySetEnable 함수에 Offset 값을 넣어줬으면 AxmGantrySetEnable 함수에서 uSlHomeUse = 1 로 설정후 AxmHomeSetStart 함수를 이용해서 홈을 찾는다. 알림: 갠트리 시스템의 경우 각각의 로봇을 평행으로 놓고 기구적으로 Link 하는 구조로 조립 후 Master 축과 Slave 축의 원점센서가 일정 값의 오차를 가지게 된다. 초기 기구 셋업시 원점 검색완료 후 이 함수를 이용해 오차값을 읽어 dSlOffset 에 설정해 주면된다. (초기 적절한 Offset 값을 찾을시만 사용됨)

▶주의점: 4 축 이상을 구성하였을 때

다축 모션보드는 한 보드내에서 Axis 0 – 3 의 4 개의 축이 축그룹 1 로 구분되고 Axis4 – 7 4 개의 축이 축그룹 2 로 구분되고 Axis8 – 11 4 개의 축이 축그룹 3 으로 ….. 구분된다. 동일 그룹에 속하는 축들간의 갠트리 구동을 사용할 수 있지만, 서로 다른 축그룹에 속한 축들간의 갠트리구동은 사용할 수 없다.

예제코드

C++
if(AxmGantrySetEnable (0,1, TRUE, 0, 0.0) == AXT_RT_SUCCESS )
    printf(0, 1축을갠트리제어로설정했습니다.\n);
else 
    printf(0, 1축을갠트리제어설정을실패했습니다.\n);
long lHmDir = 1;
DWORD lHmsig = 4;
DWORD dwZphas = 0;
double dwHClrTim = 2000.0, dwHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, lHmsig, dwZphas, dwHClrTim, dwHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
Visual Basic
If (AxmGantrySetEnable(0, 1, 1, 0#, 5#) = AXT_RT_SUCCESS) Then
    MsgBox 0, 1축을갠트리제어로설정했습니다”, vbOKCancel
Else
    MsgBox 0, 1축을갠트리제어설정을실패했습니다”, vbOKCancel
End If
Dim dwHOffset As Double
Dim dwHClrTim As Double
Dim lHmDir, lHmsig, dwZphas As Long
dwHClrTim = 2000#
dwHOffset = 0#
lHmDir = -1
lHmsig = 4
dwZphas = 0
(-)방향으로원점검색, Home Sensor이용, Home Sensor Type A접점, Z상검출사용안함, Offset
‘이동안함으로설정
AxmHomeSetMethod0, lHmDir, lHmsig, dwZphas, dwHClrTim, dwHOffset
AxmHomeSetVel0, 10000, 5000, 500, 50, 40000, 10000
AxmHomeSetStart0

Delphi
var
    dwZphas, lHmsig : DWORD;
    dwHOffset, dwHClrTim : Double;
    lHmDir : LongInt;
    velocity : Double;
begin
    lHmDir := -1;
    lHmsig := 4;
    dwZphas := 0;
    dwHClrTim := 2000.0;
    dwHOffset := 0.0;
    if (AxmGantrySetEnable (0,1,1, 0.0, 5.0) = AXT_RT_SUCCESS) then
        Application.MessageBox(0, 1축을갠트리제어로설정했습니다., Ajinextek, MB_OK)
    else
        Application.MessageBox(0, 1축을갠트리제어설정을실패했습니다., Ajinextek, MB_OK);
    AxmHomeSetMethod(0, lHmDir, lHmsig, dwZphas, dwHClrTim,dwHOffset);
    AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
    AxmHomeSetStart(0);
end;

AxmGantryGetEnable

Purpose

이 함수를 이용해 Master 축의갠트리제어 파라메타를 반환한다.

Format

C++
DWORD AxmGantryGetEnable(long lMasterAxisNo, DWORD *upSlHomeUse, 
double *dpSlOffset, double *dpSlORange, DWORD *upGatryOn);
Visual Basic
Function AxmGantryGetEnable(ByVal lMasterAxisNo As Long, ByRef 
upSlHomeUse As Long, ByRef dpSlOffset As Double, ByRef dpSlORange As 
Double, ByRef upGatryOn As Long) As Long
Delphi
function AxmGantryGetEnable(lMasterAxisNo : LongInt; upSlHomeUse : 
PDWord; dpSlOffset : PDouble;dpSlORange: PDouble; upGatryOn: PDWord): 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo Master채널(축) 번호(0 ~ (최대축수 – 1))
[out]uSlHomeUse Master와 같이 Slave축도 원점검색을 같이 찾을것인지 선택인자
- [00h] Master 축만에 원점검색 선택
- [01h] Master축 과 Slave축에 원점검색 같이 선택 확인
- [02h] Master 축과 Slave축의 센서의 오차 값 확인
[out]dSlOffset Master축의 원점센서와 Slave축 원점센서간의 기구적인 오차 값
[out]dSlOffsetRange 원점검색시 Master축의 원점센서와 Slave축 원점센서간에 허용할 최대 오차값 지정
[out]upGatryOn 갠트리 ON/OFF 인자: AXT_USE
- [00h] 갠트리 OFF
- [01h] 갠트리 ON

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[1053] AXT_RT_NOT_OPEN : 라이브러리 초기화 실패
[4051] AXT_RT_MOTION_NOT_MODULE : 시스템에 장착된 모션 모듈이 없음
* See error code Table for more information on status error codes

Description

참고 : 필요한 데이터만 가지고 올 경우 필요하지 않는 변수에 NULL 값을 넣어 사용 할 수 있다. AxmGantrySetEnable 에서 설정한 Gantry 관련 설정 파라미터를 확인한다. 파라미터에 관한 자세한 설명은 AxmGantrySetEnable 함수 설명 참조.

예제코드

C++
double dOffset;
DWORDupHomeResult0;
double dpSlOffset,dSlORange;
DWORD bSlHomeUse, bGatryOn;
if(AxmGantrySetEnable (0,1, TRUE, 0, 0.0) == AXT_RT_SUCCESS )
    printf(0, 1축을갠트리제어로설정했습니다.\n);
else 
    printf(0, 1축을갠트리제어설정을실패했습니다.\n);
long lHmDir = 1;
DWORD lHmsig = 4;
DWORD dwZphas = 0;
double dwHClrTim = 2000.0, dwHOffset = 0.0;
AxmHomeSetMethod(0, lHmDir, lHmsig, dwZphas, dwHClrTim, dwHOffset);
AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
AxmHomeSetStart(0);
AxmGantryGetEnable(0, &bSlHomeUse,&dpSlOffset,&dSlORange,&bGatryOn);
Visual Basic
Dim dOffset , dSlORange,dpSlOffset As Double
Dim upHomeResult0, uID As Long
Dim bSlHomeUse,bGatryOn As Long
Dim strData As String
If (AxmGantrySetEnable(0, 1, 1, 0#, 5#) = AXT_RT_SUCCESS) Then
    MsgBox 0, 1축을갠트리제어로설정했습니다”, vbOKCancel
Else
    MsgBox 0, 1축을갠트리제어설정을실패했습니다”, vbOKCancel
End If
Dim dwHOffset As Double
Dim dwHClrTim As Double
Dim lHmDir, lHmsig, dwZphas As Long
dwHClrTim = 2000#
dwHOffset = 0# 
lHmDir = -1
lHmsig = 4
dwZphas = 0
(-)방향으로원점검색, Home Sensor이용, Home Sensor Type A접점, Z상검출사용안함, Offset
‘이동안함으로설정.
AxmHomeSetMethod0, lHmDir, lHmsig, dwZphas, dwHClrTim, dwHOffset
AxmHomeSetVel0, 10000, 5000, 500, 50, 40000, 10000
AxmHomeSetStart0
AxmGantryGetEnable 0, bSlHomeUse,dpSlOffset,dSlORange,bGatryOn

Delphi
var
    dwZphas, lHmsig : DWORD;
    dwHOffset, dwHClrTim : Double;
    lHmDir : LongInt;
    velocity : Double;
    dOffset: Double; 
    upHomeResult0, bMaSlChange, bSlHomeUse , bGatryOn:DWORD;
    dSlORange, dpSlOffset : Double;
begin
    lHmDir := -1;
    lHmsig := 4;
    dwZphas := 0;
    dwHClrTim := 2000.0;
    dwHOffset := 0.0;
    if (AxmGantrySetEnable (0,1,1, 0.0, 5.0) = AXT_RT_SUCCESS) then
        Application.MessageBox(0, 1축을갠트리제어로설정했습니다., Ajinextek, MB_OK)
    else
        Application.MessageBox(0, 1축을갠트리제어설정을실패했습니다., Ajinextek, MB_OK);
    AxmHomeSetMethod(0, lHmDir, lHmsig, dwZphas, dwHClrTim,dwHOffset);
    AxmHomeSetVel(0,10000, 5000, 500, 50, 40000, 10000);
    AxmHomeSetStart(0);
    AxmGantryGetEnable(0, @bSlHomeUse, @dpSlOffset, @dSlORange, @bGatryOn);
end;

AxmGantrySetDisable

Purpose

두 축이 기구적으로 Link 되어있는 갠트리 구동시스템 제어를 해제한다.

Format

C++
DWORD AxmGantrySetDisable(long lMasterAxisNo, long lSlaveAxisNo);
Function AxmGantrySetDisable(ByVal lMasterAxisNo As Long, ByVal 
lSlaveAxisNo As Long) As Long
Delphi
function AxmGantrySetDisable(lMasterAxisNo : LongInt; lSlaveAxisNo : 
LongInt): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo Master채널(축) 번호(0 ~ (최대축수 – 1))
[in]lSlaveAxisNo Slave채널(축) 번호(0 ~ (최대축수 – 1))

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 겐트리 구성 하려는 축이 구동 중 일 때
[4204] AXT_RT_MOTION_HOME_ERROR_GANTRY : 겐트리 구성 하려는 축이 홈을 찾고 있는 중 일 때
* See error code Table for more information on status error codes

Description

AxmGantrySetEnable로 Link 되어있는 갠트리 구동시스템 제어를 해제한다.

예제코드 : 일반 헬리컬 보간 구동

C++
if(AxmGantrySetEnable (0,1, TRUE, 0, 0.0) == AXT_RT_SUCCESS )
    printf(0, 1축을갠트리제어로설정했습니다.\n);
else 
    printf(0, 1축을갠트리제어설정을실패했습니다.\n);
//갠트리구동시스템을해제시킨다.
AxmGantrySetDisable (0, 1);
Visual Basic
If (AxmGantrySetEnable(0, 1, 1, 0#, 5#) = AXT_RT_SUCCESS) Then
    MsgBox 0, 1축을갠트리제어로설정했습니다”, vbOKCancel
Else
    MsgBox 0, 1축을갠트리제어설정을실패했습니다”, vbOKCancel
End If
AxmGantrySetDisable 0, 1

Delphi
begin
    if (AxmGantrySetEnable (0,1,1, 0.0, 5.0) = AXT_RT_SUCCESS) then
        Application.MessageBox(0, 1축을갠트리제어로설정했습니다., Ajinextek, MB_OK)
    else
        Application.MessageBox(0, 1축을갠트리제어설정을실패했습니다., Ajinextek, MB_OK);
    AxmGantrySetDisable (0, 1);
end;

AxmGantrySetCompensationGain

Purpose

두 축이 기구적으로 Link 되어있는 겐트리 구동 시스템 제어 중 동기 보상 기능을 설정 한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmGantrySetCompensationGain(long lMasterAxisNo, long 
lMasterGain, long lSlaveGain);
Visual Basic
Function AxmGantrySetCompensationGain(ByVal lMasterAxisNo As Long, 
ByVal lMasterGain As Long, ByVal lSlaveGain As Long) As Long
Delphi
function AxmGantrySetCompensationGain(lMasterAxisNo : LongInt; 
lMasterGain : LongInt; lSlaveGain : LongInt): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[in]lMasterGain Master Gain 값 (0 ~ 100 %)
[in]lSlaveGain Slave Gain 값 (0 ~ 100 %)

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 겐트리 구성 하려는 축이 구동 중 일 때
[4204] AXT_RT_MOTION_HOME_ERROR_GANTRY : 겐트리 구성 하려는 축이 홈을 찾고 있는 중 일 때
* See error code Table for more information on status error codes

Description

겐트리 구동 시스템 의 동기 보상 기능을 설정 한다.

예제코드

C++
if(AxmGantrySetCompansationGain (0,10,20) == AXT_RT_SUCCESS )
    printf(Master가 0축인 Gantry 시스템의 Master Gain을 10% Slave Gain을 20%로설정하였습니다. \n);
else 
    printf(Master가 0축인 Gantry 시스템의 Master  Slave의 Gain설정을실패하였습니다.\n);
Visual Basic
If (AxmGantrySetCompansationGain(0, 10, 20) = AXT_RT_SUCCESS) Then
    MsgBox Master 0축인 Gantry 시스템의 Master Gain 10% Slave Gain 20%로설정하였습니다., vbOKCancel
Else
    MsgBox Master 0축인 Gantry 시스템의 Master  Slave Gain설정을실패하였습니다., vbOKCancel
End If

Delphi
Begin
    if (AxmGantrySetCompansationGain(0,10,20) = AXT_RT_SUCCESS) then
        Application.MessageBox(Master 0축인 Gantry 시스템의 Master Gain 10% Slave Gain 20%로설정하였습니다., Ajinextek, MB_OK)
    else
        Application.MessageBox(Master 0축인 Gantry 시스템의 Master  Slave Gain설정을실패하였습니다., Ajinextek, MB_OK);
end;

AxmGantryGetCompensationGain

Purpose

겐트리 제어 시스템의 동기 보상 기능 설정을 반환한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmGantryGetCompensationGain(long lMasterAxisNo, long
*lpMasterGain, long *lpSlaveGain);
Visual Basic
Function AxmGantryGetCompensationGain(ByVal lMasterAxisNo As Long, 
ByRef lpMasterGain As Long, ByRef upSlaveGain As Long) As Long
Delphi
function AxmGantryGetCompensationGain(lMasterAxisNo : LongInt; 
lpMasterGain : LongInt; lpSlaveGain : LongInt): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo Master채널(축) 번호(0 ~ (최대축수 – 1))
[out]lpMasterGain Master축의 Compensation Gain 확인
[out]lpSlaveGain Slave축의 Compensation Gain 확인

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[1053] AXT_RT_NOT_OPEN : 라이브러리 초기화 실패
[4051] AXT_RT_MOTION_NOT_MODULE : 시스템에 장착된 모션 모듈이 없음
* See error code Table for more information on status error codes

Description

AxmGantrySetCompensationGain 로 설정한 Master 축의 CompensationGain 과 Slave 축의 CompensationGain 을 확인 할 수 있다.

예제코드

C++
longlMasterGain, lSlaveGain;
if(AxmGantrySetCompansationGain (0,10,20) == AXT_RT_SUCCESS )
    printf(Master가 0축인 Gantry 시스템의 Master Gain을 10% Slave Gain을 20%로설정하였습니다. \n);
else 
    printf(Master가 0축인 Gantry 시스템의 Master  Slave의 Gain설정을실패하였습니다.\n);
AxmGantryGetCompensationGain(0,&lMasterGain, &lSlaveGain);
Visual Basic
Dim lMasterGain, lSlaveGain As Long
If (AxmGantrySetCompansationGain(0, 10, 20) = AXT_RT_SUCCESS) Then
    MsgBox Master 0축인 Gantry 시스템의 Master Gain 10% Slave Gain 20%로설정하였습니다., vbOKCancel
Else
    MsgBox Master 0축인 Gantry 시스템의 Master  Slave Gain설정을실패하였습니다., vbOKCancel
End If
AxmGantryGetCompensationGain0, lMasterGain, lSlaveGain

Delphi
var
    lMasterGain, lSlaveGain : LongInt;
begin
    if (AxmGantrySetCompansationGain(0,10,20) = AXT_RT_SUCCESS) then
        Application.MessageBox(Master 0축인 Gantry 시스템의 Master Gain 10% Slave Gain 20%로설정하였습니다., Ajinextek, MB_OK)
    else
        Application.MessageBox(Master 0축인 Gantry 시스템의 Master  Slave Gain설정을실패하였습니다., Ajinextek, MB_OK);
AxmGantryGetCompensationGain(0, @lMasterGain, @ lSlaveGain);
end;