7.1.2. ecSlv_ReadCoeSdo¶
Warning
이 함수는 해당 슬레이브가 PreOP 이상의 AL-STATE 에 있을 때에만 사용 가능합니다. 슬레이브가 INITIAL 상태에 있을 때 이 함수를 사용하면 읽기 실패합니다
SYNOPSIS¶
t_i32 ecSlv_ReadCoeSdo (
t_i32 NetID,
t_ui16 SlvPhysAddr,
t_i32 Index,
t_i32 SubIndex,
t_i32 IsComptAccess,
t_i32 DataSize,
void* pBuf,
t_i32 *ErrCode)
t_i32 ecSlv_ReadCoeSdo_A (
t_i32 NetID,
t_ui16 SlaveIdx,
t_i32 Index,
t_i32 SubIndex,
t_i32 IsComptAccess,
t_i32 DataSize,
void* pBuf,
t_i32 *ErrCode)
DESCRIPTION¶
지정한 슬레이브에서 지정된 SDO(Service Data Object) 오브젝트를 읽어서 반환하는 함수입니다. SDO(Service Data Object)는 비주기적으로 전달되는 데이터 오브젝트(Object)를 말합니다.
CoE(CANOpen Over EtherCAT)를 지원하는 이더캣 슬레이브 장치는 해당 슬레이브가 지원하는 기능(Function)이나 데이터(Data)를 오브젝트(Object)라는 것으로 정의하여 제공합니다. 오브젝트는 인덱스라고 하는 숫자로 서로를 구분하며, 해당 오브젝트의 데이터 형식이나 기타 속성에 대해서는 오브젝트 사전(Object Dictionary)이라고 하는 것을 통해서 정의해줍니다. 오브젝트 사전은 해당 슬레이브에서 제공하는 오브젝트들을 정리하여 표나 기타 형태로 만들어 놓은 것을 말합니다.
하나의 오브젝트 인덱스는 실제로는 인덱스(Index)와 서브인덱스(Sub-Index)로 구성됩니다. 오브젝트가 하나의 값을 가지는 객체라면 서브인덱스값은 0을 사용합니다. 하지만 여러 개의 배열로 이루어졌거나 구조체와 같은 형식이라면 여러 개의 서브인덱스로 구성될 수 있습니다.
사용자는 오브젝트를 통해서 CoE를 지원하는 슬레이브의 데이터를 읽거나 쓸 수 있습니다. ecSlv_ReadCoeSdo 함수는 사용자가 CoE 오브젝트를 읽을 수 있도록 해주는 함수입니다.
참고로, SDO(Service Data Object)는 비주기적으로 전달되는 데이터 오브젝트를 말하며, 주기적으로 전달되는 데이터 오브젝트는 PDO(Periodic Data Object)라고 합니다.
ecSlv_ReadCoeSdo 함수는 슬레이브를 지정할 때 주소값을 사용하여 슬레이브를 지정합니다.
ecSlv_ReadCoeSdo_A 함수는 슬레이브를 지정할 때 네트워크 상에서 슬레이브의 연결 순서를 사용하여 슬레이브를 지정합니다.
PARAMETER¶
NetID : 사용자가 사용 할 Network 번호
SlvPhysAddr : 슬레이브의 물리적 주소( ex. 서보 로터리 스위치로 선택한 축 번호)
SlaveIndex : 슬레이브의 연결 순서
Index : 오브젝트 인덱스(Object Index)
SubIndex : 오브젝트의 서브인덱스(Sub-index)
IsComptAccess: 오브젝트가 배열이나 구조체로 이루어진 경우에 해당 오브젝트의 모든 서브인덱스에 해당하는 값을 읽기할 것인지 아니면 서브인덱스로 지정된 데이터만 읽기할 것인지를 결정하는 플래그입니다. 일반적으로 이 값은 0(false)으로 설정해야 합니다.
Value |
Meaning |
---|---|
0 |
지정한 서브인덱스에 대해서만 값을 읽습니다. |
1 |
모든 서브인덱스에 대한 데이터를 한꺼번에 읽습니다. 이 경우에는 SubIndex 값을 0으로 전달해야 하며, 버퍼는 오브젝트의 전체 데이터 구조와 일치하는 버퍼가 제공되어야 합니다. |
DataSize : 읽을 DataSize. 이 값은 오브젝트 사전에서 정의된 해당 오브젝트의 데이터 크기와 일치해야 합니다. 그렇지 않으면 읽기에 실패할 수 있습니다.
pBuf: 읽은 데이터를 전달 받을 버퍼.
ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다.
RETURN VALUE¶
반환 값이 양수이면 읽은 데이터의 크기를 반환하는 것입니다. 반환 값이 음수이면 에러코드를 반환하는 것입니다.
EXAMPLE¶
1 2 3 4 5 6 7 8 | //슬레이브 주소가 0x1인 슬레이브로부터 CiA DS-402 프로파일에서 정의한 ‘Max motor speed’ 오브젝트(아래 그림 참조)값의 읽기 예시.
#define NETID 0
#define SLAVE_ADDR 0x1
t_i32 errCode;
t_ui32 maxMotorSpeed;
ecSlv_ReadCoeSdo (NETID, SLAVE_ADDR, 0x6080, 0, false, 4, &maxMotorSpeed, &errCode);
printf("maxMotorSpeed 값은 %d 입니다!", maxMotorSpeed);
|
See also