경북 예천의 음료 공장에 겐트리 로봇 두 대를 세웠다. 흐르는 컨베이어 위의 박스를 멈추지 않고 집어 파렛트에 쌓는 설비다. 2021년 1월에 시작해 그해 12월에 넘겼고, 5년이 지난 지금도 가끔 나를 부른다.
흐르는 것을 집는다
겐트리 로봇의 일 자체는 단순하다. 집어서 옮겨 놓는다. 어려운 것은 대상이 서 있지 않다는 점이다.
컨베이어는 초당 320 mm 로 계속 흐른다. 센서가 박스를 감지한 순간부터 로봇이 그 자리에 도달할 때까지, 박스는 이미 저만치 가 있다. 그래서 로봇은 지금 위치가 아니라 집을 시점의 위치로 가야 한다. 이것이 컨베이어 트래킹이다.
<표 1> 현장 치수
| 항목 | 값 |
|---|---|
| 컨베이어 길이 | 4,560 mm |
| 감지 센서 → 로봇 1 | 1,200 mm |
| 감지 센서 → 로봇 2 | 3,400 mm |
| 컨베이어 속도 | 320 mm/s (뒤에 310 으로 낮춤) |
로봇 두 대가 한 줄을 나눠 맡는다. 홀수 번째 박스는 1번이, 짝수 번째는 2번이 집는다. 두 대가 각자 자기 몫만 정확히 세고 있어야 하며, 한 번이라도 어긋나면 그 뒤가 전부 밀린다.
세 대의 제어기
제어가 한 곳에 모여 있지 않았다. 세 대가 물려 있었다.
- 미쓰비시 PLC — 라인 전체의 시퀀스
- 베이어 HMI — 작업자가 보는 터치 화면
- Lenze 3200 — 겐트리 두 대의 모션
박스의 품번·길이·폭·적재 패턴은 HMI 에서 입력되어 미쓰비시를 거쳐 Lenze 로 내려온다. 모션 제어기 입장에서는 남을 거쳐 오는 정보인 셈이다.
여기서 문제가 났다. Lenze 가 리셋되고 나면, 미쓰비시를 통해 오는 값이 갱신되지 않았다. 두 제어기가 직접 주고받는 데이터는 멀쩡한데 한 다리 건넌 값만 굳어 버렸다. 모션 쪽에서는 그것이 낡은 값인지 알 방법이 없었다. 길이와 폭이 0 이면 알람이라도 낼 수 있지만, 그럴듯한 값으로 굳어 있으면 방법이 없었다.
도는 축에는 리밋이 걸리지 않는다
현장 셋업에서 소프트리밋이 회전축과 그리퍼축에만 먹지 않았다. X·Y·Z 는 정상이었다. 원인은 축 타입이었다. 두 축이 모듈러로 설정되어 있었는데, 끝없이 도는 축으로 보면 상한과 하한이라는 개념 자체가 성립하지 않는다. 리미티드로 바꾸고 나서야 리밋이 걸렸다.
회전축은 기구 원점을 180도에 두고 −10도에서 91도까지만 움직이도록 묶었다. 사람이 눈으로 확인할 수 없는 축일수록 소프트웨어가 대신 막아 줘야 한다.
2,000 박스
2021년 11월 22일, 양산 조건으로 2,000 박스를 흘렸다. 1,800 개가 정상 배출되고 200 개가 문제였다. 불량률 10 %.
원인을 갈라 보니 이랬다.
| 원인 | 비중 |
|---|---|
| 통신 지연 | 80 % |
| 투입 물류 문제 | 15 % |
| 센서 오감지 · 미파악 | 5 % |
박스가 들어오고 2초 안에 통신이 갱신되지 않으면 몇 번 패턴인지 알 수 없었다. 공장장과 협의해 그날 생산을 멈췄다.
결론은 소프트웨어가 아니었다. 입력 배선 11개를 새로 깔았다. 남을 거쳐 오던 신호를 모션 제어기가 직접 받도록 바꾼 것이다. 통신 프로토콜을 아무리 다듬어도 세 다리를 건너는 구조 자체는 바뀌지 않는다. 그럴 때는 선을 하나 더 까는 편이 빠르다.
생산 중에는 건드리지 않는다
다음 날 5,800 개를 흘렸고 7번 놓쳤다. 그중 몇 번은 내가 사이클 타임 측정 프로그램을 내려받는 중에 일어났다. 그날 수첩에 이렇게 적었다.
생산 중에는 왠만하면 프로그램 수정 하기 없기.
당연한 말인데, 라인이 돌고 있으면 한 줄만 고치면 될 것 같다는 생각이 계속 든다. 그 유혹이 사고를 만든다.
텍타임
처음엔 분당 24 박스였다. 그리퍼 제어 로직을 손보면 1회당 0.3~0.5초를 줄일 수 있다고 봤다. 투입 타이머를 박스 위치별로 분리하고, 그리퍼를 로봇이 출발하면서 함께 움직이도록 바꿨다.
분당 26 박스까지 올라갔다. 목표는 32 였다. 다만 속도를 올리자 로봇 2번에 소프트리밋 알람이 떴고, 컨베이어를 310 mm/s 로 낮췄다. 가장 빠른 설정과 가장 안정된 설정은 같지 않았다. 결국 25~26 박스 언저리에서 타협했다. 그 속도가 밤새 돌려도 알람이 없는 속도였다.
진동과 소음은 클러치 파라미터로 잡았다. 축이 트래킹에 물리는 구간을 짧게
(ClutchDistance = 60, ClutchTime = 0) 두니 붙는 순간의
충격이 줄었다.
5년 뒤
2021년 12월 10일에 오퍼레이터 교육을 하고 현장에서 빠졌다. 이듬해 1월에 바이패스 모드를 넣어 주고 그걸로 끝인 줄 알았다.
2026년 8월, X축에 팔로잉 에러가 나기 시작했다는 연락을 받았다. 축을 교체하려면 10주가 걸린다고 했다. 그때까지 라인을 세울 수는 없으니 임시 조치를 하러 다시 예천에 갔다.
허용 오차를 200 에서 500 으로, 판정 시간을 1,000 에서 3,000 ms 로 늘렸다. 오차 한계보다 시간을 먼저 늘리는 편이 안전하다. 순간적인 기구 마찰은 지나가게 두고, 진짜 고착이나 충돌 같은 지속성 이상은 그대로 잡아내기 때문이다. 한계값만 키우면 두 경우를 구분하지 못하게 된다.
설비는 넘긴다고 끝나지 않는다. 기구는 닳고, 오차는 커지고, 5년 전에 임시로 박아 둔 한 줄이 어느 날 발목을 잡는다. 그때 그 코드를 쓴 사람이 나라는 것도 로그를 뒤지다 알게 된다.
그래도 예천의 그 라인은 아직 돌고 있다. 박스는 여전히 초당 320 mm 로 흐르고, 두 대가 홀수와 짝수를 나눠 집는다.
가끔은 그것으로 충분하다.

답글 남기기