ENH: refine load/unload for spool holder filament

update ams load/unload gcode

Change-Id: Ia3d4a26efb14325c89f0c9f9571268c1834361ae
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2023-02-17 12:10:23 +08:00 committed by Lane.Wei
parent 9480b84b64
commit a48c36fde1
11 changed files with 323 additions and 156 deletions

View File

@ -1,6 +1,6 @@
M620 S[next_extruder]
M106 S255
M104 S142
M104 S250
M17 S
M17 X0.5 Y0.5
G91
@ -9,24 +9,24 @@ G1 Z3
G90
G28 X
M17 R
G1 X70 F12000
G1 X70 F21000
G1 Y245
G1 Y265 F3000
G4
M106 S0
M109 S250
G4 S10
G1 X90
G1 Y255
G1 X120
G1 X20 Y50 F12000
G1 X20 Y50 F21000
G1 Y-3
T[next_extruder]
G1 X54
G1 Y265
G92 E0
G1 E40 F180
M109 S[new_filament_temp]
G4
M104 S[new_filament_temp]
G1 X70 F15000
G1 X76
G1 X65

View File

@ -1,35 +1,32 @@
M620 S255
M106 P1 S255
M104 S142
M104 S250
M17 S
M17 X0.5 Y0.5
G91
G1 Y-5 F3000
G1 Z3.0 F1200
G1 Z3 F1200
G90
G28 X
M17 R
G1 X70 F12000
G1 X70 F21000
G1 Y245
G1 Y265 F3000
M400
G4
M106 P1 S0
M109 S250
G4 S10
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 X120 F12000
G1 X20 Y50 F12000
G1 X120 F21000
G1 X20 Y50
G1 Y-3
T255
G4
M104 S0
G1 X70 F3000
G91
G1 Z-3.0 F1200
G1 Z-3 F1200
G90
M621 S255

View File

