From fc32042639cc83cc6876e63b86c944671649955c Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 4 Mar 2025 12:08:54 +0800 Subject: [PATCH] FIX:update load/unload command for n3s Change-Id: Ic4655f368a0ffb0e16139dee1fd1ffc34236e9eb --- src/slic3r/GUI/DeviceManager.cpp | 117 +++++++++++++++---------------- src/slic3r/GUI/DeviceManager.hpp | 5 +- src/slic3r/GUI/StatusPanel.cpp | 19 +++-- 3 files changed, 69 insertions(+), 72 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 5675c6ba8..a8967b5d4 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2081,71 +2081,70 @@ int MachineObject::command_set_chamber(int temp) return this->publish_json(j.dump(), 1); } -int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp) -{ - assert(!is_enable_np); +//int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp) +//{ +// assert(!is_enable_np); +// +// BOOST_LOG_TRIVIAL(trace) << "ams_switch to " << tray_index << " with temp: " << old_temp << ", " << new_temp; +// +// if (old_temp < 0) old_temp = FILAMENT_DEF_TEMP; +// if (new_temp < 0) new_temp = FILAMENT_DEF_TEMP; +// int result = 0; +// +// +// //command +// if (is_support_command_ams_switch) { +// command_ams_change_filament(tray_index, old_temp, new_temp); +// } +// //gcode +// else { +// std::string gcode = ""; +// if (tray_index == 255) { +// gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); +// } +// else { +// // include VIRTUAL_TRAY_MAIN_ID +// 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)); +// } +// +// result = this->publish_gcode(gcode); +// } +// +// return result; +//} - BOOST_LOG_TRIVIAL(trace) << "ams_switch to " << tray_index << " with temp: " << old_temp << ", " << new_temp; - if (old_temp < 0) old_temp = FILAMENT_DEF_TEMP; - if (new_temp < 0) new_temp = FILAMENT_DEF_TEMP; - - std::string gcode = ""; - int result = 0; - - //command - if (is_support_command_ams_switch) { - command_ams_change_filament(tray_index, old_temp, new_temp); - } - else { - std::string gcode = ""; - if (tray_index == 255) { - gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); - } - else { - // include VIRTUAL_TRAY_MAIN_ID - 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)); - } - - result = this->publish_gcode(gcode); - } - - return result; -} - -int MachineObject::command_ams_change_filament(int tray_id, int old_temp, int new_temp) +int MachineObject::command_ams_change_filament(bool load, std::string ams_id, std::string slot_id, int old_temp, int new_temp) { json j; - j["print"]["command"] = "ams_change_filament"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["target"] = tray_id; - j["print"]["curr_temp"] = old_temp; - j["print"]["tar_temp"] = new_temp; - return this->publish_json(j.dump()); -} + try { + auto tray_id = 0; + if (ams_id < "16") { + tray_id = atoi(ams_id.c_str()) * 4 + atoi(slot_id.c_str()); + } -int MachineObject::command_ams_change_filament2(bool load_or_unload, int ams_id, int slot_id, int old_temp, int new_temp) -{ - assert(is_enable_np); - json j; - j["print"]["command"] = "ams_change_filament"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - //j["print"]["target"] = ams_id == VIRTUAL_TRAY_MAIN_ID?VIRTUAL_TRAY_DEPUTY_ID:slot_id; /*this is not used in new protocol*/ - j["print"]["curr_temp"] = old_temp; - j["print"]["tar_temp"] = new_temp; - j["print"]["ams_id"] = ams_id; + j["print"]["command"] = "ams_change_filament"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["curr_temp"] = old_temp; + j["print"]["tar_temp"] = new_temp; + j["print"]["ams_id"] = atoi(ams_id.c_str()); - // the new protocol - if (load_or_unload) - { - j["print"]["slot_id"] = slot_id; - } - else - { - j["print"]["slot_id"] = 255;// the new protocol to mark unload - } + if (!load) { + j["print"]["target"] = 255; + j["print"]["slot_id"] = 255; // the new protocol to mark unload + + } else { + if (tray_id == 0) { + j["print"]["target"] = atoi(ams_id.c_str()); + } else { + j["print"]["target"] = tray_id; + } + + j["print"]["slot_id"] = atoi(slot_id.c_str()); + } + } catch (const std::exception &) {} return this->publish_json(j.dump()); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 889a3390b..eec70d240 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -1120,9 +1120,8 @@ public: int command_set_nozzle_new(int nozzle_id, int temp); int command_set_chamber(int temp); // ams controls - int command_ams_switch(int tray_index, int old_temp = 210, int new_temp = 210); - int command_ams_change_filament(int tray_id, int old_temp = 210, int new_temp = 210); - int command_ams_change_filament2(bool load_or_unload, int ams_id, int slot_id, int old_temp = 210, int new_temp = 210); + //int command_ams_switch(int tray_index, int old_temp = 210, int new_temp = 210); + int command_ams_change_filament(bool load, std::string ams_id, std::string slot_id, int old_temp = 210, int new_temp = 210); int command_ams_user_settings(int ams_id, bool start_read_opt, bool tray_read_opt, bool remain_flag = false); int command_ams_switch_filament(bool switch_filament); int command_ams_air_print_detect(bool air_print_detect); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index d7d77f617..34f7cab76 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -4175,12 +4175,11 @@ void StatusPanel::on_ams_load_curr() if (obj->is_enable_np) { try { - if (!curr_ams_id.empty() && !curr_can_id.empty()) { - obj->command_ams_change_filament2(true, stoi(curr_ams_id), 0, old_temp, new_temp); + if (!curr_ams_id.empty() && !curr_can_id.empty()) { obj->command_ams_change_filament(true, curr_ams_id, "0", old_temp, new_temp); } } catch (...) {} } else { - obj->command_ams_switch(254, old_temp, new_temp); + obj->command_ams_change_filament(true, "254", "0", old_temp, new_temp); } } @@ -4216,12 +4215,12 @@ void StatusPanel::on_ams_load_curr() if (obj->is_enable_np) { try { if (!curr_ams_id.empty() && !curr_can_id.empty()) { - obj->command_ams_change_filament2(true, stoi(curr_ams_id), stoi(curr_can_id), old_temp, new_temp); + obj->command_ams_change_filament(true, curr_ams_id, curr_can_id, old_temp, new_temp); } } catch (...){} } else { - obj->command_ams_switch(tray_index, old_temp, new_temp); + obj->command_ams_change_filament(true, curr_ams_id, curr_can_id, old_temp, new_temp); } } } @@ -4273,17 +4272,17 @@ void StatusPanel::on_ams_switch(SimpleEvent &event) void StatusPanel::on_ams_unload(SimpleEvent &event) { if (obj) { + std::string curr_ams_id = m_ams_control->GetCurentAms(); + std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + if (obj->is_enable_np) { try { - std::string curr_ams_id = m_ams_control->GetCurentAms(); - std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); - for (auto ext : obj->m_extder_data.extders) { - if (ext.snow.ams_id == curr_ams_id && ext.snow.slot_id == curr_can_id) { obj->command_ams_change_filament2(false, stoi(curr_ams_id), 0); } + if (ext.snow.ams_id == curr_ams_id && ext.snow.slot_id == curr_can_id) { obj->command_ams_change_filament(false, curr_ams_id, "255"); } } } catch (...) {} } else { - obj->command_ams_switch(255); + obj->command_ams_change_filament(false, curr_ams_id, "255"); } } }