4.1.37. cmmCfgSetUnitSpeed


SYNOPSYS


VT_I4 cmmCfgSetUnitSpeed(

[in] VT_I4 Axis, [in] VT_R8 UnitSpeed )

DESCRIPTION

논리적 단위 속도에 대한 실제 펄스 출력속도(PPS)를 설정합니다.

PARAMETER

  • Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다.

  • UnitSpeed : cmmCfgSetUnitSpeed 함수의 인자이며, 단위 속도에 대한 펄스 출력 속도(PPS)를 설정합니다.

REFERENCE

  • 사용자의 특성에 따라 속도에 대한 단위가 다를 수 있습니다. 즉, 어떤 사용자는 속도 단위를 RPM 으로 표현하는 것이 용이할 수 있고 어떤 사용자는 m/sec 로 표현하는 것이 용이할 수 있습니다.

EXAMPLE 1

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

1 회전에 필요한 펄스수가 3600 펄스일 때 거리의 단위를 각도(1˚)로, 속도의 단위를 rpm 으로 설정하는 예제입니다.

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

void StartProgram()
{

   long nNumAxes = 0;

   if ( cmmLoadDll() != TRUE ) {

/* OutputDebugString API 는 GUI 프로그램에서 문자열을 디버거에 보낼 수 있습니다. Borland C++ Builder 에서는
DebugWindows 에 Event Log 를 확인할 수 있으며, MS VC++ 에서는 Debug 윈도우에서 확인할 수
있습니다. */

   OutputDebugString(“DLL 로드에 실패하였습니다”);
   // 이후 적절한 에러처리를 해주시기 바랍니다.
   }

   if ( cmmGnDeviceLoad(cmTRUE, &nNumAxes) != cmERR_NONE ){

   // MS VC++ 에서는 아래와 같이 에러 원인을 화면에 표시할 수 있습니다.
   cmmErrShowLast(Handle); //사용자 작성 윈도우의 핸들값입니다.

   // Borland C++ 계열에서는 아래와 같이 에러 원인을 화면에 표시할 수
   // 있습니다.
   //cmmErrShowLast(Form1->Handle);
   }

}

// 실제 이동 동작을 수행하는 가상 함수입니다.
void OnMove(void)
{
   // Set 10 pulses for unit distance
   // 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로
   // 가정하고 단위 거리를 1˚로 설정한 것입니다.
   cmmCfgSetUnitDist(cmX1, 10);

   // Set 3600/60(=60) PPS for unit speed
   // 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로
   // 가정하고 단위 속도를 1rpm 으로 설정한 것입니다.
   cmmCfgSetUnitSpeed(cmX1, 3600./60);

   // Set trapezoidal speed mode //
   // Set speed as 100 rpm //
   //가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업속도가 100rpm 이므로 가속 및 감속
   시간은 각각 0.5 초가 걸립니다.
   cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 100,200,200);

   // 모터를 720˚회전한다. 실제로는 720*10 펄스가 출력됩니다. //
   cmmSxMove(cmX1, 720,cmFALSE);
}

void EndProgram(void)
{
   cmmGnDeviceUnload();
   cmmUnloadDll();
}
 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
Visual Basic

'1 회전에 필요한 펄스수가 3600 펄스일 때 거리의 단위를 각도(1˚)로,
'속도의 단위를 rpm 으로 설정하는 예제입니다.
Private Sub StartProgram()

   Dim nTotalAxis As Long
   Dim IRetVal As Long
   Dim IsLoaded As Long

   '==================================================================
   ' cmmGnDeviceLoad 함수를 장치를 초기화합니다.
   IRetVal = cmmGnDeviceLoad(True, nTotalAxis)

   If IRetVal <> cmERR_NONE Then
   MsgBox ("cmmGnDeviceLoad has been failed")
   End If

   '==================================================================

   '==================================================================
   ' cmmGnDeviceIsLoaded 함수로 장치가 올바르게 불려졌는지를 확인할 수 있습니다.
    Call cmmGnDeviceIsLoaded(IsLoaded)

    If IsLoaded <> cmTRUE Then
   MsgBox ("디바이스 로드를 실패하였습니다")
   End
   End If
   '==================================================================
End Sub

'// 실제 이동 동작을 수행하는 가상 함수입니다.
Private Sub OnMove(void)

   '// Set 10 pulses for unit distance
   '// 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로
   '// 가정하고 단위 거리를 1˚로 설정한 것입니다.
   Call cmmCfgSetUnitDist(cmX1, 10)

   '// Set 3600/60(=60) PPS for unit speed
   '// 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로
   '// 가정하고 단위 속도를 1rpm 으로 설정한 것입니다.
   Call cmmCfgSetUnitSpeed(cmX1, 3600# / 60)

   '// Set trapezoidal speed mode
   '// Set speed as 100 rpm
   '//가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업속도가
   ‘//100rpm 이므로 가속 및 감속 시간은 각각 0.5 초 걸립니다.
   Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 100, 200, 200)

   '// 모터를 720˚회전한다. 실제로는 720*10 펄스가 출력됩니다.
   Call cmmSxMove(cmX1, 720, cmFALSE)
End Sub

Private Sub EndProgram()

   Call cmmGnDeviceUnload
   Call cmmUnloadDll

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
Delphi

