Skip to content

동기 구동 (Sync Move)

동기구동이란 Electric Gear Mode 라고도하는데, 독립된 두개의 축을 하나의 축처럼 제어하는 방식을 말한다. 사용자가 특정 Master축과 Slave축을 설정하고, 두 축간의 구동비를 설정해주면 Master축이 움직일 때 설정 된 구동비로 Slave축이 같이 움직이는 구동이다.

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

Sync

1. 전자 기어(Electronic Gearing) 구동 (EGear)

하나의 마스터축에 다수의 슬레이브축을 연결하여 설정한 기어비에 따른 구동을 할 수 있다.

1.1. 전자 기어(Electronic Gearing) 구동 함수 리스트

Function Description
AxmEGearSet 하나의 마스터축에 다수의 슬레이브축들을 연결한다.
AxmEGearGet Electronic Gearing의 정보를 읽어온다.
AxmEGearReset Electronic Gearing을 해제한다.
AxmEGearEnable Electronic Gearing을 활성화/비활성화 한다.
AxmEGearIsEnable Electronic Gearing의 활성화/비활성화상태를 확인한다.

1.2. 전자 기어(Electronic Gearing) 구동 함수 소개

AxmEGearSet

Purpose

하나의 마스터축에 다수의 슬레이브축들을 연결한다(Electronic Gearing).

Format

C++
DWORD AxmEGearSet (long lMasterAxisNo, long lSize, long* 
lpSlaveAxisNo, double* dpGearRatio);
C#
uint AxmEGearSet (int nMasterAxisNo, int nSize, int[] npSlaveAxisNo, 
double[] dpGearRatio);
Visual Basic
Function AxmEGearSet (ByVal lMasterAxisNo As Integer, ByVal lSize As 
Integer, ByRef lpSlaveAxisNo As Integer, ByRef dpGearRatio As Doubel) 
As Long
Delphi
function AxmEGearSet (lMasterAxisNo: LongInt; lSize: LongInt; 
lpSlaveAxisNo: PLongInt; dpGearRatio: PDouble) : DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[in]lSize 슬레이브축 개수(최대 8)
[in]pSlaveAxisNo 슬레이브 채널(축) 번호(0 ~ (최대축수 - 1))
[in]]dpGearRatio 마스터축을 기준으로 하는 슬레이브축 비율

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4113] AXT_RT_MOTION_INVALID_VELOCITY : 모션 구동 속도 값 이 0 으로 설정되어 모션 에러 발생
[4152] AXT_RT_MOTION_ERROR_IN_MOTION : 모션 구동 중에 설정 함수를 실행함
* See error code Table for more information on status error codes

Description

하나의 마스터축에 다수의 슬레이브축들을 연결한다. 슬레이브로 사용한 축을 마스터로 지정하여 다시 설정할 수 없다. 기어비에 ‘0’을 기입할 수 없으며 슬레이브축의 구동값은 마스터축에 기어비를 곱한값이다. 따라서 ‘1’을 기입할 경우에는 마스터축과 동일한 구동을 한다.

예제코드

C++
// 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다.
long lMasterAxisNo = 0, lSize = 2;
long lSlaveAxisNo[2];
double dGearRaito[2];
lSlaveAxisNo[0] = 1;
lSlaveAxisNo[1] = 2;
dGearRaito[0] = 0.1;
dGearRaito[1] = 0.2;
AxmEGearSet(lMasterAxisNo, lSize, lSlaveAxisNo, dGearRaito);
Visual Basic
0축을 기준으로 1,2 축이 각각 0.1배와 0.2배로 구동한다.
Dim lMasterAxisNo As Integer
Dim lSize As Integer
Dim lSlaveAxisNo(0 To 1) As Integer
Dim dGearRaito(0 To 1) As Double
lMasterAxisNo = 0
lSize = 2
lSlaveAxisNo(0) = 1
lSlaveAxisNo(1) = 2
dGearRaito (0) = 0.1
dGearRaito (1) = 0.2
AxmEGearSet lMasterAxisNo, lSize, lSlaveAxisNo(0), dGearRaito(0)

Delphi
{ 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다. }
var
    lMasterAxisNo: LongInt;
    lSize: LongInt;
    lSlaveAxisNo: array[0..1] of LongInt;
    dGearRaito: array[0..1] of Double;
begin
    lMasterAxisNo := 0
    lSize := 2
    lSlaveAxisNo[0] := 1
    lSlaveAxisNo[1] := 2
    dGearRaito[0] := 0.1
    dGearRaito[1] := 0.2
    AxmEGearSet(lMasterAxisNo, lSize, @lSlaveAxisNo, @dGearRaito);
end;

AxmEGearGet

Purpose

Electronic Gearing 의 정보를 읽어온다.

Format

