Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- ## Python code: John Mcilroy
- ## For CNC Kitchen Easy hotend Benchmark
- ## https://www.youtube.com/watch?v=lBi0-NotcP0
- ## Make changes to the spreadsheet, then save it.
- ## Run this script in the same folder as the xlsm file and it will create the gcode
- from openpyxl import Workbook
- from openpyxl import load_workbook
- from math import atan
- workbook = load_workbook(filename="FlowTestTool.xlsm")
- sheet = workbook.active
- bedWidth = sheet["B2"].value
- bedLength = sheet["B3"].value
- bedLengthSave = bedLength
- bedMargin = sheet["B4"].value
- filamentDiameter = sheet["B5"].value
- movementSpeed = sheet["B6"].value
- stabilizationTime = sheet["B7"].value
- bedTemp = sheet["B8"].value
- fanSpeed = sheet["B9"].value
- primeLength = sheet["B11"].value
- primeAmount = sheet["B12"].value
- primeSpeed = sheet["B13"].value
- wipeLength = sheet["B14"].value
- retractionDistance = sheet["B15"].value
- retractionSpeed = sheet["B16"].value
- blobHeight = sheet["B18"].value
- extrusionAmount = sheet["B19"].value
- xSpacing = sheet["B22"].value
- ySpacing = sheet["B23"].value
- startFlow = sheet["B27"].value
- flowOffset = sheet["B28"].value
- flowSteps = sheet["B29"].value
- endFlow = sheet["B30"].value
- startTemp = sheet["B33"].value
- tempOffset = sheet["B34"].value
- tempSteps = sheet["B35"].value
- direction = sheet["B21"].value
- comment = sheet["B38"].value
- # print(f"{comment} {bedWidth} x {bedLength}")
- def nw(inpt):
- f.write(inpt + "\n")
- with open(f"test.gcode", 'w') as f:
- ## Credits
- f.write(f"; *** CNC Kitchen Auto Flow Pattern Generator 0.93\n\n")
- f.write(f"; *** 02/04/26 Stefan Hermann\n\n")
- f.write(f"; *** modified by J.Mcilroy\n")
- ## Generation Settings
- f.write(f"; Printer is {comment} {bedWidth} x {bedLength}\n\n")
- f.write(f"; bedWidth = {bedWidth}\n")
- f.write(f"; bedLength = {bedLengthSave}\n")
- f.write(f"; bedMargin = {abs(bedMargin)}\n")
- f.write(f"; filamentDiameter = {filamentDiameter}\n")
- f.write(f"; movementSpeed = {movementSpeed}\n")
- f.write(f"; stabilizationTime = {stabilizationTime}\n")
- f.write(f"; bedTemp = {bedTemp}\n")
- f.write(f"; primeLength = {primeLength}\n")
- f.write(f"; primeAmount = {primeAmount}\n")
- f.write(f"; primeSpeed = {primeSpeed}\n")
- f.write(f"; retractionDistance = {retractionDistance}\n")
- f.write(f"; retractionSpeed = {retractionSpeed}\n")
- f.write(f"; blobHeight = {blobHeight}\n")
- f.write(f"; extrusionAmount = {extrusionAmount}\n")
- f.write(f"; xSpacing = {xSpacing}\n")
- f.write(f"; ySpacing = {ySpacing}\n")
- f.write(f"; startFlow = {startFlow}\n")
- f.write(f"; flowOffset = {flowOffset}\n")
- f.write(f"; flowSteps = {flowSteps}\n")
- f.write(f"; startTemp = {startTemp}\n")
- f.write(f"; tempOffset = {tempOffset}\n")
- f.write(f"; tempSteps = {tempSteps}\n")
- f.write(f"; direction = {direction}\n\n")
- ## Header
- f.write(f"M104 S{startTemp} ; Set Nozzle Temperature\n")
- f.write(f"M140 S{bedTemp} ; Set Bed Temperature\n")
- f.write(f"G90\n")
- f.write(f"G28\n")
- f.write(f"G0 Z10\n")
- f.write(f"G92 E0; reset extruder\n")
- f.write(f"M83; set extruder to relative mode\n")
- f.write(f"M190 S{bedTemp} ; Set Bed Temperature & Wait\n")
- f.write(f"M106 S{round(fanSpeed * 255 / 100, 0)} ; Set Fan Speed\n")
- ## Check if "Fill Mode" is used
- if tempSteps == 1:
- tempSteps = int(math.ceil(flowSteps / (bedLength - 2 * bedMargin) / ySpacing))
- flowSteps = int(math.ceil(bedLength - 2 * bedMargin) / ySpacing)
- tempOffset = 0
- ## change variables depending on direction
- if direction == 1:
- bedLength = 0
- bedMargin = bedMargin * -1
- ySpacing = ySpacing * -1
- ## DoE column
- for c in range(tempSteps):
- c = c+1
- ##Check if "Fill Mode" is active
- if tempOffset == 0 and c > 1:
- startFlow = startFlow + flowSteps * flowOffset
- ## Set temp
- f.write(f"\n\n;####### {(startTemp + (c - 1) * tempOffset)}°C\n")
- f.write(f"G4 S0 ; Dwell\n")
- f.write(f"M109 R{(startTemp + (c - 1) * tempOffset)} ; Dwell\n")
- ## Output for each test
- for r in range(flowSteps):
- r = r+1
- ##Check if "Fill Mode" is active
- if tempOffset == 0:
- if c == tempSteps:
- if (startFlow + (r - 2) * flowOffset) == endFlow:
- break
- f.write(f"\n;####### {(startFlow + (r - 1) * flowOffset)}mm3/s\n")
- f.write(f"M117 {(startTemp + (c - 1) * tempOffset)}°C // {(startFlow + (r - 1) * flowOffset)}mm3/s\n")
- ## Move to start
- f.write(f"G0 X{(abs(bedMargin) + ((c - 1) * (primeLength + wipeLength + xSpacing)))} Y{((bedLength - bedMargin) - (r - 1) * ySpacing)} Z{(0.5 + blobHeight + 5)} F{(movementSpeed * 60)}\n")
- f.write(f"G4 S{stabilizationTime} ; Stabalize\n")
- f.write(f"G0 Z0.3 ; Drop down\n")
- f.write(f"G1 X{(abs(bedMargin) + primeLength + ((c - 1) * (primeLength + wipeLength + xSpacing)))} E{primeAmount} F{(primeSpeed * 60)} ; Prime\n")
- f.write(f"G1 E{(-1 * retractionDistance)} F{(retractionSpeed * 60)} ; Retract\n")
- f.write(f"G0 X{(abs(bedMargin) + primeLength + wipeLength + ((c - 1) * (primeLength + wipeLength + xSpacing)))} F{(movementSpeed * 60)} ; Wipe\n")
- f.write(f"G0 Z0.5 ; Lift\n")
- f.write(f"G1 E{(retractionDistance)} F{(retractionSpeed * 60)} ; De-Retract\n")
- ## calculate Extrusionspeed
- extrusionSpeed = round(blobHeight / (extrusionAmount / ((startFlow + (r - 1) * flowOffset) / (atan(1) * filamentDiameter * filamentDiameter) * 60)), 2)
- # print(extrusionSpeed)
- f.write(f"G1 Z{(0.5 + blobHeight)} E{extrusionAmount} F{extrusionSpeed} ; Extrude\n")
- f.write(f"G1 E{(-1 * retractionDistance)} F{(retractionSpeed * 60)} ; Retract\n")
- f.write(f"G0 Z{(0.5 + blobHeight + 5)} ; Lift\n")
- f.write(f"G0 X{(abs(bedMargin) + ((c - 1) * (primeLength + wipeLength + xSpacing)))} Y{((bedLength - bedMargin) - (r - 1) * ySpacing)} F{(movementSpeed * 60)} ; Move across\n")
- f.write(f"G92 E0 ; Reset Extruder\n")
- ## End G-Code
- f.write (f"\n\n;####### End G-Code\n")
- f.write (f"G0 X{(bedWidth - abs(bedMargin))} Y{(bedLengthSave - abs(bedMargin))} ; Move to Corner\n")
- f.write ("M104 S0 T0 ; Turn Off Hotend\n")
- f.write ("M140 S0 ; Turn Off Bed\n")
- f.write ("M84\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement