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