cmsMxMoveToStart


SYNOPSYS

VT_I4 cmsMxMoveToStart ([in] VT_I4 BoardId, [in] VT_I4 NumAxes,
[in] VT_PI4 AxisList, [in] VT_PR8 PosList)

DESCRIPTION

  • 여러 개의 축에 대하여 지정한 절대좌표로의 이동을 시작합니다. 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작합니다. 따라서 이 함수는 여러축이 동기를 맞추어 작업을 시작해야하는 경우에 유용하게 사용될 수 있습니다. cmsMxMoveTo() 함수는 지정한 모든 축의 모션이 완료되기 전까지 반환되지 않으며, cmsMxMoveToStart() 함수는 모션을 시작시킨 후에 바로 반환됩니다.

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

PARAMETER

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

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

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

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

Value

Meaning

0 또는 cmsDIR_N

(-) 방향

1 또는 cmsDIR_P

(+) 방향

RETURN VALUE

Value

Meaning

음수

수행 실패

ERR_NONE

수행 성공

EXAMPLE

  • 본 예제는 cmsMxMoveTo 를 사용하여 X1,Y1,Z1 축을 절대좌표 (1000,1000,1000) 지점으로 이동한 후 다시 절대좌표 (0,0,0) 지점으로 이동하는 예입니다. 이때 각축의 속도와 이동거리가 같으므로 동시에 종료될 것입니다. 하지만 속도 설정이 서로 다르거나 이동거리가 서로 다른 경우에는 각축이 동시에 시작해도 종료시점은 다를 수 있습니다.

  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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
   C/C++
   #define DEV0 0


   #include "ComiSSCNET3_SDK.h"
   #include "ComiSSCNET3_SDK_Def.h"

   /***************************************************************
   * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
   * 적용되는 부분을 의미합니다.
   ***************************************************************/
   void OnProgramInitial()
   {
   long m_nNumDevices;
   long m_DeviceList[16];
   long m_nNumAxes;
   cmsLoadDll();
   if(cmsGnLoadDevice(&m_nNumDevices, m_DeviceList, &m_nNumAxes) != ERR_NONE)
   {
     //Handle은 사용자가 생성한 폼의 핸들 값입니다.
     // 에러메시지 출력
     return;
   }
   }

   /***************************************************************
   * OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
   * 호출되는 가상의 함수 입니다. 이때 m_fVwork, m_fAcc, m_fDec 변수를
   * 통하여 속도, 가속도 , 감속도 값이 적절하게 전달된다고 가정합니다.
   ***************************************************************/
   void OnSetSpeed()
   {
   //각 축(Axis)의 기본 속도를 설정 합니다.
   cmsCfgSetSpeedPattern(DEV0, 0, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec ,0,0);
   cmsCfgSetSpeedPattern(DEV0, cmsY1, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec ,0,0);
   cmsCfgSetSpeedPattern(DEV0, cmsZ1, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec,0,0 );
   }

   /**************************************************************
   * OnDoMotion() : 작업명령시에 호출되는 가상의 함수
   * 이 함수에서는 X1, Y1, Z1 축에 대하여 Velocity Move를 시작합니다.
   **************************************************************/
   void OnDoMotion()
   {
   long nAxisList[3] = {0, cmsY1, cmsZ1};
   long nDirList[3] = {cmsDIR_P, cmsDIR_P, cmsDIR_P}; //Positive dir

   // Start V-Move of X1&Y1&Z1 //
   if(cmsMxVMoveStart(DEV0, 3, nAxisList, nDirList) != ERR_NONE){
     // 에러메시지 출력
     return;
   }
   }

   -----------------------------------------------------------
   Visual Basic
   Const DEV0 = 0


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

       For i = 0 To nTotalAxis-1
           Call CfgSetSpeedPattern(DEV0, i, cmsSMODE_S, 10000, 20000, 20000,0,0)
       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) = cmsDIR_P
       Direction(1) = cmsDIR_P

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


   End Sub

   -----------------------------------------------------------

   Delphi

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

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

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


           // cmsY1을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다.
             cmsCfgSetSpeedPattern(
   0,  // 현재 설정된 디바이스 ID를 선택합니다.
             cmsY1,                  // 현재 활성화 되어 있는 채널을 선택합니다.
             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 ComiSSCNET3(DLL) Library
   if ( cmsGnLoadDevice (@g_nDevs, @DevList, @g_nAxis) <> ERR_NONE ) then
   begin
     // 마지막에 발생한 에러를 화면에 표시합니다.
     // 함수 인자로는 Form 의 Handle 이 전달됩니다.
     // 에러메시지 출력
     exit;
   end
   end;

   // * Description :
   // *
   // *    속도 모드로 반대 방향으로 다축(Multi Axes) 이동을 시작합니다.
   procedure TForm1.btnNegativeClick(Sender: TObject);
   var
   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] := cmsDIR_N;   // 역방향
           end;

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