동기 구동 (Sync Move)
동기구동이란 Electric Gear Mode 라고도하는데, 독립된 두개의 축을 하나의 축처럼 제어하는 방식을 말한다. 사용자가 특정 Master축과 Slave축을 설정하고, 두 축간의 구동비를 설정해주면 Master축이 움직일 때 설정 된 구동비로 Slave축이 같이 움직이는 구동이다.
Note) 동기 구동을 위한 두 축은 반드시 같은 보드에 속한 축을 선택하여야 한다.
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;
2. Master, Slave 구동 함수 (Link)
2.1. Link 함수 리스트
Function | Description |
---|---|
AxmLinkSetMode | Master 축과 Slave축간의 전자기어비를 설정한다. |
AxmLinkGetMode | Master 축과 Slave축간의 전자기어비를 반환한다. |
AxmLinkResetMode | Master 축과 Slave축간의 전자기어비를 설정 해제 한다. |
2.2. Link 함수 소개
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 기능을 사용하기 위해 설정해야하는 정보는 기준 위치 정보로 사용할 마스터 축, 위치 정보의 개수, 마스터 축 위치 정보, 슬레이브 축의 위치 정보 값이며, 위치 정보의 개수는 마스터 및 슬레이브 위치 배열의 개수에서 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;