Advertisement
tripstar76

Untitled

Apr 6th, 2022 (edited)
954
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.03 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. ## Python code: John Mcilroy
  3. ## For CNC Kitchen Easy hotend Benchmark
  4. ## https://www.youtube.com/watch?v=lBi0-NotcP0
  5.  
  6. ## Make changes to the spreadsheet, then save it.
  7. ## Run this script in the same folder as the xlsm file and it will create the gcode
  8.  
  9.  
  10. from openpyxl import Workbook
  11. from openpyxl import load_workbook
  12. from math import atan
  13.  
  14. workbook = load_workbook(filename="FlowTestTool.xlsm")
  15. sheet = workbook.active
  16.  
  17. bedWidth = sheet["B2"].value
  18. bedLength = sheet["B3"].value
  19. bedLengthSave = bedLength
  20. bedMargin = sheet["B4"].value
  21. filamentDiameter = sheet["B5"].value
  22. movementSpeed = sheet["B6"].value
  23. stabilizationTime = sheet["B7"].value
  24. bedTemp = sheet["B8"].value
  25. fanSpeed = sheet["B9"].value
  26.  
  27. primeLength = sheet["B11"].value
  28. primeAmount = sheet["B12"].value
  29. primeSpeed = sheet["B13"].value
  30. wipeLength = sheet["B14"].value
  31. retractionDistance = sheet["B15"].value
  32. retractionSpeed = sheet["B16"].value
  33.  
  34. blobHeight = sheet["B18"].value
  35. extrusionAmount = sheet["B19"].value
  36.  
  37. xSpacing = sheet["B22"].value
  38. ySpacing = sheet["B23"].value
  39.  
  40. startFlow = sheet["B27"].value
  41. flowOffset = sheet["B28"].value
  42. flowSteps = sheet["B29"].value
  43. endFlow = sheet["B30"].value
  44.  
  45. startTemp = sheet["B33"].value
  46. tempOffset = sheet["B34"].value
  47. tempSteps = sheet["B35"].value
  48.  
  49. direction = sheet["B21"].value
  50. comment = sheet["B38"].value
  51.  
  52. # print(f"{comment}  {bedWidth} x {bedLength}")
  53.  
  54. def nw(inpt):
  55.     f.write(inpt + "\n")
  56.  
  57.  
  58.  
  59. with open(f"test.gcode", 'w') as f:
  60.     ## Credits
  61.     f.write(f"; *** CNC Kitchen Auto Flow Pattern Generator 0.93\n\n")
  62.     f.write(f"; *** 02/04/26 Stefan Hermann\n\n")
  63.     f.write(f"; *** modified by J.Mcilroy\n")
  64.    
  65.     ## Generation Settings
  66.     f.write(f"; Printer is {comment}  {bedWidth} x {bedLength}\n\n")
  67.     f.write(f"; bedWidth = {bedWidth}\n")
  68.     f.write(f"; bedLength = {bedLengthSave}\n")
  69.     f.write(f"; bedMargin = {abs(bedMargin)}\n")
  70.     f.write(f"; filamentDiameter = {filamentDiameter}\n")
  71.     f.write(f"; movementSpeed = {movementSpeed}\n")
  72.     f.write(f"; stabilizationTime = {stabilizationTime}\n")
  73.     f.write(f"; bedTemp = {bedTemp}\n")
  74.     f.write(f"; primeLength = {primeLength}\n")
  75.     f.write(f"; primeAmount = {primeAmount}\n")
  76.     f.write(f"; primeSpeed = {primeSpeed}\n")
  77.     f.write(f"; retractionDistance = {retractionDistance}\n")
  78.     f.write(f"; retractionSpeed = {retractionSpeed}\n")
  79.     f.write(f"; blobHeight = {blobHeight}\n")
  80.     f.write(f"; extrusionAmount = {extrusionAmount}\n")
  81.     f.write(f"; xSpacing = {xSpacing}\n")
  82.     f.write(f"; ySpacing = {ySpacing}\n")
  83.     f.write(f"; startFlow = {startFlow}\n")
  84.     f.write(f"; flowOffset = {flowOffset}\n")
  85.     f.write(f"; flowSteps = {flowSteps}\n")
  86.     f.write(f"; startTemp = {startTemp}\n")
  87.     f.write(f"; tempOffset = {tempOffset}\n")
  88.     f.write(f"; tempSteps = {tempSteps}\n")
  89.     f.write(f"; direction = {direction}\n\n")
  90.    
  91.     ## Header
  92.     f.write(f"M104 S{startTemp} ; Set Nozzle Temperature\n")
  93.     f.write(f"M140 S{bedTemp} ; Set Bed Temperature\n")
  94.     f.write(f"G90\n")
  95.     f.write(f"G28\n")
  96.     f.write(f"G0 Z10\n")
  97.     f.write(f"G92 E0; reset extruder\n")
  98.     f.write(f"M83; set extruder to relative mode\n")
  99.     f.write(f"M190 S{bedTemp} ; Set Bed Temperature & Wait\n")
  100.     f.write(f"M106 S{round(fanSpeed * 255 / 100, 0)} ; Set Fan Speed\n")
  101.    
  102.     ## Check if "Fill Mode" is used
  103.     if tempSteps == 1:
  104.         tempSteps = int(math.ceil(flowSteps / (bedLength - 2 * bedMargin) / ySpacing))
  105.         flowSteps = int(math.ceil(bedLength - 2 * bedMargin) / ySpacing)
  106.         tempOffset = 0
  107.        
  108.     ## change variables depending on direction
  109.     if direction == 1:
  110.         bedLength = 0
  111.         bedMargin = bedMargin * -1
  112.         ySpacing = ySpacing * -1
  113.    
  114.     ## DoE column
  115.     for c in range(tempSteps):
  116.         c = c+1
  117.         ##Check if "Fill Mode" is active
  118.         if tempOffset == 0 and c > 1:
  119.             startFlow = startFlow + flowSteps * flowOffset
  120.  
  121.         ## Set temp
  122.         f.write(f"\n\n;####### {(startTemp + (c - 1) * tempOffset)}°C\n")
  123.         f.write(f"G4 S0 ; Dwell\n")
  124.         f.write(f"M109 R{(startTemp + (c - 1) * tempOffset)} ; Dwell\n")
  125.        
  126.         ## Output for each test
  127.         for r in range(flowSteps):
  128.             r = r+1
  129.             ##Check if "Fill Mode" is active
  130.             if tempOffset == 0:
  131.                 if c == tempSteps:
  132.                     if (startFlow + (r - 2) * flowOffset) == endFlow:
  133.                         break
  134.             f.write(f"\n;####### {(startFlow + (r - 1) * flowOffset)}mm3/s\n")
  135.             f.write(f"M117 {(startTemp + (c - 1) * tempOffset)}°C // {(startFlow + (r - 1) * flowOffset)}mm3/s\n")
  136.            
  137.             ## Move to start
  138.             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")
  139.             f.write(f"G4 S{stabilizationTime} ; Stabalize\n")
  140.             f.write(f"G0 Z0.3 ; Drop down\n")
  141.             f.write(f"G1 X{(abs(bedMargin) + primeLength + ((c - 1) * (primeLength + wipeLength + xSpacing)))} E{primeAmount} F{(primeSpeed * 60)} ; Prime\n")
  142.             f.write(f"G1 E{(-1 * retractionDistance)} F{(retractionSpeed * 60)} ; Retract\n")
  143.             f.write(f"G0 X{(abs(bedMargin) + primeLength + wipeLength + ((c - 1) * (primeLength + wipeLength + xSpacing)))} F{(movementSpeed * 60)} ; Wipe\n")
  144.             f.write(f"G0 Z0.5 ; Lift\n")
  145.             f.write(f"G1 E{(retractionDistance)} F{(retractionSpeed * 60)} ; De-Retract\n")
  146.            
  147.             ## calculate Extrusionspeed
  148.             extrusionSpeed = round(blobHeight / (extrusionAmount / ((startFlow + (r - 1) * flowOffset) / (atan(1) * filamentDiameter * filamentDiameter) * 60)), 2)
  149. #           print(extrusionSpeed)
  150.             f.write(f"G1 Z{(0.5 + blobHeight)} E{extrusionAmount} F{extrusionSpeed} ; Extrude\n")
  151.             f.write(f"G1 E{(-1 * retractionDistance)} F{(retractionSpeed * 60)} ; Retract\n")
  152.             f.write(f"G0 Z{(0.5 + blobHeight + 5)} ; Lift\n")
  153.             f.write(f"G0 X{(abs(bedMargin) + ((c - 1) * (primeLength + wipeLength + xSpacing)))} Y{((bedLength - bedMargin) - (r - 1) * ySpacing)} F{(movementSpeed * 60)} ; Move across\n")
  154.             f.write(f"G92 E0 ; Reset Extruder\n")
  155.  
  156.  
  157.     ## End G-Code
  158.     f.write (f"\n\n;####### End G-Code\n")
  159.     f.write (f"G0 X{(bedWidth - abs(bedMargin))} Y{(bedLengthSave - abs(bedMargin))} ; Move to Corner\n")
  160.     f.write ("M104 S0 T0 ; Turn Off Hotend\n")
  161.     f.write ("M140 S0 ; Turn Off Bed\n")
  162.     f.write ("M84\n")
  163.  
  164.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement