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개의 축이 속도의 연속성을 유지하면서 현재 위치로부터 어느 한 점을 경유하여 목표 위치로 보간 이송을 수행하는 것을 말합니다.

../../../_images/ecmIxMot_MoveVia2X_Start_00.jpg
  • 경유점을 통과할 때에는 속도의 연속성을 확보하기 위해서 원호보간 이송이 자동으로 삽입됩니다. 경유이송이 단순한 원호삽입 이송과 다른 점은 반드시지정된 경유점을 지나도록 원호가 삽입된다는 것입니다 .

    • 반드시 경유점을 지난다는 것은 지령위치 기준으로 말하는 것이며 피드백 위치를 기준으로 말하는 것은 아닙니다. 지령위치가 경유점을 지나더라도 피드백 위 치는 모터의 게인 튜닝 상태등과 같은 여러 가지 요인에 의해서 영향을 받아서 경유점을 지나지 않을 수도 있습니다.

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)){
       // 에러처리!
 }