13.1.24. ecmIxMot_ArcPos_A_Start


Hint

FAST FUNCTION 모드 사용 가능

SYNOPSIS

t_cmdidx ecmIxMot_ArcPos_A_Start(_FF)(
  t_i32  NetID,
  t_i32  MapIndex,
  t_f64  XCentPos,
  t_f64  YCentPos,
  t_f64  XEndPos,
  t_f64  YEndPos,
  t_i32 *ErrCode
)

DESCRIPTION

  • 중심좌표와 종점좌표를 매개변수로 하여 원호보간 이송을 수행합니다. 이때 중심좌표는 절대 좌표로 표현됩니다.

  • ecmIxMot_ArcPos_A_Start(_FF) 는 모션을 시작시킨 후에 바로 반환

PARAMETER

  • NetID : Network 번호

  • MapIndex : 맵 번호

  • XCentPos : 중심점의 X축 절대좌표 값

  • YCentPos : 중심점의 Y축 절대좌표 값

  • XEndPos : 원호보간 이동을 완료할 목표지점(End Point)의 X축 절대좌표 값

  • YEndPos : 원호보간 이동을 완료할 목표지점(End Point)의 Y축 절대좌표 값

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

RETURN VALUE

  • 이 리턴값은 함수의 cmdidx가 반환됩니다.

REFERENCE

본 예제는 아래 그림과 같이 직선보간 이동과 원호보간 이동을 조합하는 Coordinated Motion을 수행하는 예제입니다. P1점으로부터 출발하여 P8점을 거쳐 다시 P1으로 복귀하는 작업입니다. 그리고 현재 위치가 P1의 위치에 있다고 가정합니다.

../../../_images/ecmIxMot_ArcPos_A_Start_00.jpg

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 #include "ComiEcatSdk_Api.h"

 #define AXISX          0
 #define AXISY          1

 #define MAP0           0
 #define MAP1           1

 t_32 Error_Num =  0;//함수 별  에러 코드 저장 변수

 /***************************************************************
 * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
 * 적용되는 부분을 의미합니다.
 ***************************************************************/
 void OnProgramInitial()
 {
       TEcDevInfo Device_Info;  //디바이스 정보 저장 할 구조체
       t_i32 Device_Num = 0;

       t_success nIsLoaded = ecDll_Load ();

       if(!ecGn_LoadDevices(&Error_Num)){   //장치 로드
               //로드 실패시 예외  처리
       }

       if(!ecGn_GetDevInfo(Device_Num,&Device_Info, &Error_Num)){
               //디바이스 정보 로드 실패 시 예외 처리
       }

       ecNet_SetAlState(Device_Info.NetIdx, ecAL_STATE_OP, &Error_Num);
        //ALState OP모드로 전환

       ecmSxCtl_SetSvon(Device_Info.NetIdx, AXISX, &Error_Num);
       ecmSxCtl_SetSvon(Device_Info.NetIdx, AXISY, &Error_Num);
 }

 /***************************************************************
 * OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
 * 호출되는 가상의 함수 입니다.
 ***************************************************************/

 void OnSetSpeed()
 {
       ecmIxCfg_MapAxes (Device_Info.NetIdx , MAP0, AXISX | AXISY, 0, ecmIX_MODE_LINEAR , &Error_Num);
       ecmIxCfg_MapAxes (Device_Info.NetIdx , MAP0, AXISX | AXISY, 0, ecmIX_MODE_LINEAR , &Error_Num);


       ecmIxCfg_SetSpeedPatt( Device_Info.NetIdx ,  MAP0, 0, 0, 0, 40000, 10000, 10000, &Error_Num);
       ecmIxCfg_SetSpeedPatt( Device_Info.NetIdx ,  MAP1, 0, 0, 0, 40000, 10000, 10000, &Error_Num);

       //보간 그룹에 축을 설정하고
        //MAP0은 직선 보간 모드 MAP1은 원호 보간 모드 로 설정


 }
 /**************************************************************
 * OnDoMotion() : 작업명령시에 호출되는 가상의 함수
 **************************************************************/
 void OnDoMotion()
 {
       double fDistList[2];

       // Move from P1 to P2 //
       fDistList[0]=1000; fDistList[1]=500;
       ecmIxMot_LineToStart (Device_Info.NetIdx,  MAP0, fDistList, &Error_Num);

       // Move from P2 to P3 //
       ecmIxMot_ArcPos_A_Start (Device_Info.NetIdx,  MAP1, 500, -500, 1000, -500, &Error_Num);

       // Move from P3 to P4 //
       fDistList[0]=1000; fDistList[1]=500;
       ecmIxMot_LineToStart (Device_Info.NetIdx,  MAP0, fDistList, &Error_Num);

       // Move from P4 to P5 //
       ecmIxMot_ArcPos_A_Start (Device_Info.NetIdx,  MAP1,500, 500, 500, 1000, &Error_Num);

       // Move from P5 to P6 //
       fDistList[0]=-500; fDistList[1]=1000;
       ecmIxMot_LineToStart (Device_Info.NetIdx,  MAP0, fDistList, &Error_Num);

       // Move from P6 to P7 //
       ecmIxMot_ArcPos_A_Start (Device_Info.NetIdx,  MAP1, -500, 500, -1000, 500, &Error_Num);

       // Move from P7 to P8 //
       fDistList[0]=-1000; fDistList[1]=-500;
       ecmIxMot_LineToStart (Device_Info.NetIdx,  MAP0, fDistList, &Error_Num);

       // Move from P8 to P1 //
       ecmIxMot_ArcPos_A_Start (Device_Info.NetIdx,  MAP1,-500,-500,-500,-1000, &Error_Num);
 }