cmmMsRegisterSlave¶
SYNOPSIS¶
VT_I4 cmmMsRegisterSlave(
[in] VT_I4 Axis, [in] VT_R8 MaxSpeed, [in] VT_I4 IsInverse
)
DESCRIPTION¶
지정한 축을 Slave 축으로 등록/해제 합니다. 이때 마스터축은 자동으로 결정되며, 축 번호상 앞의 축이 자동적으로 Master 축으로 됩니다. 단, 해당 축의 Master/Slave 모드를 설정하는 하드웨어 스위치가 연결되지 않은 경우에는 Slave 축이 등록되어도 Master/Slave 동작이 정상적으로 동작하지 않습니다.
PARAMETER¶
Axis: Slave 축으로 지정/해제할 축번호. 축 번호는 0 부터 시작합니다.
MaxSpeed : Slave 축이 구동될 수 있는 최대속도. Master 축이 이 값보다 큰 속도로 구동되면 오동작할 수 있습니다. 속도의 단위는 “Unit speed”에 의해 정의되는 논리적 속도입니다.
IsInverse : Slave 축의 구동방향과 Master 축의 구동방향을 반대로 할 것인지를 결정합니다.
Value |
Meaning |
---|---|
0 또는 cmFALSE |
Master 축과 Slave 축의 구동방향을 동일하게 함. |
1 또는 cmTRUE |
Master 축과 Slave 축의 구동방향을 반대로 함. |
RETURN VALUE¶
Value |
Meaning |
---|---|
음수 |
수행 실패 |
cmERR_NONE |
수행 성공 |
REFERENCE¶
이 함수가 수행되면 지정한 축은 Manual Pulsar 모드로 전환되게 됩니다. Maser/Slave 에 관련된 하드웨어 스위치 설정이 적절하게 되었으면 지정한 축의 PA/PB 입력핀에 Master 축의 Command 펄스 신호가 자동으로 입력되고, 따라서 두 축이 동기제어됩니다.
Master 축의 Command 출력모드는 반드시 “CW & CCW 모드 (출력모드 4 ~ 5 번)”로 설정되어 있어야 합니다. Master 축의 Command 출력모드가 “Pulse & Direction 모드 (출력모드 0 ~ 3 번)”로 설정된 경우에는 Slave 축이 한쪽방향으로만 구동되게 됩니다. Command 출력모드의 설정에 관해서는 cmmCfgSetOutMode() 함수 설명편을 참조하시기 바랍니다.
Master 축의 Command 출력 모드가 “Pulse & Direction 모드” 로 설정된 경우 (출력모드 0~3) 에는 Master / Slave 기능을 양방향에서 원할하게 사용할 수 없습니다.
이 함수가 성공적으로 수행되었으면 cmmStReadMotionState() 함수의 반환값이 8(cmMST_WAIT_PLSR)이 됩니다. 이를 확인하면 지정한 축이 Slave 모드로 전환되었는지를 확인할 수 있습니다. 그러나 하드웨어 스위치 설정은 소프트웨어적으로 확인되지 않습니다.
Slave 축은 CLR(Counter Clear) 입력과 INP 입력이 자동으로 Disable 됩니다. 따라서 이 함수를 호출한 이후에 CLR 입력과 INP 입력을 Enable 시키는 환경설정을 수행해서는 안됩니다.
Slave 모드가 해제되면 해당 축의 CLR 입력모드와 INP 입력모드는 cmmMsRegisterSlave() 함수가 호출되기 이전의 설정으로 복원됩니다.
EXAMPLE¶
본 예제는 1 번(Y1) 축을 Slave 축으로 설정하여 Master/Slave 동기제어를 수행하는 예제입니다. 1 번축의 마스터축은 자동으로 0 번축으로 설정됩니다. 본 예제에서는 원점복귀 하는 함수를 두 가지 방식으로 예시합니다. 사용자는 두 가지 방식중에 하나를 선택적으로 사용하시면 됩니다.
★. 하드웨어적인 SYNC 스위치 중에서 “0->1“ 로 표기된 두 개의 스위치를 연결하여 합니다.
★. 마스터축인 0 번 축의 Command 출력모드는 반드시 “CW & CCW 모드 (출력모드 4 ~ 5 번)”로 설정되어 있어야 합니다.
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 | C/C++
#include "Cmmsdk.h"
#include "CmmsdkDef.h"
#define N_AXES 2 // 2 축
/***************************************************************
* OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
* 적용되는 부분을 의미합니다.
***************************************************************/
void OnProgramInitial()
{
long m_nNumAxes;
cmmLoadDll();
if(cmmGnDeviceLoad(cmTRUE, &m_nNumAxes) != cmERR_NONE)
{
//Handle 은 사용자가 생성한 폼의 핸들 값입니다.
cmmErrShowLast(Handle);
return;
}
// 1 번(Y1) 축을 Slave 축으로 등록합니다. => 마스터는 0 번(X1) 축 //
if(cmmMsRegisterSlave (cmY1, 500000, cmFALSE) != cmERR_NONE){
cmmErrShowLast(Handle);
}
}
/***************************************************************
* OnHomeReturn1() : 이 함수에서는 원점복귀시에는 1 번축의 Slave 모드를 해제한 상태에서 0 번과 1 번축이 동시에
원점복귀를 수행한 후, 원점복귀가 완료되면 다시 1 번축의 Slave 모드를 복원하는 방식을 취하였습니다.
* OnHomeReturn1() 대신에 OnHomeReturn2() 방식을 사용할 수도 있습니다.
****************************************************************/
void OnHomeReturn1()
{
/////////////////////////////////////////////////////////////
// 원점복귀를 하기 위해 1 번축을 Slave 모드에서 해제한다.
if(cmmMsUnregisterSlave (cmY1) != cmERR_NONE){
cmmErrShowLast(Handle);
return;
}
//X1 축과 Y1 축의 홈복귀 속도 패턴을 설정 합니다. 참고적으로 역방향 속도는 100 으로 설정하였습니다.
cmmHomeSetSpeedPattern(cmX1, cmSMODE_S, 10000, 30000, 30000, 100);
cmmHomeSetSpeedPattern(cmY1, cmSMODE_S, 10000, 30000, 30000, 100);
// X1&Y1 축 원점복귀 동시 수행//
long nAxes[2]={cmX1, cmY1};
long nDirList[2]={cmDIR_N, cmDIR_N};
if(cmmHomeMoveAll(2, nAxes, nDirList, cmFALSE) != cmERR_NONE){
cmmErrShowLast(Handle);
return;
}
// 1 번(Y1) 축을 Slave 축으로 다시 등록합니다. //
if(cmmMsRegisterSlave (cmY1, 500000, cmFALSE) != cmERR_NONE){
cmmErrShowLast(Handle);
}
}
/***************************************************************
* OnHomeReturn2() : 이 함수는 Master/Slave 시스템에서의 원점복귀를 수행하는 함수입니다. 이 함수에서는
원점복귀시에도 Master/Slave 모드를 유지한채 0 번축만 원점복귀를 수행합니다. 1 번축은 Slave 이므로 0 번축의
모션을 똑같이 추종합니다. OnHomeReturn2() 대신에 OnHomeReturn1() 방식을 사용할 수도 있습니다.
***************************************************************/
void OnHomeReturn2()
{
// X1 축 홈복귀 속도패턴 설정 //
cmmHomeSetSpeedPattern(cmX1, cmSMODE_S, 10000, 30000, 30000);
// X1 축 원점복귀 시작 //
if(cmmHomeMoveStart(cmX1, cmDIR_N) != cmERR_NONE){
cmmErrShowLast(Handle);
return;
}
if(cmmHomeWaitDone(cmX1, cmFALSE) != cmERR_NONE){
cmmErrShowLast(Handle);
return;
}
}
/**************************************************************
* OnDoMotion() : 모션을 수행하는 가상의 함수. 이 함수에서는 0 번축만 제어
* 하지만 실제제어되는 것은 0 번축과 1 번축이 함께 제어됩니다.
**************************************************************/
void OnDoMotion()
{
cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 10000, 100000, 100000);
cmmSxMove(cmX1, 1000, cmFALSE); // Move 1000
cmmSxMove(cmX1, 1000, cmFALSE); // Move 1000
cmmSxMove(cmX1, -1000, cmFALSE); // Move -1000
cmmSxMove(cmX1, -1000, cmFALSE); // Move -1000
}
/**************************************************************
* OnStop() : “Stop”명령시에 호출되는 가상의 함수
**************************************************************/
void OnStop()
{
cmmMxStopEmg(N_AXES, nAxisList);
}
|
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 | Visual Basic
'/**************************************************************
'* OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
'* 적용되는 부분을 의미합니다.
'***************************************************************
Private Sub OnProgramInitial()
If cmmGnDeviceLoad(cmTRUE, m_nNumAxes) <> cmERR_NONE Then
'Handle 은 사용자가 생성한 폼의 핸들 값입니다.
Call cmmErrShowLast(thisform.Hwnd)
End
End If
'1 번(Y1) 축을 Slave 축으로 등록합니다. => 마스터는 0 번(X1) 축
If cmmMsRegisterSlave(cmY1, 500000, cmFALSE) <> cmERR_NONE Then
Call cmmErrShowLast(thisform.Hwnd)
End If
End Sub
'/*************************************************************
'* OnHomeReturn1() : 이 함수에서는 원점복귀시에는
‘* 1 번축의 Slave 모드를 해제한 상태에서 0 번과 1 번축이 동시에 원점복귀를
‘* 수행한 후, 원점복귀가 완료되면 다시 1 번축의 Slave 모드를 복원하는
‘* 방식을 취하였습니다.
'* OnHomeReturn1() 대신에 OnHomeReturn2() 방식을 사용할 수도 있습니다.
'***************************************************************
Private Sub OnHomeReturn1()
' // 원점복귀를 하기 위해 1 번축을 Slave 모드에서 해제한다.
If cmmMsUnregisterSlave(cmY1) <> cmERR_NONE Then
Call cmmErrShowLast(thisform.Hwnd)
End
End If
'//X1 축과 Y1 축의 홈복귀 속도 패턴을 설정 합니다.
Call cmmHomeSetSpeedPattern(cmX1, cmSMODE_S, 10000, 30000, 30000, 100)
Call cmmHomeSetSpeedPattern(cmY1, cmSMODE_S, 10000, 30000, 30000, 100)
'// X1&Y1 축 원점복귀 동시 수행//
Dim nAxes(2) As Long
Dim ndirList(2) As Long
nAxes(0) = cmX1
nAxes(1) = cmY1
ndirList(0) = cmDIR_N
ndirList(1) = cmDIR_N
If cmmHomeMoveAll(2, nAxes(0), ndirList(0), cmFALSE) <> cmERR_NONE Then
Call cmmErrShowLast(thisform.Hwnd)
End
End If
'// 1 번(Y1) 축을 Slave 축으로 다시 등록합니다. //
If cmmMsRegisterSlave(cmY1, 500000, cmFALSE) <> cmERR_NONE Then
Call cmmErrShowLast(thisform.Hwnd)
End If
End Sub
'/**************************************************************
'* OnHomeReturn2(): 이 함수는 Master/Slave 시스템에서의 원점복귀를 수행
'* 하는 함수입니다. 이 함수에서는 원점복귀시에도 Master/Slave 모드를 유지한
'* 채 0 번축만 원점복귀를 수행합니다.1 번축은 Slave 이므로 0 번축의 모션을 똑
'* 같이 추종합니다. OnHomeReturn2()대신에 OnHomeReturn1() 방식을 사용할
'* 수도 있습니다.
'**************************************************************/
Private Sub OnHomeReturn2()
'// X1 축 홈복귀 속도패턴 설정 //
Call cmmHomeSetSpeedPattern(cmX1, cmSMODE_S, 10000, 30000, 30000)
'// X1 축 원점복귀 시작 //
If cmmHomeMoveStart(cmX1, cmDIR_N) <> cmERR_NONE Then
cmmErrShowLast (thisform.Hwnd)
End
End If
If cmmHomeWaitDone(cmX1, cmFALSE) <> cmERR_NONE Then
cmmErrShowLast (thisform.Hwnd)
End
End If
End Sub
'/**************************************************************
'* OnDoMotion() : 모션을 수행하는 가상의 함수. 이 함수에서는 0 번축만 제어
'* 하지만 실제제어되는 것은 0 번축과 1 번축이 함께 제어됩니다.
'**************************************************************/
Private Sub OnDoMotion()
Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 10000, 100000, 100000)
Call cmmSxMove(cmX1, 1000, cmFALSE) '// Move 1000
Call cmmSxMove(cmX1, 1000, cmFALSE) '// Move 1000
Call cmmSxMove(cmX1, -1000, cmFALSE) '// Move -1000
Call cmmSxMove(cmX1, -1000, cmFALSE) '// Move -1000
End Sub
'/**************************************************************
'* OnStop() : "Stop"명령시에 호출되는 가상의 함수
'**************************************************************/
Private Sub OnStop()
Call cmmMxStopEmg(2, nAxisList(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 | Delphi
// ****************************************************************************
// Master/Slave 동기 구동을 하기 위해 슬레이브 축을 등록 합니다.
// ****************************************************************************
procedure OnSetMsRegisterSalve ();
var
nSlaveState : LongInt; // 슬레이브 축 등록 상태 정보.
nMasterAxis : LongInt; // 마스터 축 정보.
begin
// 1 번 축을 슬레이브 축으로 등록합니다. 자동으로 마스터 축은 0(cmX1)번 축이 됩니다.
if cmmMsRegisterSlave (cmY1, 655350, cmFALSE ) = ceERR_NONE then
begin
// 슬레이브 축의 등록 상태를 확인 합니다.
cmmMsCheckSlaveState (cmY1, @nSlaveState );
if nSlaveState <> cmTRUE then
begin
ShowMessage ( ‘Slave axis registered failed’ );
end;
// 슬레이브 축의 마스터 축을 확인합니다.
cmmMsGetMasterAxis (cmY1, @nMasterAxis );
if nMasterAxis <> cmX1 then
begin
ShowMessage ( ‘Slave axis registered failed’ );
end;
end;
end;
// ****************************************************************************
// 마스터 축에 대해 단축 이송 작업을 수행합니다. 슬레이브 축이 등록
// 되어 있으므로 마스터 축 제어 시 슬레이브 축이 함께 제어됩니다.
// ****************************************************************************
procedure OnMove ();
begin
// 마스터 축 속도 환경을 설정합니다.
cmmCfgSetSpeedPattern (cmX1, cmSMODE_S, 5000, 30000, 30000 );
// 마스터 축 단축 이송 수행 시 슬레이브 축이 함께 이송합니다.
cmmSxMove (cmX1, 15000, cmFALSE );
end;
|
See also