실습 장비



Motion System 이론
Xmotion Servo 개요

CPUZ 모션 컨트롤러 특성
- 시퀀스 제어 + 모션 제어 + OT 네트워크 서비스 + IT 네트워크 서비스를 동시에 제공하는 All-in-One 제어기
- 최대 32축 서보 동기 제어
- 멀티코어 프로세서 채용으로 동시 병렬처리 실행
- 통신 서비스 등 부하 증가되어도 제어 성능 영향은 최소화
XGI - CPUZ 작업 스케줄링 개요

핵심 개념
선점형 멀티태스킹
- High Priority 태스크가 실행되면, Low Priority 태스크는 즉시 중단되고 High Priority 태스크가 우선 실행된다.
태스크 간 분리 실행
- 각 태스크는 독립적으로 실행되며, 상호 간섭 없이 스케줄링된다.
멀티코어 프로세서
- 그림과 같이 Core#1과 Core#2가 병렬적으로 작업을 처리한다.
병렬 처리
- Core#2는 통신 서비스 및 기타 작업들을 병렬로 계속 실행하며, Core#1은 제어 태스크(주기/우선순위)에 집중한다.
고장 시 대체 실행 가능
- 하나의 태스크가 중단되더라도 다른 태스크는 영향을 받지 않고 실행될 수 있다.
태스크 우선순위
High Priority Task (예 : 모션 제어, I/O 제어 등)
- I/O refresh 및 PriTask는 고우선 태스크로 분류되며 반드시 시간 안에 완료되어야 하는 작업이다.
Low Priority Task (예 : 주기적 계산, 연산 등)
- CycTask는 저우선순위 태스크로 고우선 태스크 실행에 의해 선점될 수 있다.
주의사항
고우선 태스크가 과도하게 실행되면 주기 태스크(CycTask)가 계속 밀려나 실행되지 않는 문제가 발생할 수 있다. 이는 주기 연산 누락 등의 문제로 이어질 수 있다.
따라서 태스크를 작성할 때 아래의 사항들을 고려해야 한다.
- 고우선 태스크(PriTask)에 반드시 필요한 핵심 제어만 넣는다.
- 저우선 태스크(CycTask)는 계산, 모니터링, 로깅 등 비결정성 작업을 중심으로 작성한다.
- 전체 스케줄을 설계할 때 각 태스크의 소요 시간과 주기를 사전에 충분히 분석한다.
EtherCAT
2003년 독일 Bechhoff 社에서 개발된 실시간 이더넷 기반의 필드버스 프로토콜이다.
주요 특징
1. Ethernet 기반 통신
- 기존 Ethernet 계층 위에 구성되며, 범용 네트워크 장비 사용 가능
2. 고성능 및 실시간 통신
- 마스터에서 보내는 하나의 프레임 안에 모든 노드가 데이터를 실시간으로 읽고 쓴다.
3. 다양한 토폴로지 제공
- 물리적인 링 토폴로지 등을 사용하여 여러 장치 간에 효율적으로 데이터를 전송 Line, Ring, Star, Tree 등 자유로운 네트워크 구성
4. 데이터 전송방식 (On-the-Fly 처리)
- Master/Slave 구조를 가지며, 마스터가 슬레이브로 데이터를 송신하고, 슬레이브가 실시간으로 처리하고 응답
- 노드에서 프레임을 멈추지 않고 지나가는 중간에 데이터를 읽고 쓴다.
5. 개방성/호환성/유연성/증설용이성
- Open Protocol로 많은 제조업체에서 지원하고 있으며, 따라서 시스템의 유연성이 높음
EtherCAT 프레임 처리 방식 (On-the-Fly)
EtherCAT의 중요한 통신 원리는 각 노드에 프레임이 이동하는 동안 자신에게 전달된 데이터를 읽고, 동시에 자신의 데이터를 모두 프레임에 기록한다는 점이다.
- 스위치나 허브 없이 사용이 가능해지며, 대역폭 사용량을 높일 수 있다.
- 한 사이클 주기에 약 한 프레임으로 충분한 통신을 할 수 있다.
- 각 슬레이브가 프레임을 통과시킬 때 실시간으로 데이터를 교환한다. 이로 인해 일반 Ethernet보다 더 빠르고 정확한 제어가 가능하다.
ESI 파일
- ESI (EtherCAT Slave Information) 파일은 EtherCAT 슬레이브의 동작 정보(XML 기반)를 담고 있는 파일이다.
- 제조사에서 제공하며 슬레이브의 동작 모드, 프로토콜, 통신 방식, 맵핑 정보 등이 포함되어 있다.
- XMC, XGI-CPUZ, XGF-XM32E와 같은 모션 컨트롤러 제품 사용 시 C 드라이브 > XG5000 > EtherCATXML에서 ESI 파일 정보를 불러온다.
CoE (CANopen over EtherCAT)
EtherCAT은 CANopen 프로토콜을 기반으로 슬레이브와 통신하는 구조를 지원한다.
슬레이브 내부 데이터는 Object Dictionary로 구성되며 두 가지 방식으로 통신한다.
| 서비스 종류 | 통신 시점 | 내용 |
| PDO (Process Data Object) | 주기적으로 사용하는 실시간 데이터 통신 (동기적, 주태스크 주기) | 서보드라이브 위치 제어 데이터, 입출력 데이터 등 |
| SDO (Service Data Object) | 이벤트 발생 시 설정값 전송/수신 (비동기적) | 서보 파라미터 읽기/쓰기, 서보 정보 읽기 등 |
PDO (Process Data Object)
주기적으로 통신하며 서보의 위치, 속도, 상태값 등을 빠르게 전달한다.
- 슬레이브에서 모션 컨트롤러로 전송 : TxPDO (서보 드라이브 기준 Transfer)
- 모션 컨트롤러에서 슬레이브로 전송 : RxPDO (서보 드라이브 기준 Receive)