@ -1562,9 +1562,8 @@ int MachineObject::command_ams_switch(int tray_index, int old_temp, int new_temp
std::string gcode = "";
if (tray_index == 255) {
gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode");
} else if (tray_index == VIRTUAL_TRAY_ID) {
gcode = DeviceManager::load_gcode(printer_type, "vt_load.gcode");
} else {
// include VIRTUAL_TRAY_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));
@ -1668,7 +1667,7 @@ int MachineObject::command_ams_select_tray(std::string tray_id)
int MachineObject::command_ams_control(std::string action)
{
//valid actions
if (action == "resume" || action == "reset" || action == "pause") {
if (action == "resume" || action == "reset" || action == "pause" || action == "done") {
json j;
j["print"]["command"] = "ams_control";
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);

View File

@ -59,46 +59,51 @@ void PrintJob::on_success(std::function<void()> success)
wxString PrintJob::get_http_error_msg(unsigned int status, std::string body)
{
int code = 0;
std::string error;
std::string message;
wxString result;
if (status >= 400 && status < 500)
try {
json j = json::parse(body);
if (j.contains("code")) {
if (!j["code"].is_null())
code = j["code"].get<int>();
try {
int code = 0;
std::string error;
std::string message;
wxString result;
if (status >= 400 && status < 500)
try {
json j = json::parse(body);
if (j.contains("code")) {
if (!j["code"].is_null())
code = j["code"].get<int>();
}
if (j.contains("error")) {
if (!j["error"].is_null())
error = j["error"].get<std::string>();
}
if (j.contains("message")) {
if (!j["message"].is_null())
message = j["message"].get<std::string>();
}
switch (status) {
;
}
}
if (j.contains("error")) {
if (!j["error"].is_null())
error = j["error"].get<std::string>();
}
if (j.contains("message")) {
if (!j["message"].is_null())
message = j["message"].get<std::string>();
}
switch (status) {
catch (...) {
;
}
}
catch (...) {
else if (status == 503) {
return _L("Service Unavailable");
}
else {
wxString unkown_text = _L("Unkown Error.");
unkown_text += wxString::Format("status=%u, body=%s", status, body);
BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error;
return unkown_text;
}
BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error;
result = wxString::Format("code=%u, error=%s", code, from_u8(error));
return result;
} catch(...) {
;
}
else if (status == 503) {
return _L("Service Unavailable");
}
else {
wxString unkown_text = _L("Unkown Error.");
unkown_text += wxString::Format("status=%u, body=%s", status, body);
BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error;
return unkown_text;
}
BOOST_LOG_TRIVIAL(error) << "http_error: status=" << status << ", code=" << code << ", error=" << error;
result = wxString::Format("code=%u, error=%s", code, from_u8(error));
return result;
return wxEmptyString;
}
void PrintJob::process()

View File

@ -26,6 +26,7 @@ namespace Slic3r { namespace GUI {
wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent);
wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent);
wxDEFINE_EVENT(EVT_SECONDARY_CHECK_FUNC, wxCommandEvent);
wxDEFINE_EVENT(EVT_CHECKBOX_CHANGE, wxCommandEvent);
wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent);
wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent);
@ -586,18 +587,38 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons
m_button_cancel->SetCornerRadius(FromDIP(12));
m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) {
wxCommandEvent evt(EVT_SECONDARY_CHECK_CANCEL);
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(evt);
this->on_hide();
wxCommandEvent evt(EVT_SECONDARY_CHECK_CANCEL);
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(evt);
this->on_hide();
});
if (btn_style != CONFIRM_AND_CANCEL)
m_button_cancel->Hide();
else
m_button_fn = new Button(this, _L("Done"));
m_button_fn->SetBackgroundColor(btn_bg_white);
m_button_fn->SetBorderColor(wxColour(38, 46, 48));
m_button_fn->SetFont(Label::Body_12);
m_button_fn->SetSize(wxSize(FromDIP(58), FromDIP(24)));
m_button_fn->SetMinSize(wxSize(-1, FromDIP(24)));
m_button_fn->SetCornerRadius(FromDIP(12));
m_button_fn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) {
post_event(wxCommandEvent(EVT_SECONDARY_CHECK_FUNC));
e.Skip();
});
if (btn_style == CONFIRM_AND_CANCEL) {
m_button_cancel->Show();
m_button_fn->Hide();
} else if (btn_style == CONFIRM_AND_FUNC) {
m_button_cancel->Hide();
m_button_fn->Show();
} else {
m_button_cancel->Hide();
m_button_fn->Hide();
}
sizer_button->AddStretchSpacer();
sizer_button->Add(m_button_fn, 0, wxALL, FromDIP(5));
sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5));
sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5));
sizer_button->Add(FromDIP(5),0, 0, 0);
@ -619,6 +640,16 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons
wxGetApp().UpdateFrameDarkUI(this);
}
void SecondaryCheckDialog::post_event(wxCommandEvent&& event)
{
if (event_parent) {
event.SetString("");
event.SetEventObject(event_parent);
wxPostEvent(event_parent, event);
event.Skip();
}
}
void SecondaryCheckDialog::update_text(wxString text)
{
wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL);
@ -681,6 +712,33 @@ void SecondaryCheckDialog::on_hide()
}
}
void SecondaryCheckDialog::update_title_style(wxString title, SecondaryCheckDialog::ButtonStyle style, wxWindow* parent)
{
SetTitle(title);
event_parent = parent;
if (style == CONFIRM_AND_CANCEL) {
m_button_cancel->Show();
m_button_fn->Hide();
}
else if (style == CONFIRM_AND_FUNC) {
m_button_cancel->Hide();
m_button_fn->Show();
}
else {
m_button_cancel->Hide();
m_button_fn->Hide();
}
Layout();
}
void SecondaryCheckDialog::update_func_btn(wxString func_btn_text)
{
m_button_fn->SetLabel(func_btn_text);
rescale();
}
void SecondaryCheckDialog::update_btn_label(wxString ok_btn_text, wxString cancel_btn_text)
{
m_button_ok->SetLabel(ok_btn_text);

View File

@ -22,6 +22,7 @@
#include <wx/spinctrl.h>
#include <wx/artprov.h>
#include <wx/wrapsizer.h>
#include <wx/event.h>
#include "AmsMappingPopup.hpp"
#include "GUI_Utils.hpp"
@ -39,6 +40,7 @@ namespace Slic3r { namespace GUI {
wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent);
wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent);
wxDECLARE_EVENT(EVT_SECONDARY_CHECK_FUNC, wxCommandEvent);
class ReleaseNoteDialog : public DPIDialog
{
@ -98,11 +100,14 @@ public:
class SecondaryCheckDialog : public DPIFrame
{
private:
wxWindow* event_parent { nullptr };
public:
enum ButtonStyle {
ONLY_CONFIRM = 0,
CONFIRM_AND_CANCEL = 1,
MAX_STYLE_NUM = 2
ONLY_CONFIRM = 0,
CONFIRM_AND_CANCEL = 1,
CONFIRM_AND_FUNC = 2,
MAX_STYLE_NUM = 3
};
SecondaryCheckDialog(
wxWindow* parent,
@ -118,6 +123,9 @@ public:
void on_show();
void on_hide();
void update_btn_label(wxString ok_btn_text, wxString cancel_btn_text);
void update_title_style(wxString title, SecondaryCheckDialog::ButtonStyle style, wxWindow* parent = nullptr);
void update_func_btn(wxString func_btn_text);
void post_event(wxCommandEvent&& event);
void rescale();
~SecondaryCheckDialog();
void on_dpi_changed(const wxRect& suggested_rect);
@ -125,8 +133,9 @@ public:
Label* m_staticText_release_note {nullptr};
wxBoxSizer* m_sizer_main;
wxScrolledWindow *m_vebview_release_note {nullptr};
Button* m_button_ok;
Button* m_button_cancel;
Button* m_button_ok { nullptr };
Button* m_button_cancel { nullptr };
Button* m_button_fn { nullptr };
wxCheckBox* m_show_again_checkbox;
bool not_show_again = false;
std::string show_again_config_text = "";

View File

@ -1274,7 +1274,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
Bind(EVT_AMS_GUIDE_WIKI, &StatusPanel::on_ams_guide, this);
Bind(EVT_AMS_RETRY, &StatusPanel::on_ams_retry, this);
Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this);
Bind(EVT_SECONDARY_CHECK_FUNC, &StatusPanel::on_print_error_func, this);
m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this);
m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this);
@ -1591,7 +1591,7 @@ void StatusPanel::show_recenter_dialog() {
obj->command_go_home();
}
void StatusPanel::show_error_message(wxString msg)
void StatusPanel::show_error_message(wxString msg, std::string print_error_str)
{
if (msg.IsEmpty()) {
if (m_panel_error_txt->IsShown()) {
@ -1611,6 +1611,12 @@ void StatusPanel::show_error_message(wxString msg)
if (m_print_error_dlg == nullptr) {
m_print_error_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM);
}
if (print_error_str == "07FF 8007") {
m_print_error_dlg->update_func_btn("Done");
m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_FUNC, this);
} else {
m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this);
}
m_print_error_dlg->update_text(msg);
m_print_error_dlg->on_show();
}
@ -1638,7 +1644,7 @@ void StatusPanel::update_error_message()
error_msg = wxString::Format("%s[%s]",
error_msg,
print_error_str);
show_error_message(error_msg);
show_error_message(error_msg, print_error_str);
} else {
BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error;
}
@ -1951,91 +1957,110 @@ void StatusPanel::update_ams(MachineObject *obj)
std::string curr_ams_id = m_ams_control->GetCurentAms();
std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id);
bool is_vt_tray = false;
if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID))
is_vt_tray = true;
if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) {
m_ams_control->SetAmsStep(curr_ams_id, curr_can_id, AMSPassRoadType::AMS_ROAD_TYPE_NONE, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
else if (m_ams_control->GetCurentAms() != obj->m_ams_id) {
m_ams_control->SetAmsStep(curr_ams_id, curr_can_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
// set segment 1, 2
if (m_ams_control->GetCurentAms() != std::to_string(VIRTUAL_TRAY_ID)) {
if (obj->m_tray_now != "255" && obj->is_filament_at_extruder()) {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2);
}
else if (obj->m_tray_now != "255") {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1);
}
else {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
} else {
if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
// set segment 3
if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) {
m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color());
} else {
m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(curr_ams_id, obj->m_tray_id));
}
if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) {
if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID)
&& (obj->m_tray_now != std::to_string(VIRTUAL_TRAY_ID) || obj->m_tray_now != "255")
) {
// wait to heat hotend
if (obj->ams_status_sub == 0x02) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_VT_LOAD);
}
else if (obj->ams_status_sub == 0x05) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_FEED_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD);
}
else if (obj->ams_status_sub == 0x06) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_CONFIRM_EXTRUDED, FilamentStepType::STEP_TYPE_VT_LOAD);
}
else if (obj->ams_status_sub == 0x07) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD);
}
else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_VT_LOAD);
}
} else {
// wait to heat hotend
if (obj->ams_status_sub == 0x02) {
if (curr_ams_id == obj->m_ams_id) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, true);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_LOAD);
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, false);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
m_ams_control->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else if (obj->ams_status_sub == 0x03) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, true);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1);
m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD);
}
else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, false);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else if (obj->ams_status_sub == 0x04) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, true);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD);
}
else {
//FilamentStep::STEP_PULL_CURR_FILAMENT);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, false);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else if (obj->ams_status_sub == 0x05) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, true);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD);
}
else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, false);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else if (obj->ams_status_sub == 0x06) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, true);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, false);
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD);
}
else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD);
}
} else if (obj->ams_status_sub == 0x07) {
if (!obj->is_ams_unload()) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT);
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, false);
m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD);
}
else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD);
}
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
} else {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
} else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE);
if (obj->is_filament_move()) {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
} else {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, false);
if (obj->is_filament_move()) {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
} else {
m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD);
}
}
} else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD);
} else {
m_ams_control->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD);
}
for (auto ams_it = obj->amsList.begin(); ams_it != obj->amsList.end(); ams_it++) {
std::string ams_id = ams_it->first;
try {
@ -2796,7 +2821,6 @@ void StatusPanel::on_ams_selected(wxCommandEvent &event)
update_ams_control_state(curr_ams_id, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI));
}
}
}
void StatusPanel::on_ams_guide(wxCommandEvent& event)
@ -2813,6 +2837,17 @@ void StatusPanel::on_ams_retry(wxCommandEvent& event)
}
}
void StatusPanel::on_print_error_func(wxCommandEvent& event)
{
BOOST_LOG_TRIVIAL(info) << "on_print_error_func";
if (obj) {
obj->command_ams_control("done");
if (m_print_error_dlg) {
m_print_error_dlg->on_hide();
}
}
}
void StatusPanel::on_fan_changed(wxCommandEvent& event)
{
auto type = event.GetInt();

View File

@ -312,7 +312,7 @@ protected:
void on_subtask_pause_resume(wxCommandEvent &event);
void on_subtask_abort(wxCommandEvent &event);
void on_print_error_clean(wxCommandEvent &event);
void show_error_message(wxString msg);
void show_error_message(wxString msg, std::string print_error_str = "");
void error_info_reset();
void show_recenter_dialog();
@ -348,6 +348,7 @@ protected:
void on_ams_selected(wxCommandEvent &event);
void on_ams_guide(wxCommandEvent &event);
void on_ams_retry(wxCommandEvent &event);
void on_print_error_func(wxCommandEvent& event);
void on_fan_changed(wxCommandEvent& event);
void on_switch_speed(wxCommandEvent& event);

View File

@ -9,8 +9,9 @@
namespace Slic3r { namespace GUI {
static const int LOAD_STEP_COUNT = 5;
static const int UNLOAD_STEP_COUNT = 3;
static const int LOAD_STEP_COUNT = 5;
static const int UNLOAD_STEP_COUNT = 3;
static const int VT_LOAD_STEP_COUNT = 4;
static const wxColour AMS_TRAY_DEFAULT_COL = wxColour(255, 255, 255);
@ -22,7 +23,18 @@ static wxString FILAMENT_LOAD_STEP_STRING[LOAD_STEP_COUNT] = {
_L("Purge old filament"),
};
static wxString FILAMENT_UNLOAD_STEP_STRING[UNLOAD_STEP_COUNT] = {_L("Heat the nozzle"), _L("Cut filament"), _L("Pull back current filament")};
static wxString VT_TRAY_LOAD_STEP_STRING[VT_LOAD_STEP_COUNT] = {
_L("Heat the nozzle"),
_L("Feed new filament from external spool"),
_L("Confirm whether the filament has been extruded"),
_L("Purge old filament"),
};
static wxString FILAMENT_UNLOAD_STEP_STRING[UNLOAD_STEP_COUNT] = {
_L("Heat the nozzle"),
_L("Cut filament"),
_L("Pull back current filament")
};
wxDEFINE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
wxDEFINE_EVENT(EVT_AMS_LOAD, SimpleEvent);
@ -1805,9 +1817,15 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_filament_unload_step->SetSize(AMS_STEP_SIZE);
m_filament_unload_step->SetBackgroundColour(*wxWHITE);
m_filament_vt_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY);
m_filament_vt_load_step->SetMinSize(AMS_STEP_SIZE);
m_filament_vt_load_step->SetSize(AMS_STEP_SIZE);
m_filament_vt_load_step->SetBackgroundColour(*wxWHITE);
m_simplebook_right->AddPage(tip_right, wxEmptyString, false);
m_simplebook_right->AddPage(m_filament_load_step, wxEmptyString, false);
m_simplebook_right->AddPage(m_filament_unload_step, wxEmptyString, false);
m_simplebook_right->AddPage(m_filament_vt_load_step, wxEmptyString, false);
m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24);
@ -2169,8 +2187,15 @@ void AMSControl::msw_rescale()
void AMSControl::UpdateStepCtrl()
{
for (int i = 0; i < LOAD_STEP_COUNT; i++) { m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); }
for (int i = 0; i < UNLOAD_STEP_COUNT; i++) { m_filament_unload_step->AppendItem(FILAMENT_UNLOAD_STEP_STRING[i]); }
for (int i = 0; i < LOAD_STEP_COUNT; i++) {
m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]);
}
for (int i = 0; i < UNLOAD_STEP_COUNT; i++) {
m_filament_unload_step->AppendItem(FILAMENT_UNLOAD_STEP_STRING[i]);
}
for (int i = 0; i < VT_LOAD_STEP_COUNT; i++) {
m_filament_vt_load_step->AppendItem(VT_TRAY_LOAD_STEP_STRING[i]);
}
}
void AMSControl::CreateAms()
@ -2403,26 +2428,56 @@ void AMSControl::SwitchAms(std::string ams_id)
// update buttons
}
void AMSControl::SetFilamentStep(int item_idx, bool isload)
void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type)
{
if (item_idx == FilamentStep::STEP_IDLE && isload) {
if (item_idx == FilamentStep::STEP_IDLE) {
m_simplebook_right->SetSelection(0);
m_filament_load_step->Idle();
return;
}
if (item_idx == FilamentStep::STEP_IDLE && !isload) {
m_filament_unload_step->Idle();
m_filament_vt_load_step->Idle();
return;
}
if (item_idx >= 0 && isload && item_idx < FilamentStep::STEP_COUNT) {
m_simplebook_right->SetSelection(1);
m_filament_load_step->SelectItem(item_idx - 1);
}
if (item_idx >= 0 && !isload && item_idx < FilamentStep::STEP_COUNT) {
m_simplebook_right->SetSelection(2);
m_filament_unload_step->SelectItem(item_idx - 1);
if (f_type == FilamentStepType::STEP_TYPE_LOAD) {
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
m_simplebook_right->SetSelection(1);
m_filament_load_step->SelectItem(item_idx - 1);
} else {
m_filament_load_step->Idle();
}
} else if (f_type == FilamentStepType::STEP_TYPE_UNLOAD) {
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
m_simplebook_right->SetSelection(2);
m_filament_unload_step->SelectItem(item_idx - 1);
}
else {
m_filament_unload_step->Idle();
}
} else if (f_type == FilamentStepType::STEP_TYPE_VT_LOAD) {
m_simplebook_right->SetSelection(3);
if (item_idx == STEP_HEAT_NOZZLE) {
m_filament_vt_load_step->SelectItem(0);
}
else if (item_idx == STEP_FEED_FILAMENT) {
m_filament_vt_load_step->SelectItem(1);
}
else if (item_idx == STEP_CONFIRM_EXTRUDED) {
m_filament_vt_load_step->SelectItem(2);
}
else if (item_idx == STEP_PURGE_OLD_FILAMENT) {
m_filament_vt_load_step->SelectItem(3);
}
else {
m_filament_vt_load_step->Idle();
}
} else {
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
m_simplebook_right->SetSelection(1);
m_filament_load_step->SelectItem(item_idx - 1);
}
else {
m_filament_load_step->Idle();
}
}
}
@ -2470,6 +2525,15 @@ bool AMSControl::Enable(bool enable)
return wxWindow::Enable(enable);
}
void AMSControl::SetExtruder(bool on_off, wxColour col)
{
if (!on_off) {
m_extruder->TurnOff();
} else {
m_extruder->TurnOn(col);
}
}
void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step)
{
AmsCansWindow *cans = nullptr;
@ -2487,25 +2551,22 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
if (cans == nullptr) return;
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
if (ams_id == m_current_ams) { m_extruder->TurnOff(); }
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
if (ams_id == m_current_ams) { m_extruder->TurnOff(); }
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
if (ams_id == m_current_ams) { m_extruder->TurnOn(GetCanColour(ams_id, canid)); }
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
if (ams_id == m_current_ams) { m_extruder->TurnOn(GetCanColour(ams_id, canid)); }
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
}
for (auto i = 0; i < m_ams_info.size(); i++) {
@ -2514,14 +2575,6 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
m_ams_info[i].current_can_id = canid;
}
}
if (type == AMSPassRoadType::AMS_ROAD_TYPE_LOAD) {
SetActionState(AMSAction::AMS_ACTION_LOAD);
} else if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) {
SetActionState(AMSAction::AMS_ACTION_UNLOAD);
} else if (type == AMSPassRoadType::AMS_ROAD_TYPE_NONE) {
SetActionState(AMSAction::AMS_ACTION_NORMAL);
}
}
void AMSControl::on_filament_load(wxCommandEvent &event)

