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

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

by ictlab 2012. 1. 4.

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

이 글에서는 아래에 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);