11.1.12. ecmSxCtl_SetSvon

Hint

FAST FUNCTION 모드 사용 가능

SYNOPSIS

t_cmdidx  ecmSxCtl_SetSvon(_FF)(
  t_i32  NetID,
  t_i32  Axis,
  t_i32  SvonVal,
  t_i32  *ErrCode
)

DESCRIPTION

  • 지정한 축의 서보온(Servo-on) 상태를 제어합니다.

PARAMETER

  • NetID : Network 번호

  • Axis : 대상 축 번호.

  • SvonVal : 지정한 축의 서보온(Servo-on) 상태

  • ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다.

RETURN VALUE

  • cmdidx를 반환합니다. CmdIdx는 ComiECAT SDK라이브러리에서 발생시킨 명령들의 일련 번호입니다. 단, 이 값이 0이면 함수 의 수행이 실패했음을 의미합니다.

REFERENCE

  • ecmSxCtl_SetSvon 함수는 서보드라이버에게 서보온 명령을 하달하고 실제 서보온 상태가 변경되는 것을 확인한 후에 반환됩니다. 서보드라이버가 서보온 명령 을 받고 실제로 서보온이 완료되기까지는 일정한 시간이 소요되므로 ecmSxCtl_SetSvon 함수의 수행 시간은 서보드라이버 제품의 특성에 따라서 수백 msec 또는 그 이상의 시간이 걸릴 수 있습니다.

  • 만일 많은 수의 서보드라이버의 서보온 상태를 일괄적으로 제어하기 위해서 ecmSxCtl_SetSvon 함수를 순차적으로 실행한다면 시간이 많이 소요될 수 있습니다. 이러한 경우에 ecmSxCtl_SetSvon 함수의 Fast Function 모드인 ecmSxCtl_SetSvon _FF 함수를 사용하면 많은 수의 서보온을 일괄적으로 실행할 때에 빠르게 진행시킬 수 있습니다.

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
   #define NETID                  0
   #define NUM_AXES               32
   // Axis0의 서보온 버튼 이벤트핸들러
   void CMyDlg::OnClick_ServoOn_Axis0()
   {
       ecmSxCtl_SetSvon(NETID, 0, true, NULL)
   }

   // Axis0의 서보오프 버튼 이벤트핸들러
   void CMyDlg::OnClick_ServoOff_Axis0()
   {
       ecmSxCtl_SetSvon(NETID, 0, false, NULL)
   }

   // 모든축의 서보온
   void CMyDlg::OnClick_SevoOn_All()
   {
       for(int i=0; i<NUM_AXES; i++){
               if(ecmSxSt_IsConnected (NETID, i, NULL, NULL)){
                       ecmSxCtl_SetSvon_FF (NETID, i, TRUE, NULL); // FF 함수 사용
               }
    }

   // 모든 축의 서보온 상태가 바뀔 때까지 대기
   BOOL IsAllON = FALSE;
       ULONG dwStartT = timeGetTime();
       while(!ecUtl_IsTimeOut (dwStartT, 2000) && !IsAllON){
               IsAllON = TRUE;
               for(i=0; i<ecMAX_NUM_AXES_PER_NET; i++){
                       if(ecmSxSt_IsConnected(NETID, i, NULL, NULL)){
                               if(!ecmSxCtl_GetSvon(NETID, i, NULL)){
                                       IsAllON = FALSE;
                               }
                       }
               }
       }

       if(!IsAllON){
               ShowError("일부 축이 서보온 되지 않았습니다\n다시 시도하십시오.");
       }
   }