본문 바로가기
장비&모션제어

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

by ictlab 2023. 3. 24.

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

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

※ 가정

- 기본적인 IO라이브러리나 모터 라이브러리는 구축되어 있다고 가정

- 공용으로 사용하는 GUI화면은 개발되어 있다고 가정

🔷 1. 장비 구조 파악

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

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

모터 축수 , 각각의 모터가 동작하는 방향, 위치, 실린더의 위치 방향 , 동작 구조 파악등을 합니다.

또한 각각의 센서는 어떤 상황일 때 감지가 되고 기구 설계에서 왜 해당 센서를 설치했는지 , 제어를 위해 필요한데 없는 센서가 있는지도 체크합니다.

장비 제어 PC에 장착하는 보드 종류, PC와 연결하는 통신 종류, 인터페이스 종류 등을 파악합니다.

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

🔷 2. 제어 구조 설계 & 리뷰

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

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

🔷 3. 프로젝트 생성

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

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

🔷 4. 기초 데이타 작업

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

Io Map

Cylinder Data

Motor Data

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

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

🔷 5. Io cyl motor check

장비와 장비 PC 전원이 들어가면 io, cylinder , motor들이 제대로 동작하는지 체크합니다.

센서가 자재를 제대로 감지하는지, 실린더 동작 방향과 센서가 제대로 들어오는지

모터의 구동 방향, 센서 상태, 이동 거리등을 체크합니다.

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

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

인터락 작업을 처음에는 엄격하게 해놓고 , 나중에 상황에 따라 조금씩 풀어 가능 방식으로 작업합니다. 인터락 조건을 초기에 대충 잡아 놓으면, 시퀀스 작업을 하면서 버그나, 실수 , 조그 이동 실수 등으로 기구물이 충돌하는 상황이 발생하기 쉬우며, 충돌했을때 모터 Alarm만 발생한다면 다행이지만 최악의 경우 기구물이 파손되거나 부러지거나 하는 문제로 막대한 손실이 발생 할 수도 있습니다. 대부분의 기구물의 파손 문제는 금전적인 문제 보다도 납기가 정해져 있기 때문에 시간적인 문제가 치명적입니다. 또한 생각치 못한 동작으로 작업자가 다치는 사고가 발생할 수도 있으니 인터락 작업에 최대한 정성을 들여야 나중에도 안심하고 시퀀스 작업을 할 수 있습니다.

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

🔷 7. 티칭 파라미터 작성

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

티칭값은 GUI에서 설정하고, 모터를 이동해보고 세팅할 수 있는 화면을 만들어야 합니다.

그리고 GUI에서 설정한 값을 시퀀스 코드에서 사용 할 수 있는 데이터 구조도 만들어야 합니다.

🔷 8. Sequence 개발

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

시퀀스는 동시에 동작하는 모듈 단위로 개발하며 , 각각의 모듈은 하나 이상의 쓰레드로 동작할 수 있도록 개발합니다.

시퀀스 코드에서는 모터, 실린더, IO 출력등을 제어해서 자재를 옮기거나 가공하고 , 자재 정보와 같은 관련 데이터를 업데이트 해줍니다.

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

시퀀스를 제어하는 구조나 방법은 회사 마다 , 개발자 마다 다양하기 때문에 표준화 시키지 않으면 장비마다 제어 코드가 난잡해 질 수 있습니다. 한 회사에서는 모든 개발자가 같은 구조로 개발할 수 있도록 시니어 개발자가 잘 이끌어야 합니다. 

장비 회사에서는 시니어 개발자가 시퀀스 제어를 위한 기본 구조를 확립해서 공용 라이브러리로 만들어 놓는 것이 중요합니다.

🔷 9. 기본 gui 개발. 메인 화면

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

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

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

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

🔷 11. 시퀀스 디버깅

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

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

🔷 12. Mes 개발 및 테스트

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

일단 MES스펙을 파악하고, 기본 프로토콜, 데이터 구조를 파악해서 시나오에 따른 개발을 합니다.

각 시나리오나 이벤트에 따라 주고 받아야 할 데이터를 처리합니다. 이때는 시퀀스 개발, GUI 개발과 함께 진행해야 합니다.

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

- 스펙 분석

- 기본 프로토콜 개발

- 개별 데이터 수발신 테스트 ( 이벤트 등 )

- 시나리오 개발

- 로컬 서버 프로토콜, 시나리오 테스트

- 양산 서버 테스트

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

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

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

제어 문제는 소프트웨어로 해결하는 비용이 가장 저렴하다.

(다만 악용될 수 있다)

🔷 14. 메뉴얼 기능 및 편의 기능 개발

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

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

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

🔷 15. 에러 , 메세지 데이터 추가

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

XMachineStudio는 시퀀스를 개발하면서 ,

동시에 간편하게 ERROR 데이터를 작성 할 수 있습니다.

🔷 16. 다국어 지원 데이타 작업

위에서 설명한 에러 데이터나 메시지 데이터등의 다국어 지원을 위한 데이터를 작성합니다.

또한 GUI화면을 위한 다국어 데이터도 만듭니다.

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

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

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

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