목록으로
엔지니어링

PC 기반 자동화 장비 제어 프로그램 개발 순서 (18단계)

C 기반 장비 제어 소프트웨어를 개발하면서 진행하는 18단계 개발 순서. 장비 구조 파악부터 양산 지원·유지보수까지 단계별로 정리합니다.

12 · ofalv

C 기반 장비 제어 소프트웨어를 개발하면서 기본적으로 진행하는 개발 과정을 순서대로 설명합니다.

일반적인 순서로 설명을 하였으나 개발자가 여러 명이라면 일부 단계는 순서와 상관없이 동시에 또는 사전에 먼저 개발이 가능합니다. 아래 내용은 대략적인 순서로만 생각하고, 각 프로젝트 상황과 개발자 역량, 투입 인원에 따라 적절하게 적용하는 것이 좋습니다.

가정

  • 기본적인 IO 라이브러리나 모터 라이브러리는 구축되어 있다고 가정
  • 공용으로 사용하는 GUI 화면은 개발되어 있다고 가정

1. 장비 구조 파악

장비 구조를 파악하려면 우선 기구 설계자와 리뷰를 해야 합니다.

이때 장비의 전체 동작 구조를 파악해야 합니다. 어떤 장비든지 액추에이터(모터, 실린더 등)를 이용해서 대상이 되는 자재를 가공하거나 이동시키는 기능을 해야 하기 때문에, 그 자재가 어떻게 이동하고 각각의 모터나 실린더가 이동에 어떻게 작용을 하는지 파악해야 제어 구조를 파악할 수 있습니다.

  • 모터 축수, 각 모터의 동작 방향·위치
  • 실린더의 위치·방향·동작 구조
  • 각 센서의 감지 조건과 설치 의도, 부족한 센서 유무
  • 장비 제어 PC 에 장착하는 보드 종류, PC 와 연결하는 통신·인터페이스 종류

소프트웨어 개발자가 장비 조립이 끝나고 나서야 구조를 파악하는 것이 아니라, 장비 수주 컨셉 단계부터 적극적으로 참여해서 제어하기 좋은 컨셉과 제어 관점에서 발생할 수 있는 문제점을 미리 해결해 나가는 것이 좋습니다.

2. 제어 구조 설계 & 리뷰

위에서 파악한 장비 구조에 따라 장비를 어떻게 제어할지 기본 설계를 합니다.

동시에 구동하는 부분, 자재 정보로 어떤 데이터가 필요한지, 메인 화면은 어떤 정보를 어떻게 표시할지 등을 고민해 보고 다른 개발자들과 한 번 리뷰를 하면 좋습니다.

3. 프로젝트 생성

제어 컨셉을 잡고 나면 신규 프로젝트를 생성합니다. Visual Studio 로 신규 프로젝트를 만들거나, 기존 프로젝트를 정리해서 새 프로젝트를 개발할 수 있도록 공통 사항만 남기고 제거합니다.

개별 장비 제어 프로젝트에는 해당 장비 관련 소스만 들어가고, 공용으로 사용하는 소스는 별도의 DLL 로 라이브러리화해서 개발하는 것이 좋습니다. 회사에서 제어를 위해 공용으로 사용하는 라이브러리들을 모아서 프레임워크라고 부르기도 합니다.

4. 기초 데이터 작업

기초 데이터를 작성합니다.

  • IO Map
  • Cylinder Data
  • Motor Data

기본 데이터는 각 회사에서 개발한 구조에서 사용하는 포맷으로 작성하면 됩니다.

데이터 없이 소스 코드만으로 개발도 가능하지만, 설정 데이터를 저장하지 않으면 간단한 파라미터 수정을 위해서도 프로그램 소스를 다시 컴파일(빌드) 해서 실행 파일을 바꾸어야 적용할 수 있고, 하드웨어가 약간 변경되었을 때 같은 실행 파일을 사용하기 힘들어집니다. 기본적인 제어 객체들은 데이터 파일 기반으로 설정할 수 있도록 프레임워크를 만듭시다.

