11.2.85. ecmSxCmpOne_SetEnable


SYNOPSIS

t_success  ecmSxCmpOne_SetEnable(
  t_i32  NetID,
  t_i32  Axis,
  t_bool  IsEnable,
  t_i32  GdoChanIdx,
  t_i32  *ErrCode
)

DESCRIPTION

  • ‘One-shot’ 모드의 위치비교출력 기능을 활성화 또는 비활성화합니다.

PARAMETER

  • NetID : Network 번호

  • Axis : 대상 축 번호.

  • IsEnable : 이 값을 0으로 하면 ‘One-shot’ 모드의 위치비교출력 기능이 비활성화되고, 1로 하면 활성화됩니다.

  • GdoChanIdx : 위치비교신호(CMP)를 출력할 범용 디지털 채널 번호를 설정한다. 하나의 마스터 장치는 4개의 범용 디지털 출력 채널을 제공합니다. 이 중에서 위치비교신호를 출력하는 용도로 사용할 채널을 선택하여 사용하게 된다. 채널 번호는 0부터 시작합니다.

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

RETURN VALUE

  • 이 리턴값은 불 형(Boolean Type) 을 가지고 있습니다.

Value

Meaning

0

함수 수행에 실패하였음을 의미합니다.

1

함수 수행에 성공하였음을 의미합니다.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 //P1(0) 에서 P2(2,000,000)로 이송하도록 하면서 500,000의 위치를 지날 때에 트리거 신호가   출력되게 하는 예제입니다.
  #include "ComiEcatSdk_Api.h"

  #define AXIS                 0

  t_32 Error_Num =  0;//함수 별  에러 코드 저장 변수

  /***************************************************************
  * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이
  * 적용되는 부분을 의미합니다.   //5~9장 사이 내용 참고
  ***************************************************************/
  void OnProgramInitial()
  {
      TEcDevInfo Device_Info;  //디바이스 정보 저장 할 구조체
      t_i32 Device_Num = 0;

      t_success nIsLoaded = ecDll_Load ();

      if(!ecGn_LoadDevices(&Error_Num)){   //장치 로드
          //로드 실패시 예외  처리
      }

      if(!ecGn_GetDevInfo(Device_Num,&Device_Info, &Error_Num)){
          //디바이스 정보 로드 실패 시 예외 처리
      }
      //ALState OP모드로 전환
      ecNet_SetAlState(Device_Info.NetIdx,  ecAL_STATE_OP, &Error_Num);

  ecmSxCtl_SetSvon(Device_Info.NetIdx, AXIS0, &Error_Num);

  } //OnProgramInitial 함수 끝

  /********************************************************************
  * OnCmp: 이 함수는 위치 비교 출력 함수 관련 예제
  * 많은 세팅 관련 함수가 있지만 경우에 따라 사용자가 선택해서 사용
  *********************************************************************/
  void OnCmp ()
  {
  // 1) 시작 위치로 이송
  if(!ecmSxMot_MoveTo(Device_Info.NetIdx , AXIS, 0, &ErrCode)){
      // 실패시 에러 처리
  }
  // 2) 위치비교출력 환경 설정
  if(!ecmSxCmpOne_SetEnv (NETID, AXIS, ecmCMP_CNTR_FEED, ecmCMP_METH_EQ_BIDIR, 500000/*CmpRefPos*/, ecmLOGIC_A, 100/*OutSigOnTime*/, &Error_Num)){
      //실패 시 에러 처리
  }
  // 3) 위치비교출력 기능 활성화. CMP신호는 GDO CH0을 통해서 출력
  if(!ecmSxCmpOne_SetEnable (Device_Info.NetIdx , AXIS, true/*IsEnable*/, 0/*GDO CH*/, &Error_Num)){
      // 실패 시 에러처리
  }
  // 4) CMP 모니터 카운트값 리셋
  ecmSxCmpOne_ResetOutSts(Device_Info.NetIdx, AXIS, &Error_Num);
  // 5) 목표좌표로 이송 시작
  if(!ecmSxMot_MoveToStart(Device_Info.NetIdx, AXIS, 2000000, &Error_Num)){
      //실패 시 에러 처리
  }
  // 6) 이송 완료 체크 & CMP출력 상태 감시
  t_i32 OutCount=0, PrvOutCount=0;
  t_f64 LastOutPos;
  while(ecmSxSt_IsBusy(Device_Info.NetIdx, AXIS, &Error_Num)){
      if(ecmSxCmpOne_GetOutSts(Device_Info.NetIdx, AXIS, &OutCount, &LastOutPos, &Error_Num)){
          if(OutCount > PrvOutCount){
              PrvOutCount = OutCount;
              //"CMP 신호가 (%f)위치에서 출력되었습니다!"
          }
      }
      Sleep(1);
  }