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

+ Recent posts