C++
DWORD AxmEGearGet (long lMasterAxisNo, long* lpSize, long* 
lpSlaveAxisNo, double* dpGearRatio);
C#
uint AxmEGearGet (int nMasterAxisNo, ref int npSize, ref int 
npSlaveAxisNo, ref double dpGearRatio);
Visual Basic
Function AxmEGearGet (ByVal lMasterAxisNo As Integer, ByRef lpSize As 
Integer, ByRef lpSlaveAxisNo As Integer, ByRef dpGearRatio As Double) 
As Integer
Delphi
function AxmEGearGet (lMasterAxisNo: LongInt; lpSize: PLongInt; 
lpSlaveAxisNo: PLongInt; dpGearRatio: PDouble) : DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[out]lSize 슬레이브축 개수(최대 8)
[out]pSlaveAxisNo 슬레이브 채널(축) 번호(0 ~ (최대축수 - 1))
[out]]dpGearRatio 마스터축을 기준으로 하는 슬레이브축 비율

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

Electronic Gearing 의 정보를 읽어온다.

예제코드

// 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다.
long lMasterAxisNo = 0, lSize = 2;
long lSlaveAxisNo[2];
double dGearRaito[2];
lSlaveAxisNo[0] = 1;
lSlaveAxisNo[1] = 2;
dGearRaito[0] = 0.1;
dGearRaito[1] = 0.2;
AxmEGearSet(lMasterAxisNo, lSize, lSlaveAxisNo, dGearRaito);
// EGear설정을 확인한다.
AxmEGearGet(lMasterAxisNo, &lSize, &lSlaveAxisNo, &dGearRaito);
Visual Basic
0축을 기준으로 1,2 축이 각각 0.1배와 0.2배로 구동한다.
Dim lMasterAxisNo As Integer
Dim lSize As Integer
Dim lSlaveAxisNo(0 To 1) As Integer
Dim dGearRaito(0 To 1) As Double
lMasterAxisNo = 0
lSize = 2
lSlaveAxisNo(0) = 1
lSlaveAxisNo(1) = 2
dGearRaito (0) = 0.1
dGearRaito (1) = 0.2
AxmEGearSet lMasterAxisNo, lSize, lSlaveAxisNo(0), dGearRaito(0)
// EGear설정을 확인한다.
AxmEGearGet lMasterAxisNo, lSize, lSlaveAxisNo(0), dGearRaito(0)

Delphi
{ 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다. }
var
    lMasterAxisNo: LongInt;
    lSize: LongInt;
    lSlaveAxisNo: array[0..1] of LongInt;
    dGearRaito: array[0..1] of Double;
begin
    lMasterAxisNo := 0
    lSize := 2
    lSlaveAxisNo[0] := 1
    lSlaveAxisNo[1] := 2
    dGearRaito[0] := 0.1
    dGearRaito[1] := 0.2
    AxmEGearSet(lMasterAxisNo, lSize, @lSlaveAxisNo, @dGearRaito);
    // EGear설정을 확인한다.
    AxmEGearGet(lMasterAxisNo, @lSize, @lSlaveAxisNo, @dGearRaito);
end;

AxmEGearReset

Purpose

Electronic Gearing 을 해제한다.

Format

C++
DWORD AxmEGearReset (long lMasterAxisNo);
C#
uint AxmEGearReset (int nMasterAxisNo);
Visual Basic
Function AxmEGearReset (ByVal lMasterAxisNo As Integer) As Integer
Delphi
function AxmEGearReset (lMasterAxisNo: LongInt) : DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

Electronic Gearing 을 해제한다.

예제코드

// 0번 축에 설정되어있던 EGear를 해제한다.
long lMasterAxisNo = 0;
 AxmEGearReset(lMasterAxisNo);
Visual Basic
0 축에 설정되어있던 EGear 해제한다.
Dim lMasterAxisNo As Integer
lMasterAxisNo = 0
AxmEGearReset lMasterAxisNo

Delphi
{ 0번 축에 설정되어있던 EGear를 해제한다. }
var
    lMasterAxisNo: LongIng;
begin
    lMasterAxisNo := 0;
    AxmEGearReset (lMasterAxisNo);
end;

AxmEGearEnable

Purpose

Electronic Gearing 을 활성화/비활성화 한다.

Format

C++
DWORD AxmEGearEnable (long lMasterAxisNo, DWORD dwEnable);
C#
uint AxmEGearEnable (int nMasterAxisNo, uint uEnable);
Visual Basic
Function AxmEGearEnable (ByVal lMasterAxisNo As Integer, ByVal 
dwEnable As Integer) As Integer
Delphi
function AxmEGearEnable (lMasterAxisNo: LongInt; dwEnable: DWord) : 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[in]dwEnable Electronic Gearing 설정 : FALSE & TRUE
-[00h] Electronic Gearing를 사용하지 않음
-[01h] Electronic Gearing를 사용함

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

Electronic Gearing 을 활성화/비활성화 한다.

예제코드

