11.2.17. ecmSxCfg_ExtStop_SetEnv


SYNOPSIS

t_success  ecmSxCfg_ExtStop_SetEnv(
  t_i32  NetID,
  t_i32  Axis,
  TEcLogicAddr  SigAddr,
  t_i32  ActiveState,
  t_i32  DelayTime,
  t_i32  *ErrCode
)

DESCRIPTION

  • 외부정지 기능의 환경을 1번 모드 조건으로 설정합니다. 1번 모드는 ExtStop 센서 입력은 범용디지털 입력을 통해서 감시하고, 오프셋 방식은 시간 오프셋을 적용하는 모드입니다.

PARAMETER

  • NetID : Network 번호

  • Axis : 대상 축 번호.

  • SigAddr : 외부정지입력으로 사용할 입력 채널에 해당하는 Input PDO 영역의 주소를 지정하는 인자입니다.

  • ActiveState : 외부정지 기능이 동작하는 입력 신호의 조건을 설정합니다.

Value

Meaning

0

Falling Edge(ON -> OFF)가 발생하면 동작합니다. 만일 이송이 시작될 때 이미 OFF이면 ON이 되었다가 다시 OFF될 때 동작합니다.

1

Rising Edge(OFF -> ON)가 발생하면 동작합니다. 만일 이송이 시작될 때 이미 ON이면 OFF 되었다가 다시 ON될 때 동작합니다.

2

신호가 OFF상태가 되면 동작합니다. 만일 이송이 시작될 때 신호가 이미 OFF이면 외부정지동작이 바로 작동합니다.

3

신호가 ON상태가 되면 동작합니다. 만일 이송이 시작될 때 신호가 이미 ON이면 외부정지동작이 바로 작동합니다.

  • DelayTime : 센서가 감지된 이후에 실제 감속이 시작되는 지연 시간을 msec 단위로 설정합니다.

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

RETURN VALUE

  • 함수 수행의 성공 여부를 반환합니다.

Value

Meaning

0

함수 수행에 실패하였음을 의미합니다.

1

함수 수행에 성공하였음을 의미합니다.

REFERENCE

<전역채널번호를 이용한 SigAddr 설정 방법>

  • 입력접점의 전역 채널 번호를 알고 있을 때에는 ecdiGetLogicAddr 함수를 이용해서 SigAddr값을 설정할 수 있습니다. ecdiGetLogicAddr 함수의 원형은 다음과 같습니다.

  • t_dword ecdiGetLogicAddr (t_i32 NetID, t_ui32 DiChannel, t_i32 ErrCode) 예를 들어서 전역 채널 번호 10번의 디지털입력을 사용해서 외부정지 기능을 적용한다면 아래와 같이 SigAddr를 설정할 수 있습니다. TEcLogicAddr SigAddr; t_dword dwSigAddr = ecdiGetLogicAddr (NETID, 10, NULL); memcpy(&SigAddr, &dwSigAddr, sizeof(t_dword)); ecmSxCfg_ExtStop_SetEnv (NETID, AXIS, SigAddr, 1, 0, NULL);

<로컬채널번호를 이용한 SigAddr 설정 방법>

  • 입력접점의 로컬 채널 번호를 알고 있을 때에는 ecdiLogBitAddr_FromLocalChannel 함수를 이용해서 SigAddr값을 설정할 수 있습니다. ecdiLogBitAddr_FromLocalChannel 함수의 원형은 다음과 같습니다.

  • t_dword ecdiLogBitAddr_FromLocalChannel (t_i32 NetID, t_ui16 SlvPhysAddr, t_i32 LocalChannel, t_i32 ErrCode)

    예를 들어서 슬레이브 주소가 0x201인 슬레이브의 로컬채널 10번의 입력을을 사용해서 외부정지 기능을 적용한다면 아래와 같이 SigAddr를 설정할 수 있습니다.

    TEcLogicAddr SigAddr;

    t_dword dwSigAddr = ecdiLogBitAddr_FromLocalChannel (NETID, 0x201, 10, NULL);

    SigAddr.AddrOfs = (dwSigAddr & 0x3fff); // dwSigAddr의 하위 14비트가 Offset Address임

    SigAddr.BitIdx = (dwSigAddr >> 16) & 0xffff; // dwSigAddr의 상위 16비트가 BitIdx임

    ecmSxCfg_ExtStop_SetEnv (NETID, AXIS, SigAddr, 1, 0, NULL);

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 #define AXIS                0
  #define SLV_ADDR    0x201 // Slave Address
  #define LOC_CH              0       // ExtStop 신호 입력의 로컬 채널 번호
  TEcLogicAddr SigAddr;
  t_dword dwSigAddr = ecdiLogBitAddr_FromLocalChannel (NETID, SLV_ADDR, LOC_CH, NULL);
  SigAddr.AddrOfs = (dwSigAddr & 0x3fff); // dwSigAddr의 하위 14비트가 Offset Address임
  SigAddr.BitIdx = (dwSigAddr >> 16) & 0xffff; // dwSigAddr의 상위 16비트가 BitIdx임
  ecmSxCfg_ExtStop_SetEnv (NETID, AXIS, SigAddr, 1, 0,  NULL);

  ecmSxMot_Move(NETID, AXIS, 1000000, NULL); // 1000000 거리만큼 이송 진행. 이송 중에 ExtStop 신호 감지되면 그 시점에 감속후 정지