TAM‑CNC Circular Pocket G-Code Generator

Circular Pocket G-code Creator

Circular Pocket Diagram

This program will create G-code for a simple circular pocket based on the parameters you input.

import js from pyscript import display def fmt(v): return f"{v:.2f}" def generate_circular_pocket_gcode(event): # Renamed function to match py-click try: tool_no = js.document.getElementById("cp-tool-no").value tool_dia = float(js.document.getElementById("cp-tool-dia").value) tool_rad = tool_dia / 2.0 wrk_ofset = js.document.getElementById("cp-work-offset").value spdle_rpm = js.document.getElementById("cp-spindle-rpm").value x_pos = float(js.document.getElementById("cp-x-position").value) y_pos = float(js.document.getElementById("cp-y-position").value) z_rapid = float(js.document.getElementById("cp-z-rapid").value) z_start = float(js.document.getElementById("cp-z-start").value) tz_cut = float(js.document.getElementById("cp-tz-cut").value) z_depth = float(js.document.getElementById("cp-z-depth").value) # Calculate nosteps and z_cut safely if tz_cut > 0: nosteps = int(z_depth / tz_cut) z_cut = z_depth / nosteps if nosteps > 0 else z_depth else: nosteps = 1 z_cut = z_depth circ_dia = float(js.document.getElementById("cp-circ-dia").value) circ_rad = circ_dia / 2.0 step_over_percent = float(js.document.getElementById("cp-step-over").value) step_over = (step_over_percent / 100) * tool_dia feedrate = float(js.document.getElementById("cp-feed-rate").value) # --- Calculate Values --- cut_rad = circ_rad - tool_rad # Ensure cut_rad is not negative if tool is larger than pocket if cut_rad < 0: cut_rad = 0 # Calculate side_steps safely if step_over > 0: side_steps = int(cut_rad / step_over) else: side_steps = 1 # Default to 1 step if step_over is 0 or negative # Ensure at least one step if cut_rad is positive if cut_rad > 0 and side_steps == 0: side_steps = 1 ris = cut_rad / side_steps if side_steps > 0 else 0 # --- G-Code Generation --- gcode_lines = [] gcode_lines.append("%") # Program Start gcode_lines.append("M97 P8000") gcode_lines.append("M05") gcode_lines.append(f"T{tool_no} M06") gcode_lines.append(f"M03 S{spdle_rpm}") gcode_lines.append(f"G{wrk_ofset}") gcode_lines.append("G40") gcode_lines.append("G98 G17") # --- Initial Rapid Move --- gcode_lines.append(f"G00 X{fmt(x_pos + step_over)} Y{fmt(y_pos)}") gcode_lines.append(f"G{wrk_ofset} G00 Z{fmt(z_rapid)} G43 H{tool_no} M08") gcode_lines.append(f"G01 Z{fmt(z_start)} F{fmt(feedrate / 2)}") # Spiral down if multiple steps, otherwise direct cut if nosteps > 1: # Ensure the spiral down command is correctly formatted gcode_lines.append(f"G91 G02 I-{fmt(step_over)} Z-{fmt(z_cut/2)} L{2*nosteps} F{fmt(feedrate / 2)}") gcode_lines.append(f"G02 I-{fmt(step_over)}") else: gcode_lines.append(f"G01 Z{fmt(z_depth)} F{fmt(feedrate)}") # Direct cut to final depth if only one step gcode_lines.append("G90 G01 X" + fmt(x_pos)) # Move to center X gcode_lines.append("G01 Z" + fmt(z_start) + " F" + fmt(feedrate)) gcode_lines.append(f"M97 P801 L{nosteps}") gcode_lines.append(f"G00 Z{fmt(z_rapid)} M09") gcode_lines.append("M05") gcode_lines.append("M97 P8000") gcode_lines.append("M30") # --- Pocketing Subroutine --- gcode_lines.append("\nN801") gcode_lines.append(f"G91 G01 Z-{fmt(z_cut)} F{fmt(feedrate / 2)}") gcode_lines.append(f"F{fmt(feedrate)}") gcode_lines.append("G90") for i in range(1, side_steps + 1): r_step = ris * i gcode_lines.append(f"G01 X{fmt(x_pos + r_step)}") gcode_lines.append(f"G03 I-{fmt(x_pos + r_step)}") gcode_lines.append(f"G90 G01 X{fmt(x_pos)} Y{fmt(y_pos)}") gcode_lines.append("M99") # End of Subroutine # --- Program End Subroutine --- gcode_lines.append("\nN8000") gcode_lines.append("G00 G90 M09") gcode_lines.append("G53 G00 G40 Z0") gcode_lines.append("G53 G00 G40 X0 Y0") gcode_lines.append("M01") gcode_lines.append("M99") gcode_lines.append("%") # Program End output_element = js.document.querySelector("#cp-gcode-output pre code") output_element.innerText = "\n".join(gcode_lines) except Exception as e: output_element = js.document.querySelector("#cp-gcode-output pre code") output_element.innerText = f"Error generating G-code: {str(e)}\nPlease check your input values." # Placeholder for the function definition itself, as py-click handles the event. pass













Generated G-code:

Disclaimer: All CNC toolpaths and G‑code generated or displayed by this tool must be reviewed and verified by the machine operator before use. TAM‑CNC and its developers accept no liability for machine damage, material loss, or personal injury resulting from improper use.