// 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다.
long lMasterAxisNo = 0, lSize = 2;
long lSlaveAxisNo[2];
double dGearRaito[2];
DWORD dwEnable = 1;
lSlaveAxisNo[0] = 1;
lSlaveAxisNo[1] = 2;
dGearRaito[0] = 0.1;
dGearRaito[1] = 0.2;
AxmEGearSet(lMasterAxisNo, lSize, lSlaveAxisNo, dGearRaito);
// 0축 기준의 EGear를 활성화시킨다.
AxmEGearEnable(lMasterAxisNo, dwEnable);
Visual Basic
0축을 기준으로 1,2 축이 각각 0.1배와 0.2배로 구동한다.
Dim lMasterAxisNo As Integer
Dim lSize As Integer
Dim lSlaveAxisNo(0 To 1) As Integer
Dim dGearRaito(0 To 1) As Double
Dim dwEnable As Integer
lMasterAxisNo = 0
lSize = 2
lSlaveAxisNo(0) = 1
lSlaveAxisNo(1) = 2
dGearRaito (0) = 0.1
dGearRaito (1) = 0.2
dwEnable = 1
AxmEGearSet lMasterAxisNo, lSize, lSlaveAxisNo(0), dGearRaito(0)
// 0 기준의 EGear 활성화시킨다.
AxmEGearEnable lMasterAxisNo, dwEnable

Delphi
{ 0축을 기준으로 1,2번 축이 각각 0.1배와 0.2배로 구동한다. }
var
    lMasterAxisNo: LongInt;
    lSize: LongInt;
    lSlaveAxisNo: array[0..1] of LongInt;
    dGearRaito: array[0..1] of Double;
    dwEnable: Dword;
begin
    lMasterAxisNo := 0
    lSize := 2
    lSlaveAxisNo[0] := 1
    lSlaveAxisNo[1] := 2
    dGearRaito[0] := 0.1
    dGearRaito[1] := 0.2
    dwEnable := 1;
    AxmEGearSet(lMasterAxisNo, lSize, @lSlaveAxisNo, @dGearRaito);
    // 0축 기준의 EGear를 활성화시킨다.
    AxmEGearEnable(lMasterAxisNo, dwEnable);
end;

AxmEGearIsEnable

Purpose

Electronic Gearing 의 활성화/비활성화 상태를 확인한다.

Format

C++
DWORD AxmEGearIsEnable (long lMasterAxisNo, DWORD *dwpEnable);
C#
uint AxmEGearIsEnable (int nMasterAxisNo, ref uint upEnable);
Visual Basic
Function AxmEGearIsEnable (ByVal lMasterAxisNo As Integer, ByRef
dwpEnable As Integer) As Integer
Delphi
function AxmEGearIsEnable (lMasterAxisNo: LongInt; dwpEnable: DWord) : 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[out]dwpEnable Electronic Gearing 설정 : FALSE & TRUE
-[00h] Electronic Gearing를 사용하지 않음
-[01h] Electronic Gearing를 사용함

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

Electronic Gearing 의 활성화/비활성화 상태를 확인한다.

예제코드

// 0번 축의 EGear 활성화 상태를 확인한다.
long lMasterAxisNo = 0;
DWORD dwEnable = 1;
AxmEGearIsEnable(lMasterAxisNo, dwEnable);
Visual Basic
0 축의 EGear 활성화 상태를 확인한다.
Dim lMasterAxisNo As Integer
Dim dwEnable As Integer
lMasterAxisNo = 0
dwEnable = 1
AxmEGearIsEnable lMasterAxisNo, dwEnable 

Delphi
{ 0번 축의 EGear 활성화 상태를 확인한다. }
var
    lMasterAxisNo: LongIng;
    dwEnable: DWord;
begin
    lMasterAxisNo := 0;
    dwEnable := 1
    AxmEGearIsEnable(lMasterAxisNo, dwEnable);
end;

Function Description
AxmLinkSetMode Master 축과 Slave축간의 전자기어비를 설정한다.
AxmLinkGetMode Master 축과 Slave축간의 전자기어비를 반환한다.
AxmLinkResetMode Master 축과 Slave축간의 전자기어비를 설정 해제 한다.

AxmLinkSetMode

Purpose

Master 축과 Slave 축간의 전자기어비를 설정한다.

Format

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

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[in]lSlaveAxisNo 슬레이브채널(축) 번호(0 ~ (최대축수 - 1))
[in]dSlaveRatio 마스터축(1)에 대한 슬레이브의 기어비(0.0 ~ 1.0)

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4160] AXT_RT_ERROR_NOT_SAME_BOARD : 똑같은 보드 내에 있지 않을 경우
[4163] AXT_RT_ERROR_NOT_SAME_IC : 같은 칩 내 존재하지 않을 때
* See error code Table for more information on status error codes

Description

지정한 축에 대하여 이송명령을 내렸을 때 이송동작의 슬레이브축이 마스터축의 동작 상황에 동기되어 시작되도록 할 때 사용하는 함수다. 사용자가 지정한 Axis 에 master 축이 움직일 때 slave 축이 같이 구동하게 master, slave 축을 지정한다. ratio 의 구동 비는 master 축이 한 바퀴 돌 때 slave 축이 구동할 비를 말한다.(SlaveRatio 0 ~ 100% 0 : 0%, 0.5 : 50%, 1.0 : 100%).

예제코드

// 마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때
// 마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.
AxmLinkSetMode(0, 1, 0.5);
// Master 축과 Slave축간의전자기어비를반환한다.
double dpGearRatio;
long lpSlaveAxis;
AxmLinkGetMode(0, &lpSlaveAxis, &dpGearRatio);
Visual Basic
‘마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때
‘마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.
AxmLinkSetMode 0, 1, 0.5
Master 축과 Slave축간의전자기어비를반환한다.
Dim dpGearRatio As Double
Dim lpSlaveAxis As Long
AxmLinkGetMode 0, lpSlaveAxis, dpGearRatio

