2020년 1월 10일

sirius 라이브러리를 활용한 스캐너 및 레이저 제어 방법 (예제 1)

안녕하십니까 지난 시간에 sirius 라이브러리를 개발하고 있다는 소식을 알려드렸는데, 어느덧 상당한 작업이 되어 0.8 버전까지 개발이 진행되었습니다. 그래서 몇가지 예제를 통해 설명을 드리고자 합니다.

저장소 링크 : https://github.com/labspiral/sirius

Visual Studio 에서 이 라이브러리를 사용하기 위해서는 해당 링크에서 다운로드 받은후 몇몇 dll 파일이 반드시 필요합니다. 즉 bin 폴더에 있는 파일들과 각종 폰트 디렉토리를 모두 복사해 사용해 주시기 바랍니다. 이후 bin 폴더에 있던 dll 을 사용자의 프로젝트에 참조로 추가해 주시기 바랍니다.
참조가 필요한 최소한의 DLL 파일들 : spirallab.sirius.core.dll, spirallab.sirius.dll



1. RTC5 와 레이저 소스 객체를 만들어 원 모양 가공하기

using SpiralLab.Sirius;
static void Main(string[] args)
{
    SpiralLab.Core.Initialize();
    var rtc = new Rtc5(0); /// 첫번째 RTC5 카드 사용
    float fov = 60.0f;    /// 스캐너의 가공영역 : 60mm         
    float kfactor = (float)Math.Pow(2, 20) / fov; /// k factor (bits/mm) = 2^20 / fov
    var correctionFile = "correction\\cor_1to1.ct5"; /// 보정 파일 이름
    rtc.Initialize(kfactor, LaserMode.Yag1, correctionFile); /// 초기화 실시

    /// 위와 같이 RTC5 제어기를 초기화 해 주시기 바랍니다.  이후 주파수및 속도, 지연값 등을 설정

    rtc.CtlFrequency(50 * 1000, 2); /// laser frequency : 50KHz, pulse width : 2usec
    rtc.CtlSpeed(100, 100); /// default jump and mark speed : 100mm/s
    rtc.CtlDelay(10, 100, 200, 200, 0); /// scanner and laser delays

   /// 가상의 레이저 소스 생성
   var laser = new LaserVirtual(0, "virtual", 10);  /// 최대 출력 10W

   Console.Write("press any keys to start ... ");
   Console.ReadKey(false);

   /// 원 모양 가공 시작
   float radius = 10.0f; /// 반지름 10 mm 원
   rtc.ListBegin(laser); /// 리스트 명령시작
   rtc.ListJump(new Vector2((float)radius, 0));  ///원 시작 위치로 점프
   rtc.ListArc(new Vector2(0, 0), 360.0f);  /// 0,0 을 중심으로 반시계 방향으로 360도 회전 가공
   rtc.ListEnd(); /// 리스트 명령 끝
   rtc.ListExecute(true); /// 가공 시작및 완료시까지 대기
}



2. RTC5  + VarioSCAN 을 이용해 Z 위치를 이동하며 가공하기
* spirallab.sirius.3d.dll 파일을 참조로 추가해 주시기 바랍니다.

using SpiralLab.Sirius;
static void Main(string[] args)
{
    SpiralLab.Core.Initialize();
    var rtc = new Rtc53D(0); /// 첫번째 RTC5 카드 사용
    float fov = 60.0f;    /// 스캐너의 가공영역 : 60mm         
    float kfactor = (float)Math.Pow(2, 20) / fov; /// k factor (bits/mm) = 2^20 / fov
    var correctionFile = "correction\\cor_1to1.ct5"; /// 보정 파일 이름
    rtc.Initialize(kfactor, LaserMode.Yag1, correctionFile); /// 초기화 실시

    /// 위와 같이 RTC5 제어기를 초기화 해 주시기 바랍니다.  이후 주파수및 속도, 지연값 등을 설정

    rtc.CtlFrequency(50 * 1000, 2); /// laser frequency : 50KHz, pulse width : 2usec
    rtc.CtlSpeed(100, 100); /// default jump and mark speed : 100mm/s
    rtc.CtlDelay(10, 100, 200, 200, 0); /// scanner and laser delays
    var rtc3D = rtc as IRtc3D;
    rtc3D.CtlZOffset(1); /// Z 위치 오프셋을 +1mm 로 설정 (이후 가공시에는 모든 레이저 좌표값에서 Z +1mm 만큼 추가됨)

   /// 가상의 레이저 소스 생성
   var laser = new LaserVirtual(0, "virtual", 10);  /// 최대 출력 10W

   Console.Write("press any keys to start ... ");
   Console.ReadKey(false);

   /// 원 모양 가공 시작 (Z는 2mm (= 1+1) 위치에서 가공됨)
   float radius = 10.0f; /// 반지름 10 mm 원
   rtc.ListBegin(laser); /// 리스트 명령시작
   rtc3D.ListJump3D(new Vector3((float)radius, 0, 1));  ///원 시작 위치로 점프
   rtc3D.ListArc(new Vector3(0, 0, 1), 360.0f);  /// 0,0 을 중심으로 반시계 방향으로 360도 회전 가공
   rtc.ListEnd(); /// 리스트 명령 끝
   rtc.ListExecute(true); /// 가공 시작및 완료시까지 대기
}



