장비&모션제어2012.06.13 22:51


아진 로봇제어기 ARC-II 하드웨어 구성 ( 본체 + 티칭펜던트 ) 



하드웨어 사양 (PC사양과 티칭 펜던트 사양)




기본 제공되는 IO 접점 ( IN/OUT 각각 48점 제공 )







ARC-II의 개발툴인  Motion Host의  특징  ("아진에서 제공하는 매뉴얼 내용 그대로임 " )

 

-  베이직  방식의  로봇언어 

- 4개의  멀티  태스킹 

- RS232C, TCP/IP  통신기능  및  전용  통신명령 

- Break Point를  지원하는  디버깅 

-  컴파일  시  600여  개의  에러를  감지하는  문법  검사 

-  실시간  변수  모니터링 

-  다양한  응용이  가능한  사용자  함수정의 

-  범용  통신  포맷을  위한  다양한  문자열  조작  함수 

-  고속입력  접점  지원 

- Timer/IO/Position  등  이벤트  기반  함수 

-  즉시  대응할  수  있는  Function Key  함수제공 

-  관절형식의  링크  구조  지원 





ARC-II의 구성은 다음과 같다.


일반PC + 아진 QI보드 + IO보드 + 터치화면(티칭펜던트) + 스크립트 편집,실행 프로그램(모션 호스트)


일반 PC에 아진 모션보드와 IO보드를 설치하고, 티칭 펜던트라는 터치 스크린 화면을 붙이고 몇가지 HW 버튼을 추가한 것이라고 볼수 있다. ( 물론 사진에서와 같이 티칭 펜던트는 일반 시중에서 구매할수 있는 터치 스크린은 아니다, JOG버튼도 있음 )




## ARC-II 시스템 사용시 고려해야 할점 ## 

이 내용은 2012년 6월 14일 기준입니다. 이 날짜 이후에 기능추가,업그레이드,문제점 수정등이 있을지 모르지만, 이 블로그에서  그런 내용을 계속 확인해서 업데이트할 의무는 없으며 이 글을 읽는 분이  알아서 기술적인 판단을 해야 합니다.


  1. 기본 시스템에서는 모션 8축까지 지원하므로 , 8축이상 모션제어시 기술적인 검토가 필요
  2. 아진 EIP 모듈과 혼용하여 사용시 표준 시스템이 아닌 특주 사양이므로 기술적인 문제가 없는지 반드시 검토해야함 ( 셋업하면서 기술지원을 여러번 받아야 했음 )
  3. 일반적인 범용 개발툴 처럼 컴파일해서 exe파일이 생성되는 것이 아닌 인터프리터 방식임 
  4. 스크립트에서 TCP/IP  통신 기능 지원 
  5. 매뉴얼에서 태스크를 4개까지만 지원한다고 함 ( 4개가 넘는 멀티 태스킹은 제어할수 없음 )
  6. PLC장비에서 사용하는 터치스크린 작화 기능처럼 화면 GUI를 디자인할수 있는 기능은 없음
  7. GUI 디자인 기능이 없기 때문에 장비의 Main 프로그램 보다는 GUI가 필요없는 로봇제어 용도에 적당함
  8. 티칭 펜던트의 해상도(800x480) 낮아서 별도의 모니터가 없으면 스크립트 편집이 불편함
  9. PC 제어를 해온 개발자 입장에서는 뚜렷한 장점이 없음



더 자세한 내용은 아래 아진엑스텍 홈페이지 링크를 통해서 정보를 찾아보기 바랍니다.

아진 ARC-II 설명 홈페이지






Posted by ICT 이성열

댓글을 달아 주세요

  1. kskim

    너무 고생을 많이 했나부네요..ㅎㅎㅎ

    2012.07.11 19:56 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. Killer

    않좋으면 안쓰시면되죠

    2012.10.23 17:16 신고 [ ADDR : EDIT/ DEL : REPLY ]

장비&모션제어2012.01.11 00:17
이번 글에서는 아진 라이브러리를 가지고  보정 테이블 기능을 사용시 주의할점에 대해 설명합니다.