Delphi
{ Master 축과 Slave축간의전자기어비를반환한다.}
var
    dpGearRatio: Double;
    lpSlaveAxis: LongInt;
begin
    { 마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때 마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.}
    AxmLinkSetMode(0, 1, 0.5);
    AxmLinkGetMode(0, @lpSlaveAxis, @dpGearRatio);
end;

AxmLinkGetMode

Purpose

Master 축과 Slave 축간의 전자기어비를 반환한다.

Format

C++
DWORD AxmLinkGetMode(long lMasterAxisNo, long *lpSlaveAxisNo, double 
*dpGearRatio);
Visual Basic
Function AxmLinkGetMode(ByVal lMasterAxisNo As Long, 
ByReflpSlaveAxisNo As Long, ByRef dpGearRatio As Double) As Long
Delphi
function AxmLinkGetMode(lMasterAxisNo : LongInt; lpSlaveAxisNo : 
PLongInt; dpGearRatio : PDouble) : DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))
[out]lSlaveAxisNo 슬레이브채널(축) 번호
[out]dSlaveRatio 마스터축(1)에 대한 슬레이브의 기어비

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

Master 축과 Slave 축간의 전자기어비를 반환한다. ratio 의 구동 비는 master 축이 한 바퀴 돌 때 slave 축이 구동할 비를 말한다.

예제코드

// 마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때
// 마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.
AxmLinkSetMode(0, 1, 0.5);
// Master 축과 Slave축간의전자기어비를반환한다.
double dpGearRatio;
long lpSlaveAxis;
AxmLinkGetMode(0, &lpSlaveAxis, &dpGearRatio);
Visual Basic
‘마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때
‘마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.
AxmLinkSetMode 0, 1, 0.5
Master 축과 Slave축간의전자기어비를반환한다.
Dim dpGearRatio As Double
Dim lpSlaveAxis As Long
AxmLinkGetMode 0, lpSlaveAxis, dpGearRatio

Delphi
{ Master 축과 Slave축간의전자기어비를반환한다.}
var
    dpGearRatio: Double;
    lpSlaveAxis: LongInt;
begin
    { 마스터축과슬레이브축의비율을 0.5로넣었기때문에움직일때 마스터가 1 움직이면슬레이브는 0.5만큼만움직인다.}
    AxmLinkSetMode(0, 1, 0.5);
    AxmLinkGetMode(0, @lpSlaveAxis, @dpGearRatio);

end;

AxmLinkResetMode

Purpose

Master 축과 Slave 축간의 전자기어비를 해제 한다.

Format

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

Parameters

[in/out] Name [Init Value] Explanation
[in]lMasterAxisNo 마스터 채널(축) 번호(0 ~ (최대축수 - 1))

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

사용자가 지정한 Axis 에 master 축이 움직일 때 slave 축이 같이 구동하게 master, slave 축을 지정한 ratio 를 해제시킨다. ratio 의 구동 비는 master 축이 한 바퀴 돌 때 slave 축이 구동할 비를 말한다.

예제코드

// Master 축과 Slave축간의전자기어비를설정해제한다.
AxmLinkResetMode(0);
Visual Basic
Master 축과 Slave축간의전자기어비를설정해제한다.
AxmLinkResetMode0

Delphi
{ Master 축과 Slave축간의전자기어비를설정해제한다.}
AxmLinkResetMode(0);

3. 전자 캠(Electronic CAM) 구동 (ECam)

전자 캠 구동(이하 ECAM) 구동은 슬래이브 축의 이동이 마스트 축에 캠이 장착된 관계와 유사하게 움직이는 것을 말한다. 마스트 축의 위치 정보를 사용하여 전자 캠 구동이 설정된 슬레이브 축은 사용자가 설정한 위 치로 이동하게된다.

전자 캠기능은 PCI-R1604-MLII 에서만 사용할 수 있습니다.

다음의 표의 내용으로 마스터 축에 대한 슬레이브 축의 위치 정보를 설정 하게 된다.

ECAM Point Master Distance Slave Position
0 0 0
1 400 100
2 800 200
3 1200 500
4 1600 600
5 2000 400
6 2400 200
7 2800 100
8 3200 50
9 3600 0

ECAM 슬레이브의 위치 정보는 마스터 축의 이동 거리에 대하여 주기성을 가져야 하며, 시작 위치의 슬레이브 위치와 종료 위치의 슬레이브 위치는 ‘0’을 가져야 한다.

위 표의 내용으로 설정된 슬레이브의 이동 유형은 아래의 그림과 같다.

ECAM Master Encoder Position

