산업장비의 디지털 트윈에서 가장 먼저 정확하게 구현해야 하는 대상은 Linear Axis입니다. X축, Y축, Z축, Lift축, Gantry축처럼 직선으로 움직이는 축은 장비의 기본 운동을 구성하고 있으며, 이후 Robot, Stage, Camera, Vision 좌표계와 연결되는 출발점이 됩니다.
하지만 Linear Axis를 3D 모델이 좌우로 움직이는 단순 애니메이션으로 구현하면 실제 장비와의 정합성이 떨어집니다. 디지털 트윈에서 중요한 것은 실제 축의 Command Position과 Actual Position, Home, Limit, Stroke, 방향, Offset, Timestamp를 하나의 표준 데이터 구조로 만들고, 이 상태를 정확한 Transform으로 변환하는 것입니다.

3D 모델을 움직이기 전에 Axis 자체를 소프트웨어 객체로 정의해야 합니다. 대표적으로 AxisId, Name, CommandPosition, ActualPosition, Velocity, Acceleration, Torque, ServoOn, Alarm, HomeSensor, PositiveLimit, NegativeLimit, Timestamp 등을 포함할 수 있습니다.
이렇게 해야 같은 Axis 데이터를 3D View, Trend, Alarm, Logger, Replay, AI가 함께 사용할 수 있습니다.
Command Position은 제어기가 축에 요구한 목표 위치이고, Actual Position은 Encoder 또는 Controller가 보고하는 실제 위치입니다.
두 값이 같아 보이더라도 가감속, 부하, 기구 백래시, Servo Gain, Slip 등의 영향으로 순간적인 편차가 발생할 수 있습니다. 디지털 트윈은 이 차이를 숨기는 것이 아니라 관찰할 수 있어야 합니다.
권장 방법은 Actual Position으로 실제 3D Model을 움직이고, Command Position은 반투명 Ghost 또는 별도 Guideline으로 표시하는 것입니다.
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을 포함하여 변환해야 합니다.
기계적으로 움직일 수 있는 최대 범위와 실제 운전에서 허용하는 Software Stroke는 다를 수 있습니다.
따라서 Mechanical Min/Max, Software Min/Max, Home, Positive Limit, Negative Limit를 별도로 관리해야 합니다. 디지털 트윈에서는 축이 허용 범위를 벗어나는 경우 색상이나 Alarm Indicator로 즉시 표시할 수 있습니다.
Linear Axis의 이동은 기본적으로 Translation입니다. X축이라면 X 방향, Y축이라면 Y 방향, Z축이라면 Z 방향으로 Parent Node의 Transform을 변경합니다.
하지만 장비마다 CAD 좌표축 방향과 실제 운동축 방향이 다를 수 있으므로 축별로 Direction Vector를 정의하는 것이 좋습니다. 예를 들어 X축이라 하더라도 CAD에서는 -X 방향일 수 있습니다.
X축 위에 Y축이 올라가고 Y축 위에 Z축이 올라가는 Gantry 구조라면 X축이 이동할 때 Y축·Z축·Camera도 함께 이동해야 합니다.
따라서 Linear Axis 구현은 단독 Transform이 아니라 Assembly Tree의 Parent–Child 구조와 반드시 연동해야 합니다. 이 구조가 맞지 않으면 실제 장비와 화면의 기구학 관계가 달라집니다.
Servo Controller는 1 ms 이하로 동작할 수 있지만 WPF 화면이 같은 주기로 갱신될 필요는 없습니다. 일반적인 시각화에서는 30~60 FPS 정도로도 충분한 경우가 많습니다.
제어 데이터 수집 Thread와 UI Rendering Thread를 분리하고, UI는 최신 상태를 일정 주기로 가져오는 구조가 안전합니다.
이렇게 해야 UI 부하가 Motion Control의 안정성에 영향을 주지 않습니다.
Axis 데이터에는 Timestamp가 반드시 포함되어야 합니다. Position, Velocity, Torque, Servo State, Limit State를 시간축으로 저장하면 나중에 장애 발생 시 실제 동작을 재생할 수 있습니다.
Replay Mode에서는 Live Provider 대신 Replay Provider가 같은 Axis Model에 값을 공급하도록 구성하면 기존 WPF 화면을 그대로 사용할 수 있습니다.
장기간 데이터를 축적하면 특정 축의 Command–Actual 편차, Move Time, Settling Time, Torque가 조금씩 증가하는 패턴을 확인할 수 있습니다.
이 데이터를 활용하면 Linear Guide 마모, Ball Screw 상태, Servo 이상, 기구 저항 증가 등의 징후를 사전에 감지하는 예지보전 기능으로 발전시킬 수 있습니다.
Linear Axis의 품질평가에서는 실제 축 위치와 디지털 트윈 위치 차이, 방향 반전 여부, Home Offset, Limit 위치, 화면 반영 Latency, Replay 정확성, 통신 단절 복구, 장시간 Memory 안정성을 확인해야 합니다.
일정은 개발 → 자체 검증 → 품질평가 → 수정·보완 → 재평가 → Release로 계획하는 것이 좋습니다.
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
'경제' 카테고리의 다른 글
| WPF 디지털 트윈 연재 09 - Machine·Stage·Robot·Camera·Wafer/Tray 좌표계 설계 (0) | 2026.10.13 |
|---|---|
| WPF 디지털 트윈 연재 08 - Assembly Tree와 Parent–Child 구조 설계 (0) | 2026.10.13 |
| WPF 디지털 트윈 연재 07 - STEP·STL·OBJ·glTF·GLB 파일 형식 비교와 선택 전략 (0) | 2026.10.13 |
| WPF 디지털 트윈 연재 06 - CAD 데이터와 디지털 트윈용 3D 모델 경량화 전략 (0) | 2026.10.13 |
| WPF 디지털 트윈 연재 05 - 기계설계팀에서 받아야 할 디지털 트윈 데이터 (0) | 2026.10.13 |