1. 보정 테이블 기능은 표준이 아니므로 반드시 담당자에게 새로운 라이브러리를 받아서 사용해야 합니다.
필요한 라이브러리 dll은 다음과 같습니다.
당연하겠지만  lib파일, 헤더파일도 기존 헤더파일을 사용하면 안됩니다.

FS 모듈용
AXTLIB.dll
EzBasic.dll 

QI모듈용
Axl.dll
EzBasicAxl.dll    


2. 아진 프로그램(드라이버)에서 최신 버전을 설치해야 합니다.
아진 다운로드 페이지에서 빨간색으로 표시한 프로그램입니다. (2012.1.11 현재)

EzSoftwareAXT V1.8.18 버전은 FS 모듈을 위한 프로그램 및 드라이버 입니다.
EzSoftwareRM V1.3.3 버전은 QI 모듈을 위한 프로그램 및 드라이버 입니다.


아진 다운로드 링크 



Posted by ICT 이성열

댓글을 달아 주세요

장비&모션제어2012.01.11 00:06



 



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

우리회사에서 실제 장비에 사용하는 루틴은 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로 나와도 정상적으로 보정 테이블 기능이 동작하였습니다. 


 


Posted by ICT 이성열

댓글을 달아 주세요

장비&모션제어2012.01.04 22:34

아진 모션 보드 라이브러리에는 기본적으로 위치 보정(보상)  기능이 없습니다.
업체에서 요청시 기능이 추가된 라이브러리를 보내주어서 위치 제어시 보정된 위치로 이동할 수 있도록 지원을 해주고 있습니다.
그나마 이런 기능이라도 없다면 보정 테이블 계산 기능을 직접 만들어야 하는 것인데.. 라이브러리 수준에서 만들어 놓은것을 보내주니까 모션 제어 개발자가 할 일이 훨씬 줄어들것 같습니다. 

이 글에서는 아래에 FS모듈용 헤더파일에 있는 함수들과  헤더파일 자체에 있는 설명들만 소개합니다.
( QI 모듈용 라이브러리가 별도로 AXL이라고 있으니 그 쪽은 다른 함수와 라이브러리를 사용해야 합니다. )


 





AxtCAMCFS20.h 헤더파일에 있는 내용을 그대로 긁어서 붙였습니다.
이것만 봐도 사용 설명이 필요  없을듯하네요
  

