aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-03-09 21:43:24 -0500
committerKevin O'Connor <kevin@koconnor.net>2018-03-15 20:00:51 -0400
commit451f7d567223764c438d35fb54d68a6494e375e5 (patch)
tree1b3e43b2fbbfb0cbb4797cfc68c64e8d0c6e026c
parentef820d98f6fe4c67cf3d2c2a88b395a99fdaff42 (diff)
downloadkutter-451f7d567223764c438d35fb54d68a6494e375e5.tar.gz
kutter-451f7d567223764c438d35fb54d68a6494e375e5.tar.xz
kutter-451f7d567223764c438d35fb54d68a6494e375e5.zip
gcode: Position returned by M114 should be relative to last G92
It looks like OctoPrint is expecting the result from M114 to be relative to the last G92 command. Also, introduce GET_POSITION to report the actual location that the printer is at. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--docs/G-Codes.md2
-rw-r--r--klippy/gcode.py53
-rw-r--r--klippy/homing.py4
3 files changed, 42 insertions, 17 deletions
diff --git a/docs/G-Codes.md b/docs/G-Codes.md
index e2c7ea2c..9e9cd8fe 100644
--- a/docs/G-Codes.md
+++ b/docs/G-Codes.md
@@ -63,6 +63,8 @@ The following standard commands are supported:
- `QUERY_ENDSTOPS`: Probe the axis endstops and report if they are
"triggered" or in an "open" state. This command is typically used to
verify that an endstop is working correctly.
+- `GET_POSITION`: Return information on the current location of the
+ toolhead.
- `RESTART`: This will cause the host software to reload its config
and perform an internal reset. This command will not clear error
state from the micro-controller (see FIRMWARE_RESTART) nor will it
diff --git a/klippy/gcode.py b/klippy/gcode.py
index 4c1e4c83..dee03a16 100644
--- a/klippy/gcode.py
+++ b/klippy/gcode.py
@@ -367,9 +367,9 @@ class GCodeParser:
self.run_script(self.extruder.get_activate_gcode(True))
all_handlers = [
'G1', 'G4', 'G28', 'M18', 'M400',
- 'G20', 'M82', 'M83', 'G90', 'G91', 'G92', 'M206', 'M220', 'M221',
+ 'G20', 'M82', 'M83', 'G90', 'G91', 'G92', 'M114', 'M206', 'M220', 'M221',
'M105', 'M104', 'M109', 'M140', 'M190', 'M106', 'M107',
- 'M112', 'M114', 'M115', 'IGNORE', 'QUERY_ENDSTOPS', 'PID_TUNE',
+ 'M112', 'M115', 'IGNORE', 'QUERY_ENDSTOPS', 'GET_POSITION', 'PID_TUNE',
'RESTART', 'FIRMWARE_RESTART', 'ECHO', 'STATUS', 'HELP']
# G-Code movement commands
cmd_G1_aliases = ['G0']
@@ -463,6 +463,12 @@ class GCodeParser:
self.base_position[p] = self.last_position[p] - offset
if not offsets:
self.base_position = list(self.last_position)
+ cmd_M114_when_not_ready = True
+ def cmd_M114(self, params):
+ # Get Current Position
+ p = [lp - bp for lp, bp in zip(self.last_position, self.base_position)]
+ p[3] /= self.extrude_factor
+ self.respond("X:%.3f Y:%.3f Z:%.3f E:%.3f" % tuple(p))
def cmd_M206(self, params):
# Set home offset
offsets = { self.axis2pos[a]: self.get_float(a, params)
@@ -513,17 +519,6 @@ class GCodeParser:
def cmd_M112(self, params):
# Emergency Stop
self.printer.invoke_shutdown("Shutdown due to M112 command")
- cmd_M114_when_not_ready = True
- def cmd_M114(self, params):
- # Get Current Position
- if self.toolhead is None:
- self.cmd_default(params)
- return
- raw_pos = homing.query_position(self.toolhead)
- self.respond("X:%.3f Y:%.3f Z:%.3f E:%.3f Count %s" % (
- self.last_position[0], self.last_position[1],
- self.last_position[2], self.last_position[3],
- " ".join(["%s:%d" % (n.upper(), p) for n, p in raw_pos])))
cmd_M115_when_not_ready = True
def cmd_M115(self, params):
# Get Firmware Version and Capabilities
@@ -542,6 +537,38 @@ class GCodeParser:
res = homing.query_endstops(self.toolhead)
self.respond(" ".join(["%s:%s" % (name, ["open", "TRIGGERED"][not not t])
for name, t in res]))
+ cmd_GET_POSITION_when_not_ready = True
+ def cmd_GET_POSITION(self, params):
+ if self.toolhead is None:
+ self.cmd_default(params)
+ return
+ kin = self.toolhead.get_kinematics()
+ steppers = kin.get_steppers()
+ mcu_pos = " ".join(["%s:%d" % (s.name, s.mcu_stepper.get_mcu_position())
+ for s in steppers])
+ stepper_pos = " ".join(
+ ["%s:%.6f" % (s.name, s.mcu_stepper.get_commanded_position())
+ for s in steppers])
+ kinematic_pos = " ".join(["%s:%.6f" % (a, v)
+ for a, v in zip("XYZE", kin.get_position())])
+ toolhead_pos = " ".join(["%s:%.6f" % (a, v) for a, v in zip(
+ "XYZE", self.toolhead.get_position())])
+ gcode_pos = " ".join(["%s:%.6f" % (a, v)
+ for a, v in zip("XYZE", self.last_position)])
+ origin_pos = " ".join(["%s:%.6f" % (a, v)
+ for a, v in zip("XYZE", self.base_position)])
+ homing_pos = " ".join(["%s:%.6f" % (a, v)
+ for a, v in zip("XYZE", self.homing_add)])
+ self.respond_info(
+ "mcu: %s\n"
+ "stepper: %s\n"
+ "kinematic: %s\n"
+ "toolhead: %s\n"
+ "gcode: %s\n"
+ "gcode origin: %s\n"
+ "gcode homing: %s" % (
+ mcu_pos, stepper_pos, kinematic_pos, toolhead_pos,
+ gcode_pos, origin_pos, homing_pos))
cmd_PID_TUNE_help = "Run PID Tuning"
cmd_PID_TUNE_aliases = ["M303"]
def cmd_PID_TUNE(self, params):
diff --git a/klippy/homing.py b/klippy/homing.py
index 6bd11304..97879730 100644
--- a/klippy/homing.py
+++ b/klippy/homing.py
@@ -123,10 +123,6 @@ def query_endstops(toolhead):
out.append((name, mcu_endstop.query_endstop_wait()))
return out
-def query_position(toolhead):
- steppers = toolhead.get_kinematics().get_steppers()
- return [(s.name.upper(), s.mcu_stepper.get_mcu_position()) for s in steppers]
-
class EndstopError(Exception):
pass