📜  gcode 获取位置 (1)

📅  最后修改于: 2023-12-03 15:00:53.274000             🧑  作者: Mango

获取 Gcode 位置

在 CNC 加工中,Gcode 是控制机器运动的指令集。要获取当前位置,需要解析 Gcode 并查找 G0G1 指令。

解析 Gcode

解析 Gcode 可以使用正则表达式。下面是一个简单的示例:

import re

gcode = "G1 X10 Y20 Z30"
pattern = r"G\d+\s+X(-?\d+\.?\d*)\s+Y(-?\d+\.?\d*)\s+Z(-?\d+\.?\d*)"
match = re.match(pattern, gcode)

if match:
    x_pos = float(match.group(1))
    y_pos = float(match.group(2))
    z_pos = float(match.group(3))
    print(f"X: {x_pos}, Y: {y_pos}, Z: {z_pos}")
else:
    print("无法解析 Gcode")

该代码解析 G1 X10 Y20 Z30 并获取 X、Y、Z 坐标。

查询机器位置

要查询机器位置,需要使用机器的控制软件或固件。如果使用的是 Marlin 固件,则可以添加 M114 指令来获取当前位置。

import serial

ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1)

def send_command(cmd):
    ser.write((cmd + "\n").encode())
    response = ser.readline().decode().strip()
    return response

def get_position():
    response = send_command("M114")
    pattern = r"X:(-?\d+.?\d*)\s+Y:(-?\d+.?\d*)\s+Z:(-?\d+.?\d*)\s+E:(-?\d+.?\d*)\s+Count X:(-?\d+.?\d*)\s+Y:(-?\d+.?\d*)\s+Z:(-?\d+.?\d*)"
    match = re.match(pattern, response)
    if match:
        x_pos = float(match.group(1))
        y_pos = float(match.group(2))
        z_pos = float(match.group(3))
        return x_pos, y_pos, z_pos
    else:
        raise Exception("无法解析 M114 响应")

print(get_position())

该代码通过串口发送 M114 指令并解析响应来获取当前位置。

总结

获取 Gcode 位置需要解析 Gcode 指令和查询机器位置。解析可以使用正则表达式,查询可以使用机器的控制软件或固件。