본문 바로가기
경제

WPF 디지털 트윈 연재 10 - Linear Axis를 WPF 디지털 트윈에서 구현하는 방법

by 프레스러쉬 2026. 10. 13.
[10편] Linear Axis를 WPF 디지털 트윈에서 구현하는 방법
Command / Actual Position부터 Stroke·Home·Limit·Replay까지

산업장비의 디지털 트윈에서 가장 먼저 정확하게 구현해야 하는 대상은 Linear Axis입니다. X축, Y축, Z축, Lift축, Gantry축처럼 직선으로 움직이는 축은 장비의 기본 운동을 구성하고 있으며, 이후 Robot, Stage, Camera, Vision 좌표계와 연결되는 출발점이 됩니다.

하지만 Linear Axis를 3D 모델이 좌우로 움직이는 단순 애니메이션으로 구현하면 실제 장비와의 정합성이 떨어집니다. 디지털 트윈에서 중요한 것은 실제 축의 Command Position과 Actual Position, Home, Limit, Stroke, 방향, Offset, Timestamp를 하나의 표준 데이터 구조로 만들고, 이 상태를 정확한 Transform으로 변환하는 것입니다.

■ 1. Linear Axis는 먼저 ‘데이터 객체’로 정의해야 한다

3D 모델을 움직이기 전에 Axis 자체를 소프트웨어 객체로 정의해야 합니다. 대표적으로 AxisId, Name, CommandPosition, ActualPosition, Velocity, Acceleration, Torque, ServoOn, Alarm, HomeSensor, PositiveLimit, NegativeLimit, Timestamp 등을 포함할 수 있습니다.

이렇게 해야 같은 Axis 데이터를 3D View, Trend, Alarm, Logger, Replay, AI가 함께 사용할 수 있습니다.

■ 2. Command Position과 Actual Position을 반드시 구분한다

Command Position은 제어기가 축에 요구한 목표 위치이고, Actual Position은 Encoder 또는 Controller가 보고하는 실제 위치입니다.

두 값이 같아 보이더라도 가감속, 부하, 기구 백래시, Servo Gain, Slip 등의 영향으로 순간적인 편차가 발생할 수 있습니다. 디지털 트윈은 이 차이를 숨기는 것이 아니라 관찰할 수 있어야 합니다.

권장 방법은 Actual Position으로 실제 3D Model을 움직이고, Command Position은 반투명 Ghost 또는 별도 Guideline으로 표시하는 것입니다.

■ 3. Scale·Offset·Direction을 표준화한다

Controller의 Position 값이 곧바로 WPF 3D 좌표와 일치하는 것은 아닙니다. 단위가 pulse일 수도 있고 mm일 수도 있으며, CAD 좌표 방향과 실제 Motor 방향이 반대일 수도 있습니다.

따라서 Transform Mapping 계층에서 Scale, Offset, Axis Direction, Home Offset을 관리해야 합니다.

예를 들어 실제 축 위치가 100 mm이고 CAD 기준 Home 위치가 250 mm라면 화면상 위치는 단순히 100이 아니라 CAD 기준 좌표계에 맞게 Offset을 포함하여 변환해야 합니다.

■ 4. Mechanical Stroke와 Software Stroke를 나눈다

기계적으로 움직일 수 있는 최대 범위와 실제 운전에서 허용하는 Software Stroke는 다를 수 있습니다.

따라서 Mechanical Min/Max, Software Min/Max, Home, Positive Limit, Negative Limit를 별도로 관리해야 합니다. 디지털 트윈에서는 축이 허용 범위를 벗어나는 경우 색상이나 Alarm Indicator로 즉시 표시할 수 있습니다.

■ 5. WPF에서는 TranslateTransform3D로 실제 이동을 표현한다

Linear Axis의 이동은 기본적으로 Translation입니다. X축이라면 X 방향, Y축이라면 Y 방향, Z축이라면 Z 방향으로 Parent Node의 Transform을 변경합니다.