SDO (Service Data Object)
이벤트가 발생했을 때(설정 변경 또는 진단이 필요할 때) 비주기적으로 데이터 읽기/쓰기
ex) 모터 파라미터, 설정값 등등
설정 방법
- 온라인 > EtherCAT 슬레이브 > SDO 파라미터 쓰기/읽기
- PLC 프로그램 > SDO 파라미터 쓰기/읽기 명령어 or 펑션 블록 실행


서보 제어 모드
위치 제어 모드 (CSP : Cycllic Synchronous Position Mode)
- 상위 제어기(PLC 등)에서 목표 위치값(0x607A) 을 PDO로 주기적으로 전송하고, 슬레이브 서보 드라이브는 이 값을 받아 정밀한 위치 제어를 수행한다.
속도 제어 모드 (CSV: Cyclic Synchronous Velocity Mode)
- 상위 제어기에서 목표 속도값(0x60FF) 을 주기적으로 송신하여 서보 드라이브는 이 값을 따라 회전 속도를 제어한다.
토크 제어 모드 (CST: Cyclic Synchronous Torque Mode)
- 상위 제어기에서 목표 토크값(0x6071) 을 주기적으로 전달하며, 드라이브는 이를 기반으로 모터에 필요한 힘(토크)을 직접 제어한다.
PLCopen
IEC 61131-3 표준 기반의 산업용 제어 시스템(PLC) 프로그래밍의 국제 표준을 정립하고 보급하기 위한 비영리 국제 조직이다.
주로 Motion Control, 기능 안전 제어, OPC UA 기반 통신 등에서 제어를 위한 표준 FB를 정의한다.
다양한 벤더(LS, Mitubishi, Semens 등)의 PLC에서 동일한 방식으로 모션 제어를 하기 위한 표준이다.
PLCopen 축 상태 (Single Axis State)

