2019년 12월 3일

Sirius 라이브러리 소개

지난 글에서 C# 기반의 제어 프로그램을 몇차례 소개한바 있는데, 이 기능을 좀더 확장해 깃허브(Git-Hub)에서 신규 프로젝트를 진행하고 있습니다. 기존 저장소 링크는 아래로 변경하였습니다. 가칭 Sirius 라이브러리는 지속적으로 업데이트 될 예정입니다.

Sirius 라이브러리 git-hub 저장소 : https://github.com/labspiral/sirius




기존 저장소 #1 : https://github.com/labspiral/rtctestcase
기존 저장소 #2 : https://github.com/labspiral/rtclib


멀티뷰 모습 (왼쪽은 편집, 오른쪽은 뷰어)






몇 차례에 걸쳐 해당 라이브러리의 특징을 설명하는 시간을 가져보려고 합니다.


우선 간단히 소개하면,

  • support SCANLAB's RTC5, RTC6, RTC6 Ethernet product 
    • 스캔랩사의 RTC5, 6, 6 이더넷, XL-SCAN 컨트롤러를 지원합니다. 복수개의 레이저및 제어기를 비동기적으로 사용할 수 있습니다.
  • support RTC control with 3x3 matrix operation.
    • RTC 제어시 3x3 행렬을 스택공간에 Push/Pop 을 통해 매우 유연한 선형 변환이 가능합니다.
  • support RTC field correction with easy to use.
    • 스캔랩의 스캐너 보정 파일 변환을 지원합니다.
  • support unlimited vector data to RTC controller automatically.
    • 가공 데이타의 개수가 아무리 많더라도 seamless 한 가공이 가능합니다.
  • support RTC's MOTF(marking on the fly) option.
    • MOTF 기능을 제공합니다. 엔코더 리셋, 특정 엔코더 위치에서의 가공시작등이 가능합니다.
  • support many kinds of commerical laser sources (to the future...)
    • 다양한 상용 레이저 소스 적용이 가능합니다. (추가중)
  • support laser power control with varios methods (like as analog, digital, frequency, pulse width modulation)
    • 다양한 방식의 외부 레이저 파워 제어가 가능합니다.
  • support entities : line, arc, LW polyline, rectangle, circle, true type font, spiral, trepan, group for multiple entities and layers.
    • 점, 선, 호, 폴리라인, 사각형, 원, 폰트, 나선 등 다양한 개체를 지원하며, 캐드와 유사한 다중 레이어 구조를 제공합니다.
  • support powerful undo/redo actions.
    • 편집및 데이타 입력 실수에 대한 무한대의 되돌리기가 가능합니다.
  • support dxf file format importer and sirius custom file format (based on json format)
    • DXF 파일 가져오기 및 열기가 가능하며, 레이저 가공을 위해서 자체 파일 포맷도 제공합니다.
  • support single document data with multiple views.
    • 하나의 가공 데이타(Document)를 여러 화면에 출력하는 원 소스 멀티 뷰 처리가 가능합니다.
  • support customizable and extensible laser source and marker interface.
    • 레이저 소스및 마커(레이저 가공 처리용)를 사용자가 직접 커스터마이징이 가능합니다.
  • support laser path visualizer and simulator.
    • 레이저 가공시 그 경로를 가상으로 시뮬레이션 해 볼수있습니다.
    • 3가지 (저속, 중속, 고속) 모드를 제공합니다.
  • support all vector data are explodable to every lines and arcs.
    • 모든 벡터 데이타는 최소 데이타(선, 호)로 분해가 가능합니다.
  • support group entity with repeat and reversible laser process.
    • 레이저 반복 가공, 역 방향 가공을 지원합니다. (그룹이라는 특수 개체)
  • support vary laser parameters with special entity called 'Pen'
    • 다양한 레이저 가공 파라메터를 설정할수있는 펜 개체를 제공합니다.
  • frequency, pulse width, power(watt), scanner speeds, laser delays, sky writing option
    • 레이저 파워를 동적으로 변경하는 다양한 방식(주파수, 펄스폭, 아나로그, 디지털 등) 을 지원하며, 스캔랩사의 Sky-Writing 을 지원합니다.

가공 경로를 시뮬레이션 한 모습