//========= 위치보상테이블 관련함수 ================================================================
    // 보상테이블을 생성하는 함수
    // > axis: 보상테이블을 적용할 축 번호
    // > start_pos: 보상테이블의 시작 위치(기구에서 위치보상영역의 하한위치) ※ end_pos보다 작은값이어야됨.
    // > end_pos: 보상테이블의 종료 위치(기구에서 위치보상영역의 상한위치) ※ start_pos보다 큰값이어야됨.
    // > interval: 보상테이블의 간격을 설정(기구의 절대 위치정도나 관리하고자 하는 위치절대 정도에 따라 조절함)
    // > *comp_table: 보상테이블의 위치보상값 배열 포인트(배열의 갯수는 nTableCnt = (fabs(end_pos - start_pos) / interval) + 1이됨)
    // ※ NOTANDUM
    // - 보상테이블의 앞/뒤 위치에 대한 에러양이 보상테이블의 간격(Interval)을 초과해서는 안됨.
    // - 보상테이블 배열의 개수는 반드시 nTableCnt값과 같거나 커야하며 작을 시 메모리 참조에러가 발생할 수 있음.
    // < *nTableCnt: 보상테이블이 생성된 갯수를 반환(값 반환을 원하지않을 때 0입력하면 됨)
    // { RETURN VALUE }
    // - [0] -> 축번호가 유효하지 않을 때
    // - [0] -> start_pos > end_pos일 때
    // - [0] -> interval이 0일 때
    // - [0] -> *comp_table 포인트가 NULL일 때
    BOOL    PASCAL EXPORT CFS20set_comp_table(INT16 axis, double start_pos, double end_pos, double interval, double *comp_table, int *nTableCnt);
    // 설정한 보상테이블의 사용유무를 지정
    // > axis: 보상테이블의 사용유무를 지정할 축 번호
    // > use: 보상테이블의 사용유무를 지정
    // - [0]DISABLE -> 보상테이블 사용안함
    // - [1]ENABLE -> 보상테이블 사용함
    BOOL    PASCAL EXPORT CFS20set_comp_table_use(INT16 axis, BOOL use);
    BOOL    PASCAL EXPORT CFS20get_comp_table_use(INT16 axis);
    // 설정된 보상테이블의 값을 읽어오는 함수
    // > axis: 보상테이블의 값을 읽을 축 번호
    // > real_pos: 보상테이블 값을 확인 할 실제 위치
    // < *comp_data: 실제 위치에 대한 보상테이블을 이용한 위치에러 보상값
    // { RETURN VALUE }
    // - [-1] -> 보상테이블이 생성되지않았을 때
    // - [-1] -> 입력한 real_pos값이 보상테이블 하한값과 상한값사이에 존재하지않을 때
    // - [**] -> 입력한 real_pos값에 해당되는 보상테이블의 시작 Index값을 반환함
    int     PASCAL EXPORT CFS20get_comp_table_data(INT16 axis, double real_pos, double *comp_data);
    // 지정한 위치에대한 보상값이 반영된 위치를 반환함
    // > axis: 보상값이 적용 될 위치를 확인할 축 번호
    // > real_pos: 보상값이 적용 될 위치값을 확인 할 위치
    // < *comp_pos: 지정한 위치값에 대한 에러보정값이 반영된 위치
    // { RETURN VALUE }
    // - [-1] -> 보상테이블이 생성되지않았을 때
    // - [-1] -> 입력한 real_pos값이 보상테이블 하한값과 상한값사이에 존재하지않을 때
    // - [**] -> 입력한 real_pos값에 해당되는 보상테이블의 시작 Index값을 반환함
    int     PASCAL EXPORT CFS20get_real_to_comp_pos(INT16 axis, double real_pos, double *comp_pos);
    // 지정한 보상위치에 대한 실제위치값을 반환함(사용자가 지정하는 위치)
    // > axis: 보상위치에 대한 실제 위치값을 확인할 축 번호
    // > comp_pos: 실제 위치값을 확인 할 보상위치
    // < *real_pos: 지정한 보상위치에 대한 실제 위치
    // { RETURN VALUE }
    // - [-1] -> 보상테이블이 생성되지않았을 때
    // - [-1] -> 입력한 comp_pos값이 보상테이블 하한값과 상한값사이에 존재하지않을 때
    // - [**] -> 입력한 comp_pos값에 해당되는 보상테이블의 시작 Index값을 반환함
    int     PASCAL EXPORT CFS20get_comp_to_real_pos(INT16 axis, double comp_pos, double *real_pos);
    // 보상값과 상관없이 실제 모션보드에서 출력되고 있는 지령위치
    // > axis: 모션보드에서 출력되고 있는 위치값을 확인할 축 번호
    // { RETURN VALUE }
    // - [**] -> 모터드라이브로 출력한 실제 위치값
    double  PASCAL EXPORT CFS20get_real_command_position(INT16 axis);
    // 보상값과 상관없이 실제 모터에서 반환된 엔코더위치
    // > axis: 모션보드에 입력된 엔코더값을 확인할 축 번호
    // { RETURN VALUE }
    // - [**] -> 모터드라이브에서 입력된 실제 엔코더 값
    double  PASCAL EXPORT CFS20get_real_actual_position(INT16 axis);
     


Posted by ICT 이성열

댓글을 달아 주세요

  1. 홍환민

    이왕이면 Doxygen 형태로 주석을 달아서 문서화했으면 더 좋았을 것 같네요.

    2012.01.23 02:51 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 표준 라이브러리는 매뉴얼(pdf)을 제공해주긴하는데.. 라이브러리 업체에서 doxygen으로 만들어 주면 전체 소스 문서화하기 좋겠네요

      2012.01.27 11:31 신고 [ ADDR : EDIT/ DEL ]
  2. 안정환

    감사합니다. 보정 관련하여 자료를 찾고 있었는데, 여기서 찾았네요. 감사합니다.

    2013.07.03 11:16 신고 [ ADDR : EDIT/ DEL : REPLY ]