diff --git a/resources/printers/ams_load.gcode b/resources/printers/ams_load.gcode new file mode 100644 index 0000000000..84ac404811 --- /dev/null +++ b/resources/printers/ams_load.gcode @@ -0,0 +1,66 @@ +M620 S[next_extruder] +M106 P1 S255 +M104 S142 +M17 S +M17 X0.5 Y0.5 +G91 +G1 Y-5 F3000 +G1 Z3.0 F1200 +G90 +G28 X +M17 R + +G1 X70 F12000 +G1 Y245 +G1 Y265 F3000 +M400 +M106 P1 S0 +M109 S250 +G1 X90 F3000 +G1 Y255 F4000 +G1 X100 F5000 +G1 X120 F15000 + +G1 X20 Y50 F12000 +G1 Y-3 + +T[next_extruder] + +G1 X54 F12000 +G1 Y265 +M400 +M106 P1 S0 +G92 E0 +G1 E40 F200 +G92 E0 +G1 E-2 F300 +M400 +M109 S[new_filament_temp] +M400 +M106 P1 S255 +M400 S3 +M106 P1 S0 +G1 X70 F9000 +G1 X76 F15000 +G1 X65 F15000 +G1 X76 F15000 +G1 X65 F15000 + +G1 X70 F5000 +G1 X90 F3000 +G1 Y255 F4000 +G1 X100 F5000 +G1 Y265 F5000 +G1 X70 F10000 +G1 X100 F5000 +G1 X70 F10000 +G1 X100 F5000 +G1 X165 F15000 +G1 Y245 +G1 X70 F12000 +G1 Y265 F3000 + +G91 +G1 Z-3.0 F1200 +G90 +M621 S[next_extruder] \ No newline at end of file diff --git a/resources/printers/ams_unload.gcode b/resources/printers/ams_unload.gcode new file mode 100644 index 0000000000..3bda4f941d --- /dev/null +++ b/resources/printers/ams_unload.gcode @@ -0,0 +1,34 @@ +M620 S255 +M106 P1 S255 +M104 S142 +M17 S +M17 X0.5 Y0.5 +G91 +G1 Y-5 F3000 +G1 Z3.0 F1200 +G90 +G28 X +M17 R + +G1 X70 F12000 +G1 Y245 +G1 Y265 F3000 +M400 +M106 P1 S0 +M109 S250 +G1 X90 F3000 +G1 Y255 F4000 +G1 X100 F5000 +G1 X120 F12000 + +G1 X20 Y50 F12000 +G1 Y-3 + +T255 +M104 S0 +G1 X70 F3000 + +G91 +G1 Z-3.0 F1200 +G90 +M621 S255 \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 2b6baa3389..fdaf5a3a19 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1520,20 +1520,9 @@ int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp std::string gcode = ""; if (tray_index == 255) { - // unload gcode - gcode = "M620 S255\nM104 S250\nG28 X\nG91\nG1 Z3.0 F1200\nG90\n" - "G1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM109 S250\nG1 X120 F12000\n" - "G1 X20 Y50 F12000\nG1 Y-3\nT255\nM104 S0\nG1 X165 F5000\nG1 Y245\n" - "G91\nG1 Z-3.0 F1200\nG90\nM621 S255\n"; + gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); } else { - // load gcode - gcode = "M620 S[next_extruder]\nM104 S250\nG28 X\nG91\n\nG1 Z3.0 F1200\nG90\n" - "G1 X70 F12000\nG1 Y245\nG1 Y265 F3000\nM109 S250\nG1 X120 F12000\nG1 X20 Y50 F12000\nG1 Y-3" - "\nT[next_extruder]\nG1 X54 F12000\nG1 Y265\nM400\nM106 P1 S0\nG92 E0\nG1 E40 F200\nM400" - "\nM109 S[new_filament_temp]\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM400\nM106 P1 S0\nG1 X70 F9000" - "\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000\nG1 X70 F6000\nG1 X100 F5000\nG1 X70 F15000" - "\nG1 X100 F5000\nG1 X70 F15000\nG1 X165 F5000\nG1 Y245\nG91\nG1 Z-3.0 F1200\nG90\nM621 S[next_extruder]\n"; - + gcode = DeviceManager::load_gcode(printer_type, "ams_load.gcode"); boost::replace_all(gcode, "[next_extruder]", std::to_string(tray_index)); boost::replace_all(gcode, "[new_filament_temp]", std::to_string(new_temp)); } @@ -4102,4 +4091,23 @@ bool DeviceManager::load_functional_config(std::string config_file) return true; } +std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_file) +{ + std::string gcode_full_path = Slic3r::resources_dir() + "/printers/" + gcode_file; + std::ifstream gcode(encode_path(gcode_full_path.c_str()).c_str()); + try { + std::stringstream gcode_str; + if (gcode.is_open()) { + gcode_str << gcode.rdbuf(); + gcode.close(); + return gcode_str.str(); + } + } catch(...) { + BOOST_LOG_TRIVIAL(error) << "load gcode file failed, file = " << gcode_file << ", path = " << gcode_full_path; + } + + + return ""; +} + } // namespace Slic3r diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 303c643269..cb7bb9b947 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -834,6 +834,7 @@ public: static bool get_bed_temperature_limit(std::string type_str, int& limit); static bool load_functional_config(std::string config_file); + static std::string load_gcode(std::string type_str, std::string gcode_file); }; } // namespace Slic3r