ECAM 기능을 사용하기 위해 설정해야하는 정보는 기준 위치 정보로 사용할 마스터 축, 위치 정보의 개수, 마스터 축 위치 정보, 슬레이브 축의 위치 정보 값이며, 위치 정보의 개수는 마스터 및 슬레이브 위치 배열의 개수에서 1작은 값을 설정한다. 즉 마스터 및 슬레이브 위치 입력 정보를 배열로 입력할 때 0에서 시작되는 배열 인덱스의 마지막 값을 입력하여야 한다. 최대 512개의 위치 정보를 설정할 수 있다. ECAM을 위한 라이 브러리 함수에는 위치 설정(AxmEcamSet, AxmEcamGet), 사용 유무 설정(AxmEcamEnableBySlave, AxmEcamIsSlaveEnable, AxmEcamEnableByMaster) 가 있다.

// 마스터축 : 0, 슬레이브축 : 1, 10개의위치정보를사용한 ECAM 기능설정
long lAxis, lMasterAxis;
double dPos[11],dSlavePos[11];
lAxis = 1 ;
lMasterAxis = 0 ;
lNumPeriod = 10 ;
dPos[0] = 0; dSlavePos[0] = 0;
dPos[1] = 100; dSlavePos[1] = 9.549;
dPos[2] = 200; dSlavePos[2] = 34.549;
dPos[3] = 300; dSlavePos[3] = 65.45;
dPos[4] = 400; dSlavePos[4] = 90.45;
dPos[5] = 500; dSlavePos[5] = 100;
dPos[6] = 600; dSlavePos[6] = 90.45;
dPos[7] = 700; dSlavePos[7] = 65.45;
dPos[8] = 800; dSlavePos[8] = 34.549;
dPos[9] = 900; dSlavePos[9] = 9.549;
dPos[10] = 1000; dSlavePos[10] = 0;
AxmEcamSet(lAxis, lMasterAxis, lNumPeriod, 0, dPos, dSlavePos );
AxmEcamEnableBySlave(lAxis, ENABLE);

3.1. 전자 캠(Electronic CAM) 구동 함수 리스트

Function Description
AxmEcamSet 지정 축에 ECAM 마스터 축 지정, 위치 정보, 시작 위치 등을 설정한다.
AxmEcamGet 지정 축에 ECAM 마스터 축 지정, 위치 정보, 시작 위치 등을 반환한다.
AxmEcamEnableBySlave 지정 축에 이전 AxmEcamSet 설정을 사용하여 ECAM 구동을 시작/종료한다.
AxmEcamIsSlaveEnable 지정 축에 현재 ECAM 구동 상태를 반환한다.
AxmEcamEnableByMaster 동일한 마스터 축을 사용하는 모든 슬레이브 축의 ECAM 구동을 시작/종료한다.

3.2. 전자 캠(Electronic CAM) 구동 함수 소개

AxmEcamSet

Purpose

지정 축에 ECAM 마스터 축 지정, 위치 정보, 시작 위치 등을 설정한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD __ AxmEcamGet(long lAxisNo, long *lpMasterAxis, long 
*lpNumEntry, double *dpMasterStartPos, double *dpMasterPos, double 
*dpSlavePos);
Visual Basic
Function AxmEcamGet(ByVal lAxisNo As Long, ByRef lpMasterAxis As
Long,ByRef lpNumEntry As Long,ByRef dpMasterStartPos As Double, ByRef 
dpMasterPos As Double, ByRef dpSlavePos As Double) As Long
Delphi
function AxmEcamGet(lAxisNo : LongInt;lpMasterAxis : PLongInt; 
lpNumEntry : PLongInt; dpMasterStartPos : PDouble; dpMasterPos : 
PDouble; dpSlavePos : PDouble): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[in]lMasterAxis ECAM 마스터(기준) 채널(축) 번호(0 ~ (최대축수 – 1))
lAxisNo ≠ lMasterAxis
[in]lNumEntry ECAM 위치 정보 데이터 개수( < 512 )
[in]]dMasterStartPos ECAM 위치 정보 시작 데이터가 적용될 마스트 축 위치 정보
[in]dpMasterPos ECAM 마스터 축의 dMasterStartPos을 기준으로한 상대 위치 좌표
(dpMasterPos[0] = 0, dpMasterPos[n + 1] > dpMasterPos[n])
[in]dpSlavePos ECAM 시작 시점을 기준으로한 ECAM 구동 축의 상대 위치.
(dpSlavePos[0] = 0, dpSlavePos[lNumEntry] = 0)

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

지정 축에 ECAM 을 사용하기 위한 정보를 설정한다

ECAM 은 지정한 마스터 축의 거리 변화에 따른 해당 축의 위치 구동으로 이루어 지는데 이때 필요한 입력 값으로 마스터 축 번호, ECAM 위치 정보 데이터 개수, ECAM 위치 정보 첫번째 데이터를 적용할 마스터 축의 위치(EACM 시작 위치), 마스터 축의 시작위치에 대한 상대 거리, 마스터 축의 시작위치에 대한 상대 거리에서의 ECAM 축 위치를 설정하여야 한다.

이때 ECAM 위치 입력 정보의 첫번째 데이터는 마스터 축 위치와 ECAM 구동 거리가 모두 0 로 입력되어야 하며, 마지막 ECAM 축 위치 데이터는 0 이어야 한다. 설정된 내용으로 ECAM 구동을 시작하기 위해서는 'AxmEcamEnableBySlave' 또는 'AxmEcamEnableByMaster'를 사용한다