| 상태 이름 (state) | 설명 |
| Disabled | - 모터가 꺼져 있고 제어 명령을 받을 수 없는 상태 - 일반적으로 전원이 꺼졌거나, 초기화되지 않았거나, 에러가 발생해 Reset이 필요한 상태 |
| Standstill | - 서보가 ON(Power Enable)된 상태이며, 축은 정지 중 - 현재 위치를 유지하며, 새로운 명령(예: Homing, Move, Gear 등)을 기다린다. |
| Homing | - 축이 원점복귀 중인 상태 - 센서 또는 기준 신호를 통해 기준 위치(Zero Point)를 설정하는 초기화 단계 - 완료되면 Standstill 상태로 전환 |
| Discrete Motion | - 절대 위치나 상대 위치로 단일 이동(PTP, Point to Point) 중인 상태 - 명령에 의해 특정 위치로 정확하게 이동 |
| Continuous Motion | - 속도 기반 연속 이동 상태 - 목표 위치 없이 정해진 속도로 계속 이동하는 동작 |
| Synchronized Motion | - 마스터 축과의 동기화 제어 중인 상태 - Gearing, Cam 등 마스터의 움직임을 따라가는 종속 제어 방식 |
| Stopping | - 이동 중인 축이 정지 중인 상태 - MC_Stop 명령에 따라 감속 정지하거나 즉시 정지 중 상태로 진입 |
| ErrorStop | - 제어 중 에러나 예외가 발생해 축이 정지된 상태 - 비정상적인 입력, 센서 고장, 하드웨어 이상 등으로 인해 진입하며, 오류 해제가 필요하다. |
PLCopen 축 그룹 상태 (Axis Group State)

| 상태 이름 (Group State) | 설명 |
| GroupDisabled | - 그룹에 속한 모든 축이 비활성화된 상태 - 제어 불가능하며, MC 명령을 실행할 수 없다. - 전원이 꺼져 있거나 에러 발생 후 Reset 전 상태 |
| GroupStandby | - 그룹 내 모든 축이 Power Enable된 상태 - 명령 대기 상태이며, 이동/원점복귀/기어링 등의 명령을 받을 준비가 되어 있다. |
| GroupHoming | - 그룹 내 각 축에 대해 원점 복귀(Homing)를 동시에 수행 중이다. - 각 축이 개별적으로 원점 복귀를 완료하면 GroupStandby 상태로 전환된다. |
| GroupMoving | - 그룹에 포함된 축들이 보간 이동, 속도 제어, 동기화 제어(Gear/Cam) 등의 동작을 수행 중이다. - MC_GroupMove 계열 명령이 실행 중인 상태 |
| GroupStopping | - 그룹에 대한 MC_GroupStop 또는 MC_GroupHalt 명령이 실행된 상태 - 모든 축이 감속 정지 중이며, 정지 완료 후 GroupStandby 상태로 전환 |
| GroupErrorStop | - 그룹 내 하나 이상의 축에서 에러가 발생한 상태 - 이 상태에서는 어떤 그룹 명령도 실행되지 않으며, Reset을 통해 해제해야 한다. |
축 제어 FB


축그룹 제어 FB

Xmotion 설정
기본 설정
슬레이브 자동 연결하기 (온라인 > EtherCAT 슬레이브 > 자동 연결)
축/슬레이브 연결

- SDO 파라미터 읽기 (슬레이브에 저장된 파라미터 읽기)
- SDO 파라미터 쓰기 (XG5000에 저장된 파라미터를 슬레이브에 전송하는 기능 - 자동으로 EEPROM 저장 실행)
- SDO 파라미터 저장 (파라미터 쓰기 후 슬레이브의 EEPROM에 저장하여 전원 On/Off 시 데이터 유지)
축 파라미터 설정

가지고 있는 서보의 스펙을 기입하면 된다.
역회전 동작 모드 같은 경우 0이 감속 정지, 1이 즉시 정지이다.

슬레이브 SDO 파라미터 설정

실습
1. 상태 정보 읽기

- 첫 번째 ECAT_MasterDataRead 인스턴스에서 0번째 Index이므로 _ECAT_Master의 상태 정보를 읽어온다.
- 두 번째 Axis_DataRead 인스턴스에서 1번째 Index이므로 _MC_Axis의 1축의 정보를 읽어온다.
- 세 번째 위와 동일하며 2번째 축의 정보를 읽어온다.
2. 서보 드라이브 통신 연결
EtherCAT Master 상태정보
- _ECAT_Master 상태 정보 확인
- _ECAT_Master 구조체