3. RTC5  + MOTF 를 이용한 온더 플라이 가공
* spirallab.sirius.motf.dll 파일을 참조로 추가해 주시기 바랍니다.

using SpiralLab.Sirius;
static void Main(string[] args)
{
    SpiralLab.Core.Initialize();
    var rtc = new Rtc5MOTF(0); /// 첫번째 RTC5 카드 사용
    float fov = 60.0f;    /// 스캐너의 가공영역 : 60mm         
    float kfactor = (float)Math.Pow(2, 20) / fov; /// k factor (bits/mm) = 2^20 / fov
    var correctionFile = "correction\\cor_1to1.ct5"; /// 보정 파일 이름
    rtc.Initialize(kfactor, LaserMode.Yag1, correctionFile); /// 초기화 실시

    /// 위와 같이 RTC5 제어기를 초기화 해 주시기 바랍니다.  이후 주파수및 속도, 지연값 등을 설정

    rtc.CtlFrequency(50 * 1000, 2); /// laser frequency : 50KHz, pulse width : 2usec
    rtc.CtlSpeed(100, 100); /// default jump and mark speed : 100mm/s
    rtc.CtlDelay(10, 100, 200, 200, 0); /// scanner and laser delays
    var rtcMOTF = rtc as IRtcMOTF;
    rtcMOTF.CtlEncoderReset(); /// 입력 엔코더 X, Y 값을 0 으로 설정

    /// 가상의 레이저 소스 생성
    var laser = new LaserVirtual(0, "virtual", 10);  /// 최대 출력 10W

    Console.Write("press any keys to start ... ");
    Console.ReadKey(false);

    rtc.ListBegin(laser);
    ///직선을 그립니다. (엔코더 입력과 무관합니다)
    rtc.ListJump(new Vector2(0, 0));
    rtc.ListMark(new Vector2(10, 0));

    /// MOTF 를 시작합니다.
    /// ListMOTFBegin 부터 ListMOTFEnd 사이의 모든 list 명령어는 엔코더 입력값이 좌표값에 누적됩니다
    rtcMOTF .ListMOTFBegin();
    /// 엔코더 X 값이  10mm 가 넘을때(Over) 까지 리스트 명령을 대기
   rtcMOTF .ListMOTFWait(RtcEncoder.EncX, 10, EncoderWaitCondition.Over); /// 엔코더 X 입력이 10mm 가 넘을때 까지 대기
    ///원 을 그린다
    rtc.ListJump(new Vector2((float)10, 0));
    rtc.ListArc(new Vector2(0, 0), 360.0f);
    /// MOTF 중지 및 0,0 위치(스캐너 중심 위치)로 jump 실시
   rtcMOTF .ListMOTFEnd(Vector2.Zero);
   rtc.ListEnd();
}


위 예제들은 사용자가 직접 RTC, VARIOSCAN 옵션, (3D 가공을 위한 Z축 제어용), MOTF 옵션 등을 Sirius 라이브러리를 이용하여 직접 구현할 경우 그 사용 예제를 보여주고 있습니다. 하지만 통상은 캐드와 같은 벡터 데이타를 UI 로 처리하는것이 직관적이며, 이 역시 sirius 라이브러리 내에 모두 포함되어 있습니다. 이에 대한 사용법은 다음시간에 ...

댓글 없음:

댓글 쓰기

시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...