cmmMxVMoveStart


SYNOPSIS

- VT_I4 cmmMxVMoveStart(
    [in] VT_I4 NumAxes, [in] VT_PI4 AxisList, [in] VT_PI4 DirList
    )

DESCRIPTION

  • 여러 개의 축에 대하여 Velocity Move 작업을 동시에 시작합니다. Velocity Move 는 작업속도까지 가속한 후에 작업속도를 유지하며 정지함수가 호출될 때까지 지정한 방향으로의 모션을 계속 수행합니다. 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작합니다. 따라서 이 함수는 여러축이 동기를 맞추어 작업을 시작해야하는 경우에 유용하게 사용될 수 있습니다.

PARAMETER

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

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

  • DirList : 방향을 지시하는 값의 배열 주소값. 이 배열의 크기는 NumAxes 값과 일치해야 합니다. 모션의 방향을 지시하는 값은 다음과 같습니다.

Value

Meaning

0 또는 cmDIR_N

(-) 방향

1 또는 cmDIR_P

(+) 방향

RETURN VALUE

Value

Meaning

음수

수행 실패

cmERR_NONE

수행 성공

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
C/C++


#include "Cmmsdk.h"
#include "CmmsdkDef.h"

/***************************************************************
* OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
* 적용되는 부분을 의미합니다.
***************************************************************/

void OnProgramInitial()
{
   long m_nNumAxes;
   cmmLoadDll();
   if(cmmGnDeviceLoad(cmTRUE, &m_nNumAxes) != cmERR_NONE)
   {
       //Handle 은 사용자가 생성한 폼의 핸들 값입니다.
       cmmErrShowLast(Handle);
       return;
   }
}

/***************************************************************
* OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
* 호출되는 가상의 함수 입니다. 이때 m_fVwork, m_fAcc, m_fDec 변수를
* 통하여 속도, 가속도 , 감속도 값이 적절하게 전달된다고 가정합니다.
***************************************************************/

void OnSetSpeed()
{
   //각 축(Axis)의 기본 속도를 설정 합니다.
   cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, m_fVwork, m_fAcc, m_fDec );
   cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, m_fVwork, m_fAcc, m_fDec );
   cmmCfgSetSpeedPattern(cmZ1, cmSMODE_S, m_fVwork, m_fAcc, m_fDec );
}

/**************************************************************
* OnDoMotion() : 작업명령시에 호출되는 가상의 함수
* 이 함수에서는 X1, Y1, Z1 축에 대하여 Velocity Move 를 시작합니다.
**************************************************************/

void OnDoMotion()
{
   long nAxisList[3] = {cmX1, cmY1, cmZ1};
   long nDirList[3] = {cmDIR_P, cmDIR_P, cmDIR_P}; //Positive dir

   //cmmSetCfgSetSpeedPattern 으로 설정된 축(Axis)의 속도모드를
   //그대로 유지 하면서 설정된 작업속도, 가속도,
   //감속도의 100%로 설정합니다.
   cmmSxSetSpeedRatio(cmX1, cmSMODE_KEEP, 100, 100, 100);
   cmmSxSetSpeedRatio(cmY1, cmSMODE_KEEP, 100, 100, 100);
   cmmSxSetSpeedRatio(cmZ1, cmSMODE_KEEP, 100, 100, 100);

   // Start V-Move of X1&Y1&Z1 //
   if(cmmMxVMoveStart(3, nAxisList, nDirList) != cmERR_NONE){
       cmmErrShowLast(Handle);
       return;
   }
}
 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
Visual Basic

Private Sub CfgSpeed(nTotalAxis As Long)

   Dim i As Integer
   '============================================================
   ' 이 함수에서 cmmCfgSetSpeedPattern 함수로 속도를 설정하는 것은
   ‘ 모든 모션의 기준속도(Standard Speed) 가 됩니다.
   ' 단축 구동을 비롯한 대부분의 모션 동작은 이 기준 속도의 비율로 동작되게
   ‘ 됩니다.
   ' 아래 함수는 전체 축에 대해서 임의의 기준 속도를 설정하고 있습니다.
   '============================================================

   For i = 0 To nTotalAxis-1
   Call cmmCfgSetSpeedPattern(i, cmSMODE_S, 10000, 20000, 20000)
   Next

End Sub

