cmmIxSetSpeedPattern


SYNOPSIS

VT_I4 cmmIxSetSpeedPattern(
    [in] VT_I4 MapIndex, [in] VT_I4 IsVectorSpeed, [in] VT_I4 SpeedMode, [in] VT_R8 Vel, [in] VT_R8 Acc, [in] VT_R8 Dec
    )

DESCRIPTION

  • cmmIxSetSpeedPattern 은 “기본보간제어”의 이송 속도에 대한 환경설정을 정의합니다. 사용자가 지정한 작업 속도는 “IsVectorSpeed”의 설정값이 ‘TRUE’이면 벡터 스피드, ‘FALSE’이면 마스터 스피드가 적용됩니다. “벡터속도”에 대한 자세한 내용은 아래의 “REFERENCE” 항목을 참조하십시오. 보간 작업 속도를 벡터속도로 설정해야만 하는 특별한 경우를 제외하고는 보간 작업 속도를 마스터속도로 설정하는 것이 모터의 최대속도를 활용하는데 있어서 편리합니다.

PARAMETER

  • MapIndex: 맵번호(Map index), 이 맵번호를 사용하기전에 먼저 cmmIxMapAxes() 함수를 통하여 해당 맵번호에 유효한 축들이 맵핑되어 있어야 합니다.

  • IsVertorSpeed : cmmIxSetSpeedPattern 함수의 인자이며, TRUE 로 설정했을 경우에는 벡터스피드 모드로, FALSE 로 설정했을 경우에는 마스터스피드 모드로 설정됩니다.

  • SpeedMode : cmmIxSetSpeedPattern 함수의 인자이며, 속도모드를 설정합니다. 설정값은 다음과 같습니다.

Value

Meaning

0 또는 cmSMODE_C

CONSTANT 속도모드 => 가감속을 수행하지 않습니다.

1 또는 cmSMODE_T

TRAPEZOIDAL 속도모드 => 사다리꼴 가감속을 수행합니다.

2 또는 cmSMODE_S

S-CURVE 속도모드 => S-CURVE 가감속을 수행합니다.

  • VelRatio : cmmIxSetSpeedPattern 함수의 인자이며, 마스터스피드모드 일 때는 작업속도 비율을 설정합니다. 벡터스피드모드 일 때는 PPS 단위를 사용하여 설정 합니다.

  • AccRatio : cmmIxSetSpeedPattern 함수의 인자이며, 마스터스피드모드 일 때는 가속도 비율을 설정합니다. 벡터스피드모드 일 때는 PPS 단위를 사용하여 가속도를 설정합니다.

  • DecRatio : cmmIxSetSpeedPattern 함수의 인자이며, 마스터스피드모드 일 때는 감속도 비율을 설정합니다. 벡터스피드모드 일 때는 PPS 단위를 사용하여 감속도를 설정합니다.

RETURN VALUE

Value

Meaning

음수

수행 실패

cmERR_NONE

수행 성공

REFERENCE

Warning

보간 제어의 속도에는 마스터 속도 모드와 백터 속도 모드가 존재합니다. 본 함수의 설명을 잘 읽고, 보간 속도 설정에 주의를 기울여 주시기 바랍니다. 특히 서로 다른 속성을 가지고 있는 서보드라이브나 스탭 드라이버에서는 보간 속도 설정에 반드시 주의를 요합니다.

  • 직선 보간 이동시에 작업속도의 적용

    마스터 속도 모드(Master Speed Mode)로 보간 작업시에는 각 축의 속도가 각 축의 이동거리에 비례하여 자동으로 설정됩니다. 이때 cmmIxSetSpeedPattern() 함수의 WorkSpeed 매개 변수를 통하여 지정되는 보간 작업속도는 마스터속도로 적용됩니다. 각 보간 이동시에 이동거리가 가장 큰 축을 “마스터축”이라고 하며 마스터축의 속도를 “마스터속도”라 합니다. 각 보간 이동시에 마스터축의 속도는 사용자가 지정한 보간 작업속도로 설정되며, 마스터축 이외의 다른 축의 속도는 마스터축과 해당 축의 이동 거리 비에 따라서 자동으로 설정됩니다.

    보간 작업속도의 적용 예 cmmIxSetSpeedPattern() 함수의 WorkSpeed 를 10000 으로 설정하고 X,Y,Z 축의 보간 작업을 수행하는 경우에 이동 거리에 따른 각 축의 속도 관계는 아래와 같습니다(표에서 배경이 회색으로 되어 있는 것은 마스터축임을 의미하는 것입니다).

../../../../_images/5장_1.jpg
  • 직선 보간 이동시의 벡터 속도 X, Y 축간의 직선 보간 이송은 2 축(편의상 X, Y 축으로 가정) 직선 보간 이동을 그래프로 나타낸 것입니다.

../../../../_images/5장_2.jpg