5. IO · Cylinder · Motor Check

장비와 장비 PC 전원이 들어가면 IO, 실린더, 모터들이 제대로 동작하는지 체크합니다.

  • 센서가 자재를 제대로 감지하는지
  • 실린더 동작 방향과 센서가 제대로 들어오는지
  • 모터의 구동 방향, 센서 상태, 이동 거리 등

6. 인터락 작업 (Check 함수 개발)

본격적인 시퀀스 개발을 하기 전에, 모터나 실린더 기구물이 실수로 충돌하지 않도록 엄격하게 인터락 작업을 합니다.

인터락 작업을 처음에는 엄격하게 해 놓고, 나중에 상황에 따라 조금씩 푸는 방식으로 작업합니다. 인터락 조건을 초기에 대충 잡아 놓으면 시퀀스 작업을 하면서 버그·실수·조그 이동 실수 등으로 기구물이 충돌하는 상황이 발생하기 쉬우며, 충돌했을 때 모터 Alarm 만 발생한다면 다행이지만 최악의 경우 기구물이 파손·손상되어 막대한 손실이 발생할 수 있습니다.

대부분의 기구물 파손 문제는 금전적인 문제 보다도 납기가 정해져 있기 때문에 시간적인 문제가 치명적입니다. 또한 생각치 못한 동작으로 작업자가 다치는 사고가 발생할 수도 있으니 인터락 작업에 최대한 정성을 들여야 나중에도 안심하고 시퀀스 작업을 할 수 있습니다.

인터락 작업에 정성을 들이자!

7. 티칭 파라미터 작성

전체 동작 구조를 파악함에 따라 각 모터가 이동해야 하는 티칭 값들을 작성합니다.

  • 티칭 값은 GUI 에서 설정하고, 모터를 이동해 보고 세팅할 수 있는 화면을 만들어야 합니다.
  • GUI 에서 설정한 값을 시퀀스 코드에서 사용할 수 있는 데이터 구조도 만들어야 합니다.

8. Sequence 개발

본격적으로 시퀀스를 개발하고 연결합니다.

시퀀스는 동시에 동작하는 모듈 단위로 개발하며, 각 모듈은 하나 이상의 쓰레드로 동작할 수 있도록 개발합니다. 시퀀스 코드에서는 모터·실린더·IO 출력 등을 제어해서 자재를 옮기거나 가공하고, 자재 정보 같은 관련 데이터를 업데이트해 줍니다.

보통 시퀀스는 if-else 구문이나 switch-case 문 구조로 개발하며, 에러 처리를 위한 구조를 함께 만듭니다.

시퀀스를 제어하는 구조나 방법은 회사마다, 개발자마다 다양하기 때문에 표준화시키지 않으면 장비마다 제어 코드가 난잡해질 수 있습니다. 한 회사에서는 모든 개발자가 같은 구조로 개발할 수 있도록 시니어 개발자가 잘 이끌어야 합니다. 장비 회사에서는 시니어 개발자가 시퀀스 제어를 위한 기본 구조를 확립해서 공용 라이브러리로 만들어 놓는 것이 중요합니다.

9. 기본 GUI 개발 — 메인 화면

메인 화면에 표시할 정보를 정리해서 표시합니다. 일부는 시퀀스 제어 개발과 동시에 작업이 가능합니다.

10. 비전 알고리즘 및 티칭 화면 개발

비전 Align 이나 Inspection 기능이 들어가는 장비는 비전 알고리즘 개발과 비전 티칭 화면을 개발해야 합니다.

비전 개발자가 별도로 있고 비전 프로그램이 별도의 PC 또는 별도 실행 파일로 제어되는 경우에는, 비전 개발자가 작업하고 장비 제어 프로그램과는 통신을 해서 결과를 받아 제어에 사용합니다.

11. 시퀀스 디버깅