예제코드

C++
// 1번슬레이브축에 0번축을마스터축으로ECAM table을적용함, 시작위치 0
// 데이터개수 10개.
long lAxis, lMasterAxis, lNumEntry;
double dPos[11],dSlavePos[11], dMasterStartPos, dMasterCycle;
lAxis = 1 ;
lMasterAxis = 0 ;
dMasterStartPos = 0;
lNumEntry = 10;
dPos[0] = 0; dSlavePos [0] = 0;
dPos[1] = 100; dSlavePos [1] = 9.549;
dPos[2] = 200; dSlavePos [2] = 34.549;
dPos[3] = 300; dSlavePos [3] = 65.45;
dPos[4] = 400; dSlavePos [4] = 90.45;
dPos[5] = 500; dSlavePos [5] = 100;
dPos[6] = 600; dSlavePos [6] = 90.45;
dPos[7] = 700; dSlavePos [7] = 65.45;
dPos[8] = 800; dSlavePos [8] = 34.549;
dPos[9] = 900; dSlavePos [9] = 9.549;
dPos[10] = 1000; dSlavePos [10] = 0;
AxmEcamSet(lAxis, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
Visual Basic
` 1번슬레이브축에 0번축을마스터축으로ECAM table을적용함, 시작위치 0, 
` 데이터개수 10.
Dim lAxis As Long
Dim lMasterAxis As Long
Dim lNumEntry As Long
Dim dPos(0 To 11) As Double
Dim dSlavePos(0 To 11) As Double
Dim dMasterStartPos As Double
lAxis = 1
lMasterAxis = 0
lNumEntry = 10
dMasterStartPos = 0
dPos(0) = 0 dSlavePos (0) = 0
dPos(1) = 100 dSlavePos (1) = 9.549
dPos(2) = 200 dSlavePos (2) = 34.549
dPos(3) = 300 dSlavePos (3) = 65.45
dPos(4) = 400 dSlavePos (4) = 90.45
dPos(5) = 500 dSlavePos (5) = 100
dPos(6) = 600 dSlavePos (6) = 90.45
dPos(7) = 700 dSlavePos (7) = 65.45
dPos(8) = 800 dSlavePos (8) = 34.549
dPos(9) = 900 dSlavePos (9) = 9.549
dPos(10) = 1000 dSlavePos (10) = 0

AxmEcamSet lAxis, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos

Delphi
{1번슬레이브축에 0번축을마스터축으로ECAM table을적용함, 시작위치 0, 데이터개수 10개.}
var
    lAxis : LongInt;
    lMasterAxis : LongInt;
    lNumEntry: Longint;
    dPos : array [0..11] of Double;
    dSlavePos : array [0..11] of Double;
    dMasterStartPos : Double;
begin
    lAxis := 1 ;
    lMasterAxis := 0 ;
    lNumEntry := 10 ;
    dMasterStartPos := 0 ;

    dPos[0] := 0; dSlavePos[0] := 0;
    dPos[1] := 100; dSlavePos[1] := 9.549;
    dPos[2] := 200; dSlavePos[2] := 34.549;
    dPos[3] := 300; dSlavePos[3] := 65.45;
    dPos[4] := 400; dSlavePos[4] := 90.45;
    dPos[5] := 500; dSlavePos[5] := 100;
    dPos[6] := 600; dSlavePos[6] := 90.45;
    dPos[7] := 700; dSlavePos[7] := 65.45;
    dPos[8] := 800; dSlavePos[8] := 34.549;
    dPos[9] := 900; dSlavePos[9] := 9.549;
    dPos[10] := 1000; dSlavePos[10] := 0;

    AxmEcamSet (lAxis, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
end;

AxmEcamGet

Purpose

지정 축에 ECAM 마스터 축 지정, 위치 정보, 시작 위치 등을 확인한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmEcamSet(long lAxisNo, long lMasterAxis, long lNumEntry, 
double dMasterStartPos, double *dpMasterPos, double *dpSlavePos);
Visual Basic
Function AxmEcamSet(ByVal lAxisNo As Long, ByVal lMasterAxis As 
Long,ByVal lNumEntry As Long,ByVal dMasterStartPos As Double, ByRef 
dpMasterPos As Double, ByRef dpSlavePos As Double)As Long
Delphi
function AxmEcamSet(lAxisNo : LongInt;lMasterAxis : LongInt; 
lNumEntry : LongInt; dMasterStartPos : Double; dpMasterPos : PDouble; 
dpSlavePos : PDouble): DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[out]lMasterAxis ECAM 마스터(기준) 채널(축) 번호(0 ~ (최대축수 – 1))
lAxisNo ≠ lMasterAxis
[out]lNumEntry ECAM 위치 정보 데이터 개수( < 512 )
[out]dMasterStartPos ECAM 위치 정보 시작 데이터가 적용될 마스트 축 위치 정보
[out]dpMasterPos ECAM 마스터 축의 dMasterStartPos을 기준으로한 상대 위치 좌표
[out]dpSlavePos ECAM 시작 시점을 기준으로한 ECAM 구동 축의 상대 위치.

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

AxmEcamSet 로 설정된 지정 축에 ECAM 마스터 축정, 위치 정보, 시작 위치 등을 반환한다.

예제코드

C++
// 1번축에연결된 ECAM table관련정보를확인한다.
long lAxis = 1;
long lMasterAxis;
long lNumEntry;
double dMasterStartPos;
double dPos[512];
double dSlavePos[512];
AxmEcamGet(lAxis, &lMasterAxis, &lNumEntry, &dMasterStartPos, dPos, dSlavePos);
Visual Basic
`1번축에연결된 ECAM table관련정보를확인한다. 
Dim lAxis As Long
Dim lMasterAxis As Long
Dim lRetNumEntryAs Long
Dim dRetPos(0 To 11) As Double
Dim dRetSlavePos(0 To 11) As Double
Dim dRetMasterStartPos As Double
lAxis = 1
AxmEcamGet lAxis, lMasterAxis, lRetNumEntry, dRetMasterStartPos, dRetPos(0), dRetSlavePos(0)

Delphi
{1번축에연결된 ECAM table관련정보를확인한다. }
var
    lAxis : Longint;
    lRetNumEntry: Longint;
    dRetPos : array [0..11] of Double;
    dRetSlavePos : array [0..11] of Double;
    dRetMasterStartPos : Double;

begin
    lAxis := 1;
    AxmEcamGet (lAxis, @lMasterAxis, @lRetNumEntry, @dRetMasterStartPos, dRetPos, dRetSlavePos );

end;

AxmEcamEnableBySlave

Purpose

지정 축에 ECAM 구동을 시작/종료 한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmEcamEnableBySlave (long lAxisNo,DWORDdwEnable);
Visual Basic
Function AxmEcamEnableBySlave (ByVal lAxisNo As Long, ByVal dwEnable 
As Long) As Long
Delphi
function AxmEcamEnableBySlave (lAxisNo : LongInt; dwEnable : DWord) : 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[in]dwEnable ECAM 구동 시작 또는 종료 설정 : AXT_USE
- [00h] ECAM 기능 사용하지 않음
- [01h] ECAM 기능 사용

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

지정 축에 AxmEcamSet으로 설정된 내용으로 ECAM 구동을 시작하거나 현재 구동중인 ECAM 구동을 종료하는 함수이다. 이 함수를 실행하기 전 반드시 AxmEcamSet 으로 ECAM 구동에 필요한 정보가 설정되어 있어야 한다.

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

C++
// 1번축을 ECAM 슬레이브축으로활성화함.
long lAxis = 1;
AxmEcamEnableBySlave(lAxis, ENABLE );
Visual Basic
 1번축을 ECAM 슬레이브축으로활성화함.
Dim lAxis As Long
lAxis = 1
AxmEcamEnableBySlave lAxis, ENABLE

Delphi
{ 1번축을 ECAM 슬레이브축으로활성화함. }
var
    lAxis : Longint;
begin
    lAxis := 1;
    AxmEcamEnableBySlave (lAxis, ENABLE);

end;

AxmEcamIsSlaveEnable

Purpose

지정 축에 ECAM 구동을 시작 상태를 확인 한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmEcamIsSlaveEnable(long lAxisNo,DWORD *dwpEnable);
Visual Basic
Function AxmEcamIsSlaveEnable(ByVal lAxisNo As Long, ByRefdwpEnable 
As Long) As Long
Delphi
function AxmEcamIsSlaveEnable(lAxisNo : LongInt; dwpEnable : PDWord) : 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[out]dwEnable ECAM 구동 시작 또는 종료 설정 : AXT_USE
- [00h] ECAM 기능 사용하지 않음
- [01h] ECAM 기능 사용

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

AxmEcamEnableBySlave, AxmEcamEnableByMaster로 설정된 지정 축의 ECAM 구동 상태를 반환한다

예제코드

C++
// 1번축이 ECAM 슬레이브축으로사용되고있는지확인.
long lAxis = 1;
DWORD dwEnable;
AxmEcamIsSlaveEnable(lAxis, &dwEnable );
Visual Basic
 1번축이 ECAM 슬레이브축으로사용되고있는지확인.
Dim lAxis As Long
Dim dwReturn As Long
lAxis = 1
AxmEcamIsSlaveEnablelAxis, dwReturn

Delphi
{ 1번축이 ECAM 슬레이브축으로사용되고있는지확인. }
var
    dwRetEnable : Long;
    lAxis : Longint;

begin
    lAxis := 1;
    AxmEcamIsSlaveEnable(lAxis, @dwRetEnable);

end;

AxmEcamEnableByMaster

Purpose

지정 축을 마스터축으로 사용하는 모든 슬레이브 축에 대하여 ECAM 구동을 시작/종료 한다.
주의사항 : PCI-R1604-MLII 전용 함수입니다.

Format

C++
DWORD AxmEcamEnableByMaster (long lAxisNo, DWORD dwEnable);
Visual Basic
Function AxmEcamEnableByMaster (ByVal lAxisNo As Long, ByVal dwEnable 
As Long) As Long
Delphi
function AxmEcamEnableByMaster (lAxisNo : LongInt; dwEnable : DWord) : 
DWord; stdcall;

Parameters

[in/out] Name [Init Value] Explanation
[in]lAxisNo 채널(축) 번호(0 ~ (최대축수 – 1))
[in]dwEnable ECAM 구동 시작 또는 종료 설정 : AXT_USE
- [00h] ECAM 기능 사용하지 않음
- [01h] ECAM 기능 사용

Return Values

[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4053] AXT_RT_MOTION_NOT_INITIAL_AXIS_NO : 해당 축 모션 초기화 실패
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes

Description

AxmEcamSet 으로 설정된 축들중 지정된 마스트 축번호를 사용하는 모든 축에 대하여 ECAM 구동을 시작하거나 종료하는 함수이다. 이 함수를 실행하기 전 반드시 AxmEcamSet 으로 ECAM 구동에 필요한 정보가 설정되어 있어야 한다.

예제코드

C++
// 0번마스터축에 1/2/3번슬레이브축으로 ECAM 테이블을적용함, 시작위치는 0
// 데이터개수 10개.
long lAxis, lMasterAxis, lNumEntry;
double dPos[11],dSlavePos[11], dMasterStartPos, dMasterCycle;
lAxis = 1 ;
lMasterAxis = 0 ;
dMasterStartPos = 0;
lNumEntry = 10;
dPos[0] = 0; dSlavePos [0] = 0;
dPos[1] = 100; dSlavePos [1] = 9.549;
dPos[2] = 200; dSlavePos [2] = 34.549;
dPos[3] = 300; dSlavePos [3] = 65.45;
dPos[4] = 400; dSlavePos [4] = 90.45;
dPos[5] = 500; dSlavePos [5] = 100;
dPos[6] = 600; dSlavePos [6] = 90.45;
dPos[7] = 700; dSlavePos [7] = 65.45;
dPos[8] = 800; dSlavePos [8] = 34.549;
dPos[9] = 900; dSlavePos [9] = 9.549;
dPos[10] = 1000; dSlavePos [10] = 0;
AxmEcamSet(1, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
AxmEcamSet(2, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
AxmEcamSet(3, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
// 마스터축 0번에연결된모든슬레이브축에 ECAM기능을활성화함.
AxmEcamEnableByMaster(0, ENABLE);
Visual Basic
` 0번마스터축에 1/2/3번슬레이브축으로 ECAM 테이블을적용함, 시작위치는 0, 
` 데이터개수 10.
Dim lAxis As Long
Dim lMasterAxis As Long
Dim lNumEntry As Long
Dim dPos(0 To 11) As Double
Dim dSlavePos(0 To 11) As Double
Dim dMasterStartPos As Double
lAxis = 1
lMasterAxis = 0
lNumEntry = 10
dMasterStartPos = 0
dPos(0) = 0 dSlavePos (0) = 0
dPos(1) = 100 dSlavePos (1) = 9.549
dPos(2) = 200 dSlavePos (2) = 34.549
dPos(3) = 300 dSlavePos (3) = 65.45
dPos(4) = 400 dSlavePos (4) = 90.45
dPos(5) = 500 dSlavePos (5) = 100
dPos(6) = 600 dSlavePos (6) = 90.45
dPos(7) = 700 dSlavePos (7) = 65.45
dPos(8) = 800 dSlavePos (8) = 34.549
dPos(9) = 900 dSlavePos (9) = 9.549
dPos(10) = 1000 dSlavePos (10) = 0
AxmEcamSet 1, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos
AxmEcamSet 2, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos
AxmEcamSet 3, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos
AxmEcamEnableByMaster 0, ENABLE

Delphi
{0번마스터축에 1/2/3번슬레이브축으로 ECAM 테이블을적용함, 시작위치는 0, 데이터개수 10개. }
var
    lAxis : LongInt;
    lMasterAxis : LongInt;
    lNumEntry: Longint;
    dPos : array [0..11] of Double;
    dSlavePos : array [0..11] of Double;
    dMasterStartPos : Double;
begin
    lAxis := 1 ;
    lMasterAxis := 0 ;
    lNumEntry := 10 ;
    dMasterStartPos := 0 ;
    dPos[0] := 0; dSlavePos[0] := 0;
    dPos[1] := 100; dSlavePos[1] := 9.549;
    dPos[2] := 200; dSlavePos[2] := 34.549;
    dPos[3] := 300; dSlavePos[3] := 65.45;
    dPos[4] := 400; dSlavePos[4] := 90.45;
    dPos[5] := 500; dSlavePos[5] := 100;
    dPos[6] := 600; dSlavePos[6] := 90.45;
    dPos[7] := 700; dSlavePos[7] := 65.45;
    dPos[8] := 800; dSlavePos[8] := 34.549;
    dPos[9] := 900; dSlavePos[9] := 9.549;
    dPos[10] := 1000; dSlavePos[10] := 0;
    AxmEcamSet (1, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
    AxmEcamSet (2, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
    AxmEcamSet (3, lMasterAxis, lNumEntry, dMasterStartPos, dPos, dSlavePos);
    AxmEcamEnableByMaster(0, ENABLE);

end;