예제 코드를 예를 들어 설명하면 다음과 같습니다.

#define MAP_IDX 0 // 맵번호 => 0

// 코드의 간결성을 위하여 앞에서 행해져야할 초기화 루틴은 모두 생략 // ……

// X1 축과 Y1 축을 0 번 맵번호로 맵핑 // cmmIxMapAxes (MAP_IDX, cmX1_MASK | cmY1_MASK, 0);

// 속도패턴 설정 : 벡터속도 1000 PPS, 벡터가속도 10000 PPS/sec (가속시간 0.1 초) // // 여기서 2 번째 인자가 cmTRUE 이면, Vector 속도 모드를 의미한다. cmmIxSetSpeedPattern(MAP_IDX, ,cmTRUE, cmSMODE_S, 1000, 10000, 10000);

// 직선보간이동 수행 : (3000, 4000) 만큼 이동 // double fDistList[2]={3000, 4000}; cmmIxLine (MAP_IDX, fDistList, cmFALSE);


위의 코드는 현재 위치가 (0,0) 이라고 가정할 때 (3000, 4000)의 좌표로 직선 보간 이동을 수행합니다. 벡터 속도를 1000 으로 지정하였으므로 각 축의 속도 계산식은 다음과 같습니다.

../../../../_images/5장_3.jpg

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
C/C++

#include “Cmmsdk.h”
#include “CmmsdkDef.h”

#define MAP0 0         // 보간 맵 정의

cmmIxMapAxes ( MAP0, cmX1_MASK | cmY1_MASK, 0 );

/* MAP0 로 설정된 축들을 벡터 스피드 모드로
작업 속도 1000, 가속도 10000, 감속도 10000 으로 설정합니다.*/
cmmIxSetSpeedPattern ( MAP0,           // 보간 맵 번호
   cmTRUE,                             // cmFALSE : 마스터 모드, cmTRUE : 벡터 모드
   cmSMODE_T,                          // 가감속 모드
   1000,                               // 마스터 모드: 작업 속도 비율, 벡터 모드: 작업 속도 (PPS)
   10000,                              // 마스터 모드 : 가속도 비율, 벡터 모드: 가속도 (PPS)
   10000                               // 마스터 모드 : 감속도 비율, 벡터 모드: 감속도 (PPS)
   );
/* 현재 위치가 (0, 0) 이라고 가정할 때, (3000, 4000) 좌표로 직선 보간 이송을 수행합니다. 벡터 속도를 ‘1000’ 으로
지정하였으므로 위 계산식에 의하여 Vx = 600, Vy = 800 의 속도로 이송합니다. */
Double fDistList[2] = {3000, 4000};
cmmIxLineStart ( MAP0, fDistList );
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Visual Basic

Dim nMapIdx As Long ‘보간 맵 정의
Dim fDistList(2) As Double ‘ 이송 좌표값의 배열 정보

nMapIdx = 0

Call cmmIxMapAxes ( nMapIdx, cmX1_MASK Or cmY1_MASK, 0 )

‘ MAP0 로 설정된 축들을 벡터 스피드 모드로
‘ 작업 속도 1000, 가속도 10000, 감속도 10000 으로 설정합니다.
Call cmmIxSetSpeedPattern ( nMapIdx, cmTRUE, cmSMODE_T, 1000, 10000, 10000 )

‘ 현재 위치가 (0, 0) 이라고 가정할 때, (3000, 4000) 좌표로 직선 보간 이송을 수행합니다.
‘ 벡터 속도를 ‘1000’ 으로 지정하였으므로 위 계산식에 의하여 Vx = 600, Vy = 800 의 속도로 이송합니다.
fDistList(0) = 3000
fDistList(1) = 4000
Call cmmIxLineStart ( nMapIdx, fDistList(0) )
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Delphi

var
   nMapIdx : LongInt; // 보간 맵 정의
   fDistList : Array[0..1] of Double; // 이송 좌표값의 배열 정보

begin
   nMapIdx := 0;

   cmmIxMapAxes ( nMapIdx, cmX1_MASK or cmY1_MASK, 0 );
   { MAP0 로 설정된 축들을 벡터 스피드 모드로
   작업 속도 1000, 가속도 10000, 감속도 10000 으로 설정합니다. }
   cmmIxSetSpeedPattern ( nMapIdx, cmTRUE, cmSMODE_T, 1000, 10000, 10000 );

   { 현재 위치가 (0, 0) 이라고 가정할 때, (3000, 4000) 좌표로 직선 보간 이송을 수행합니다.
   벡터 속도를 ‘1000’ 으로 지정하였으므로 위 계산식에 의하여 Vx = 600, Vy = 800 의 속도로 이송합니다. }
   fDistList[0] := 3000;
   fDistList[1] := 4000;
   cmmIxLineStart ( nMapIdx, @fDistList );

end;