해당 라이브러리를 사용하기 위해서는

  • Development Environment : .NET dll library with x32/x64
    • .NET 프레임 워크 기반의 라이브러리로 x32/x64 두가지 환경을 모두 제공합니다.
  • Add spirallab.sirius.dll as UserControl into Microsoft Visual Studio.
    • 비주얼 스튜디오에서 spirallab.sirius.dll 파일을 도구상자에 추가해 주시면, 사용자 컨트롤 로 등록이 되어 사용이 간편합니다.
  • There are 2 winforms controls (Sirius.EditorForm and Sirius.ViewerForm)
    • 사용자 컨트롤은 각각 뷰어용와 편집용이 있습니다.
  • There are multiple demo program in DEMOS directory
    • 데모 (demos) 디렉토리에 수십가지의 동작가능한 예제 코드가 있습니다. (RTC만을 사용해 가공하기, 행렬을 적용해 처리하기, 문서파일만들고 읽고 쓰기, 스캐너 보정하기, 레이저 펜 파라메터 설정하기, 그룹 개체 만들기, 마커 사용하기 등의 예제들)



본 버전은 평가판으로 약 10분간만 정상 동작합니다. 구매및 기술 개발문의는 labspiral@gmail.com 로 해주시면 감사하겠습니다. 본 라이브러리는 지속적으로 업데이트 될 예정입니다.



2019년 6월 26일

C# 기반의 RTC 제어 인터페이스