Private Sub btnMove_Click()

   Dim Direction(2) As Long
   Dim AxisList(2) As Long
   Dim nRetVal As Long

   AxisList(0) = 0
   AxisList(1) = 1

   Direction(0) = cmDIR_P
   Direction(1) = cmDIR_P

   ' 이 함수로 인해 설정된 기준속도의 비율(%) 로 모션 동작을 수행합니다.
    Call cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 100#, 100#, 100#)
    Call cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 100#, 100#, 100#)


   ' 이 함수는 지정된 속도로 정지 함수가 호출 될때까지 계속 이동합니다.
   nRetVal = cmmMxVMoveStart(2, AxisList(0), Direction(0))

End Sub
  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
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
Delphi

Procedure btnSetSpeedClick();
var
   fAccelSpeed : Double;
   fDecelSpeed : Double;
   fWorkSpeed : Double;
   nSMODE : LongInt;

begin
   fAccelSpeed := 30000;
   fDecelSpeed := 30000;
   fWorkSpeed := 10000;
   nSMODE := cmSMODE_S;

    // cmX1 을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다.
   cmmCfgSetSpeedPattern(
    cmX1, // 현재 활성화 되어 있는 채널을 선택합니다.
   nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다.
   fWorkSpeed, // 작업 속도를 설정합니다.
    fAccelSpeed, // 가속도를 설정합니다.
   fDecelSpeed); // 감속도를 설정합니다.

   // cmY1 을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다.
   cmmCfgSetSpeedPattern(
   cmY1, // 현재 활성화 되어 있는 채널을 선택합니다.
   nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다.
   fWorkSpeed, // 작업 속도를 설정합니다.
   fAccelSpeed, // 가속도를 설정합니다.
   fDecelSpeed); // 감속도를 설정합니다.
end;

procedure FormCreate();
var

   g_nAxis : LongInt;
begin

   // Load CMMSDK(DLL) Library
   if ( cmmGnDeviceLoad(cmTRUE,@g_nAxis) <> cmERR_NONE ) then
   begin
       // 마지막에 발생한 에러를 화면에 표시합니다.
       // 함수 인자로는 Form 의 Handle 이 전달됩니다.
       cmmErrShowLast(Handle);
       exit;
   end
end;

// * Description :
// *
// * 속도 모드로 반대 방향으로 다축(Multi Axes) 이동을 시작합니다.
procedure TForm1.btnNegativeClick(Sender: TObject);
var

fWorkSpeedRatio : Double;
fAccelSpeedRatio : Double;
fDecelSpeedRatio : Double;

AxisList : Array[0..1] of LongInt;
DirList : Array[0..1] of LongInt;

i : LongInt;
begin

    // 이송 버튼을 비활성화합니다.
   btnPositive.Enabled := FALSE;
   btnNegative.Enabled := FALSE;

   For i:=0 to 1 do begin
   DirList[i] := cmDIR_N; // 역방향
   end;

    AxisList[0] := cmX1;
   AxisList[1] := cmY1;

   /////////////////////////////////////////////////////
   // Slider Bar 를 통해 각 속도를 기준속도 대비의 비율로 구합니다.
   // 여기서 기준 속도란 cmmCfgSetSpeedPattern 함수를 통해 설정된
   // 속도를 의미하며, 아래의 cmmSxSetSpeedRatio 함수는
   // 단축(Single Axis)를 대상으로 축의 속도를
   // 기준 속도 대비 Percent(%) 단위로 입력 받아 설정하는 함수입니다.
   fAccelSpeedRatio := 100;
   fDecelSpeedRatio := 100;
   fWorkSpeedRatio := 100;

   cmmSxSetSpeedRatio(
     cmX1,              // X1 축
     cmSMODE_KEEP,      // 이전 가감속 모드를 그대로 설정
     fWorkSpeedRatio,
     fAccelSpeedRatio,
     fDecelSpeedRatio);

   cmmSxSetSpeedRatio(
     cmY1, // Y1 축
     cmSMODE_KEEP, // 이전 가감속 모드를 그대로 설정
     fWorkSpeedRatio,
     fAccelSpeedRatio,
     fDecelSpeedRatio);

    //다축을 대상으로 속도제어(지정한 속도로 정지(停止)명령이 있을 때 까지 이동)
   // 에는 다음과 같이 cmmMxVMoveStart(...) 함수를 사용합니다.
   cmmMxVMoveStart(2,@AxisList,@DirList);

end;