Camera module 6-side inspection
Peponi │ 2019.5 - 2019.9 │ 6m
Camera module 6-side inspection
Peponi
1. Overview
물류 및 비전 제어를 통한 일반 작업자의 육안 검사를 대체하는 것을 목표로 smart phone camera module 대상 외관 검사 장비를 개발한다.
2. 역할
- 제어 SW 개발 (참여도 : 100%)
3. 제어 구성
- Motion : X, Y, Z, R축
- I/O : Sensor, air cylinder, tower lamp 등
4. 기술 스택
- 프로그래밍 언어 : C# (WinForms)
- 네트워크 : Ethernet
- 프로토콜 : EtherCAT (아진엑스텍 보드 사용)
- 개발환경 : Visual Studio
5. 주요 기능
- 다중, 무한 lot 가동 (Stack type)
- 실시간 검사 및 자동 sorting
- 특정 불량 유형에 대한 분리 sorting
6. 성과
- 제어 시스템 설계
- 무한 lot 기능 도입으로 생산성 개선
- 특정 불량에 대한 분리 sorting 기능 도입으로 생산성 개선
7. 회고
SD Optics, Inc.에서 처음으로 SW 설계를 맡은 프로젝트로, 이전 프로젝트에서 배운 프로그래밍 기법을 제어의 각 부분에 적용하는 데 많은 노력을 들였다. 또한 SW 제작간 HW integration을 고민하고 트러블슈팅을 진행하며 많은 교훈을 얻은 프로젝트가 되었다.
7.1. I/O의 이유 있는 접점 타입
생각지도 못하게 만난 첫번째 문제는 I/O의 접점 타입
이었다. 이 프로젝트에서 처음으로 A접점, B접점이 혼용되어 있는 형태를 만나게 되었는데, 이 때 I/O가 부위별로 다르게 적용되는 이유에 대해 배우게 되었다.
가장 큰 이유는 안전이었다. A접점 센서 사용 중 고장 발생 시 안전에 위협이 되는 경우
해당 센서는 B접점을 사용해야 했다. 이 때문에 SW 코드에 접점 타입
에 대한 처리가 필요해졌다.
작성되어 있는 코드를 찾아보니, B접점 센서에 대해 코드에서 Input 시그널을 반전
시켜 사용하고 있었다. 이 문제 역시 동일한 방식으로 문제를 해결할 수도 있었으나, SW에서 옵션으로 처리
할 수 있다면 더 유연한 프로그래밍이 될 것으로 생각되었다.
결국 라이브러리의 I/O 코드에 접점 타입에 대한 옵션
을 추가하고, 상태를 반영하는 UI 또한 접점 타입에 따라 반응
하게 수정하여 문제를 해결하게 되었다.
7.2. 경직된 SW 코드
두번째로 나타난 문제는 코드의 경직성
이었다. SW 제작 당시 양품과 불량품의 sorting 하드웨어가 분리되어 있었고, 그에 맞춰 SW 설계를 진행하였다. 그러나 테스트 수행 중 택타임 단축을 이유로 sorting 위치
를 바꿔야 하는 일이 발생되었는데, 이 때 SW 설계의 문제가 드러나게 되었다.
설계도에 보이는 그대로 설계하고 작성하여 코드가 상당히 경직
되어 있는 것이 문제였는데, 양품 / 불량품의 entry point를 두고 이후 일련의 코드가 적용되어 있었다. (통짜 코드
에 가깝게 적용되어 있었다)
경험이 많지 않았던 그 때, 문제 해결을 위해 코드 교체
라는 상당히 아쉬운 방법을 선택하였다. 각 entry point에 맞게 이후 코드를 통째로 교체하여 당면한 문제는 해결하였으나 좋지 않은 방법
이라는 확신을 얻게 되었다.
7.3. 프로젝트 이후
7.2. 경직된 SW 코드는 프로젝트 이후 아쉬운 점으로 남게 되었는데, 절차적
또는 객체지향
프로그래밍 기법을 적용한다면 훨씬 우아한 방법으로 문제를 해결할 수 있었기 때문이었다. 이후 프로그래밍 기법을 탐색하며 내 코드에 적용하는 방법을 공부하고, 개발자로서 한발 더 나아가는 계기가 되었다.