cmlPmMxMoveToStart


SYNOPSYS

VT_I4 cmlPmMxVMoveStart([in] VT_I4 BoardID, [in] VT_I4 NodeId, [in] VT_I4 NumChannel,
r[in] VT_PI4 NumChannel, [in] VT_PI4 DirList)

DESCRIPTION

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

  • 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의 첨두어 cml 가 붙지 않습니다.

PARAMETER

▶ BoardID : 사용자가 설정한 디바이스(보드) ID.

▶ NodeId : 사용자가 제어하고자 하는 노드 번호.

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

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

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

Value

Meaning

0 또는 cmlDIR_N

(-) 방향

1 또는 cmlDIR_P

(+) 방향

RETURN VALUE

Value

Meaning

음수

수행 실패

ERR_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
 C/C++
 #include "ComiMLink2_SDK.h"
 #include "ComiMLink2_SDK_Def.h"
 /***************************************************************
 * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
 * 적용되는 부분을 의미합니다.
 ***************************************************************/
 long BoardID = 0;
 void OnProgramInitial()
 {
 long m_nNumDevices;
 long m_DeviceList[16];
 long m_nNumAxes;
 cmlLoadDll();
 if(cmlGnLoadDevice (&m_nNumDevices, m_DeviceList, &m_nNumAxes)!= ERR_NONE)
 {
 //Handle 은 사용자가 생성한 폼의 핸들 값입니다.
 // 에러메시지 출력
 return;
 }
 }
 /***************************************************************
 * OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
 * 호출되는 가상의 함수 입니다. 이때 m_fVwork, m_fAcc, m_fDec 변수를
 * 통하여 속도, 가속도 , 감속도 값이 적절하게 전달된다고 가정합니다.
 ***************************************************************/
 void OnSetSpeed()
 {
 //각 축(Axis)의 기본 속도를 설정 합니다.
 cmlPmCfgSetSpeedPattern(BoardID, 0, cmX1, cmlPM_SMODE_S, m_fVwork, m_fAcc,
 m_fDec ,0,0);
 cmlPmCfgSetSpeedPattern(BoardID, 0, cmY1, cmlPM_SMODE_S, m_fVwork, m_fAcc,
 m_fDec ,0,0);
 }
 /**************************************************************
 * OnDoMotion() : 작업명령시에 호출되는 가상의 함수
 * 이 함수에서는 X1, Y1, Z1 축에 대하여 Velocity Move를 시작합니다.
 **************************************************************/
 void OnDoMotion()
 {
 long nNumChannel[2] = {0, cmY1};
 long nDirList[2] = {cmDIR_P, cmDIR_P}; //Positive dir
 // Start V-Move of X1&Y1&Z1 //
 if(cmlPmMxVMoveStart(BoardID, 0, 3, nNumChannel, nDirList) != ERR_NONE){
 // 에러메시지 출력
   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
 Visual Basic

 Private Sub PmCfgSpeed(nTotalAxis As Long)

 Dim i As Integer
 Dim BoardID As Long
     '==========================================================
     ' 이 함수에서 CfgSetSpeedPattern 함수로 속도를 설정하는 것은
 ‘ 모든 모션의 기준속도(Standard Speed) 가 됩니다.
     ' 단축 구동을 비롯한 대부분의 모션 동작은 이 기준 속도의 비율로 동작되게
 ‘ 됩니다.
     ' 아래 함수는 전체 축에 대해서 임의의 기준 속도를 설정하고 있습니다.
     '==========================================================
     BoardID = 0
     For i = 0 To nTotalAxis-1
         Call PmCfgSetSpeedPattern(BoardID, 0, i, cmlPM_SMODE_S, 10000, 20000, 20000,0,0)
     Next

 End Sub

 Private Sub btnMove_Click()

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

     NumChannel(0) = 0
     NumChannel(1) = 1

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

     ' 이 함수는 지정된 속도로 정지(停止) 함수가 호출 될때까지 계속 이동합니다.
     nRetVal = PmMxVMoveStart(BoardID, 0, 2, NumChannel(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
 Delphi

 Procedure btnSetSpeedClick();
 var
     BoardID : LongInt;
 DevList : Array[0..15] of LongInt
 fAccelSpeed : Double;
     fDecelSpeed : Double;
     fWorkSpeed : Double;
     nSMODE : LongInt;

 begin
 BoardID := 0;
 fAccelSpeed := 30000;
           fDecelSpeed := 30000;
           fWorkSpeed := 10000;
           nSMODE := cmlMODE_S;

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


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

 procedure FormCreate();
 var
 g_nDevs : LongInt;
 DevList : Array[0..15] of LongInt
 g_nAxis : LongInt;

 begin

 // Load ComiMLink3(DLL) Library
 if (cmlGnLoadDevice (@g_nDevs, @DevList, @g_nAxis) <> ERR_NONE ) then
 begin
   // 마지막에 발생한 에러를 화면에 표시합니다.
   // 함수 인자로는 Form 의 Handle 이 전달됩니다.
   // 에러메시지 출력
   exit;
 end
 end;

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

   fWorkSpeedRatio : Double;
   fAccelSpeedRatio : Double;
   fDecelSpeedRatio : Double;
 NumChannel : 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;
 NumChannel[0] := 0;
 NumChannel[1] := cmY1;
 //다축을 대상으로 속도제어(지정한 속도로 정지(停止)명령이 있을 때 까지 이동)
 // 에는 다음과 같이 cmlPmMxVMoveStart(...) 함수를 사용합니다.
 cmlPmMxVMoveStart(BoardID, 0,2,@NumChannel,@DirList);
 end;