위와 같이 상태 정보를 사용해서 EtherCAT 통신 연결 및 연결 해제를 구현하였다.

3. 서보 온/오프
축 상태정보
- 축 제어 동작 관련 운전 정보 확인
- _MC_Axis 구조체


각 축마다 RDY(축 준비)가 되었을 때 Servo ON 시키기

4. 조그 운전
Direction
- 0 : 정방향
- 1 : 역방향
Low_High
- 0 : 저속 운전
- 1 : 고속 운전

토글 스위치로 Direction에 0, 1로 정 역 변경
5. 원점 복귀
Homing 방법 : 28번 사용
역방향으로 운전하면서 원점 스위치(Home)에 의해 원점으로 복귀한다. 원점 복귀 중 역방향 리미트 스위치(NOT)가 입력되면 방향 전환을 한다.

Homing 동작 순서
1. 초기 상태
- 모터는 어떤 위치에 있는지 모르는 상태이다.
- 원점(Home)을 찾기 위해 역방향(CW)으로 이동을 시작한다.
2. 역방향으로 이동하며 Home Switch 탐색
- 모터는 switch 탐색 속도로 역방향으로 움직이기 시작한다.
- 이때 Home 스위치가 ON 될 때까지 계속 진행한다.
3. 문제 상황
- 만약 Home Switch를 못 찾고 NOT에 걸릴 경우
- 원점 스위치보다 더 바깥쪽에 있었거나, 고장 등의 이유로 HOME을 못 찾는 경우
- NOT가 ON 되면 모터는 방향을 전환하여 정방향(CCW)으로 다시 탐색을 시작한다. 이때 Home Switch를 찾으면 성공이다.
4. Home Switch 감지 성공 시
- Home Switch에 도달하면 탐색 성공이다.
- 이후, 설정된 거리만큼 더 이동해 정확한 제로 위치를 잡기 위해 이동한다.
5. 정확한 원점(Zero) 위치에 도달
- 최종적으로 위치 제로로 설정된다.
- 모터의 내부 좌표계가 0으로 초기화된다.

6. 에러 리셋
1번 축, 2번 축, 공통으로 발생한 에러를 리셋한다.

7. STOP vs HALT
- STOP : 즉시 정지
- HALT : 정지

Deceleration
- 속도가 줄어드는 비율 : 단위 시간당 얼마나 빨리 속도를 줄일지
- 단위 : unit/sec² (속도 변화율)
- 사다리꼴 속도 프로파일에서의 기울기
Jerk
- 가속도(감속도)의 변화율 : 얼마나 부드럽게 가속도/감속도를 적용할 것인지
- 단위 : unit/sec³
- S-커브 프로파일에서 사용되며 감속이 급격하게 시작하지 않고 천천히 시작했다가 천천히 끝나는 구조
- 기계 충격을 완화하는 역할을 한다.
BufferMode (HALT)
- Motion 명령 큐에서 이전 명령을 어떻게 처리할지를 제어하는 파라미터
- 새로운 명령이 들어왔을 때
- 기존 명령을 끊고 지금 바로 실행할지, 기존 명령이 끝날 때까지 기다릴지, 부드럽게 이어서 실행할지 등을 제어


8. 절대 위치 제어

MC_MoveAbsolute 파라미터
| 항목 | 타입 | 설명 |
| Execute | BOOL | 상승 Edge에서 명령 실행 시작 |
| Axis | UINT | 제어 대상 축 번호 |
| ContinuousUpdate | BOOL | 이동 중 위치를 변경 가능 여부 (TRUE면 이동 중에도 목표 위치 갱신 가능) |
| Position | LREAL | 목표 위치 (절대 좌표 기준) |
| Velocity | LREAL | 이동 속도 |
| Acceleration | LREAL | 가속도 (속도가 얼마나 빨리 증가할지) |
| Deceleration | LREAL | 감속도 (속도를 얼마나 빨리 줄일지) |
| Jerk | LREAL | 가속도/감속도의 변화율 (0일 경우 S-curve 미사용, linear profile 사용) |
| Direction | UINT | 이동 방향 지정 (0 = 자동 결정, 1 = 정방향, 2 = 역방향 등) |
| BufferMode | UINT | 버퍼링 방식 (이전 모션 명령과의 연결 방식 지정) |
MC_MoveAbsolute의 상태 출력 파형