하지만 장비마다 CAD 좌표축 방향과 실제 운동축 방향이 다를 수 있으므로 축별로 Direction Vector를 정의하는 것이 좋습니다. 예를 들어 X축이라 하더라도 CAD에서는 -X 방향일 수 있습니다.

■ 6. Parent–Child 구조와 함께 움직여야 한다

X축 위에 Y축이 올라가고 Y축 위에 Z축이 올라가는 Gantry 구조라면 X축이 이동할 때 Y축·Z축·Camera도 함께 이동해야 합니다.

따라서 Linear Axis 구현은 단독 Transform이 아니라 Assembly Tree의 Parent–Child 구조와 반드시 연동해야 합니다. 이 구조가 맞지 않으면 실제 장비와 화면의 기구학 관계가 달라집니다.

■ 7. 실시간성은 ‘제어주기’와 ‘화면주기’를 분리한다

Servo Controller는 1 ms 이하로 동작할 수 있지만 WPF 화면이 같은 주기로 갱신될 필요는 없습니다. 일반적인 시각화에서는 30~60 FPS 정도로도 충분한 경우가 많습니다.

제어 데이터 수집 Thread와 UI Rendering Thread를 분리하고, UI는 최신 상태를 일정 주기로 가져오는 구조가 안전합니다.

이렇게 해야 UI 부하가 Motion Control의 안정성에 영향을 주지 않습니다.

■ 8. Logging과 Replay를 처음부터 연결한다

Axis 데이터에는 Timestamp가 반드시 포함되어야 합니다. Position, Velocity, Torque, Servo State, Limit State를 시간축으로 저장하면 나중에 장애 발생 시 실제 동작을 재생할 수 있습니다.

Replay Mode에서는 Live Provider 대신 Replay Provider가 같은 Axis Model에 값을 공급하도록 구성하면 기존 WPF 화면을 그대로 사용할 수 있습니다.

■ 9. Command–Actual 편차는 향후 AI 분석 데이터가 된다

장기간 데이터를 축적하면 특정 축의 Command–Actual 편차, Move Time, Settling Time, Torque가 조금씩 증가하는 패턴을 확인할 수 있습니다.

이 데이터를 활용하면 Linear Guide 마모, Ball Screw 상태, Servo 이상, 기구 저항 증가 등의 징후를 사전에 감지하는 예지보전 기능으로 발전시킬 수 있습니다.

■ 10. 품질평가는 위치 정확도뿐 아니라 ‘동기화 품질’을 본다

Linear Axis의 품질평가에서는 실제 축 위치와 디지털 트윈 위치 차이, 방향 반전 여부, Home Offset, Limit 위치, 화면 반영 Latency, Replay 정확성, 통신 단절 복구, 장시간 Memory 안정성을 확인해야 합니다.

일정은 개발 → 자체 검증 → 품질평가 → 수정·보완 → 재평가 → Release로 계획하는 것이 좋습니다.

■ 10편 핵심 정리

Linear Axis 구현의 핵심은 3D 모델을 움직이는 데 있지 않습니다.

실제 장비의 Command·Actual Position, Stroke, Home, Limit, Direction, Offset, Timestamp를 표준화된 Axis Model로 만들고, 이를 정확한 Transform으로 연결하는 것이 핵심입니다.

이 구조가 만들어지면 이후 Rotary Axis, Robot Joint, Replay, 이상감지, 예지보전으로 자연스럽게 확장할 수 있습니다.

다음 편 예고
11편에서는 Rotary Axis를 다룹니다. 회전 중심 Pivot, CW/CCW 방향, Degree/Radian 변환, 0°/360° Wrap-around, Stage θ축과 Robot Joint를 WPF 3D Transform에 정확히 연결하는 방법을 살펴봅니다.
태그
#DigitalTwin #WPF #LinearAxis #MotionControl #CSharp #MVVM #TranslateTransform3D #PLC #Servo #AxisControl #Logging #Replay #PredictiveMaintenance #MachineAutomation #반도체장비 #산업자동화 #SmartManufacturing #RND