cmmHomeSetSuccess¶
SYNOPSIS¶
VT_I4 cmmHomeSetSuccess(
[in] VT_I4 Channel, [in] VT_I4 IsSuccess
)
DESCRIPTION¶
cmmHomeSetSuccess() 함수는 원점복귀의 성공여부에 대한 플래그 값을 강제로 설정하는 함수입니다. 일반적으로는 이 플래그 값은 원점복귀의 실제 수행에 의해서 셋팅됩니다. 그러나 필요한 경우에 강제로 그 값을 셋(Set) 또는 리셋(Reset)할 수 있습니다.
PARAMETER¶
Channel : 축(채널) 번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 채널을 기준 채널로 임의의 채널을 설정할 수 있습니다.
IsSuccess : cmmHomeGetSuccess 함수의 인자이며, 이 함수가 호출된 시점을 기준으로 이전에 원점복귀가 성공적으로 완료된 상태인지를 알려주는 매개 변수입니다.
Value
Meaning
0(FALSE)
지정한 축을 원점복귀가 진행 중인 상태로 설정합니다.
1(TRUE)
지정한 축을 원점복귀가 정상적으로 수행된 상태로 설정합니다.
RETURN Value¶
Value |
Meaning |
---|---|
음수 |
수행 실패 |
cmERR_NONE |
수행 성공 |
REFERENCE¶
원점복귀의 성공 여부에 대한 플래그 값은 응용프로그램이 종료되어도 그대로 유지됩니다. 따라서 다시 응용프로그램이 시작되면 이전에 원점복귀를 정상적으로 수행했었는지를 알 수가 있습니다. 단, PC 의 하드웨어적인 전원이 차단되거나 재 시작(Rebooting) 되면 그 값은 FALSE 로 리셋됩니다. 따라서 cmmHomeGetSuccess() 함수의 이러한 특성을 활용하면 프로그램이 종료되었다가 다시 실행될 때 이전의 원점복귀 수행여부를 확인할 수가 없어서 매번 원점복귀를 수행해야 했던 불편을 보완할 수 있습니다.
IsSuccess 매개 변수가 FALSE 인 경우는 원점복귀가 진행중인 경우를 의미할 수도 있고 비정상적으로 종료되었음을 의미할 수도 있습니다. 따라서 cmmHomeMoveStart() 함수를 사용한 경우에는 먼저 cmmHomeIsBusy() 함수나 cmmHomeWaitDone() 함수를 선행하여 완료를 확인한 후에 cmmHomeGetSuccess()를 사용하여 성공여부를 확인하는 것이 정석입니다.
이전에 원점복귀가 성공적으로 수행되었더라도 해당 축의 원점복귀를 다시 시작하면 원점복귀의 성공 여부에 대한 플래그는 FALSE 로 리셋(Reset)됩니다.
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 | C/C++
BOOL OnProgramInitialHome(int nAxis)
{
long dwAlreadyDone;
cmmHomeGetSuccess(nAxis, &dwAlreadyDone); // 이전에 원점복귀 상태 확인(確認)
if(dwAlreadyDone){// 이전에 이미 원점복귀가 이루어졌으면 원점복귀 생략
return TRUE;
}
long dwIsHomming = TRUE;
cmmHomeMoveStart(nAxis, cmDIR_N);
while(dwIsHomming){
cmmHomeIsBusy(nAxis, &dwIsHomming); // 원점복귀 진행여부 읽기
// 윈도우 메시지를 처리해준다 (단, 쓰레드를 사용하는 경우에는
// 아래 함수는 생략되어야 한다)
cmmUtlProcessWndMsgM(GetSafeHwnd(), 500, NULL);
}
// 원점복귀의 성공여부를 확인(確認)하여 처리한다. //
long dwIsSuccess;
cmmHomeGetSuccess(nAxis, &dwIsSuccess);
if(dwIsSuccess){
MessageBox( “원점복귀를 성공적으로 수행하였습니다.”, “Message”, MB_OK);
}else{
char szErrMsg[CMM_MAX_STR_LEN_ERR];
char szErrReason[CMM_MAX_STR_LEN_ERR];
long dwErrCode;
cmmErrGetLastCode(&dwErrCode);
cmmErrGetString(dwErrCode, szErrReason, CMM_MAX_STR_LEN_ERR);
sprintf(szErrMsg, “다음과 같은 이유로 원점복귀에 실패하였습니다.\n%s”, szErrReason);
MessageBox(szErrMsg, “Motion Error”, MB_OK | MB_ICONERROR);
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Visual Basic
Dim dwIsHomming As Long
Dim dwIsSuccess As Long
dwIsHomming = True
Call cmmHomeMoveStart(cmX1, cmDIR_N)
Do While (dwIsHomming)
'원점 진행여부 확인
Call cmmHomeIsBusy(cmX1, dwIsHomming)
Loop
If (cmmHomeGetSuccess(cmX1, dwIsSuccess) <> cmERR_NONE)
Then
Call cmmErrShowLast(handle)
If (dwIsSuccess) Then
MsgBox ("원점 복귀를 성공적으로 수행하였습니다.")
End If
|
1 2 | Delphi
//* cmmHomeMove / cmmHomeMoveStart 예제를 참고하여 주시기 바랍니다.
|
See also