1. Execute
- 명령을 실행시키는 입력 신호
- 상승 Edge(0 → 1)에서 명령이 유효
- 명령 재실행 시에는 반드시 0 → 1의 Edge를 다시 줘야 한다.
2. Busy
- 명령이 진행 중일 때 TRUE
- Execute가 들어간 후 → Done 또는 Error가 될 때까지 유지
3. Active
- 명령이 실제 움직이는 중일 때 TRUE
- 명령이 시작되고 모션이 실제로 진행되면 활성화
4. Done
- 명령이 정상적으로 완료되었을 때 1 사이클 TRUE
- 이후 자동으로 FALSE로 복귀됨
5. Error
- 명령 수행 중 오류 발생 시 TRUE
- ErrorID에 상세 에러 코드 출력됨
6. CommandAborted
- 현재 명령이 외부 명령에 의해 중단된 경우 TRUE
- 예: MC_Stop, MC_Reset 등으로 중단 시 발생

1축과 2축을 25mm/s의 속도로 50mm까지 절대 위치 제어 운전이 이루어지도록 한다.
9. 상대 위치 제어

절대 위치 제어와 파라미터들은 비슷하다.
하지만 절대 위치 제어는 Position(절대값)을 사용하고 상대 위치 제어에서는 Distance(상대 거리)를 사용한다는 차이가 있으며 이동 기준 좌표계가 다르다.

1축과 2축을 25mm/s의 속도로 50mm씩 증가하는 위치로 상대 위치 제어 운전이 이루어지도록 한다.
10. 동기 운전
하나의 마스터 축(주축)의 움직임에 따라, 슬레이브 축(종축)을 기어비 비율로 자동으로 따라가게 만드는 제어 방식이다.
- 마치 실제 기계 기어처럼, 두 축이 기계적으로 연결된 것처럼 동기화되어 움직임
- 마스터 축이 회전하거나 이동할 때, 슬레이브도 같은 속도 또는 일정 배수/비율로 회전/이동
사용 목적
- 다축 동기 제어 (예: 라벨링기, 절단기, 자동 공급기)
- 마스터-슬레이브 위치 관계 유지
- 기계적 기어를 전자적으로 대체하여 유연성 향상

MC_GearIN 파라미터
| 항목 | 설명 |
| Master | 마스터 축 번호 (기준축) |
| Slave | 슬레이브 축 번호 (따라가는 축) |
| RatioNumerator / RatioDenominator | 기어비 설정 (슬레이브 속도 = 마스터 속도 × (분자/분모)) |
| MasterValueSource | 동기 기준값 선택 (0=명령 위치, 1=현재 위치) |
| Acceleration / Deceleration / Jerk | 슬레이브가 동기상태로 진입할 때 적용할 가감속, S-커브 설정 |
| BufferMode | 버퍼링 처리 방식 |

MC_GearIN 파라미터 분석
| 파라미터 | 값 | 의미 |
| Master, Slave | 해당 축 번호 | 예: 축 1, 축 2 |
| ContinuousUpdate | 0 | 실행 중 비율 갱신 없음 |
| RatioNumerator | 2 | 기어비 분자 (슬레이브: 2) |
| RatioDenominator | 1 | 기어비 분모 (마스터: 1) |
| MasterValueSource | 0 | 명령 위치 기준으로 동기화 |
| Acceleration / Deceleration | 25 | 동기 진입 시 가속도/감속도 |
| Jerk | 0 | 급변 없음 (S커브 미사용) |
| BufferMode | 0 | 즉시 실행 (이전 명령 무시) |
RatioNumerator, RatioDenominator 값의 비율로 동기 운전이 이루어지도록 한다. 즉, 종축은 주축의 2배의 비율로 동기 운전을 한다.
11. 축 그룹
축 그룹 설정

