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을 전달하면 에러 코드를 반환하지 않습니다.
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 신호 감지되면 그 시점에 감속후 정지
|