본문 바로가기
장비&모션제어

아진엑스텍 모션 라이브러리의 보정 테이블 기능 사용 #2/3

by ictlab 2012. 1. 11.



 



이번 글에서는 아진엑스텍 라이브러리에서 보정테이블 기능을 실제 사용하는 방법에 대해 설명합니다.

우리회사에서 실제 장비에 사용하는 루틴은 QI모듈과 FS모듈을 동시에 지원해야 하기 때문에
함수 내부에서 칩 옵션에 따라 각기 다른 아진 함수를 호출하고 있습니다. 
if( m_eChipType == T_QI ) 라고 되어 있는 조건문에서 분기합니다.

처음 작업할때는 QI라이브러리의 
AxmCompensationSet 함수나 FS 라이브러리의 CFS20set_comp_table  의 사용법이 완전히 같을 것이라고 생각했는데.. 막상 헤더 정의를 보니 약간 차이가 있습니다.

FS 라이브러리는 처음과 끝점 간격만 입력하고 보정 테이블을 넣어주는데
QI 라이브러리는 시작 포지션과 각각의 위치 테이블을 직접 배열로 넣어주게 되어 있습니다.
분명 어떤 개선을 위해서 그렇게 수정한 것이겠지만.. 함수의 일관성 측면에서는 아쉬운 부분이 있습니다.
하지만 사용하는데 크게 문제가 될 정도로 어려운 부분은 아니기 때문에 별 상관없은 없습니다.( 1~2분 코딩 시간이 늘어나는  정도이기 때문에 )

  
bool XMotor::SetCompTable(double start_pos, double end_pos, double interval, double *comp_table, int *nTableCnt)
{

  if (m_eChipType == T_QI)
  {
      #define MAX_COMP_DATA 10000
      double adPos[MAX_COMP_DATA];
      ZeroMemory(adPos , sizeof(double) * MAX_COMP_DATA );

      // Position 데이터 만들기
      int count = ((end_pos - start_pos) / interval + 1.);
      
      for (int i=0; i<count; i++)
      {
         adPos[i] = interval*i;
      }

      LOG_PRINTF("XMACHINE", "SetCompTable Axis[%d], count=%d, start_pos=%.3lf" ,m_iAxis, count, start_pos );

      // QI보드 함수는 성공시 0을 리턴
      if( AxmCompensationSet(m_iAxis , count , start_pos, adPos , comp_table , FALSE) == QI::AXT_RT_SUCCESS )
         return true;
      else
         return false;
   }
   else
   {
      return CFS20set_comp_table(m_iAxis, start_pos, end_pos, interval, comp_table, nTableCnt);
   }
}
     


다음은 아주 간단한 함수인 보정테이블을 사용할지 말지 설정하는 기능 함수입니다.

아진측 담당자 말로는 보정테이블을 먼저 세팅하고 사용 여부를 설정하라고 합니다. 
반대로하면 문제가 있을까  호기심은 있지만 그냥 시키는대로만 해보기로 했습니다.

  

//----------------------------------------------------------------------------
// 보정 테이블 사용할지 여부 설정
bool XMotor::SetCompTableUse( bool use)
{
  if (m_eChipType == T_QI)
  {
     return AxmCompensationEnable(m_iAxis, (BOOL)use);
   }
   else
   {
      // QI보드 함수는 성공시 0을 리턴
      if( CFS20set_comp_table_use(m_iAxis, (BOOL)use) == QI::AXT_RT_SUCCESS )
         return true;
      else
         return false;
   }
}
     


보정 테이블 적용을 크게 문제 없이 바로 적용 하여 기능이 정상적으로 동작하는 것을 확인 할 수 있었습니다. 
AxmCompensationEnable 의 리턴 값이 반대로 나오는 현상이 있는데 .. 리턴값이 FALSE로 나와도 정상적으로 보정 테이블 기능이 동작하였습니다.