실습의 축은 2개이므로 1축과 2축을 그룹 1번에 구성하였다.
축 그룹 상태 읽기
READ_PLC_INFO 펑션에서 기존과 다르게 축 그룹을 ReadData에 넣어야 한다.


12. 축 그룹 활성화
축 그룹을 사용하기 전 활성화해줘야 한다.

13. 축 그룹 원점 복귀
여러 축(Axis)을 하나의 그룹으로 묶은 상태에서, 해당 그룹 전체에 대해 동시 원점 복귀를 수행하는 기능이다.
- 예를 들어, X축, Y축, Z축이 하나의 가공기계 축 그룹이라면 Group Homing으로 동시에 Homing을 수행
- 개별 축마다 MC_Home을 따로 수행하지 않아도 됨
- 모든 축이 원점 센서(Home switch) 를 기준으로 각자 원점 복귀


Position에는 LREAL 형태의 배열을 넣어야 한다. 따라서 0~9까지 LREAL 변수 Array를 넣어준다.

14. 축 그룹 에러 리셋
축 그룹에 발생한 에러를 리셋한다.

15. 직선 보간 제어
복수의 축을 동시에 제어하여 공간 상에서 직선 경로를 따라 이동하도록 만드는 제어 방식이다.
- 축 그룹에 설정된 축들의 시작 위치에서 위치까지 복수개의 축에 대해서 직선의 궤적으로 보간 제어 실행
- 최대 10축 직선 보간 가능
| 명령어 | 기능 설명 |
| MC_MoveLinearAbsolute | 절대 위치 기준 직선 보간 제어 |
| MC_MoveLinearRelative | 상대 위치 기준 직선 보간 제어 |

직선 보간 실행 예
시작 위치: (1000.0, 4000.0)
위치: (10000.0, 1000.0)
속도: 10000.0

1. 상단 그래프
- 가로축: 축1(X축)의 위치 (1000 → 10000, 총 9000mm 이동)
- 세로축: 축2(Y축)의 위치 (4000 → 1000, 총 -3000mm 이동)
- 검은 선: 두 축이 동시에 이동하여 그리는 직선 경로
X축은 정방향 이동 (증가), Y축은 역방향 이동 (감소)
이 이동은 동기화되어야 하므로, 각 축 속도를 계산하여 같은 시간에 도달하게 해야 한다.
2. 보간 속도 그래프 (전체 거리 기준 속도)
- 최대 보간 속도 : 10000 mm/s
- 구간 : 가속 > 등속 > 감속
- 전체 이동 거리 √(9000² + 3000²) ≈ 9486.8 mm를 기준으로 설정된 속도
3. 축별 속도 그래프
축 1 속도
- 최대 속도: 약 9486.8 mm/s
- 전체 속도의 x축 이동 비율만큼 (9000 / 9486.8 ≈ 0.9487) 계산된 수치이다.
- 속도 형태: 가속 → 등속 → 감속 (트라페 zoidal)
축 2 속도
- 최대 속도: 약 -3162.2 mm/s (음수, 역방향 이동)
- 보간 속도의 y축 비율만큼 (-3000 / 9486.8 ≈ -0.3162)
- 특징: 축 2는 반대로 이동하므로 음수이고 속도 곡선은 축 1과 같은 시간에 맞춰 같은 형태로 진행된다.
위 직선 보간 예시를 통해 얻을 수 있는 중요한 이해
| 구분 | 의미 | 특징 |
| 보간 경로 | 직선(9000, -3000) | 두 축이 정확히 동기화 |
| 속도 계산 | 보간 속도 기준 → 축별 속도 분해 | 피타고라스 거리 기준 |
| 신호 변화 | Execute → Busy/Active → Done | 명령 실행부터 완료까지 신호 흐름을 시각화 |
| 전체 흐름 | 부드러운 가감속 동작 | 트라페zoidal 속도 프로파일 |

직선 보간 제어 실습 영상
부록
서보 트레이스
