cmmHomeIsBusy


SYNOPSIS

VT_I4 cmmHomeIsBusy(
    [in] VT_I4 Axis, [out] VT_PI4 IsBusy
    )

DESCRIPTION

  • 지정한 축이 현재 원점복귀를 진행중인지를 IsBusy 버퍼를 통하여 반환합니다.

PARAMETER

  • Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다.

  • IsBusy : 현재 원점복귀가 진행중인지를 알려주는 값을 반환받을 버퍼. 이 값에 반환되는 값의 의미는 다음과 같습니다.

Value

Meaning

0 (FALSE)

지정한 축은 현재 원점복귀가 진행중이지 않습니다.

1 (TRUE)

지정한 축은 현재 원점복귀를 진행하고 있습니다.

RETURN Value

Value

Meaning

음수

수행 실패

cmERR_NONE

수행 성공

REFERENCE

  • CMMSDK 라이브러리에서는 cmmSxIsDone()과 같이 일반적으로 모션이 진행중이냐 아니면 정지해 있느냐를 확인할 때, 진행중(Busy)을 확인하기 보다는 완료(Done)를 확인하는 방식을 채택합니다. 그러나 원점복귀에서는 cmmHomeGetSuccess() 함수와 혼동될 소지가 있어서 cmmHomeIsDone() 함수 대신에 cmmHomeIsBusy() 함수를 제공하게 되었습니다.

  • cmmHomeIsBusy() 함수가 IsBusy 버퍼에 FALSE 값이 반환되면 원점복귀가 완료되었음을 의미하지만 성공 여부는 알 수가 없습니다. 예를 들어 원점복귀 진행 중에 Limit 또는 Alarm 등과 같은 에러에 의해서 정지되었거나, Stop 함수에 의해서 강제로 정지되었을 때도 IsBusy 에는 FALSE 값이 반환됩니다. 따라서 cmmHomeIsBusy()함수를 이용하여 원점복귀의 원점복귀가 완료되었음을 확인한 후에는 cmmHomeGetSuccess() 함수를 사용하여 원점복귀의 성공여부를 확인하여 각각의 상황에 대한 처리를 해주는 것이 바람직합니다.

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 OnHomeMove(int nAxis)
{
   long dwIsHomming = TRUE;
   cmmHomeMoveStart(nAxis, cmDIR_N);


   while(dwIsHomming){

        cmmHomeIsBusy(nAxis, &dwIsHomming);

       // 원점복귀 진행여부 읽기
       // 윈도우 메시지를 처리해준다 (단, 쓰레드를 사용하는 경우에는
       // 아래 함수는 생략되어야 한다)
       cmmUtlProcessWndMsgM(GetSafeHwnd(), 500, NULL);
}

long dwIsSuccess;

if(cmmHomeGetSuccess(nAxis, &dwIsSuccess) != cmERR_NONE){
       cmmErrShowLast (GetSafeHwnd());
       return FALSE;
}

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);
       return FALSE;
}

return TRUE;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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(HomeRtn.Hwnd)
   End If

   If (dwIsSuccess) Then
       MsgBox ("원점 복귀를 성공적으로 수행하였습니다.")
End If
1
2
3
Delphi

//* cmmHomeMove / cmmHomeMoveStart 예제를 참고하여 주시기 바랍니다.