FIX:Fixed incorrect printer status

jira:[fixed device issue ]

Change-Id: Ibab8db09854adca1e80acaf3831c6e4191e137c7
(cherry picked from commit 0572d811780ac406214665af7748e4ba8243bdc8)
This commit is contained in:
tao wang 2024-12-10 17:29:43 +08:00 committed by lane.wei
parent 99c717e271
commit b60cdcfed8
5 changed files with 85 additions and 72 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1640,8 +1640,6 @@ int MachineObject::command_select_extruder(int id)
{
BOOST_LOG_TRIVIAL(info) << "select_extruder";
nozzle_selected_count = HOLD_COUNT_MAX;
json j;
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["command"] = "select_extruder";
@ -1923,8 +1921,6 @@ int MachineObject::command_set_nozzle_new(int nozzle_id, int temp)
{
BOOST_LOG_TRIVIAL(info) << "set_nozzle_temp";
nozzle_selected_count = HOLD_COUNT_MAX;
json j;
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["command"] = "set_nozzle_temp";
@ -5372,7 +5368,7 @@ void MachineObject::converse_to_duct(bool is_suppt_part_fun, bool is_suppt_aux_f
m_air_duct_data.curren_mode = -1; //def mode
if (is_suppt_part_fun) {
if (is_suppt_part_fun) {
AirParts part_fan;
part_fan.type = int(AirDuctType::AIR_FAN_TYPE);
part_fan.id = int(AIR_FUN::FAN_COOLING_0_AIRDOOR);
@ -5706,9 +5702,9 @@ void MachineObject::parse_new_info(json print)
json const &nozzle = device["nozzle"];
m_nozzle_data = NozzleData();
m_nozzle_data.extder_exist = get_flag_bits(nozzle["exist"].get<int>(), 0, 15);
m_nozzle_data.cut_exist = get_flag_bits(nozzle["exist"].get<int>(), 16, 31);
m_nozzle_data.state = get_flag_bits(nozzle["state"].get<int>(), 0, 3);
m_nozzle_data.extder_exist = get_flag_bits(nozzle["exist"].get<int>(), 0, 15);
m_nozzle_data.cut_exist = get_flag_bits(nozzle["exist"].get<int>(), 16, 31);
m_nozzle_data.state = get_flag_bits(nozzle["state"].get<int>(), 0, 3);
for (auto it = nozzle["info"].begin(); it != nozzle["info"].end(); it++) {
Nozzle nozzle_obj;
@ -5752,18 +5748,21 @@ void MachineObject::parse_new_info(json print)
if (device.contains("extruder")) {
json const& extruder = device["extruder"];
m_extder_data = ExtderData();
m_extder_data.total_extder_count = get_flag_bits(extruder["state"].get<int>(), 0, 3);
auto extder_data = ExtderData();
extder_data.total_extder_count = get_flag_bits(extruder["state"].get<int>(), 0, 3);
if (nozzle_selected_count > 0) {
nozzle_selected_count--;
} else {
m_extder_data.current_extder_id = get_flag_bits(extruder["state"].get<int>(), 4, 3);
m_extder_data.target_extder_id = get_flag_bits(extruder["state"].get<int>(), 8, 3);
m_extder_data.switch_extder_state = (ExtruderSwitchState) get_flag_bits(extruder["state"].get<int>(), 12, 2);
m_extder_data.current_loading_extder_id = get_flag_bits(extruder["state"].get<int>(), 15, 3);
extder_data.current_extder_id = get_flag_bits(extruder["state"].get<int>(), 4, 3);
extder_data.target_extder_id = get_flag_bits(extruder["state"].get<int>(), 8, 3);
extder_data.switch_extder_state = (ExtruderSwitchState) get_flag_bits(extruder["state"].get<int>(), 12, 2);
if (extder_data.switch_extder_state != ExtruderSwitchState::ES_SWITCHING && extder_data.target_extder_id == extder_data.current_extder_id) {
flag_update_nozzle = true;
}
extder_data.current_loading_extder_id = get_flag_bits(extruder["state"].get<int>(), 15, 3);
extder_data.current_busy_for_loading = get_flag_bits(extruder["state"].get<int>(), 19);
for (auto it = extruder["info"].begin(); it != extruder["info"].end(); it++) {
Extder extder_obj;
@ -5813,19 +5812,21 @@ void MachineObject::parse_new_info(json print)
}
}
}
m_extder_data.extders.push_back(extder_obj);
extder_data.extders.push_back(extder_obj);
}
if (m_extder_data.extders.size() <= 0) {
if (extder_data.extders.size() <= 0) {
// def data
m_extder_data.current_extder_id = 0;
m_extder_data.target_extder_id = 0;
m_extder_data.total_extder_count = 1;
extder_data.current_extder_id = 0;
extder_data.target_extder_id = 0;
extder_data.total_extder_count = 1;
Extder nozzle;
m_extder_data.extders.push_back(nozzle);
extder_data.extders.push_back(nozzle);
}
m_extder_data = extder_data;
}
}
}
}
bool MachineObject::is_nozzle_data_invalid()

View File

@ -221,6 +221,7 @@ struct ExtderData
int target_extder_id{0};
int total_extder_count {0};
int current_loading_extder_id {-1};
bool current_busy_for_loading{false};
ExtruderSwitchState switch_extder_state;
std::vector<Extder> extders;
};
@ -917,6 +918,7 @@ public:
int xcam_filament_tangle_detect_count = 0;
int ams_print_option_count = 0;
int nozzle_selected_count = 0;
bool flag_update_nozzle = {true};
//supported features
bool is_support_chamber_edit{false};

View File

@ -2161,10 +2161,11 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
Bind(wxEVT_WEBREQUEST_STATE, &StatusPanel::on_webrequest_state, this);
Bind(wxCUSTOMEVT_SET_TEMP_FINISH, [this](wxCommandEvent e) {
int id = e.GetInt();
int id = e.GetInt();
if (id == m_tempCtrl_bed->GetType()) {
on_set_bed_temp();
} else if (id == m_tempCtrl_nozzle->GetType()) {
if (e.GetString() == wxString::Format("%d", MAIN_NOZZLE_ID)) {
on_set_nozzle_temp(MAIN_NOZZLE_ID);
} else if (e.GetString() == wxString::Format("%d", DEPUTY_NOZZLE_ID)) {
@ -2190,6 +2191,8 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
m_tempCtrl_bed->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_set_focus), NULL, this);
m_tempCtrl_nozzle->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this);
m_tempCtrl_nozzle->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_set_focus), NULL, this);
m_tempCtrl_nozzle_deputy->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this);
m_tempCtrl_nozzle_deputy->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_set_focus), NULL, this);
m_tempCtrl_chamber->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_cham_temp_kill_focus), NULL, this);
m_tempCtrl_chamber->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_cham_temp_set_focus), NULL, this);
m_switch_lamp->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_lamp_switch), NULL, this);
@ -2256,6 +2259,10 @@ StatusPanel::~StatusPanel()
m_tempCtrl_bed->Disconnect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_bed_temp_set_focus), NULL, this);
m_tempCtrl_nozzle->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this);
m_tempCtrl_nozzle->Disconnect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_set_focus), NULL, this);
m_tempCtrl_nozzle_deputy->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_kill_focus), NULL, this);
m_tempCtrl_nozzle_deputy->Disconnect(wxEVT_SET_FOCUS, wxFocusEventHandler(StatusPanel::on_nozzle_temp_set_focus), NULL, this);
m_switch_lamp->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_lamp_switch), NULL, this);
/*m_switch_nozzle_fan->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_nozzle_fan_switch), NULL, this);
m_switch_printing_fan->Disconnect(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_nozzle_fan_switch), NULL, this);
@ -2853,24 +2860,28 @@ void StatusPanel::update_temp_ctrl(MachineObject *obj)
if (m_temp_nozzle_timeout > 0) {
m_temp_nozzle_timeout--;
} else {
if (!nozzle_temp_input) { m_tempCtrl_nozzle->SetTagTemp((int) obj->m_extder_data.extders[MAIN_NOZZLE_ID].target_temp); }
if (!nozzle_temp_input) {
m_tempCtrl_nozzle->SetTagTemp((int) obj->m_extder_data.extders[MAIN_NOZZLE_ID].target_temp);
}
}
if (m_temp_nozzle_deputy_timeout > 0) {
m_temp_nozzle_deputy_timeout--;
}
else {
if (!nozzle_temp_input && nozzle_num >= 2) { m_tempCtrl_nozzle_deputy->SetTagTemp((int)obj->m_extder_data.extders[DEPUTY_NOZZLE_ID].target_temp); }
if (!nozzle_temp_input && nozzle_num >= 2) {
m_tempCtrl_nozzle_deputy->SetTagTemp((int)obj->m_extder_data.extders[DEPUTY_NOZZLE_ID].target_temp);
}
}
if ((obj->m_extder_data.extders[0].target_temp - obj->m_extder_data.extders[0].temp) >= TEMP_THRESHOLD_VAL) {
if ((obj->m_extder_data.extders[MAIN_NOZZLE_ID].target_temp - obj->m_extder_data.extders[MAIN_NOZZLE_ID].temp) >= TEMP_THRESHOLD_VAL) {
m_tempCtrl_nozzle->SetIconActive();
} else {
m_tempCtrl_nozzle->SetIconNormal();
}
if (nozzle_num >= 2 && obj->m_extder_data.extders.size() > 1){
if ((obj->m_extder_data.extders[1].target_temp - obj->m_extder_data.extders[1].temp) >= TEMP_THRESHOLD_VAL) {
if ((obj->m_extder_data.extders[DEPUTY_NOZZLE_ID].target_temp - obj->m_extder_data.extders[DEPUTY_NOZZLE_ID].temp) >= TEMP_THRESHOLD_VAL) {
m_tempCtrl_nozzle_deputy->SetIconActive();
}
else {
@ -2913,17 +2924,18 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj)
m_extruderImage[select_index]->update(ExtruderState::FILLED_LOAD, ExtruderState::FILLED_UNLOAD);
/*current*/
if (obj->m_extder_data.current_extder_id == 0xf) {
m_extruderImage[select_index]->setExtruderUsed("");
m_nozzle_btn_panel->updateState("");
} else if (obj->m_extder_data.current_extder_id == MAIN_NOZZLE_ID) {
m_extruderImage[select_index]->setExtruderUsed("right");
m_nozzle_btn_panel->updateState("right");
} else if (obj->m_extder_data.current_extder_id == DEPUTY_NOZZLE_ID) {
m_extruderImage[select_index]->setExtruderUsed("left");
m_nozzle_btn_panel->updateState("left");
if (obj->flag_update_nozzle) {
if (obj->m_extder_data.current_extder_id == 0xf) {
m_extruderImage[select_index]->setExtruderUsed("");
m_nozzle_btn_panel->updateState("");
} else if (obj->m_extder_data.current_extder_id == MAIN_NOZZLE_ID) {
m_extruderImage[select_index]->setExtruderUsed("right");
m_nozzle_btn_panel->updateState("right");
} else if (obj->m_extder_data.current_extder_id == DEPUTY_NOZZLE_ID) {
m_extruderImage[select_index]->setExtruderUsed("left");
m_nozzle_btn_panel->updateState("left");
}
}
Layout();
} else {
m_nozzle_btn_panel->Hide();
m_extruder_book->SetSelection(m_nozzle_num);
@ -3162,24 +3174,19 @@ void StatusPanel::update_ams(MachineObject *obj)
m_ams_control->SetExtruder(false, true, ext.snow.ams_id, m_ams_control->GetCanColour(obj->m_ams_id, obj->m_tray_id));
}
}
//m_ams_control->SetAmsStep(std::to_string(VIRTUAL_TRAY_MAIN_ID), "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3);
//m_ams_control->SetExtruder(true, true, std::to_string(VIRTUAL_TRAY_MAIN_ID), *wxRED);
}
bool ams_loading_state = false;
auto ams_status_sub = obj->ams_status_sub;
int vt_tray_id = VIRTUAL_TRAY_DEPUTY_ID;
/*if (obj->is_enable_np) {
if (obj->m_extder_data.current_loading_extder_id == MAIN_NOZZLE_ID || obj->m_extder_data.current_loading_extder_id == DEPUTY_NOZZLE_ID) {
if (obj->is_enable_np) {
if (obj->m_extder_data.current_busy_for_loading) {
ams_loading_state = true;
}
} else if(obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE){
} else if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) {
ams_loading_state = true;
}*/
}
if (ams_loading_state) {
update_filament_step();
@ -3346,7 +3353,6 @@ void StatusPanel::update_ams_insert_material(MachineObject* obj) {
void StatusPanel::update_ams_control_state(std::string ams_id, std::string slot_id)
{
return;
// set default value to true
bool enable[ACTION_BTN_COUNT];
enable[ACTION_BTN_LOAD] = true;
@ -3362,10 +3368,13 @@ void StatusPanel::update_ams_control_state(std::string ams_id, std::string slot_
else {
/*switch now*/
bool in_switch_filament = false;
for ( auto ext : obj->m_extder_data.extders) {
if (ext.ams_stat == AmsStatusMain::AMS_STATUS_MAIN_FILAMENT_CHANGE) {
if (obj->is_enable_np) {
if (obj->m_extder_data.current_busy_for_loading) {
in_switch_filament = true;
}
} else if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) {
in_switch_filament = true;
}
if (in_switch_filament) {
@ -4011,7 +4020,7 @@ void StatusPanel::on_set_nozzle_temp(int nozzle_id)
if (nozzle_id == DEPUTY_NOZZLE_ID) {
wxString str = m_tempCtrl_nozzle_deputy->GetTextCtrl()->GetValue();
if (str.ToLong(&nozzle_temp) && obj) {
// set_hold_count(m_temp_nozzle_deputy_timeout);
set_hold_count(m_temp_nozzle_deputy_timeout);
if (nozzle_temp > m_tempCtrl_nozzle_deputy->get_max_temp()) {
nozzle_temp = m_tempCtrl_nozzle_deputy->get_max_temp();
m_tempCtrl_nozzle_deputy->SetTagTemp(wxString::Format("%d", nozzle_temp));
@ -4055,7 +4064,6 @@ void StatusPanel::on_ams_load(SimpleEvent &event)
void StatusPanel::update_filament_step()
{
//m_ams_control->UpdateStepCtrl(obj->is_filament_at_extruder());
m_filament_step->UpdateStepCtrl(obj->is_filament_at_extruder());
if (!obj->is_filament_at_extruder()) {
m_is_load_with_temp = true;
@ -4654,7 +4662,7 @@ void StatusPanel::on_nozzle_fan_switch(wxCommandEvent &event)
m_fan_control_popup->Destroy();
m_fan_control_popup = nullptr;
}
if (!obj)
return;
@ -4776,7 +4784,7 @@ void StatusPanel::on_xyz_abs(wxCommandEvent &event)
void StatusPanel::on_nozzle_selected(wxCommandEvent &event)
{
if (obj) {
obj->m_extder_data.current_extder_id = event.GetInt();
obj->flag_update_nozzle = false;
auto nozzle_id = event.GetInt();obj->command_select_extruder(nozzle_id);
}
}
@ -4851,6 +4859,7 @@ void StatusPanel::set_default()
speed_lvl_timeout = 0;
m_switch_lamp_timeout = 0;
m_temp_nozzle_timeout = 0;
m_temp_nozzle_deputy_timeout = 0;
m_temp_bed_timeout = 0;
m_temp_chamber_timeout = 0;
m_switch_nozzle_fan_timeout = 0;

View File

@ -45,10 +45,11 @@ void FilamentLoad::SetFilamentStep(FilamentStep item_idx, FilamentStepType f_typ
m_filament_load_steps->Idle();
m_filament_unload_steps->Idle();
m_filament_vt_load_steps->Idle();
this->Hide();
if (IsShown()) {Hide(); }
return;
}
this->Show();
if (!IsShown()) {Show();}
wxString step_str = wxEmptyString;
if (item_idx < FilamentStep::STEP_COUNT) {
step_str = FILAMENT_CHANGE_STEP_STRING[item_idx];
@ -58,36 +59,36 @@ void FilamentLoad::SetFilamentStep(FilamentStep item_idx, FilamentStepType f_typ
if (f_type == FilamentStepType::STEP_TYPE_LOAD) {
step_control = m_filament_load_steps;
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
if (this->GetSelection() != 0) {
this->SetSelection(0);
if (GetSelection() != 0) {
SetSelection(0);
}
m_filament_load_steps->SelectItem(m_filament_load_steps->GetItemUseText(step_str));
}
else {
m_filament_load_steps->Idle();
this->Hide();
this->Layout();
Hide();
Layout();
}
}
else if (f_type == FilamentStepType::STEP_TYPE_UNLOAD) {
step_control = m_filament_unload_steps;
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
if (GetSelection() != 1) {
this->SetSelection(1);
this->Layout();
SetSelection(1);
Layout();
}
m_filament_unload_steps->SelectItem(m_filament_unload_steps->GetItemUseText(step_str));
}
else {
m_filament_unload_steps->Idle();
this->Hide();
this->Layout();
Hide();
Layout();
}
}
else if (f_type == FilamentStepType::STEP_TYPE_VT_LOAD) {
step_control = m_filament_vt_load_steps;
this->SetSelection(2);
this->Layout();
SetSelection(2);
Layout();
if (item_idx > 0 && item_idx < FilamentStep::STEP_COUNT) {
if (item_idx == STEP_CONFIRM_EXTRUDED) {
m_filament_vt_load_steps->SelectItem(2);
@ -98,8 +99,8 @@ void FilamentLoad::SetFilamentStep(FilamentStep item_idx, FilamentStepType f_typ
}
else {
m_filament_vt_load_steps->Idle();
this->Hide();
this->Layout();
Hide();
Layout();
}
}
else {
@ -110,8 +111,8 @@ void FilamentLoad::SetFilamentStep(FilamentStep item_idx, FilamentStepType f_typ
}
else {
m_filament_load_steps->Idle();
this->Hide();
this->Layout();
Hide();
Layout();
}
}
@ -130,7 +131,7 @@ void FilamentLoad::UpdateStepCtrl(bool is_extrusion_exist) {
is_extrusion = true; //Forgot what it means, need to update dynamically
if (m_ams_model == AMSModel::GENERIC_AMS || m_ext_model == AMSModel::GENERIC_AMS) {
if (m_ams_model == AMSModel::GENERIC_AMS || m_ext_model == AMSModel::N3F_AMS) {
if (is_extrusion) {
m_filament_load_steps->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]);
m_filament_load_steps->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]);