📅  最后修改于: 2023-12-03 15:00:53.274000             🧑  作者: Mango
在 CNC 加工中,Gcode 是控制机器运动的指令集。要获取当前位置,需要解析 Gcode 并查找 G0
和 G1
指令。
解析 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 指令和查询机器位置。解析可以使用正则表达式,查询可以使用机器的控制软件或固件。