[카테고리:] 모션제어

TwinCAT · Codesys 등 모션 제어기

  • 나에게는 어려웠던 개발 프로젝트

    2018년, 나는 8축 와이어 벤딩 머신 “프리스타일(FreeStyle)”을 처음부터 끝까지 혼자 만들었다. PLC도, HMI도, 모션도, 고객 대응도 전부 처음 해 보는 일이었다. 지금까지 올린 글 중에서 가장 오래 붙잡고 있었고, 가장 많이 막혔던 프로젝트다.

    항목내용
    프로젝트명FreeStyle — 8축 와이어 벤딩 머신
    기간2018년 개발, 2019년 초까지 수정
    제어기B&R Automation PC910 (파워링크)
    축 구성회전·이송·투피드·클램프·벤드·푸시·수평·수직 8축 서보 + 히터 4계통
    고객미국 소재 업체 — 영문 이메일·현지 출장으로 협의

    혼자 처음부터

    업무일지 첫 줄에 내가 스스로 나눠 놓은 순서가 있다. 환경설정, IO 매뉴얼 프로그램, 히터 매뉴얼 프로그램, 모션 매뉴얼 프로그램, UI 작업, 자동 프로그램, 알람 및 예외처리, 파일·레시피·로그, 그리고 야스카와 로봇 프로그램. 마지막 항목 옆에는 (0%)라고 적어 놓았다. 그때는 로봇 연동까지 갈 길이 멀다는 걸 알고 있었다는 뜻이다.

    터치스크린 HMI로 레시피를 짜서 와이어를 굽히는 기계였다. 스텝 하나에 회전·이송· 클램프·벤드 같은 축들의 목표값을 넣고, 그 스텝을 순서대로 이어 붙이면 하나의 형상이 나왔다. 이 구조를 화면 설계부터 PLC 로직까지 혼자 짰다.

    레시피가 20개에서 막혔다

    고객이 보내온 수정 요청 목록 맨 위에 이런 게 있었다. “21번째부터 40번째 스텝이 따로 작동하지 않는다. 21~40번을 고치면 1~20번도 같이 바뀐다.” 레시피 한 줄에 쓸 수 있는 스텝을 20개로 잡아 놓은 내 자료구조의 한계였다. 100개까지 늘려 달라는 요청에 나는 이렇게 답을 적어 뒀다.

    단순노동이라 쉽지만 시간이 걸리는 문제.

    쉽다고 적어 놓고도 실제로는 시간이 오래 걸렸다. 복사·붙여넣기도, 스텝 삽입도, 되돌리기(undo)도 없는 화면이었다. 고객은 반복되는 동작을 매번 손으로 새로 입력해야 했다. 그가 요청한 기능 하나하나가 지금이라면 당연히 있어야 할 것들이었다. 그때는 그 당연한 것들을 하나씩 다 만들어야 했다.

    말이 안 통해서 더 어려웠다

    기술보다 더 힘들었던 건 요구사항을 읽는 일이었다. 고객은 영어로 스크린샷과 함께 길게 적어 보냈고, 나는 그 밑에 한국어로 답을 달고 다시 영어로 옮겼다. 수정 목록에는 내가 그때 적어 둔 문장들이 그대로 남아 있다.

    나는 당신의 요구사항을 정확히 이해하지 못하겠다.
    내 생각에 다음 미국출장 때 대화하면서 이 문제 뿐 아니라 전반적으로 업데이트해야 될 것 같다.

    같은 문장이 목록 안에서 세 번 반복된다. 화면 캡처와 화살표만으로는 안 풀리는 요구가 있었고, 그런 항목은 결국 출장을 가서 기계 앞에 같이 서야 풀렸다.

    헬릭스

    고객이 만들고 싶어 한 형상 중에는 나선(helix)이 있었다. 그가 보내온 문서에는 두 가지 방법이 적혀 있었다. 하나는 파라메트릭 방정식으로 나선을 통째로 계산하는 방법, 다른 하나는 굽힘을 짧은 구간으로 잘라 이어 붙이는 방법이었다. 후자를 택하면 이송량과 굽힘각을 단순한 값 몇 개로 넣을 수 있었지만, z축은 이 계산에 들어가지 않았다. z축은 사람이 손으로 움직이거나, 나중에 로봇이 맡아야 하는 몫이었다.

    평면 위의 수학은 고객이 직접 풀어서 보내 줬다. 그 수식을 기계가 이해하는 스텝 값으로 바꾸는 일이 내 몫이었다. 로봇이 z축을 대신하는 날은 이 프로젝트 안에서 오지 않았다.

    PLC도 HMI도 모션도 혼자 배워 가며 만들었고, 말이 통하지 않는 고객과 문서를 주고받으며 요구사항 읽는 법을 배웠다. 그 몇 달이 지금 내가 새로운 프로젝트 앞에서 겁내지 않는 이유 중 하나다.

  • 예천…겐트리의 추억

    예천…겐트리의 추억

    경북 예천의 음료 공장에 겐트리 로봇 두 대를 세웠다. 흐르는 컨베이어 위의 박스를 멈추지 않고 집어 파렛트에 쌓는 설비다. 2021년 1월에 시작해 그해 12월에 넘겼고, 5년이 지난 지금도 가끔 나를 부른다.

    흐르는 것을 집는다

    겐트리 로봇의 일 자체는 단순하다. 집어서 옮겨 놓는다. 어려운 것은 대상이 서 있지 않다는 점이다.

    컨베이어는 초당 320 mm 로 계속 흐른다. 센서가 박스를 감지한 순간부터 로봇이 그 자리에 도달할 때까지, 박스는 이미 저만치 가 있다. 그래서 로봇은 지금 위치가 아니라 집을 시점의 위치로 가야 한다. 이것이 컨베이어 트래킹이다.

    <표 1> 현장 치수

    항목값
    컨베이어 길이4,560 mm
    감지 센서 → 로봇 11,200 mm
    감지 센서 → 로봇 23,400 mm
    컨베이어 속도320 mm/s (뒤에 310 으로 낮춤)

    로봇 두 대가 한 줄을 나눠 맡는다. 홀수 번째 박스는 1번이, 짝수 번째는 2번이 집는다. 두 대가 각자 자기 몫만 정확히 세고 있어야 하며, 한 번이라도 어긋나면 그 뒤가 전부 밀린다.

    트래킹 모니터링 화면
    <그림 1> 트래킹 모니터링. 왼쪽 큐가 컨베이어 위 박스이고, 로봇별 집은 좌표와 놓은 좌표가 실시간으로 찍힌다

    세 대의 제어기

    제어가 한 곳에 모여 있지 않았다. 세 대가 물려 있었다.

    • 미쓰비시 PLC — 라인 전체의 시퀀스
    • 베이어 HMI — 작업자가 보는 터치 화면
    • Lenze 3200 — 겐트리 두 대의 모션

    박스의 품번·길이·폭·적재 패턴은 HMI 에서 입력되어 미쓰비시를 거쳐 Lenze 로 내려온다. 모션 제어기 입장에서는 남을 거쳐 오는 정보인 셈이다.

    적재 패턴 입력 화면
    <그림 2> 품번·길이·폭과 홀짝별 적재 좌표

    여기서 문제가 났다. 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초를 줄일 수 있다고 봤다. 투입 타이머를 박스 위치별로 분리하고, 그리퍼를 로봇이 출발하면서 함께 움직이도록 바꿨다.

    그리퍼 개폐 도면
    <그림 3> 그리퍼 개폐 스트로크. 제품 폭에 따라 벌어지는 정도가 달라진다

    분당 26 박스까지 올라갔다. 목표는 32 였다. 다만 속도를 올리자 로봇 2번에 소프트리밋 알람이 떴고, 컨베이어를 310 mm/s 로 낮췄다. 가장 빠른 설정과 가장 안정된 설정은 같지 않았다. 결국 25~26 박스 언저리에서 타협했다. 그 속도가 밤새 돌려도 알람이 없는 속도였다.

    진동과 소음은 클러치 파라미터로 잡았다. 축이 트래킹에 물리는 구간을 짧게 (ClutchDistance = 60, ClutchTime = 0) 두니 붙는 순간의 충격이 줄었다.

    5년 뒤

    2021년 12월 10일에 오퍼레이터 교육을 하고 현장에서 빠졌다. 이듬해 1월에 바이패스 모드를 넣어 주고 그걸로 끝인 줄 알았다.

    2026년 8월, X축에 팔로잉 에러가 나기 시작했다는 연락을 받았다. 축을 교체하려면 10주가 걸린다고 했다. 그때까지 라인을 세울 수는 없으니 임시 조치를 하러 다시 예천에 갔다.

    팔로잉 에러 설정
    <그림 4> 추종 오차 감시 설정

    허용 오차를 200 에서 500 으로, 판정 시간을 1,000 에서 3,000 ms 로 늘렸다. 오차 한계보다 시간을 먼저 늘리는 편이 안전하다. 순간적인 기구 마찰은 지나가게 두고, 진짜 고착이나 충돌 같은 지속성 이상은 그대로 잡아내기 때문이다. 한계값만 키우면 두 경우를 구분하지 못하게 된다.

    설비는 넘긴다고 끝나지 않는다. 기구는 닳고, 오차는 커지고, 5년 전에 임시로 박아 둔 한 줄이 어느 날 발목을 잡는다. 그때 그 코드를 쓴 사람이 나라는 것도 로그를 뒤지다 알게 된다.

    그래도 예천의 그 라인은 아직 돌고 있다. 박스는 여전히 초당 320 mm 로 흐르고, 두 대가 홀수와 짝수를 나눠 집는다.

    가끔은 그것으로 충분하다.

  • 모션제어의 추억

    모션제어의 추억

    2019년 여름, 미국 퍼듀대학교에 QTC 라는 장비가 있었다. 5축으로 움직이며 150 ℃ 히팅부에서 나오는 소재를 감아 원하는 3차원 형상을 만드는 개발 장비였다. 결국 상용화에는 이르지 못했지만, 모션 제어를 하며 겪은 것 중 가장 많이 배운 일이었다.

    장비가 하는 일

    소재는 토우(tow) 라 부르는 납작한 섬유 테이프다. 히팅부를 지나며 물러진 상태로 나오고, 이것을 헤드가 지그에 감는다. 감긴 형상이 굳으면 부품이 된다. 히팅 온도는 150 ℃ 안팎을 지켜야 했다. 낮으면 감기지 않고 높으면 소재가 상한다. 온도와 모션이 함께 맞아야 형상이 나오는 장비였다.

    공정은 네 덩어리로 이어진다 — QTC → 로딩·언로딩 로봇 → 사출 → 커팅. 장비 하나가 아니라 셀 전체가 한 호흡으로 돌아가야 했다.

    QTC 셀 전경
    <그림 1> 셀 전경. 왼쪽이 QTC 헤드, 가운데가 이송 로봇, 오른쪽이 사출기

    B&R CNC 와 G·M 코드

    제어기는 B&R 이었고, 모션은 CNC 기능으로 돌렸다. 작업자가 수동으로 티칭하면 G 코드 파일이 자동 생성되고, 그 파일을 열어 손으로 다듬는 방식이었다.

    티칭과 파일 수정까지는 금방 되었다. 문제는 그다음이었다. 자동으로 돌리면 알람이 났다. 세팅을 처음부터 다시 잡고서야 새벽에 겨우 자동 동작을 확인했다. CNC 기능 자체도 B&R 의 인증을 받아야 쓸 수 있어서, 그 절차부터 밟아야 했다.

    M 코드 매핑 화면
    <그림 2> M 코드와 IO 를 짝지은 화면. 노란색이 동기·비동기 M 코드다

    M 코드는 IO 하나하나에 대응시켰다. 그립, 회전, 푸시, 커팅, 크릴 브레이크, 로딩 로봇 호출까지 전부 번호를 받았다. 여기서 생산 시간을 줄일 여지를 찾았다. 동기 M 코드는 동작이 끝날 때까지 기다리지만, 비동기 M 코드는 걸어 놓고 다음 스텝으로 넘어간다. 기다려도 되는 것과 아닌 것을 갈라 놓자 사이클이 눈에 띄게 짧아졌다.

    다섯 축이 부딪힌 것들

    기계는 대개 계산대로 움직이지 않는다. 현장에서 나온 문제들이다.

    문제조치
    R 축이 180° 이상 돌지 않고
    연속 생산 시 좌표가 꼬임
    시작 시 헤드를 강제 회전시켜 R 축 좌표를 보정한 뒤 G 코드를 시작
    가감속 프로파일 미최적화구간별로 다시 잡음
    감을 때 토우가 밀림헤드 위치에 따라 푸시가 토우를 잡도록 타이밍 조정
    토우가 헤드 안으로 빨려 들어감크릴 브레이크 가운데가 뜨는 것이 원인. 고무 패드를 덧붙임
    커팅 후 토우가 구부러져
    다음 사이클에서 그리퍼가 놓침
    티칭 수정

    R 축 문제가 특히 오래 걸렸다. 해결책이 둘 있었는데 하나는 사용자가 G 코드를 나눠 넣어야 해서 불편했고, 다른 하나는 생산 시간이 늘었다. 어느 쪽도 공짜가 아니었다. 결국 시간을 조금 내주고 사용자 편의를 택했다.

    QTC 헤드와 지그
    <그림 3> 헤드 아래 지그. 공압 실린더가 토우를 눌러 준다

    제어만 하는 게 아니다

    히터도 우리 몫이었다. 에어 히터 네 개가 각 24 Ω 안팎, IR 램프가 0.6~0.9 Ω. 저항을 하나씩 재고 온도 센서를 1:1 로 대조했다. SCR 을 갈고, 히터에는 열전도 컴파운드를 발라 다시 조립했다.

    분해한 히터 부품
    <그림 4> 분해해 청소한 히터 부품

    제어기 OS 를 다시 깔고 파티션과 메모리를 재할당한 날도 있었다. IO 모듈 통신이 안 잡혀 버스 컨트롤러를 통째로 교체하기도 했다. 개발 장비의 현장이란 대개 이렇다. 코드만 붙들고 있을 수 있는 날은 많지 않다.

    마지막 며칠

    6월 말에는 항공기 제조사 시연회가 있었다. 그 준비를 하면서 학생들에게 QTC 운전 교육도 했다. 화면을 함께 고치고, 티칭부터 G·M 코드 수정까지 직접 해 보게 했다. 필요하다는 기능은 그 자리에서 넣었다.

    마지막 주에는 안전을 손봤다. 데드맨 스위치를 배선하고, 수동·자동 모드 릴레이가 서로 배타적으로 동작하도록 만들었다. 매뉴얼 모드에서는 CNC 가 한 스텝씩만 돌고, 조그는 데드맨 스위치가 눌린 상태에서만 먹는다. 사람이 장비 곁에 서 있는 한, 이런 것이 가장 중요하다.

    QTC 는 상용화되지 못했다. 그래도 나는 이 장비에서 배운 것으로 그 뒤의 일들을 했다. 5축을 한 번 제대로 다뤄 본 경험, G·M 코드를 손으로 고쳐 본 시간, 그리고 “안 되는 이유는 대개 제어가 아니라 다른 곳에 있다”는 감각.

    지금도 잘 풀리지 않는 축을 붙들고 있을 때면 그해 여름의 새벽이 떠오른다.

    미국 체류 중
    2019년, 미국에서

    로봇과 30대를 보냈다..

    QTC 앞에서
    퍼듀 Manufacturing Design Laboratory, QTC 와 함께
  • Lenze 9400 와인더

    Lenze 9400 와인더

    2020년 2~3월, 미국 현장에서 Lenze 9400 시리즈로 압연·슬리터·와인더 라인을 잡았던 기록이다. 두 번 건너갔고, 돌아와서도 원격으로 붙었다.

    축 구성과 동기

    라인은 Mill #1~#6, Pinch Roll, Slitter, Winder #1·#2 로 이어진다. 소재가 한 줄로 지나가므로 모든 축이 같은 선속도를 지켜야 한다. 하나만 어긋나도 소재가 늘어나거나 접힌다.

    동기는 기어비를 1:1 로 두고 GearElectricalShaft 의 스트레치 팩터 (C3001)로 비율을 맞췄다. 기어비에 직접 손대는 것보다 현장에서 다루기 쉽고, 마스터 RPM 과 슬레이브 RPM 의 관계를 계산식 그대로 검증할 수 있다.

    Lenze 9400 GearElectricalShaft 블록
    <그림 1> 전자 기어 블록. 분자·분모와 스트레치 팩터로 동기 비율을 잡는다

    모터 동정과 소음

    축마다 Motor DetermineParameter 를 돌려 고정자 저항, 누설·상호 인덕턴스, 회전자 시정수를 자동으로 뽑았다. 이 값이 맞아야 전류 제어가 안정된다.

    모터 등가회로 파라미터
    <그림 2> 자동 동정 결과
    CAN RPDO1 수신 오류
    <그림 3> CAN RPDO1 수신 오류

    Roll #3 에서 고주파 소음이 났다. C173 을 500 V, C174 를 350 V 로 낮추니 사라졌다. 나머지 축은 전류 게인으로 잡았다 — Roll #1 은 1.0, #5 는 1.2, #4 는 0.3 까지 내렸다. 툴이 자동 계산한 값이 늘 정답은 아니다.

    통신과 팔로잉 에러

    트리밍 모터가 CAN 알람을 냈다. 원인은 제어가 아니라 배선이었다. OUT 으로 들어간 선을 IN 으로 바꾸니 끝났다. 현장에서 반나절을 쓴 문제가 대개 이런 것이다.

    Lenze 키패드 Drive cannot follow 경고
    <그림 4> 현장에서 가장 많이 본 화면

    Drive cannot follow 는 지령을 따라가지 못한다는 뜻이다. 핀치롤에서 반복되길래 팔로우 허용 범위를 50 에서 200 으로 넓혔다. 근본 해결은 아니지만, 라인을 세우지 않고 원인을 좁혀 갈 수 있게 된다.

    와인더 텐션

    감는 일은 도는 일과 다르다. 지름이 계속 변하기 때문이다.

    n = v / (π · D) — 회전수

    M = F · D / 2 — 지령 토크

    v 는 라인 속도, D 는 롤의 현재 지름, F 는 장력이다. 소재가 감길수록 D 가 커지므로, 같은 선속도를 지키려면 회전수를 지름에 반비례해 줄여야 하고, 같은 장력을 지키려면 토크를 지름에 비례해 키워야 한다. 두 식이 서로 반대 방향으로 움직이는 셈이다.

    그래서 센터 와인더 제어의 핵심은 “지금 지름이 얼마인가” 하나로 모인다. 9400 은 라인 속도와 와인더 회전수로 D 를 실시간 역산한다. 이 값이 틀어지면 장력도 속도도 함께 틀어진다. 아래 증상들은 대부분 여기서 비롯됐다.

    증상조치
    초반에 우는 소리공칭 장력 3,000 N → 6,000 N
    중간에 멈춤라인 스피드 오프셋 50 % → 25 %
    지름 보상이 멎음Tension_Mode OFF + bEnableWinder ON
    미터 카운터 오차오차가 일정한 10 % 라 그만큼 시프트

    프릭션 보상은 속도 제어 모드에서만 동작한다. 65 단계로 보상치를 자동 계산해 커브를 만든다. 이 사실을 모르고 토크 모드에서 돌려 한참을 헤맸다. 튜닝은 라인이 서는 밤에 했다.

    마지막 며칠은 한국에서 원격으로 붙었다. 와인더 2번 지령 토크를 절반으로 낮춰 감아 보라 했더니 잘 감겼다고 했다. 현장을 떠난 뒤에도 일은 이어진다.

어제 방문자 : 3 명오늘 방문자 : 1 명전체 방문자 : 584 명