안녕하십니까 지난 시간에 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 라이브러리 내에 모두 포함되어 있습니다. 이에 대한 사용법은 다음시간에 ...