보드 및 모듈 확인
본 단원에서는 라이브러리를 초기화하는데 있어 필요한 보드 및 모듈의 Load 또는 초기화와 관련된 함수들 소개한다.
보드 및 모듈 확인 함수
1. 함수 리스트
Function | Description |
---|---|
AxmInfoGetAxis | 해당 축의 보드 번호, 모듈 위치, 모듈 아이디를 반환한다. |
AxmInfoGetAxisEx | 지정한 축의 해당 모듈 Sub ID, 모듈의 모델명, 모듈에 대한 설명을 확인한다. |
AxmInfoIsMotionModule | 모션 모듈이 존재하는지를 반환한다. |
AxmInfoIsInvalidAxisNo | 해당 축이 유효한지를 반환한다. |
AxmInfoGetAxisCount | 시스템에 장착된 유효한 모션 축 수를 반환한다. |
AxmInfoGetFirstAxisNo | 해당 보드/모듈의 첫 번째 축 번호를 반환한다. |
AxmInfoGetAxisStatus | 해당 축의 제어 가능 여부를 확인한다. |
2. 함수 소개
AxmInfoGetAxis
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 |
Format
C++
DWORD AxmInfoGetAxis(long lAxisNo, long *lpBoardNo, long *lpModulePos, DWORD *upModuleID);
C#
uint AxmInfoGetAxis(int lAxisNo, ref int lpBoardNo, ref int lpModulePos, ref uint upModuleID);
Visual Basic
Function AxmInfoGetAxis(ByVal lAxisNo As Long, ByRef lpBoardNo As Long, ByRef lpModulePos As Long, ByRef upModuleID As Long) As Long
Delphi
function AxmInfoGetAxis(lAxisNo : LongInt; lpBoardNo : PLongInt; lpModulePos : PLongInt; upModuleID : PDWord) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]AxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) | [out]lpBoardNo | 설정 축이 포함되어 있는 베이스 보드 위치값 |
[out]lpModulePos | 설정 축이 포함되어 있는 모듈 위치값 |
[out]upModuleID | 설정 축이 포함되어 있는 모듈 ID값 : 참고 AXHS.h |
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
- 필요한 데이터만 가지고 오고 싶을 경우 필요하지 않은 변수에 NULL을 넣어 사용 할 수 있다.
- 보드 및 모듈 아이디 값은 제품 모델명과 동일하여 실제 보드 정보와 모듈 정보를 확인할 때 사용한다.
예제 코드
// 0축의보드 넘버, 모듈 위치, 모듈 아이디를 반환.
long lBoardNo, lModulePos;
DWORD uModuleID;
AxmInfoGetAxis(0, &lBoardNo, &lModulePos, &uModuleID);
AxmInfoGetAxisEx
Purpose
지정한 축의 해당 모듈 Sub ID, 모듈의 모델명, 모듈에 대한 설명을 확인한다.
A Serviceable Product
BPHR / BPFR | BEHR / BEFR | PCI-Nx04 | PCIe-Nx04 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
X | X | X | X | ||||||||
PCI-Rxx04 | PCIe-Rxx04-RTEX | PCI-Rxx04-MLII | PCI-Rxx00-MLIII | ||||||||
A4N | A5N/A6N | PM | A4N | A5N/A6N | PM | SGDV | SGDV | SGD7 | PM | ||
X | X | X | X | X | X | X | X | X | X | ||
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 | |||
X | X | X | X | X | X | X | O | O |
Format
C++
DWORD AxmInfoGetAxisEx(long lAxisNo, DWORD *upModuleSubID, char* szModuleName, char* szModuleDescription);
C#
uint AxmInfoGetAxisEx(int lAxisNo, ref uint upModuleSubID, ref string szModuleName, ref string szModuleDescription);
Visual Basic
Function AxmInfoGetAxisEx(ByVal lAxisNo As Integer, ByRef upModuleSubID As Integer, ByRef szModuleName As String, ByRef szModuleDescription As String) As Long
Delphi
function AxmInfoGetAxisEx(lAxisNo : LongInt; upModuleSubID : PDWord; szModuleName : PChar; szModuleDescription : PChar) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]AxisNo | 채널(축) 번호(0 ~ (최대 축 수 - 1)) | [out]upModuleSubID | EtherCAT 모듈을 구분하기 위한 SubID |
[out]szModuleName | 모듈의 모델명(50 Bytes) |
[out]szModuleDescription | 모듈에 대한 설명(80 Bytes) |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
* See error code Table for more information on status error codes
Description
- 지정한 축이 EtherCAT Network Type의 모듈일 때, 해당 모듈의 SubID, 모듈의 모델명, 모듈에 대한 설명을 확인한다.
예제 코드
// 1번 축의 모듈 정보를 확인.
long lAxis = 1;
DWORD upModuleSubID;
char szModuleName[128], szModuleDescription[128];
AxmInfoGetAxisEx(lAxis, &upModuleSubID, &szModuleName, &szModuleDescription );
AxmInfoIsMotionModule
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 |
Format
C++
DWORD AxmInfoIsMotionModule(DWORD *upStatus);
C#
uint AxmInfoIsMotionModule(ref uint upStatus);
Visual Basic
Function AxmInfoIsMotionModule(ByRef upStatus As Long) As Long
Delphi
function AxmInfoIsMotionModule(upStatus : PDWord) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[out]upStatus | 모션 제어 요소 장착 여부 : FALSE & TRUE - [00h]모션 제어 기능 제품이 장착 되지 않음 - [01h]모션 제어 기능 제품이 장착됨 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[1053] AXT_RT_NOT_OPEN: AXL 라이브러리 초기화 실패
* See error code Table for more information on status error codes
Description
- 모션 제어 기능 제품의 장착 여부는 *upStatus값으로 반환한다.
예제 코드
// 모션 모듈 장착 여부 확인.
DWORD uStatus;
AxmInfoIsMotionModule(&uStatus);
AxmInfoIsInvalidAxisNo
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 |
Format
C++
DWORD AxmInfoIsInvalidAxisNo(long lAxisNo);
C#
uint AxmInfoIsInvalidAxisNo(int lAxisNo);
Visual Basic
Function AxmInfoIsInvalidAxisNo(ByVal lAxisNo As Long) As Long
Delphi
function AxmInfoIsInvalidAxisNo(lAxisNo : LongInt) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 사용 가능한지 테스트할 축 번호 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes
Description
- 해당 축이 사용할 수 있는 축인지를 확인한다. 사용할 수 없다면 에러코드를 반환한다.
예제 코드
// 9축이 사용 가능한 축인지 에러코드를 반환한다.
DWORD uReturn;
uReturn = AxmInfoIsInvalidAxisNo(9);
AxmInfoGetAxisCount
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 |
Format
C++
DWORD AxmInfoGetAxisCount(long \*lpAxisCount);
C#
uint AxmInfoGetAxisCount(ref int lpAxisCount);
Visual Basic
Function AxmInfoGetAxisCount(ByRef lpAxisCount As Long) As Long
Delphi
function AxmInfoGetAxisCount(lpAxisCount: PLongInt) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[out]lpAxisCount | 시스템에 장착된 총 축의 개수 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[1053] AXT_RT_NOT_OPEN : AXL 라이브러리 초기화 실패
[4051] AXT_RT_MOTION_NOT_MODULE : 시스템에 장착된 모션 모듈이 없음
* See error code Table for more information on status error codes
Description
- 시스템에 장착되어 AXM으로 제어 가능한 축의 개수를 반환한다.
예제 코드
// 장착된 모션 보드의 총 축 수 확인.
long lpAxisCount;
AxmInfoGetAxisCount(&lpAxisCount);
AxmInfoGetFirstAxisNo
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 |
Format
C++
DWORD AxmInfoGetFirstAxisNo(long lBoardNo, long lModulePos, long \*lpAxisNo);
C#
uint AxmInfoGetFirstAxisNo(int lBoardNo, int lModulePos, ref int lpAxisNo);
Visual Basic
Function AxmInfoGetFirstAxisNo(ByVal lBoardNo As Long, ByVal lModulePos As Long, ByRef lpAxisNo As Long) As Long
Delphi
function AxmInfoGetFirstAxisNo(lBoardNo: LongInt; lModulePos: LongInt; lpAxisNo: PLongInt) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lBoardNo | 보드 번호 |
[in]lModulePos | 보드 내에 위치한 모듈 위치. PCI-N804/404는 4축 단위로 모듈이 나누어져 있으며, 네트워크 타입 보드는 하나의 슬레이브가 하나의 모듈로 인식된다. | [out]lpAxisCount | 해당 보드/모듈의 축 번호 값 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[1053] AXT_RT_NOT_OPEN : AXL 라이브러리 초기화 실패
[1101] AXT_RT_INVALID_BOARD_NO : 유효하지 않은 보드 번호
[1102] AXT_RT_INVALID_MODULE_POS : 유효하지 않은 모듈 위치
[4051] AXT_RT_MOTION_NOT_MODULE : 시스템에 장착된 모션 모듈이 없음
* See error code Table for more information on status error codes
Description
- PCI-N804/404의 경우, 보드 자체가 모듈 타입이 아니기 때문에 보드에서 가장 먼저 시작되는 축 번호를 반환한다.
- 베이스 보드 번호는 슬롯 순서대로 0부터 번호가 할당된다.
- 모듈 번호는 BPFR 베이스 보드인 경우 0~3까지 모듈 번호가 할당되고, BPHR 베이스 보드인 경우 0~1까지 모듈 번호가 할당된다.
- 모션 모듈의 축 수가 두 개이므로 *lpAxisNo 값은 그 중 빠른 축 번호 값이 된다.
참고사항 : AXL 의 리소스 번호 할당 규칙
- 같은 시스템에 여러가지 제품이 장착된 경우 제품명의 축 수가 낮은 순으로 넘버링된다. 모션에 관계된 제어 요소를 예를 들면, PCI-N804/404 제품에 연결된 모터부터 넘버링되며, 이어서 PCI-R1604 또는 PCI-R1604-MLII와 연결된 모터가 넘버링된다.
- 같은 종류의 모듈끼리 개별적으로 넘버링된다. 모션에 관계된 제어 요소는 축 번호로 넘버링되며, 디지털 입출력 제품은 모듈 번호 및 접점 번호로, 아날로그 입출력 제품은 모듈 번호 및 채널 번호로 넘버링된다.
- 여러 개의 보드가 장착되어 있을 경우 CPU에 가까운 쪽 베이스 보드에서부터 넘버링된다. 일반적인 PC또는 IPC 시스템에서 CPU에 가까운 쪽부터 PCI슬롯의 순서가 정해져 있는데, 시스템의 설정에 따라서 CPU모듈에서 먼 쪽부터 번호가 시작되거나 임의로 각 슬롯의 번호를 설정해줄 수 있는 시스템도 있다.
- 같은 베이스 보드에서는 J1,J2,J3,J4의 순서 또는 Network address 가 낮은 순서대로 넘버링 된다. 카드 타입 집중형 제어 보드의 넘버링 순서는 외부와 연결되는 커넥터 번호가 낮은 보드부터 넘버링되며, 분산 제어형 제어 보드는 연결된 슬레이브 노드에 설정된(H/W 스위치로 설정됨) 네트워크 주소 값이 작은 것부터 넘버링 된다.
- EzConfig 의 정보 확인 창에서 자세한 내용을 확인한다. EzSoftware 를 설치하면 제어 리소스를 확인하고 축 번호, 접점 번호, 채널 번호를 확인할 수 있는 EzConfig 프로그램을 사용할 수 있다.
주의 사항
● 네트워크 제품은 슬레이브 노드를 장착하여야만 프로그램이 가능하다. 또한 슬레이브 노드의 추가 및 제거로 인해 제어 리소스의 번호가 바뀔 수 있으므로 주의하여야 한다.
예제 코드
// 특정 0모듈의 가장 빠른 축 번호 확인.
long lAxisNo;
AxmInfoGetFirstAxisNo(0, 0, &lAxisNo);
AxmInfoGetAxisStatus
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 |
Format
C++
DWORD AxmInfoGetAxisStatus(long lAxisNo);
C#
uint AxmInfoGetAxisStatus(int lAxisNo);
Visual Basic
Function AxmInfoGetAxisStatus(ByVal lAxisNo As Long) As Long
Delphi
function AxmInfoGetAxisStatus(lAxisNo: LongInt) : DWord; stdcall;
Parameters
[in/out] Name | [Init Value] Explanation |
---|---|
[in]lAxisNo | 제어가 가능한지 테스트 할 축 번호 |
Return Values
[0000] AXT_RT_SUCCESS : 함수 실행 성공
[4101] AXT_RT_MOTION_INVALID_AXIS_NO : 해당 축이 존재하지 않음
* See error code Table for more information on status error codes
Description
- 해당 축이 제어할 수 있는 축인지 반환 값을 통해 확인한다.
예제 코드
// 0축이 제어 가능한 축인지 에러코드를 확인한다.
DWORD uReturn;
uReturn = AxmInfoGetAxisStatus(0);