7.2.6. ecSlv_InPDO_GetBufPtr


SYNOPSIS

void* ecSlv_InPDO_GetBufPtr (
  t_i32 NetID,
  t_ui16 SlvPhysAddr,
  t_ui8 InPdoUnitIdx,
  t_i32 *\ErrCode)

DESCRIPTION

  • 해당 슬레이브의 Input PDO데이터가 제공되는 메모리 주소값(버퍼 포인터)을 반환합니다. 사용자는 이 주소값을 이용해서 해당 슬레이브에서 제공하는 Input PDO 데이터를 직접 액세스(Access)할 수 있습니다.

  • Input PDO 데이터는 슬레이브로부터 마스터에게 주기적으로 전달되는 입력 데이터를 말합니다. 이 것은 슬레이브 입장에서 전송하는 것이므로 Tx PDO 라고도 합니다.

PARAMETER

  • NetID : 사용자가 사용 할 Network 번호

  • SlvPhysAddr: 슬레이브의 물리적 주소( ex. 서보 로터리 스위치로 선택한 축 번호)

  • InPdoUnitIdx: 이 값은 해당 슬레이브가 Input PDO용 Sync. Manager(SM)를 여러 개 제공할 때에 각 SM을 구분하기 위한 매개변수입니다. 일반적으로 대부분의 슬레이브 장치들은 Input SM을 하나만 사용하므로 특별한 경우가 아니면 이 값은 0으로 설정하면 됩니다. Sync. Manager는 ESC(EtherCAT Slave Controller)에서 제공하는 메모리 관리자인데 그 내용을 설명하기에는 본 설명서의 범주를 벗어나므로 설명을 생략합니다.

  • ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다.

RETURN VALUE

  • 해당 슬레이브의 Input PDO데이터가 제공되는 메모리 주소값(버퍼 포인터)을 반환합니다.

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 //슬레이브 주소가 0x201인 32채널 디지털입력 슬레이브 모듈이 있다고 가정합니다. 또한 해당 슬레이브는 32비트(4바이트)의  Input PDO 데이터를 제공하며 각각의 비트는 디지털입력 채널에 대응되는 상태값이라 가정합니다. 이 때 해당 슬레이브의 Input PDO 버퍼를 직접 액세스해서 각 채널의 디지털 접점 값을 사용하는 예제입니다.

#define NETID  0
#define SLAVE_ADDR     0x201

t_ui32 *pdwPtr;
pdwPtr  = ecSlv_InPDO_GetBufPtr (NETID, SLAVE_ADDR, 0, NULL);

if(pdwPtr != NULL){
        printf("D/I CH0 Value = %d\n", (*pdwPtr) & 0x1);
        printf("D/I CH1 Value = %d\n", ((*pdwPtr)>>1) & 0x1);
        printf("D/I CH2 Value = %d\n", ((*pdwPtr)>>2) & 0x1);
        printf("D/I CH3 Value = %d\n", ((*pdwPtr)>>3) & 0x1);
}