View File

@ -95,9 +95,17 @@ enum FilamentStep {
STEP_PULL_CURR_FILAMENT,
STEP_PUSH_NEW_FILAMENT,
STEP_PURGE_OLD_FILAMENT,
STEP_FEED_FILAMENT,
STEP_CONFIRM_EXTRUDED,
STEP_COUNT,
};
enum FilamentStepType {
STEP_TYPE_LOAD = 0,
STEP_TYPE_UNLOAD = 1,
STEP_TYPE_VT_LOAD = 2,
};
#define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(14), FromDIP(14))
#define AMS_ITEM_SIZE wxSize(FromDIP(82), FromDIP(27))
#define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27))
@ -495,6 +503,7 @@ protected:
::StepIndicator *m_filament_load_step = {nullptr};
::StepIndicator *m_filament_unload_step = {nullptr};
::StepIndicator *m_filament_vt_load_step = {nullptr};
Button *m_button_extruder_feed = {nullptr};
Button *m_button_extruder_back = {nullptr};
@ -528,7 +537,7 @@ public:
void PlayRridLoading(wxString amsid, wxString canid);
void StopRridLoading(wxString amsid, wxString canid);
void SetFilamentStep(int item_idx, bool isload = true);
void SetFilamentStep(int item_idx, FilamentStepType f_type);
void ShowFilamentTip(bool hasams = true);
void SetHumidity(std::string amsid, int humidity);
@ -536,6 +545,7 @@ public:
void CreateAms();
void UpdateAms(std::vector<AMSinfo> info, bool keep_selection = true, bool has_extrusion_cali = true);
void AddAms(AMSinfo info, bool refresh = true);
void SetExtruder(bool on_off, wxColour col);
void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step);
void SwitchAms(std::string ams_id);