지난시간에는 C++ 기반으로 RTC3/4/5/6 을 손쉽게 개발할수있는 통합 라이브러리를 배포한바 있습니다.
[링크 : https://github.com/labspiral/rtctestcase]
이번시간에는 C# 기반으로 이를 확장하였으며, 다양한 도형(엔티티)들을 과 레이저 파라메터를 지원하고 있습니다. 또한 스캐너 보정 기능을 추가한 오프소스를 공개합니다.

깃 허브 링크 : https://github.com/labspiral/rtclib





특징으로는,
  • RTC5/6/6이더넷 버전을 지원
  • 보정파일(ct5) 변경 지원
  • 수동 레이저 출사/정지 지원
  • 수동 주파수, 펄스폭, 스캐너 속도, 레이저 지연, 스캐너 지연값 설정
  • RTC 상태 확인 기능 제공 (파워 오류, 온도 경고 등)
  • 리스트 명령 (점프, 마크, 원호 ) 지원
    • 명령 개수 제한 없음
    • 내부적으로 명령개수가 4000개가 넘으면 자동 시작
  • 행렬 3*3 지원
    • RTC의 내부 행렬 미사용 (사용에 제한이 많음)
    • 라이브러리 내에서 행렬 자동 계산됨
  • 스캐너 보정(Field Correction) 기능 제공
    • correXionPro.exe 을 기반으로 하는 스캐너 보정 기능 제공
    • 스캐너의 좌상단(-X, +Y) 의 위치데이타를 시작으로 하는 측정 데이타를 추가(Add)한후 변환(Convert) 하는 방식

업데이트 7/8/2019
  • 엔티티 (entity) 추가
    • 선 (line)
    • 점 (point)
    • 원 (circle)
    • 호 (arc)
    • 나선 (spiral)
    • 폴리라인 (polyline with bulge)
    • 그룹 (group) : 엔티티 집합을 의미합니다
    • 블럭 (block) & 블럭 인서트 (block insert)  
    • 파라메터 : 스캐너및 레이저의 속도, 지연값, 주파수들 을 설정
  • 레이어(layer)및 문서(doc)  추가
    • 엔티티 집합을 포함하는 레이어
    • 데이타를 serialize/deserialze 할 예정인 doc 
    • 문서구조를 이용해 사전에 엔티티(나선)들을 만들어 스캐너 보정에 사용하는 예제 추가됨
  • 행렬 스택 도입
    • 행렬 연산이 이제 3x3 스택 방식으로 개선되어 중첩된 행렬을 push/pop 할 수 있습니다.
  • 예제 프로젝트가 추가됨(testcase2)
    • testcase1 : RTC 카드 제어 + 행렬 처리 하는 예제 
    • testcase2 : RTC 카드 제어 + 엔티티(Entity)를 생성하여 나선모양을 가공 + 스캐너 보정 테이블을 만들어 신규 보정파일(ct5)을 생성하는 예제




기타 문의사항은 댓글을 달아주시길 바랍니다.

2019년 4월 23일

syncAxis 데모 프로그램 공개


최근 소개드렸던 syncAXIS 기반의 테스트 프로그램을 공개합니다.
v.1.2.5 기반으로 제작되었으며, 주요 기능으로는

  • XML 설정 파일을 기반으로 초기화/재초기화 기능
  • 스테이지 제어권 변경 (Follow/Unfollow)
  • 오퍼레이션 모드 변경(스캐너 , 스테이지, 스캐너+ 스테이지)
  • 보정파일(Correction) 변경
  • 레이저 주파수, 펄스폭 변경
  • 수동 스테이지, 스캐너 위치이동
  • 리스트 버퍼 테스트 (사각형, 원, 직선 등)

와 같습니다.


실행된 모습


리스트 명령 테스트시에는 버튼에 표기된 것처럼 +- 위치값이 입력됩니다. 때문에 스테이지를 기구 중심에 두고 엔코더 카운트를 0 으로 초기화 후 테스트를 진행하시기 바랍니다.

리스트 핸들링 모드는 기본적으로 slsc_ListHandlingMode_RepeatWhileBufferFull (1) 을 사용하게 됩니다. 변경에 주의 바랍니다.


몇가지 구현시 주의사항으로는
  • 초기화(initialize) 함수사용시 만약 실패하게 되면, 에러개수(slsc_ctrl_get_error_count)및 상세 에러 사유(slsc_ctrl_get_error)를 확인해 보아야 합니다.
  • 콜백함수들을 등록하여 사용할 경우, 해당 함수는 항상 syncAxis 내부의 쓰레드내에서 콜백호출되기 때문에, 공유 데이타에 대해서는 적절한 동기화가 필수입니다.
  • 모션 가동을 중단(slsc_ctrl_stop)할 경우, 재시작(slsc_cfg_reinitialize_from_file) 혹은 삭제(slsc_cfg_delete)후 초기화(slsc_cfg_initialize_from_file)를 반드시 해야 합니다.
  • 메뉴얼 문서에 따르면 내부 리스트 명령 버퍼는 기본적으로 약 40초간의 구동 데이타를 저장하게 된다고 하지만 실제로는 상당히  버퍼가 금방 차오르게 됩니다. 떄문에 리스트 데이타 삽입후 모션 계획(planning)의 계산이 충분히 되면 바로 가공을 시작(start)하는것이 바람직 한 방법입니다.
  • 모션 계산이 모두 완료되면 계획된 모션 정보를 확인할수있습니다. (slsc_ctrl_get_job_characteristic) 위치, 속도, 가속도, Jerk 및 10usec 단위로 분리된 micro벡터 개수등을 알수있습니다. micro벡터개수 / 100000 하게 되면 총 가공 시간(sec) 을 알 수 있습니다.
  • 가공을 시작후 리스트 데이타의 삽입이 지연되면 버퍼 언더런(under run)이 유발되어 내부 로직이 망가지는것 같습니다. (가공중 break-point 를 찍고 디버깅을 하게되어도 발생 주의)
  • acqure/release 함수 대신 follow/unfollow 를 사용하세요. (문제가 많으므로)


다운로드 링크 https://drive.google.com/file/d/1E-CsBJzso8iLJiOo5uxQeHNKEt0oD6xz/view?usp=sharing

2019년 4월 2일

syncAXIS 를 사용한 멀티헤드 On the fly 기법

2019.3월경 스캔랩에서는 자사의 syncAXIS 제품을 1.2.5 버전으로 업그레이드 하며 이를 공개하였습니다. 제가 파악해 보니 매우 흥미로운 기능이 추가되었는데 다름아닌 멀티헤드 on the fly 기능입니다.

스캔랩 사이트 주소 : https://scanlab.de/en/download/syncaxissoftware
* syncAXIS, RTC6, excelliSCAN  에 대해서는 이전글을 참고해 주시기 바랍니다.

  • syncAXIS v1.2.5 버전의 주요 변경사항
  1.  설정파일(XML)의 버전이 1.2로 대폭 바뀌었고, DTD 포맷도 구체적으로 변경되었습니다. XML system configuration 파일은 삭제되었고, DynamicLimits 라는 노드가 추가되었는데 주로 제한(영역크기 제한, 속도, 가속도, 가가속도 등의 동역학 값들) 값을 추가하고 이를 침범할 경우의 처리를 설정할 수 있습니다. 아마도 안전 관련 사항이 대폭 추가된듯 합니다.
  2. 몇몇 API 함수들이 추가되었습니다. 
    1. 주파수, 펄스폭을 런타임에 설정이 가능하게 되었습니다. 
    2. 멀티헤드별 행렬설정이 가능하게 되었습니다.
    3. 드디어 c# 에서 callback 을 지원하도록 개선(?) 되었네요. (완성된 버전은 아닌것 같네요. delegate 방식도 아니고 상속해서 사용하는 방식인거 같은데 생성이 되지 않는 부모 클래스를 제공하다니 -_-;)
  3. XML 설정파일에서 멀티헤드를 설정할 수 있도록 개선되었습니다. (최대 4개까지 지원한다고 합니다)
  4. syncAXIS Viewer 가 업데이트 되었습니다. (DirectX 기반으로 초기버전보다는 렌더링이 비약적으로 빨라졌습니다. (참고) 시뮬레이션 모드에서 생성된 로그 파일을 기반으로 모션 프로파일링이 가능합니다.

  • 멀티헤드의 구성

아래 사진과 같이 여러개의 RTC6 카드를 사용합니다. 또한 master-slave 연결을 사용해야 하며, 특이한것은 첫번째 카드에서 SLEC 컨버터(2nd head 커넥터)로 Ehtercat 통신 변환이 발생되며, 이후 카드들에서는 2nd head 커넥터에 스캐너(excelliSCAN) 를 연결합니다.
즉 스캐너 4개를 구동하기 위해 RTC6카드는 3개가 연결된 모습입니다. (레이저 소스 제어용 시그널이 3개가 되는데 으음... -_-;)

헤드 별로 하드웨어적인 상태 (틀어짐등의 오차)가 약간의 차이를 가지고 있을 것이므로, 이 상태를 적절히(?) 찾아서 오차량(dx, dy, theta)을 미리 설정파일에(xml)에 적용할수있게 되어 있습니다. (드디어 스테이지 스캐너간 X,Y 좌표방향을 맞출 필요가 없습니다. 설정 파일에서 행렬값만 바꾸면 됩니다. 이 버전에 와서야 지원되는군요.)



  • 모션 스테이지 한개 + 스캐너2 개가 구성된 모습

이후 가공 대상을 올려놓게 되는데 이 대상역시 약간의 오차를 가지고 올려놓게 될것 입니다. 이 오차역시 설정 파일(XML) 에 지정하게 됩니다. (해당 기능의 함수를 제공하고 있으므로, XML 에 설정하기 보다는 프로그램 런타임시 호출하여 사용하게 되겠군요 !)

즉 앞서 설정된 스캐너의 장착 오차(기계적 오차)와 대상 물체의 오차(대상 자재 오차)에 해당하는 3x3 행렬(Matrix)값을 계산해 주어야 합니다.

결과적으로 on the fly 가공을 하게 되면 syncAXIS DLL 라이브러는 Master 스캐너의 동작을 그대로 Slave 로 복사하여 가공하는 방식이 아니라, 서로간의 차이점을 계산한후 공통된 모션경로를 스테이지 제어에 사용하면서 동시에 그 차이점을 두개의 모션 경로로 분리하여 스캐너 1, 2에 각기 다른 모션 움직임이 발생하는 방식입니다.


  • On the fly 모션을 합치고 분리하는 모습

아래에서는 스테이지 모션을 위해  하나의 공통된 움직임을, 스캐너 2개는 서로 다른 움직임을 각각 경로를 추출하고 이를 계산해 내는 과정입니다.




추신) 현재 4개까지가 공식적인 지원이고, 추후에는 더 많은 멀티헤드 사용이 가능할 것으로 보입니다.

추신) syncAXIS DLL 내부적으로 모션 Planning 을 계산하게 되는데, CPU 자원을 상당히 소비하며, 좌표데이타 전달이 지속적으로 되지 않으면 문제가 될 소지가 다분합니다. 버퍼 언더런(buffer underrun) 상황을 조심하시기 바랍니다.

추신) 즉 on the fly 가공중에 절대로 break point 를 찍고 디버깅 하시면 않됩니다. ! 가공 데이타 전달이 중단되어 버퍼 고갈로 심각한 문제가 예상됩니다.

추신) C# 기반으로 콜백 함수 등록시 버그는 리포트하여 금일(2019.4.5) 스캔랩으로부터 패치가 되었고 이메일로 받아 정상 동작을 확인하였습니다. 조만간 홈페이지에 공개되겠지요.

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

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