Triển Khai Bộ Chuyển Đổi DXF Sang G-code Cho Máy SMT Bằng C#

Tổng Quan Về Quy Trình Chuyển Đổi

Trong hệ thống tự hóa lắp ráp linh kiện điện tử (SMT), việc chuyển đổi dữ liệu thiết kế từ CAD sang ngôn ngữ điều khiển máy là bước critical. Bài viết này trình bày cách xây dựng utility bằng C# để đọc định dạng DXF, trích xuất đường dẫn di chuyển và xuất ra file G-code tương thích.

Định Dạng Dữ Liệu Đầu Vào và Đầu Ra

DXF (Drawing Exchange Format) là chuẩn trao đổi dữ liệu CAD, lưu trữ các thực thể hình học dưới dạng văn bản hoặc binary. Đối với máy dán linh kiện, đối tượng quan tâm chính là các đa tuyến (LWPOLYLINE) biểu diễn đường đi của đầu hút.

G-code (RS-274) là ngôn ngữ lệnh điều khiển chuyển động. Các lệnh cơ bản bao gồm:

  • G90: Chế độ tọa độ tuyệt đối.
  • G01: Di chuyển thẳng tới tọa độ đích.
  • F: Tốc độ di chuyển (feed rate).

Triển Khai Parse File DXF

Thay vì đọc toàn bộ file vào bộ nhớ cùng lúc, ta có thể sử dụng phương thức đọc từng dòng để tối ưu dung lượng. Dưới đây là cách trích xuất danh sách các điểm tọa độ từ thực thể LWPOLYLINE.

using System;
using System.Collections.Generic;
using System.IO;
using System.Globalization;

public class DxfTrajectoryExtractor
{
    public struct Coordinate
    {
        public double X;
        public double Y;
        public Coordinate(double x, double y) { X = x; Y = y; }
    }

    public List<Coordinate> ExtractVertices(string dxfPath)
    {
        var vertices = new List<Coordinate>();
        bool isPolylineSection = false;
        
        using (var stream = new StreamReader(dxfPath))
        {
            string line;
            while ((line = stream.ReadLine()) != null)
            {
                line = line.Trim();
                if (line == "LWPOLYLINE")
                {
                    isPolylineSection = true;
                    continue;
                }

                if (isPolylineSection)
                {
                    if (line == "0") // Kết thúc thực thể
                    {
                        isPolylineSection = false;
                        continue;
                    }

                    if (line == "10") // Mã nhóm X
                    {
                        double xVal = double.Parse(stream.ReadLine(), CultureInfo.InvariantCulture);
                        // Bỏ qua mã nhóm 20 và đọc giá trị Y
                        stream.ReadLine(); 
                        double yVal = double.Parse(stream.ReadLine(), CultureInfo.InvariantCulture);
                        
                        vertices.Add(new Coordinate(xVal, yVal));
                    }
                }
            }
        }
        return vertices;
    }
}

Sinh Chuỗi Lệnh G-code

Sau khi có danh sách tọa độ, quá trình biên dịch sang G-code yêu cầu định dạng số học chính xác. Sử dụng StringBuilder giúp tối ưu hiệu suất khi nối chuỗi nhiều lệnh.

public string GenerateGCode(List<Coordinate> path, double feedRate)
{
    var sb = new System.Text.StringBuilder();
    sb.AppendLine("G90"); // Thiết lập tọa độ tuyệt đối
    sb.AppendLine($"F{feedRate.ToString("F1")}"); // Thiết lập tốc độ

    if (path.Count < 2) return sb.ToString();

    // Di chuyển đến điểm bắt đầu (giả sử điểm đầu tiên)
    var startPoint = path[0];
    sb.AppendLine($"G00 X{startPoint.X:F3} Y{startPoint.Y:F3}");

    // Tạo lệnh nội suy thẳng cho các điểm tiếp theo
    for (int index = 1; index < path.Count; index++)
    {
        var target = path[index];
        sb.AppendLine($"G01 X{target.X:F3} Y{target.Y:F3}");
    }

    return sb.ToString();
}

Lưu Ý Về Hệ Tọa Độ và Xử Lý Lỗi

Hệ trục tọa độ trong file DXF thường có gốc ở góc trái dưới hoặc tâm hình vẽ, trong khi máy SMT có thể quy ước gốc khác. Cần áp dụng phép biến đổi ma trận hoặc offset trước khi xuất lệnh G01. Ngoài ra, việc validate dữ liệu đầu vào là bắt buộc để tránh lỗi runtime khi gặp file DXF bị hỏng hoặc định dạng không chuẩn.

Thẻ: c-sharp dxf-parser G-code-Generation SMT-Automation CAD-Integration

Đăng vào ngày 13 tháng 6 lúc 02:06