728x90
C#으로 G코드 전송하고 실시간 위치 제어까지!
3D 프린터를 디지털 트윈 환경에서 제어하거나 모니터링하려면, 프린터와의 실시간 통신과 상태 업데이트 체계가 필수입니다.
본 사례에서는 Visual Studio + C# 환경에서 시리얼 통신을 설정하고, G-code 명령어를 전송해 프린터를 직접 제어하는 구조를 소개합니다.

✅ 프로젝트 개요
| 항목 | 내용 |
| 대상 장비 | FDM 방식 3D 프린터 (Marlin 펌웨어 기준) |
| 통신 방식 | Serial (USB/COM 포트) |
| 개발 환경 | Visual Studio 2022+, C# .NET 6 |
| 제어 명령 | G-code (온도 설정, XY 이동, 홈 복귀 등) |
| 활용 목적 | 디지털 트윈 기반 원격 제어, 프린터 상태 실시간 반영 |
1. 시리얼 통신 연결 설정 (C#)
using System.IO.Ports;
SerialPort serial = new SerialPort("COM3", 115200); // 포트 & 속도 설정
serial.Open();
serial.WriteLine("M115"); // 펌웨어 정보 요청 G코드 전송
📌 Tip: 3D 프린터 대부분은 115200 또는 250000 bps 속도를 사용하며, Arduino 기반이면 COM 포트 자동 설정 로직을 넣는 것이 좋습니다.
2. 기본 G-code 명령어 예제
| 명령 | 기능 | 예시 |
| M105 | 현재 온도 요청 | M105 |
| M104 S200 | 노즐 온도 설정 | M104 S200 (200도) |
| G28 | 홈 위치 이동 | G28 |
| G1 X50 Y50 F3000 | X,Y 위치 이동 | X=50, Y=50으로 이동 |
| M140 S60 | 히팅 배드 온도 설정 | M140 S60 |
3. 실시간 위치 제어 예제
void MoveToPosition(float x, float y, int speed = 3000)
{
string gcode = $"G1 X{x} Y{y} F{speed}";
serial.WriteLine(gcode);
}
📌 실무 팁:
- 프린터는 명령 처리 후 ok 응답을 반환함 → 응답을 기다리는 로직 필요
- G-code 전송 후 딜레이(Thread.Sleep) 또는 수신 확인 필요
4. 프린터 상태 모니터링 구조
serial.WriteLine("M105"); // 현재 온도 요청
string response = serial.ReadLine();
Console.WriteLine($"프린터 응답: {response}");
📌 디지털 트윈 적용 사례:
- 프린터 실제 온도와 위치 → 가상 시뮬레이션 모델에 반영
- G코드 동기화 기반 양방향 제어 인터페이스 구축
🛠 실무 노하우
| 항목 | 팁 |
| 전송 안정성 | 전송 후 \n 또는 \r\n 필수 (펌웨어 설정 확인) |
| 응답 수신 타이밍 | DataReceived 이벤트 활용 또는 폴링 방식 |
| 포트 충돌 방지 | 앱 종료 시 .Close() 필수 호출 |
| 다중 프린터 제어 | 포트별 쓰레드 분기 or 큐 처리 방식 구현 |
| G코드 테스트 | Pronterface, OctoPrint로 사전 테스트 후 적용 권장 |
https://www.youtube.com/watch?v=3adLFtTPAT4
728x90
'산업 IoT & 스마트 팩토리 디지털트윈 > 디지털 트윈 구축 사례' 카테고리의 다른 글
| 디지털 트윈 MCT / CNC 제어하기 - FANUC (0) | 2026.02.13 |
|---|