From 836a7cc2d1b2bbe6d1b0176ed65983d608b21ee7 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Wed, 20 Apr 2022 16:02:28 -0400 Subject: [PATCH 01/13] Add Anneal After Print PostProcessingPlugin This new plugin generates annealing gcode with the following features: - Bed and chamber heating options - Provides progress bar and time remaining feedback - Beep on annealing start - Gradual annealing cooldown to desired temperature --- .../scripts/AnnealAfterPrint.py | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py diff --git a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py new file mode 100644 index 0000000000..a9cffd9e88 --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py @@ -0,0 +1,160 @@ +# Copyright (c) 2021 Anson Liu +# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. + +from ..Script import Script + +class AnnealAfterPrint(Script): + """Adds timed annealing GCODE after objects finish printing. + + Bed annealing works best with a glass bed and a plastic container placed on top of the object during annealing. + """ + + def getSettingDataString(self): + return """{ + "name": "Anneal After Print", + "key": "AnnealAfterPrint", + "metadata": {}, + "version": 2, + "settings": + { + "heatingElement": + { + "label": "Heating Element", + "description": "Printer heating element to use for annealing.", + "type": "enum", + "options": + { + "bed": "Bed", + "chamber": "Chamber", + "all": "Bed and Chamber" + }, + "default_value": "bed" + }, + "annealBedTemp": + { + "label": "Bed Temperature", + "description": "Bed temperature annealing. Recommended bed temperature is greater of build plate printing or vendor specified annealing temperature for material. E.g. PC 90-110 C, PLA 60-90 C", + "unit": "C", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "enabled": "heatingElement == \\\"bed\\\" or heatingElement == \\\"all\\\"" + }, + "annealChamberTemp": + { + "label": "Chamber Temperature", + "description": "Chamber temperature for annealing.", + "unit": "C", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "enabled": "heatingElement == \\\"chamber\\\" or heatingElement == \\\"all\\\"" + }, + "annealMinutes": + { + "label": "Annealing Target Temperature Duration", + "description": "Duration in minutes to anneal at target temperature. After duration ends gradually cool down to End Cooling Temperature.", + "unit": "min", + "type": "int", + "default_value": 120, + "minimum_value": 0 + }, + "reminderBeep": + { + "label": "Beep on annealing start", + "description": "", + "type": "bool", + "default_value": false + }, + "endCoolingTemp": + { + "label": "End Cooling Temperature", + "description": "Temperature to end gradual cooling at. After annealing at target temperature for specified duration temperature decreases by 1 degree after 1 minute at each step.", + "unit": "C", + "type": "float", + "default_value": 50, + "minimum_value": 0 + } + } + }""" + + def generateAnnealCode(self, annealBedTemp, annealChamberTemp, annealMinutes, initialBeep, endCoolingTemp): + anneal_code = ';Generated Annealing GCODE by Anson Liu' + + if initialBeep: + anneal_code += '\nM300 ;play beep for plastic container placement reminder' + + anneal_code += '\nM117 ' + if annealBedTemp: + anneal_code += 'Place plastic container over objects on bed now! ' + anneal_code += 'Waiting until annealing temp reached...' + anneal_code += '\nM73 P00 ;reset progress bar to 0' + + if annealBedTemp: + anneal_code += '\nM190 R{} ;wait for buildplate to reach temp in C even if cooling'.format(annealBedTemp) + if annealChamberTemp: + anneal_code += '\nM191 R{} ;wait for chamber to reach temp in C even if cooling'.format(annealChamberTemp) + + anneal_code += '\nM117 ' + if annealBedTemp: + anneal_code += 'Keep plastic container over objects. ' + anneal_code += 'Annealing...' + anneal_code += '\nM73 P00' # reset progress bar to 0 + + def generateDwellAndProgressCode(minutes): # Update progress bar and time every minute + dp_code = 'M73 P0 R{}'.format(minutes) + for x in range(1, minutes+1): + dwellWaitSeconds = 60 + dp_code += '\nG4 S{}'.format(dwellWaitSeconds) + progress = round(x/minutes * 100, 2) + remainingMinutes = minutes - x + dp_code += '\nM73 P{} R{}'.format(progress, remainingMinutes) + + return dp_code + + anneal_code += '\n' + generateDwellAndProgressCode(int(annealMinutes)) + + anneal_code += '\nM117 Annealing complete. Gradually lowering bed temperature...' + + for x in reversed(range(endCoolingTemp, max(annealBedTemp, annealChamberTemp))): + if annealBedTemp and annealBedTemp > x: + anneal_code += '\nM190 S{}'.format(x) # Wait for buildplate only if heating + if annealChamberTemp and annealChamberTemp > x: + anneal_code += '\nM191 S{}'.format(x) + anneal_code += '\nG4 S60' # Wait 60 seconds after reaching each cooldown temperature + + if annealBedTemp: + anneal_code += '\nM140 S0' + if annealChamberTemp: + anneal_code += '\nM141 S0' + anneal_code += '\nM117 Annealing complete.' + + return anneal_code + + def execute(self, data): + heating_element = self.getSettingValueByKey("heatingElement") + + # Set bed and chamber temp to true/false value based on heating element selection + anneal_bed_temp = 0 + anneal_chamber_temp = 0 + if heating_element == "bed" or heating_element == "all": + anneal_bed_temp = self.getSettingValueByKey("annealBedTemp") + if heating_element == "chamber" or heating_element == "all": + anneal_chamber_temp = self.getSettingValueByKey("annealChamberTemp") + + anneal_minutes = self.getSettingValueByKey("annealMinutes") + initial_beep = self.getSettingValueByKey("firmware_config") + final_cooling_temp = self.getSettingValueByKey("endCoolingTemp") + + # Test printing the generated anneal code + #print(self.generateAnnealCode(110, 120, False, 50)) + anneal_code = self.generateAnnealCode(anneal_bed_temp, anneal_chamber_temp, anneal_minutes, initial_beep, final_cooling_temp) + + try: + end_of_gcode_index = data[-1].index(';End sof Gcode') + except ValueError: + data[-1] += anneal_code + '\n' + else: + data[-1] = data[-1][:end_of_gcode_index] + anneal_code + '\n' + data[-1][end_of_gcode_index:] + + return data \ No newline at end of file From e39b1d8bb37bb127e92fc68337a5ea254dbee8ee Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Wed, 20 Apr 2022 16:16:33 -0400 Subject: [PATCH 02/13] Update AnnealAfterPrint.py --- plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py index a9cffd9e88..7ca8fac79d 100644 --- a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py +++ b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py @@ -151,10 +151,10 @@ class AnnealAfterPrint(Script): anneal_code = self.generateAnnealCode(anneal_bed_temp, anneal_chamber_temp, anneal_minutes, initial_beep, final_cooling_temp) try: - end_of_gcode_index = data[-1].index(';End sof Gcode') + end_of_gcode_index = data[-1].index(';End of Gcode') except ValueError: data[-1] += anneal_code + '\n' else: data[-1] = data[-1][:end_of_gcode_index] + anneal_code + '\n' + data[-1][end_of_gcode_index:] - return data \ No newline at end of file + return data From c7946e5c78872d7ab51188195d349e430ade8efb Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sat, 6 Aug 2022 16:54:37 -0400 Subject: [PATCH 03/13] Added Cooling Rate setting --- .../scripts/AnnealAfterPrint.py | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py index 7ca8fac79d..1e47f2d9af 100644 --- a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py +++ b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Anson Liu +# Copyright (c) 2022 Anson Liu # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. from ..Script import Script @@ -6,10 +6,11 @@ from ..Script import Script class AnnealAfterPrint(Script): """Adds timed annealing GCODE after objects finish printing. - Bed annealing works best with a glass bed and a plastic container placed on top of the object during annealing. + Bed annealing works best with a glass bed and a container placed on top of the object during annealing. """ def getSettingDataString(self): + return """{ "name": "Anneal After Print", "key": "AnnealAfterPrint", @@ -20,7 +21,7 @@ class AnnealAfterPrint(Script): "heatingElement": { "label": "Heating Element", - "description": "Printer heating element to use for annealing.", + "description": "Printer heating element to use for annealing. Glass bed and 4-8 mm brim is recommended if XY dimensional stability is desired.", "type": "enum", "options": { @@ -33,7 +34,7 @@ class AnnealAfterPrint(Script): "annealBedTemp": { "label": "Bed Temperature", - "description": "Bed temperature annealing. Recommended bed temperature is greater of build plate printing or vendor specified annealing temperature for material. E.g. PC 90-110 C, PLA 60-90 C", + "description": "Bed temperature annealing. Recommended bed temperature is greater of build plate printing or vendor specified annealing temperature for material. Temperature should be between material glass transition temperature and melting point. E.g. PC 90-110 C, PLA 60-90 C", "unit": "C", "type": "float", "default_value": 0, @@ -43,7 +44,7 @@ class AnnealAfterPrint(Script): "annealChamberTemp": { "label": "Chamber Temperature", - "description": "Chamber temperature for annealing.", + "description": "Chamber temperature for annealing. Temperature should be between material glass transition temperature and melting point.", "unit": "C", "type": "float", "default_value": 0, @@ -57,7 +58,7 @@ class AnnealAfterPrint(Script): "unit": "min", "type": "int", "default_value": 120, - "minimum_value": 0 + "minimum_value": 1 }, "reminderBeep": { @@ -69,24 +70,37 @@ class AnnealAfterPrint(Script): "endCoolingTemp": { "label": "End Cooling Temperature", - "description": "Temperature to end gradual cooling at. After annealing at target temperature for specified duration temperature decreases by 1 degree after 1 minute at each step.", + "description": "Temperature to end gradual cooling at after annealing at target temperature for specified duration.", "unit": "C", "type": "float", "default_value": 50, "minimum_value": 0 + }, + "coolingRate": + { + "label": "Cooling Rate", + "description": "Gradual cooling rate. Temperature decreases by 1 C after specified seconds at each degree", + "unit": "sec/C", + "type": "int", + "default_value": 60, + "minimum_value": 0 } } }""" - def generateAnnealCode(self, annealBedTemp, annealChamberTemp, annealMinutes, initialBeep, endCoolingTemp): + settingData = settingData.format(anneal_temp_guideline) + print(settingData) + return settingData + + def generateAnnealCode(self, annealBedTemp, annealChamberTemp, annealMinutes, initialBeep, endCoolingTemp, coolingRate): anneal_code = ';Generated Annealing GCODE by Anson Liu' if initialBeep: - anneal_code += '\nM300 ;play beep for plastic container placement reminder' + anneal_code += '\nM300 ;play beep for container placement reminder' anneal_code += '\nM117 ' if annealBedTemp: - anneal_code += 'Place plastic container over objects on bed now! ' + anneal_code += 'Place container over objects on bed. ' anneal_code += 'Waiting until annealing temp reached...' anneal_code += '\nM73 P00 ;reset progress bar to 0' @@ -121,7 +135,7 @@ class AnnealAfterPrint(Script): anneal_code += '\nM190 S{}'.format(x) # Wait for buildplate only if heating if annealChamberTemp and annealChamberTemp > x: anneal_code += '\nM191 S{}'.format(x) - anneal_code += '\nG4 S60' # Wait 60 seconds after reaching each cooldown temperature + anneal_code += '\nG4 S{}'.format(int(coolingRate)) # Wait user specified seconds after reaching each cooldown temperature if annealBedTemp: anneal_code += '\nM140 S0' @@ -143,12 +157,13 @@ class AnnealAfterPrint(Script): anneal_chamber_temp = self.getSettingValueByKey("annealChamberTemp") anneal_minutes = self.getSettingValueByKey("annealMinutes") - initial_beep = self.getSettingValueByKey("firmware_config") + initial_beep = self.getSettingValueByKey("reminderBeep") final_cooling_temp = self.getSettingValueByKey("endCoolingTemp") + cooling_rate = self.getSettingValueByKey("coolingRate") # Test printing the generated anneal code #print(self.generateAnnealCode(110, 120, False, 50)) - anneal_code = self.generateAnnealCode(anneal_bed_temp, anneal_chamber_temp, anneal_minutes, initial_beep, final_cooling_temp) + anneal_code = self.generateAnnealCode(anneal_bed_temp, anneal_chamber_temp, anneal_minutes, initial_beep, final_cooling_temp, cooling_rate) try: end_of_gcode_index = data[-1].index(';End of Gcode') From c8a4b8fe62a9439ea6c1bf2703a15c4024b3e59a Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sun, 21 Aug 2022 22:44:10 -0400 Subject: [PATCH 04/13] Create definition file for UMO+ version of DXU Override default machine disallow area to fit UMO+ bed size --- resources/definitions/dxu_umo.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 resources/definitions/dxu_umo.def.json diff --git a/resources/definitions/dxu_umo.def.json b/resources/definitions/dxu_umo.def.json new file mode 100644 index 0000000000..315cfd0143 --- /dev/null +++ b/resources/definitions/dxu_umo.def.json @@ -0,0 +1,12 @@ +{ + "version": 2, + "name": "UMO+ DXU", + "inherits": "dxu", + "overrides": { + "machine_disallowed_areas": { + "default_value": [ + [[100, -102.5], [ 110, -102.5], [ 110, -62.5], [100, -62.5]] + ] + } + } +} From d25a3818033f9bd3d04d734288747f8b41ac5ef2 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sun, 21 Aug 2022 22:46:08 -0400 Subject: [PATCH 05/13] Create UMO+ version of dxu_dual definition Overrides machine disallowed area with correct values for UMO+ bed --- resources/definitions/dxu_umo_dual.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 resources/definitions/dxu_umo_dual.def.json diff --git a/resources/definitions/dxu_umo_dual.def.json b/resources/definitions/dxu_umo_dual.def.json new file mode 100644 index 0000000000..cf0658e49c --- /dev/null +++ b/resources/definitions/dxu_umo_dual.def.json @@ -0,0 +1,12 @@ +{ + "version": 2, + "name": "UMO+ DXU Dual", + "inherits": "dxu_dual", + "overrides": { + "machine_disallowed_areas": { + "default_value": [ + [[100, -102.5], [ 110, -102.5], [ 110, -62.5], [100, -62.5]] + ] + } + } +} From 4f39f58f64b157a0d0e26b9378de9e7a3d4458be Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sun, 21 Aug 2022 22:47:07 -0400 Subject: [PATCH 06/13] Delete AnnealAfterPrint.py clean up dxu_umo branch --- .../scripts/AnnealAfterPrint.py | 175 ------------------ 1 file changed, 175 deletions(-) delete mode 100644 plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py diff --git a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py b/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py deleted file mode 100644 index 1e47f2d9af..0000000000 --- a/plugins/PostProcessingPlugin/scripts/AnnealAfterPrint.py +++ /dev/null @@ -1,175 +0,0 @@ -# Copyright (c) 2022 Anson Liu -# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. - -from ..Script import Script - -class AnnealAfterPrint(Script): - """Adds timed annealing GCODE after objects finish printing. - - Bed annealing works best with a glass bed and a container placed on top of the object during annealing. - """ - - def getSettingDataString(self): - - return """{ - "name": "Anneal After Print", - "key": "AnnealAfterPrint", - "metadata": {}, - "version": 2, - "settings": - { - "heatingElement": - { - "label": "Heating Element", - "description": "Printer heating element to use for annealing. Glass bed and 4-8 mm brim is recommended if XY dimensional stability is desired.", - "type": "enum", - "options": - { - "bed": "Bed", - "chamber": "Chamber", - "all": "Bed and Chamber" - }, - "default_value": "bed" - }, - "annealBedTemp": - { - "label": "Bed Temperature", - "description": "Bed temperature annealing. Recommended bed temperature is greater of build plate printing or vendor specified annealing temperature for material. Temperature should be between material glass transition temperature and melting point. E.g. PC 90-110 C, PLA 60-90 C", - "unit": "C", - "type": "float", - "default_value": 0, - "minimum_value": 0, - "enabled": "heatingElement == \\\"bed\\\" or heatingElement == \\\"all\\\"" - }, - "annealChamberTemp": - { - "label": "Chamber Temperature", - "description": "Chamber temperature for annealing. Temperature should be between material glass transition temperature and melting point.", - "unit": "C", - "type": "float", - "default_value": 0, - "minimum_value": 0, - "enabled": "heatingElement == \\\"chamber\\\" or heatingElement == \\\"all\\\"" - }, - "annealMinutes": - { - "label": "Annealing Target Temperature Duration", - "description": "Duration in minutes to anneal at target temperature. After duration ends gradually cool down to End Cooling Temperature.", - "unit": "min", - "type": "int", - "default_value": 120, - "minimum_value": 1 - }, - "reminderBeep": - { - "label": "Beep on annealing start", - "description": "", - "type": "bool", - "default_value": false - }, - "endCoolingTemp": - { - "label": "End Cooling Temperature", - "description": "Temperature to end gradual cooling at after annealing at target temperature for specified duration.", - "unit": "C", - "type": "float", - "default_value": 50, - "minimum_value": 0 - }, - "coolingRate": - { - "label": "Cooling Rate", - "description": "Gradual cooling rate. Temperature decreases by 1 C after specified seconds at each degree", - "unit": "sec/C", - "type": "int", - "default_value": 60, - "minimum_value": 0 - } - } - }""" - - settingData = settingData.format(anneal_temp_guideline) - print(settingData) - return settingData - - def generateAnnealCode(self, annealBedTemp, annealChamberTemp, annealMinutes, initialBeep, endCoolingTemp, coolingRate): - anneal_code = ';Generated Annealing GCODE by Anson Liu' - - if initialBeep: - anneal_code += '\nM300 ;play beep for container placement reminder' - - anneal_code += '\nM117 ' - if annealBedTemp: - anneal_code += 'Place container over objects on bed. ' - anneal_code += 'Waiting until annealing temp reached...' - anneal_code += '\nM73 P00 ;reset progress bar to 0' - - if annealBedTemp: - anneal_code += '\nM190 R{} ;wait for buildplate to reach temp in C even if cooling'.format(annealBedTemp) - if annealChamberTemp: - anneal_code += '\nM191 R{} ;wait for chamber to reach temp in C even if cooling'.format(annealChamberTemp) - - anneal_code += '\nM117 ' - if annealBedTemp: - anneal_code += 'Keep plastic container over objects. ' - anneal_code += 'Annealing...' - anneal_code += '\nM73 P00' # reset progress bar to 0 - - def generateDwellAndProgressCode(minutes): # Update progress bar and time every minute - dp_code = 'M73 P0 R{}'.format(minutes) - for x in range(1, minutes+1): - dwellWaitSeconds = 60 - dp_code += '\nG4 S{}'.format(dwellWaitSeconds) - progress = round(x/minutes * 100, 2) - remainingMinutes = minutes - x - dp_code += '\nM73 P{} R{}'.format(progress, remainingMinutes) - - return dp_code - - anneal_code += '\n' + generateDwellAndProgressCode(int(annealMinutes)) - - anneal_code += '\nM117 Annealing complete. Gradually lowering bed temperature...' - - for x in reversed(range(endCoolingTemp, max(annealBedTemp, annealChamberTemp))): - if annealBedTemp and annealBedTemp > x: - anneal_code += '\nM190 S{}'.format(x) # Wait for buildplate only if heating - if annealChamberTemp and annealChamberTemp > x: - anneal_code += '\nM191 S{}'.format(x) - anneal_code += '\nG4 S{}'.format(int(coolingRate)) # Wait user specified seconds after reaching each cooldown temperature - - if annealBedTemp: - anneal_code += '\nM140 S0' - if annealChamberTemp: - anneal_code += '\nM141 S0' - anneal_code += '\nM117 Annealing complete.' - - return anneal_code - - def execute(self, data): - heating_element = self.getSettingValueByKey("heatingElement") - - # Set bed and chamber temp to true/false value based on heating element selection - anneal_bed_temp = 0 - anneal_chamber_temp = 0 - if heating_element == "bed" or heating_element == "all": - anneal_bed_temp = self.getSettingValueByKey("annealBedTemp") - if heating_element == "chamber" or heating_element == "all": - anneal_chamber_temp = self.getSettingValueByKey("annealChamberTemp") - - anneal_minutes = self.getSettingValueByKey("annealMinutes") - initial_beep = self.getSettingValueByKey("reminderBeep") - final_cooling_temp = self.getSettingValueByKey("endCoolingTemp") - cooling_rate = self.getSettingValueByKey("coolingRate") - - # Test printing the generated anneal code - #print(self.generateAnnealCode(110, 120, False, 50)) - anneal_code = self.generateAnnealCode(anneal_bed_temp, anneal_chamber_temp, anneal_minutes, initial_beep, final_cooling_temp, cooling_rate) - - try: - end_of_gcode_index = data[-1].index(';End of Gcode') - except ValueError: - data[-1] += anneal_code + '\n' - else: - data[-1] = data[-1][:end_of_gcode_index] + anneal_code + '\n' + data[-1][end_of_gcode_index:] - - return data From 11350097aaa7413c8cce99db7fc799c1edf774ad Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Mon, 12 Sep 2022 14:59:14 -0400 Subject: [PATCH 07/13] Update dxu_umo_dual.def.json --- resources/definitions/dxu_umo_dual.def.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/resources/definitions/dxu_umo_dual.def.json b/resources/definitions/dxu_umo_dual.def.json index cf0658e49c..82f8675fb0 100644 --- a/resources/definitions/dxu_umo_dual.def.json +++ b/resources/definitions/dxu_umo_dual.def.json @@ -7,6 +7,15 @@ "default_value": [ [[100, -102.5], [ 110, -102.5], [ 110, -62.5], [100, -62.5]] ] + }, + "machine_width": { "default_value": 220 }, + "machine_depth": { "default_value": 205 }, + "machine_height": { "default_value": 200 }, + "machine_nozzle_heat_up_speed": { + "default_value": 2.0 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 0.8 } } } From 6472c679fd51eb262014de220dec37ec1b320735 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Mon, 12 Sep 2022 14:59:30 -0400 Subject: [PATCH 08/13] Update dxu_umo.def.json --- resources/definitions/dxu_umo.def.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/resources/definitions/dxu_umo.def.json b/resources/definitions/dxu_umo.def.json index 315cfd0143..ae1b671255 100644 --- a/resources/definitions/dxu_umo.def.json +++ b/resources/definitions/dxu_umo.def.json @@ -7,6 +7,15 @@ "default_value": [ [[100, -102.5], [ 110, -102.5], [ 110, -62.5], [100, -62.5]] ] + }, + "machine_width": { "default_value": 220 }, + "machine_depth": { "default_value": 205 }, + "machine_height": { "default_value": 200 }, + "machine_nozzle_heat_up_speed": { + "default_value": 2.0 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 0.8 } } } From 4201305712d7de0633b49e7ec3a96e6a665f7e8c Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Tue, 20 Sep 2022 09:37:00 -0400 Subject: [PATCH 09/13] Update nozzle heat up speed --- resources/definitions/dxu_umo.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/dxu_umo.def.json b/resources/definitions/dxu_umo.def.json index ae1b671255..9347211224 100644 --- a/resources/definitions/dxu_umo.def.json +++ b/resources/definitions/dxu_umo.def.json @@ -12,7 +12,7 @@ "machine_depth": { "default_value": 205 }, "machine_height": { "default_value": 200 }, "machine_nozzle_heat_up_speed": { - "default_value": 2.0 + "default_value": 1.95 }, "machine_nozzle_cool_down_speed": { "default_value": 0.8 From 4830eb8f5af55db3c768bcf86e2a42036e5de86b Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Tue, 20 Sep 2022 09:37:23 -0400 Subject: [PATCH 10/13] Update nozzle heat up speed --- resources/definitions/dxu_umo_dual.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/dxu_umo_dual.def.json b/resources/definitions/dxu_umo_dual.def.json index 82f8675fb0..d0bea5b5a2 100644 --- a/resources/definitions/dxu_umo_dual.def.json +++ b/resources/definitions/dxu_umo_dual.def.json @@ -12,7 +12,7 @@ "machine_depth": { "default_value": 205 }, "machine_height": { "default_value": 200 }, "machine_nozzle_heat_up_speed": { - "default_value": 2.0 + "default_value": 1.95 }, "machine_nozzle_cool_down_speed": { "default_value": 0.8 From f1fc0b44f7bf8485d2bbbc30c5f1dba30a0f5d89 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Wed, 5 Oct 2022 13:03:39 -0400 Subject: [PATCH 11/13] Updated start and end gcode --- resources/definitions/dxu_umo.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/dxu_umo.def.json b/resources/definitions/dxu_umo.def.json index 9347211224..be40747b6e 100644 --- a/resources/definitions/dxu_umo.def.json +++ b/resources/definitions/dxu_umo.def.json @@ -16,6 +16,18 @@ }, "machine_nozzle_cool_down_speed": { "default_value": 0.8 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_start_gcode" : { + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"; Script based on an original created by tjjfvi (https://github.com/tjjfvi)\\n; An up-to-date version of the tjjfvi's original script can be found\\n; here: https://csi.t6.fyi/\\n; Note - This script will only work in Cura V4.2 and above!\\n; --- Global Settings\\n; layer_height = {layer_height}\\n; smooth_spiralized_contours = {smooth_spiralized_contours}\\n; magic_mesh_surface_mode = {magic_mesh_surface_mode}\\n; machine_extruder_count = {machine_extruder_count}\\n; --- Single Extruder Settings\\n; speed_z_hop = {speed_z_hop}\\n; retraction_amount = {retraction_amount}\\n; retraction_hop = {retraction_hop}\\n; retraction_hop_enabled = {retraction_hop_enabled}\\n; retraction_enable = {retraction_enable}\\n; retraction_speed = {retraction_speed}\\n; retraction_retract_speed = {retraction_retract_speed}\\n; retraction_prime_speed = {retraction_prime_speed}\\n; speed_travel = {speed_travel}\\n\\nM355 S1 P25;turn on case light\\n\\n;material_bed_temperature={material_bed_temperature} material_print_temperature={material_print_temperature} material_print_temperature_layer_0={material_print_temperature_layer_0}\\nM190 S{material_bed_temperature_layer_0}\\nG21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nM200 D0 T{initial_extruder_nr} ;reset filament diameter\\nG28 ;home all\\nT{initial_extruder_nr} ;switch to the first nozzle used for print\\nM104 T{initial_extruder_nr} S{material_standby_temperature, initial_extruder_nr}\\nG0 X25 Y20 F7200 ;change Y20 to Y0 ansonl\\nG0 Z20 F2400\\nM109 T{initial_extruder_nr} S{material_print_temperature_layer_0, initial_extruder_nr}\\nG0 X210 Y0 F7200\\nG92 E-12.0 ; increase purge 6.5 to 12\\nG1 E0 F200 ;purge nozzle ;change F45 to F200 like ultimaker code ansonl\\nG1 E-6.5 F1500\\nG1 E0 F1500\\nG1 Y50 F9000 ;add quick movement to Y50 like ultimaker code ansonl\\nM400 ;finish all moves\\nT{initial_extruder_nr}\\n;end of startup sequence\\n\\nM355 S1 P50;turn on case light\"" + }, + "machine_end_gcode" : { + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \";end code from UM3\\nG91 ;Relative movement\\nG0 F15000 X8.0 Y8.0 Z3.5 E-4.5 ;Wiping+material retraction ;increase bed lower 0.5>5.0 and add Y movement\\nG0 F10000 Z1.5 E4.5 ;Compensation for the retraction\\nG90 ;Disable relative movement\\n\\nG90 ;absolute positioning\\nM104 S0 T0 ;extruder heater off\\nM104 S0 T1\\nM140 S0 ;turn off bed\\nT0 ; move to the first head\\nM107 ;fan off\\nM355 S0 ;turn off case light\"" } } } From 1b705338b813be75b4295c0ecf24684110899763 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Wed, 5 Oct 2022 13:04:04 -0400 Subject: [PATCH 12/13] Updated dual extruder start and end gcode --- resources/definitions/dxu_umo_dual.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/dxu_umo_dual.def.json b/resources/definitions/dxu_umo_dual.def.json index d0bea5b5a2..1744bf1d52 100644 --- a/resources/definitions/dxu_umo_dual.def.json +++ b/resources/definitions/dxu_umo_dual.def.json @@ -16,6 +16,18 @@ }, "machine_nozzle_cool_down_speed": { "default_value": 0.8 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_start_gcode" : { + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"; Script based on an original created by tjjfvi (https://github.com/tjjfvi)\\n; An up-to-date version of the tjjfvi's original script can be found\\n; here: https://csi.t6.fyi/\\n; Note - This script will only work in Cura V4.2 and above!\\n; --- Global Settings\\n; layer_height = {layer_height}\\n; smooth_spiralized_contours = {smooth_spiralized_contours}\\n; magic_mesh_surface_mode = {magic_mesh_surface_mode}\\n; machine_extruder_count = {machine_extruder_count}\\n; --- Single Extruder Settings\\n; speed_z_hop = {speed_z_hop}\\n; retraction_amount = {retraction_amount}\\n; retraction_hop = {retraction_hop}\\n; retraction_hop_enabled = {retraction_hop_enabled}\\n; retraction_enable = {retraction_enable}\\n; retraction_speed = {retraction_speed}\\n; retraction_retract_speed = {retraction_retract_speed}\\n; retraction_prime_speed = {retraction_prime_speed}\\n; speed_travel = {speed_travel}\\n; --- Multi-Extruder Settings\\n; speed_z_hop_0 = {speed_z_hop, 0}\\n; speed_z_hop_1 = {speed_z_hop, 1}\\n; retraction_amount_0 = {retraction_amount, 0}\\n; retraction_amount_1 = {retraction_amount, 1}\\n; retraction_hop_0 = {retraction_hop, 0}\\n; retraction_hop_1 = {retraction_hop, 1}\\n; retraction_hop_enabled_0 = {retraction_hop_enabled, 0}\\n; retraction_hop_enabled_1 = {retraction_hop_enabled, 1}\\n; retraction_prime_speed_0 = {retraction_prime_speed, 0}\\n; retraction_prime_speed_1 = {retraction_prime_speed, 1}\\n; retraction_retract_speed_0 = {retraction_retract_speed, 0}\\n; retraction_retract_speed_1 = {retraction_retract_speed, 1}\\n; retraction_speed_0 = {retraction_speed, 0}\\n; retraction_speed_1 = {retraction_speed, 1}\\n; retraction_enable_0 = {retraction_enable, 0}\\n; retraction_enable_1 = {retraction_enable, 1}\\n; speed_travel_0 = {speed_travel, 0}\\n; speed_travel_1 = {speed_travel, 1}\\n\\nM355 S1 P25;turn on case light\\n\\n;material_bed_temperature={material_bed_temperature} material_print_temperature={material_print_temperature} material_print_temperature_layer_0={material_print_temperature_layer_0}\\nM190 S{material_bed_temperature_layer_0}\\nM104 T0 S{material_standby_temperature, 0}\\nM104 T0 S{material_print_temperature_layer_0, 0}\\nG21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nM200 D0 T0 ;reset filament diameter\\nM200 D0 T1\\nG28 ;home all\\nT1 ; move to the nozzle 2\\nG0 Z20 F2400 ;move the platform to 30mm\\nM109 T1 S{material_print_temperature_layer_0, 1}\\nG0 X210 Y0 F7200 ;change Y20 to Y0 ansonl\\nG92 E0\\nG92 E-12.0 ;prime distance ;increase purge 6.5 to 12\\nG1 E0 F200 ;purge nozzle ;change F45 to F200 like ultimaker code ansonl\\nG1 E-6.5 F1500 ; retract\\nT0 ; move to the nozzle 1\\nM104 T1 S{material_standby_temperature, 1}\\nG0 Z20 F2400\\nM109 T0 S{material_print_temperature_layer_0, 0}\\nG0 X210 Y0 F7200 ;change Y20 to Y0 ansonl\\nG92 E0\\nG92 E-12.0\\nG1 E0 F200 ;purge nozzle\\nG1 E-6.5 F1500\\nM104 T0 S{material_standby_temperature, 0}\\nT{initial_extruder_nr} ;switch to the first nozzle used for print\\nM109 T{initial_extruder_nr} S{material_print_temperature_layer_0, initial_extruder_nr}\\nM400 ;finish all moves\\nG1 E0 F1500\\nG92 E0\\nG1 Y100 F9000 ;add quick movement to Y50 like ultimaker code ansonl\\n;end of startup sequence\\n\\nM355 S1 P50;turn on case light\"" + }, + "machine_end_gcode" : { + "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \";end code from UM3\\nG91 ;Relative movement\\nG0 F15000 X8.0 Y8.0 Z3.5 E-4.5 ;Wiping+material retraction ;increase bed lower 0.5>5.0 and add Y movement\\nG0 F10000 Z1.5 E4.5 ;Compensation for the retraction\\nG90 ;Disable relative movement\\n\\nG90 ;absolute positioning\\nM104 S0 T0 ;extruder heater off\\nM104 S0 T1\\nM140 S0 ;turn off bed\\nT0 ; move to the first head\\nM107 ;fan off\\nM355 S0 ;turn off case light\"" } } } From d377adead49d773e794ecde90f4fa43f15b97388 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Tue, 29 Nov 2022 14:53:23 -0500 Subject: [PATCH 13/13] Update dxu_umo.def.json Removed redundant nozzle size and filament diameter already specified in parent. --- resources/definitions/dxu_umo.def.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/definitions/dxu_umo.def.json b/resources/definitions/dxu_umo.def.json index be40747b6e..715b1ada90 100644 --- a/resources/definitions/dxu_umo.def.json +++ b/resources/definitions/dxu_umo.def.json @@ -17,12 +17,6 @@ "machine_nozzle_cool_down_speed": { "default_value": 0.8 }, - "machine_nozzle_size": { - "default_value": 0.4 - }, - "material_diameter": { - "default_value": 1.75 - }, "machine_start_gcode" : { "value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"; Script based on an original created by tjjfvi (https://github.com/tjjfvi)\\n; An up-to-date version of the tjjfvi's original script can be found\\n; here: https://csi.t6.fyi/\\n; Note - This script will only work in Cura V4.2 and above!\\n; --- Global Settings\\n; layer_height = {layer_height}\\n; smooth_spiralized_contours = {smooth_spiralized_contours}\\n; magic_mesh_surface_mode = {magic_mesh_surface_mode}\\n; machine_extruder_count = {machine_extruder_count}\\n; --- Single Extruder Settings\\n; speed_z_hop = {speed_z_hop}\\n; retraction_amount = {retraction_amount}\\n; retraction_hop = {retraction_hop}\\n; retraction_hop_enabled = {retraction_hop_enabled}\\n; retraction_enable = {retraction_enable}\\n; retraction_speed = {retraction_speed}\\n; retraction_retract_speed = {retraction_retract_speed}\\n; retraction_prime_speed = {retraction_prime_speed}\\n; speed_travel = {speed_travel}\\n\\nM355 S1 P25;turn on case light\\n\\n;material_bed_temperature={material_bed_temperature} material_print_temperature={material_print_temperature} material_print_temperature_layer_0={material_print_temperature_layer_0}\\nM190 S{material_bed_temperature_layer_0}\\nG21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nM200 D0 T{initial_extruder_nr} ;reset filament diameter\\nG28 ;home all\\nT{initial_extruder_nr} ;switch to the first nozzle used for print\\nM104 T{initial_extruder_nr} S{material_standby_temperature, initial_extruder_nr}\\nG0 X25 Y20 F7200 ;change Y20 to Y0 ansonl\\nG0 Z20 F2400\\nM109 T{initial_extruder_nr} S{material_print_temperature_layer_0, initial_extruder_nr}\\nG0 X210 Y0 F7200\\nG92 E-12.0 ; increase purge 6.5 to 12\\nG1 E0 F200 ;purge nozzle ;change F45 to F200 like ultimaker code ansonl\\nG1 E-6.5 F1500\\nG1 E0 F1500\\nG1 Y50 F9000 ;add quick movement to Y50 like ultimaker code ansonl\\nM400 ;finish all moves\\nT{initial_extruder_nr}\\n;end of startup sequence\\n\\nM355 S1 P50;turn on case light\"" },