13.2.6. ecmIxMot_MoveVia2X_Start¶
SYNOPSIS¶
t_cmdidx ecmIxMot_MoveVia2X_Start(
t_i32 NetID,
t_i32 MapIndex,
t_handle32 P2[],
t_bool P3[],
t_bool IsAbsPosMode,
t_i32 RoundPosType,
t_f64 NormRadius,
t_f64 MinRadius,
t_i32 *ErrCode
)
DESCRIPTION¶
이 함수는 2축을 대상으로 하는 경유이송(Move-Via)을 시작하는 함수입니다. 경유이송은 2개의 축이 속도의 연속성을 유지하면서 현재 위치로부터 어느 한 점을 경유하여 목표 위치로 보간 이송을 수행하는 것을 말합니다.

경유점을 통과할 때에는 속도의 연속성을 확보하기 위해서 원호보간 이송이 자동으로 삽입됩니다. 경유이송이 단순한 원호삽입 이송과 다른 점은 반드시지정된 경유점을 지나도록 원호가 삽입된다는 것입니다 .
반드시 경유점을 지난다는 것은 지령위치 기준으로 말하는 것이며 피드백 위치를 기준으로 말하는 것은 아닙니다. 지령위치가 경유점을 지나더라도 피드백 위 치는 모터의 게인 튜닝 상태등과 같은 여러 가지 요인에 의해서 영향을 받아서 경유점을 지나지 않을 수도 있습니다.
PARAMETER¶
NetID : Network 번호
MapIndex : 보간 맵 번호
P2[] : 경유점 좌표 포인트(2축의 좌표를 표현하는 배열)
P3[] : 목표점 좌표 포인트(2축의 좌표를 표현하는 배열)
IsAbsPosMode : 지정된 좌표 데이터가 상대좌표인지 절대좌표인지를 나타내는 플래그
Value |
Meaning |
---|---|
0 |
상대좌표값으로 P2, P3 데이터를 전달합니다. |
1 |
절대좌표값으로 P2, P3 데이터를 전달합니다. |
RoundPosType : 삽입되는 라운드와 경유점과의 위치 관계를 나타내는 인자입니다 (EEcmRoundPosType 선언 참조).
NormRadius : 자동으로 삽입되는 라운드의 크기(원호의 반지름)를 나타내는 인자입니다.
MinRadius : P1이 라운드 원의 외부에 있을 때는 ‘NormRadius’를 적용하지만 P1이 원의 내부에 있을 때는 P1의 위치에 따라서 원의 크기가 조정됩니다. 이때 조정할 수 있는 원의 최소 크기(반지름)를 나타내는 인자입니다
ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다.
RETURN VALUE¶
이 함수는 CmdIdx를 반환 합니다. CmdIdx는 ComiECAT SDK라이브러리에서 발생시킨 명령들의 일련 번호입니다. 단, 이 값이 0이면 함수의 수행이 실패했음을 의 미합니다.
EXAMPLE¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #define NETID 0
#define IX_MAP_IDX 0
t_i32 axisList[2] = {2, 3}; // 축 번호 리스트
t_f64 P1[2] = {0, 0}; // 시작점
t_f64 P2[2] = {1000000, 500000}; // 경유점
t_f64 P3[2] = {1200000, 1000000}; // 종점
// 보간 축 맵핑
ecmIxCfg_MapAxes(NETID, IX_MAP_IDX, 2, axisList, NULL);
// 보간 속도 설정
ecmIxCfg_SetSpeedPatt(NETID, IX_MAP_IDX, ecmIXSPT_VECTOR, ecmSMODE_SCURVE, 0, 0, 500000, 2500000, 2500000, NULL);
// 시작점으로 이송 (이미 시작점에 있는 경우에는 이 라인 생략 가능) //
ecmIxMot_LineTo(NETID, IX_MAP_IDX, P1, NULL);
// 경유이송 시작
ecmIxMot_MoveVia2X_Start(NETID, IX_MAP_IDX, P2, P3, true, ecmROUND_PT_START, 10000, 5000, NULL);
// 이송완료 대기
t_i32 ErrCode;
if(!ecmIxSt_WaitCompt (NETID, IX_MAP_IDX, &ErrCode)){
// 에러처리!
}
|