################################################################################ # makerbot_codes.py # # a lot like iso_codes.py but with reprap/makerbot specific M codes. # # Brad Collette, 12th Sept 2010 # # Many of these codes have nothing to do with reprap/additive machining but are left here in anticipation of future hybrid machines. class Codes: def SPACE(self): return " " def FORMAT_FEEDRATE(self): return "%.2f" def FORMAT_IN(self): return "%.5f" def FORMAT_MM(self): return "%.3f" def FORMAT_ANG(self): return "%.1f" def FORMAT_TIME(self): return "%.2f" def FORMAT_DWELL(self): return "P%f" def BLOCK(self): return "N%i" + self.SPACE() def COMMENT(self, comment): return " (%s)\n" % comment def VARIABLE(self): return "#%i" def VARIABLE_SET(self): return "=%.3f" def PROGRAM(self): return "O%i" def PROGRAM_END(self): return "M02" def SUBPROG_CALL(self): return "M98" + self.SPACE() + "P%i" def SUBPROG_END(self): return "M99" def STOP_OPTIONAL(self): return "M01" def STOP(self): return "M00" def IMPERIAL(self): return self.SPACE() + "G20" def METRIC(self): return self.SPACE() + "G21" + self.SPACE() def ABSOLUTE(self): return self.SPACE() + "G90" + self.SPACE() def INCREMENTAL(self): return self.SPACE() + "G91" def SET_TEMPORARY_COORDINATE_SYSTEM(self): return "G92" + self.SPACE() def REMOVE_TEMPORARY_COORDINATE_SYSTEM(self): return "G92.1" + self.SPACE() def POLAR_ON(self): return self.SPACE() + "G16" def POLAR_OFF(self): return self.SPACE() + "G15" def PLANE_XY(self): return self.SPACE() + "G17" def PLANE_XZ(self): return self.SPACE() + "G18" def PLANE_YZ(self): return self.SPACE() + "G19" def TOOL(self): return self.SPACE() + "T%i" def TOOL_DEFINITION(self): return "G10" + self.SPACE() + "L1" + self.SPACE() def WORKPLANE(self): return "G%i" def WORKPLANE_BASE(self): return 53 def FEEDRATE(self): return self.SPACE() + " F" def SPINDLE(self, format, speed): return self.SPACE() + "S" + (format % speed) def SPINDLE_CW(self): return self.SPACE() + "M03" def SPINDLE_CCW(self): return self.SPACE() + "M04" def COOLANT_OFF(self): return self.SPACE() + "M09" def COOLANT_MIST(self): return self.SPACE() + "M07" def COOLANT_FLOOD(self): return self.SPACE() + "M08" def GEAR_OFF(self): return self.SPACE() + "?" def GEAR(self): return "M%i" def GEAR_BASE(self): return 37 def RAPID(self): return "G0" def FEED(self): return "G1" def ARC_CW(self): return "G2" def ARC_CCW(self): return "G3" def DWELL(self): return "G04" def DRILL(self): return self.SPACE() + "G81" def DRILL_WITH_DWELL(self, format, dwell): return self.SPACE() + "G82" + (format % dwell) def PECK_DRILL(self): return self.SPACE() + "G83" def PECK_DEPTH(self, format, depth): return self.SPACE() + "Q" + (format % depth) def RETRACT(self, format, height): return self.SPACE() + "R" + (format % height) def END_CANNED_CYCLE(self): return self.SPACE() + "G80" def X(self): return self.SPACE() + "X" def Y(self): return self.SPACE() + "Y" def Z(self): return self.SPACE() + "Z" def A(self): return self.SPACE() + "A" def B(self): return self.SPACE() + "B" def C(self): return self.SPACE() + "C" def CENTRE_X(self): return self.SPACE() + "I" def CENTRE_Y(self): return self.SPACE() + "J" def CENTRE_Z(self): return self.SPACE() + "K" def RADIUS(self): return self.SPACE() + "R" def TIME(self): return self.SPACE() + "P" def PROBE_TOWARDS_WITH_SIGNAL(self): return "G38.2" + self.SPACE() def PROBE_TOWARDS_WITHOUT_SIGNAL(self): return "G38.3" + self.SPACE() def PROBE_AWAY_WITH_SIGNAL(self): return "G38.4" + self.SPACE() def PROBE_AWAY_WITHOUT_SIGNAL(self): return "G38.5" + self.SPACE() def MACHINE_COORDINATES(self): return "G53" + self.SPACE() def EXTRUDER_ON(self): return "M101" # deprecated def EXTRUDER_OFF(self): return "M103" def EXTRUDER_TEMP(self, degree_celsius): return "M104 S" + "%s" % degree_celsius def EXTRUDER_TEMP_WAIT(self, degree_celsius): return "M109 S" + "%s" % degree_celsius def READ_EXTRUDER_TEMP(self): return "M105" def EXTRUDER_SPEED_PWM(self, speed_in_PWM): return "M108 S" + "%s" % speed_in_PWM # deprecated def EXTRUDER_SPEED_RPM(self, speed_in_RPM): return "M108 P" + "%s" % speed_in_RPM # deprecated def STEPPERS_OFF(self): return self.SPACE() + "M118" # Wait for all temperature and slow-changing variables to reach set values def ALL_WAIT(self): return self.SPACE() + "M116" def FAN_ON(self): return self.SPACE() + "M106" def FAN_OFF(self): return self.SPACE() + "M107" def VALVE_OPEN(self, delay): return self.SPACE() + ("M126 P" + "%" % delay) def VALVE_CLOSE(self, delay): return self.SPACE() + ("M127 P" + "%" % delay) def BUILD_BED_TEMP(self, degree_celsius): return "M140 S" + "%s" % degree_celsius def BED_HOLDING_PRESSURE(self, pressure): return "M142 S" + "%s" % pressure def CHAMBER_TEMP(self, degree_celsius): return "M141 S" + "%s" % degree_celsius # The following codes are listed on the reprap wiki page at http://reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes but require more study. # # G28 G Y Xnnn Ynnn Znnn Move to origin (on specified axes only, if X/Y/Z parameters are present) # M105 M N none Request current extruder and base temperatures (in Celsius) # M110 M N none Set current line number to Nxxx value preceeding command # M111 M N Snnn Set debug level bitfield to value of parameter (default 6) # M112 M N none Emergency stop (stop immediately, discarding any buffered commands) # M113 M N Snnn Set Extruder PWM (to value defined by pot, or to parameter value if present) # M114 M N none Get Current Position (return current X, Y, Z and E values) # M117 M N none Get Zero Position (return X, Y, Z and E values of endstop hits) codes = Codes()