12.1.1. ecmMxMot_MoveStart

Hint

FAST FUNCTION 모드 사용 가능

SYNOPSIS

t_cmdidx  ecmMxMot_MoveStart(_FF)(
  t_i32  NetID,
  t_i32  NumAxes,
  t_i32  AxisList[],
  t_i32  DirList[],
  t_i32  *ErrCode
)

DESCRIPTION

  • 여러 개의 축에 대하여 현재의 위치에서 지정한 거리만큼 이동을 동시에 시작합니다. 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작합니다.

PARAMETER

  • NetID : Network 번호

  • NumAxes : 동시에 작업을 수행할 대상 축 개수

  • AxisList : 동시에 작업을 수행할 대상 축 배열 주소값. 이 배열의 크기는 NumAxes값과 일치하거나 커야 합니다.

  • DirList : 이동할 거리값의 배열 주소값. 이 배열의 크기는 NumAxes값과 일치하거나 커야 합니다. 이동 거리값은 현재의 위치에 대한 상대좌표이며 거리의 단위는 논리적 거리 단위를 사용합니다.

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

RETURN VALUE

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

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
  //본 예제는 ecmMxMot_MoveStart사용하여 두 축을 (+)5000 이동하는 예 입니다.
#include "ComiEcatSdk_Api.h"
#define AXIS0   0
#define AXIS1   1

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

/***************************************************************
* MulitProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
* 적용되는 부분을 의미합니다.      /5~9장 사이 내용 참고
***************************************************************/
void MulitProgramInitial()
{
       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, AXIS0, &Error_Num);
ecmSxCtl_SetSvon(Device_Info.NetIdx, AXIS1, &Error_Num);

} //OnProgramInitial 함수 끝

/********************************************************************
* MulitMoveSetting : 이 함수는 다축 이동을 위한 준비 단계 함수
* ecmSxCfg_SetMioProp, ecmSxCfg_SetSpeedPatt, ecmSxCfg_SetJerkRatio
   ecmSxCfg_SetUnitDist,  ecmSxCfg_SetUnitSpeed 를 이용하여 세팅
* 많은 세팅 관련 함수가 있지만 경우에 따라 사용자가 선택해서 사용
*********************************************************************/


void MulitMoveSetting ()
{
        ecmSxCfg_SetMioProp(Device_Info.NetIdx, AXIS0, propID, propID, &Error_Num)
       ecmSxCfg_SetUnitDist( Device_Info.NetIdx, AXIS0, UnitDist , &Error_Num);
       ecmSxCfg_SetUnitSpeed([Device_Info.NetIdx, AXIS0, UnitSpeed, &Error_Num);
       ecmSxCfg_SetSpeedPatt(Device_Info.NetIdx, AXIS0, 0, 0, 40000, 10000, 10000, &Error_Num );
       ecmSxCfg_SetJerkRatio (Device_Info.NetIdx, AXIS0, JerkTimeRatio, &Error_Num);

       ecmSxCfg_SetMioProp(Device_Info.NetIdx, AXIS1, propID, propID, &Error_Num)
       ecmSxCfg_SetUnitDist( Device_Info.NetIdx, AXIS1, UnitDist , &Error_Num);
       ecmSxCfg_SetUnitSpeed([Device_Info.NetIdx, AXIS1, UnitSpeed, &Error_Num);
       ecmSxCfg_SetSpeedPatt(Device_Info.NetIdx, AXIS1, 0, 0, 40000, 10000, 10000, &Error_Num );
       ecmSxCfg_SetJerkRatio (Device_Info.NetIdx, AXIS1, JerkTimeRatio, &Error_Num);
}

/***************************************************************
* DO_MOVE : 작업 명령 시에 호출되는 가상의 함수 입니다.
*cmsSetCfgSetSpeedPattern으로 설정된 두개의 축(Axis)의 속도모드를
*그대로 유지 하면서 상대 위치 만큼 +5000 이동
***************************************************************/
void DO_MOVE()
{
        //cmsSetCfgSetSpeedPattern으로 설정된 첫번째 축(Axis)의 속도모드를
       //그대로 유지 하면서 두 축을 상대 위치 만큼 +5000 이동
       t_i32 AxisList[2] = {0,1};
       t_f64 DistList[2] = {5000,5000};

       ecmMxMot_MoveStart(Device_Info.NetIdx, 2, AxisList, DistList, &Error_Num);
       //Move 두 축을 각각 상대 거리 +5000 이동

       if(!ecmMxSt_WaitCompt (Device_Info.NetIdx, 2, AxisList, &Error_Num)){
       //두 축이 +5000 만큼 이동 되는 동안 블로킹하는 함수
               // 모션 완료 대기 실패 예외 처리
               return;
       }
}