procedure OnSetUnitSpeed ();
begin
   { 1 회전에 필요한 펄스수가 3600 펄스일 때
   거리의 단위를 각도 (1˚)로, 속도의 단위를 RPM 으로 설정합니다. }

   // 1 회전에 3600 펄스가 필요하므로 1˚ 회전을 하기 위해서는 10 펄스가 필요합니다.
   cmmCfgSetUnitDist (cmX1, 10 );

   // 단위 속도를 1rpm 으로 설정합니다. 3600(pulse) / 60(sec) = 60(pps)
   cmmCfgSetUnitSpeed (cmX1, 60 );

end;

procedure OnMove ();
begin
   { 가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업 속도가 100rpm 이므로
   가속 및 감속에는 0.5sec 가 소요됩니다. }
   cmmCfgSetSpeedPattern (cmX1, cmSMODE_T, 100, 200, 200 );

   // 모터를 720˚ 회전 시킵니다. 실제로는 720 * 10 pulse 가 출력됩니다.
   cmmSxMoveStart (cmX1, 720 );
end;

EXAMPLE 2

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

1cm 이동하는데 필요한 펄스수가 1000 펄스일 때 거리의 단위를 cm 로, 속도의 단위를 cm/sec 로 설정하는
예제입니다.

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

void StartProgram()
{

   long nNumAxes = 0;

   if ( cmmLoadDll() != TRUE ) {

   * OutputDebugString API 는 GUI 프로그램에서 문자열을 디버거에 보낼 수 있습니다. Borland C++ Builder
   에서는 DebugWindows 에 Event Log 를 확인할 수 있으며, MS VC++ 에서는 Debug 윈도우에서
   확인할 수 있습니다. */

   OutputDebugString(“DLL 로드에 실패하였습니다”);
   // 이후 적절한 에러처리를 해주시기 바랍니다.

   }

   if ( cmmGnDeviceLoad(cmTRUE, &nNumAxes) != cmERR_NONE ){

   // MS VC++ 에서는 아래와 같이 에러 원인을 화면에 표시할 수 있습니다.
   cmmErrShowLast(Handle); //사용자가 제작 윈도우의 핸들입니다.

   // Borland C++ 계열에서는 아래와 같이 에러 원인을 화면에 표시할 수
   // 있습니다.
   // cmmErrShowLast(Form1->Handle);
   }
} /* void StartProgram() */

// 실제 이동 동작을 수행하는 가상 함수입니다.
void OnMove(void)
{

   // Set 1000 pulses for unit distance
   // 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로
   // 가정하고 단위 거리를 1cm 로 설정한 것입니다.
   cmmCfgSetUnitDist(cmX1, 1000);
   // Set 1000 PPS for unit speed
   // 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로
   // 펄스로 가정하고 단위 속도를 1rpm 로 설정한 것입니다.
   cmmCfgSetUnitSpeed(cmX1, 1000);

   // Set speed as 50 cm/sec/
   // Set constant speed mode

   cmmCfgSetSpeedPattern(cmX1, cmSMODE_C, 50,0,0);
   cmmSxMove(cmX1, 10); // 50 cm/sec 의 속도로 10cm 이동 . 실제로는 10*1000=10000 펄스가 출력됩니다.
}

void EndProgram(void)
{
   cmmGnDeviceUnload();
   cmmUnloadDll();
}
 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
Visual Basic

'1cm 이동하는데 필요한 펄스수가 1000 펄스일 때 거리의 단위를 cm 로,
'속도의 단위를 cm/sec 로 설정하는 예제입니다.

Private Sub StartProgram()

   Dim nTotalAxis As Long
   Dim IRetVal As Long
   Dim IsLoaded As Long

   '==================================================================
   ' cmmGnDeviceLoad 함수를 장치를 초기화합니다.
   IRetVal = cmmGnDeviceLoad(True, nTotalAxis)

   If IRetVal <> cmERR_NONE Then
   MsgBox ("cmmGnDeviceLoad has been failed")
   End If
   '==================================================================

   '==================================================================
   ' cmmGnDeviceIsLoaded 함수로 장치가 올바르게 불려졌는지를 확인할 수 있습니다.
   Call cmmGnDeviceIsLoaded(IsLoaded)

   If IsLoaded <> cmTRUE Then
   MsgBox ("디바이스 로드를 실패하였습니다")
   End
   End If
   '==================================================================
End Sub

'// 실제 이동 동작을 수행하는 가상 함수입니다.
Private Sub OnMove()

   '// Set 1000 pulses for unit distance
   '// 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로
   '// 가정하고 단위 거리를 1cm 로 설정한 것입니다.
   Call cmmCfgSetUnitDist(cmX1, 1000)

   '// Set 1000 PPS for unit speed
   '// 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로
   '// 펄스로 가정하고 단위 속도를 1rpm 로 설정한 것입니다.
   Call cmmCfgSetUnitSpeed(cmX1, 1000)

   '// Set speed as 50 cm/sec/ //
   '// Set constant speed mode //
   Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_C, 50, 0, 0)

   Call cmmSxMove(cmX1, 10)
   '50 cm/sec 의 속도로 10cm 이동
    '실제로는 10*1000=10000 펄스가 출력됩니다.

End Sub

Private Sub EndProgram()

   Call cmmGnDeviceUnload
   Call cmmUnloadDll

End Sub