cmsHomeIsBusy


SYNOPSYS

VT_I4 cmsHomeIsBusy ([in] VT_I4 BoardId, [in] VT_I4 Axis, [out] VT_PI4 IsBusy)

DESCRIPTION

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

  • 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의 첨두어 cms 가 붙지 않습니다.

PARAMETER

▶ BoardId: 사용자가 설정한 디바이스(보드) ID.

▶ NumAxes : 동시에 작업을 수행할 대상 축의 수

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

Value

Meaning

0 (cmsFALSE)

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

1 (cmsTRUE)

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

RETURN VALUE

Value

Meaning

음수

수행 실패

ERR_NONE

수행 성공

REFERENCE

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

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

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
49
50
51
52
   C/C++
   #define DEV0
   0
   BOOL OnHomeMove(int nAxis)
   {
   long dwIsHomming = TRUE;
   cmsHomeMoveStart(DEV0, nAxis, cmsDIR_N);
   while(dwIsHomming){
   cmsHomeIsBusy(DEV0, nAxis, &dwIsHomming);
   // 원점복귀 진행여부 읽기
   // 윈도우 메시지를 처리해준다.(ex : PeekMessage)
   }
   long dwIsSuccess;
   if(cmsHomeGetSuccess(DEV0, nAxis, &dwIsSuccess) != ERR_NONE){
   // 에러메시지 출력
   return FALSE;
   }
   if(dwIsSuccess){
   MessageBox(NULL, “원점복귀를 성공적으로 수행하였습니다.”, “Message”,
   MB_OK);
   }else{
   char szErrMsg[CMS_MAX_STR_LEN_ERR];
   char szErrReason[CMS_MAX_STR_LEN_ERR];
   long dwErrCode;
   cmsErrGetLastCode(DEV0, nAxis, &dwErrCode);
   cmsErrGetString(DEV0, dwErrCode, szErrReason, CMS_MAX_STR_LEN_ERR);
   sprintf(szErrMsg, “다음과 같은 이유로 원점복귀에 실패하였습니다.\n%s”,
   szErrReason);
   }
   return TRUE;
   }

   -------------------------------------------------------------------------------------

   Visual Basic

  Const DEV0 = 0
   Dim dwIsHomming As Long
   Dim dwIsSuccess As Long
   dwIsHomming = True
   Call HomeMoveStart(DEV0, 0, cmsDIR_N)
   Do While (dwIsHomming)
   Call HomeIsBusy(DEV0, 0, dwIsHomming) '원점 진행여부 확인(確認)
   loop
   If (HomeGetSuccess(DEV0, 0, dwIsSuccess) <> ERR_NONE) Then
   // 에러메시지 출력
   End If
   If (dwIsSuccess) Then
   MsgBox ("원점 복귀를 성공적으로 수행하였습니다.")
   End If

   -------------------------------------------------------------------------------------