기본 시퀀스가 어느 정도 되었으면 IDLE RUN(DRY RUN) 으로 돌리면서 각 모듈에 구현된 시퀀스가 에러 없이 동작하고, 시퀀스들 간의 연결 조건이 제대로 동작하는지 테스트합니다.

이때 실수나 버그로 기구물 충돌이 가장 많이 발생합니다. 엄격한 인터락 조건이 기구물 파손을 방지한다는 점을 명심해야 합니다.

12. MES 개발 및 테스트

개발에 투입하는 개발자가 여러 명이고 인원 여유가 있다면 MES 개발은 다른 작업과 별도로 시작할 수 있습니다.

일단 MES 스펙을 파악하고, 기본 프로토콜·데이터 구조를 파악해서 시나리오에 따른 개발을 합니다. 각 시나리오나 이벤트에 따라 주고 받아야 할 데이터를 처리합니다. 이때는 시퀀스 개발·GUI 개발과 함께 진행해야 합니다.

MES 는 다음과 같은 순서로 합니다.

  1. 스펙 분석
  2. 기본 프로토콜 개발
  3. 개별 데이터 수발신 테스트 (이벤트 등)
  4. 시나리오 개발
  5. 로컬 서버 프로토콜·시나리오 테스트
  6. 양산 서버 테스트

13. Full Auto Run 테스트 & 디버깅

시퀀스 개발이 끝나면 자재를 투입해서 최종 동작을 테스트합니다.

자재를 투입하기 시작하면 예상하지 못한 센서 문제, 시간 문제, 기구적인 문제들이 다수 발생하는데, 이런 문제들을 기구·하드웨어·CS 엔지니어 등과 협의하면서 풀어 나갑니다. 소프트웨어 자체의 버그 수정 및 소프트웨어만으로 개선할 수 있는 부분도 처리합니다.

제어 문제는 소프트웨어로 해결하는 비용이 가장 저렴하다. (다만 악용될 수 있다)

14. 매뉴얼 기능 및 편의 기능 개발

세팅을 편하게 하려면 매뉴얼 동작 기능을 최대한 빨리 만들어 주는 것이 좋습니다.

세팅 과정을 주의 깊게 보면서 — 또는 개발자가 직접 세팅을 해 보면서 — 편의성을 높일 수 있는 기능을 신속하게 개발합니다. 소프트웨어를 개발하고 처음 세팅할 때는 다른 사람에게 맡기지 말고 개발자가 직접 해 보는 것이 가장 좋습니다.

개발자는 개밥 먹기를 잘하자.

15. 에러 · 메시지 데이터 추가

시퀀스를 작업해 나가면서 동시에 에러 데이터도 정리하면 좋지만, 대부분 시퀀스를 돌리는 부분에 집중하다 보니 에러 코드는 나중에 정리하게 됩니다. 시퀀스 디버깅이 어느 정도 끝나면 에러 내용을 잘 알아볼 수 있도록 에러 코드와 데이터를 정리합니다. 이때 다국어에 따라 다른 언어의 데이터도 넣을 수 있어야 합니다.

XMachineStudio 는 시퀀스를 개발하면서 동시에 간편하게 ERROR 데이터를 작성할 수 있습니다.

16. 다국어 지원 데이터 작업

위에서 설명한 에러 데이터·메시지 데이터의 다국어 지원을 위한 데이터를 작성합니다. 또한 GUI 화면을 위한 다국어 데이터도 만듭니다.

17. 소프트웨어 사용 매뉴얼 작성

소프트웨어 셋업·사용 매뉴얼을 작성하고, 필요하면 고객사가 요청하는 언어로 번역을 의뢰합니다.

18. 양산 지원 · 버그 수정 · 유지보수

장비를 검수하거나, 납품 후 양산 도중에 발생하는 버그를 수정하고 유지보수를 지원합니다.

PC 제어자동화 장비개발 프로세스시퀀스MES