cmcPmMxMoveToStart¶
SYNOPSYS¶
VT_I4 cmcPmMxVMoveStart([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 에서는 함수의 첨두어 cmc 가 붙지 않습니다.
PARAMETER¶
▶ BoardID : 사용자가 설정한 디바이스(보드) ID.
▶ NodeId : 노드번호. 노드번호는 3부터 시작합니다.
▶ NumAxes : 동시에 작업을 수행할 대상 축의 수
▶ NumChannel : 동시에 작업을 수행할 대상 축의 배열 주소값. 이 배열의 크기는 NumAxes값과 일치하거나 커야 합니다.
▶ DirList : 방향을 지시하는 값의 배열 주소값. 이 배열의 크기는 NumAxes값과 일치하거나 커야 합니다. 모션의 방향을 지시하는 값은 다음과 같습니다.
Value |
Meaning |
---|---|
0 또는 cmcDIR_N |
(-) 방향 |
1 또는 cmcDIR_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 "ComiMLink3_SDK.h"
#include "ComiMLink3_SDK_Def.h"
/***************************************************************
* OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
* 적용되는 부분을 의미합니다.
***************************************************************/
long BoardID = 0;
void OnProgramInitial()
{
long m_nNumDevices;
long m_DeviceList[16];
long m_nNumAxes;
cmcLoadDll();
if(cmcGnLoadDevice (&m_nNumDevices, m_DeviceList, &m_nNumAxes)!= ERR_NONE)
{
//Handle 은 사용자가 생성한 폼의 핸들 값입니다.
// 에러메시지 출력
return;
}
}
/***************************************************************
* OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때
* 호출되는 가상의 함수 입니다. 이때 m_fVwork, m_fAcc, m_fDec 변수를
* 통하여 속도, 가속도 , 감속도 값이 적절하게 전달된다고 가정합니다.
***************************************************************/
void OnSetSpeed()
{
//각 축(Axis)의 기본 속도를 설정 합니다.
cmcPmCfgSetSpeedPattern(BoardID, 3, 0, cmcPM_SMODE_S, m_fVwork, m_fAcc,
m_fDec ,0,0);
cmcPmCfgSetSpeedPattern(BoardID, 3, cmY1, cmcPM_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(cmcPmMxVMoveStart(BoardID, 3, 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, 3, i, cmcPM_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, 3, 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 := cmcMODE_S;
// 0을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다.
cmcCfgSetSpeedPattern(
0, // 현재 Board의 ID를 입력합니다.
0, // 현재 활성화 되어 있는 채널을 선택합니다.
nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다.
fWorkSpeed, // 작업 속도를 설정합니다.
fAccelSpeed, // 가속도를 설정합니다.
fDecelSpeed, // 감속도를 설정합니다.
0, //초기속도를 설정합니다.
0) ; //최종속도를 설정합니다.
// cmY1을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다.
cmcCfgSetSpeedPattern(
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 (cmcGnLoadDevice (@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;
//다축을 대상으로 속도제어(지정한 속도로 정지(停止)명령이 있을 때 까지 이동)
// 에는 다음과 같이 cmcPmMxVMoveStart(...) 함수를 사용합니다.
cmcPmMxVMoveStart(BoardID, 3,2,@NumChannel,@DirList);
end;
|