ENH: refine ams logic

update ams settings
add rfid reading bits

Change-Id: If46d2a3bf896e1279514aba94e5facdaee12014d
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2022-08-31 20:02:57 +08:00 committed by Lane.Wei
parent 0ed5b956ae
commit a688265bfd
7 changed files with 84 additions and 11 deletions

View file

@ -188,10 +188,6 @@ void AMSSetting::create()
m_sizer_main->Fit(this); m_sizer_main->Fit(this);
this->Centre(wxBOTH); this->Centre(wxBOTH);
// set mode
update_insert_material_read_mode(true);
update_starting_read_mode(false);
} }
void AMSSetting::update_insert_material_read_mode(bool selected) void AMSSetting::update_insert_material_read_mode(bool selected)

View file

@ -328,7 +328,11 @@ MachineObject::MachineObject(NetworkAgent* agent, std::string name, std::string
ams_exist_bits = 0; ams_exist_bits = 0;
tray_exist_bits = 0; tray_exist_bits = 0;
tray_is_bbl_bits = 0; tray_is_bbl_bits = 0;
ams_rfid_status = 0;
is_ams_need_update = false; is_ams_need_update = false;
ams_insert_flag = false;
ams_power_on_flag = false;
ams_support_use_ams = false;
/* signals */ /* signals */
wifi_signal = ""; wifi_signal = "";
@ -2240,6 +2244,10 @@ int MachineObject::parse_json(std::string payload)
if (jj["ams"].contains("tray_read_done_bits")) { if (jj["ams"].contains("tray_read_done_bits")) {
tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get<std::string>(), nullptr, 16); tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get<std::string>(), nullptr, 16);
} }
if (jj["ams"].contains("tray_reading_bits")) {
tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get<std::string>(), nullptr, 16);
ams_support_use_ams = true;
}
if (jj["ams"].contains("tray_is_bbl_bits")) { if (jj["ams"].contains("tray_is_bbl_bits")) {
tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get<std::string>(), nullptr, 16); tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get<std::string>(), nullptr, 16);
} }
@ -2253,6 +2261,15 @@ int MachineObject::parse_json(std::string payload)
if (jj["ams"].contains("tray_tar")) { if (jj["ams"].contains("tray_tar")) {
m_tray_tar = jj["ams"]["tray_tar"].get<std::string>(); m_tray_tar = jj["ams"]["tray_tar"].get<std::string>();
} }
if (jj["ams"].contains("insert_flag")) {
ams_insert_flag = jj["ams"]["insert_flag"].get<bool>();
}
if (jj["ams"].contains("ams_rfid_status"))
ams_rfid_status = jj["ams"]["ams_rfid_status"].get<int>();
if (jj["ams"].contains("power_on_flag")) {
ams_power_on_flag = jj["ams"]["power_on_flag"].get<bool>();
}
if (ams_exist_bits != last_ams_exist_bits if (ams_exist_bits != last_ams_exist_bits
|| last_tray_exist_bits != last_tray_exist_bits || last_tray_exist_bits != last_tray_exist_bits

View file

@ -111,6 +111,16 @@ enum AmsStatusMain {
AMS_STATUS_MAIN_UNKNOWN = 0xFF, AMS_STATUS_MAIN_UNKNOWN = 0xFF,
}; };
enum AmsRfidStatus {
AMS_RFID_IDLE = 0,
AMS_RFID_READING = 1,
AMS_RFID_GCODE_TRANS = 2,
AMS_RFID_GCODE_RUNNING = 3,
AMS_RFID_ASSITANT = 4,
AMS_RFID_SWITCH_FILAMENT= 5,
AMS_RFID_HAS_FILAMENT = 6
};
class AmsTray { class AmsTray {
public: public:
AmsTray(std::string tray_id) { AmsTray(std::string tray_id) {
@ -349,6 +359,11 @@ public:
long tray_exist_bits = 0; long tray_exist_bits = 0;
long tray_is_bbl_bits = 0; long tray_is_bbl_bits = 0;
long tray_read_done_bits = 0; long tray_read_done_bits = 0;
long tray_reading_bits = 0;
int ams_rfid_status = 0;
bool ams_insert_flag { false };
bool ams_power_on_flag { false };
bool ams_support_use_ams { false };
AmsStatusMain ams_status_main; AmsStatusMain ams_status_main;
int ams_status_sub; int ams_status_sub;
int ams_version = 0; int ams_version = 0;

View file

@ -1091,7 +1091,9 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par
checkbox->SetToolTip(tooltip); checkbox->SetToolTip(tooltip);
text->SetToolTip(tooltip); text->SetToolTip(tooltip);
text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) { ams_check->SetValue(ams_check->GetValue() ? false : true); }); text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) {
ams_check->SetValue(ams_check->GetValue() ? false : true);
});
return checkbox; return checkbox;
} }
@ -1454,6 +1456,10 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector<wxSt
update_print_status_msg(msg_text, true, true); update_print_status_msg(msg_text, true, true);
Enable_Send_Button(false); Enable_Send_Button(false);
Enable_Refresh_Button(true); Enable_Refresh_Button(true);
} else if (status == PrintDialogStatus::PrintStatusDisableAms) {
update_print_status_msg(wxEmptyString, false, false);
Enable_Send_Button(false);
Enable_Refresh_Button(true);
} else if (status == PrintDialogStatus::PrintStatusNeedUpgradingAms) { } else if (status == PrintDialogStatus::PrintStatusNeedUpgradingAms) {
wxString msg_text; wxString msg_text;
if (params.size() > 0) if (params.size() > 0)
@ -1895,6 +1901,15 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event)
update_show_status(); update_show_status();
} }
void SelectMachineDialog::update_ams_check(MachineObject* obj)
{
if (obj && obj->ams_support_use_ams) {
ams_check->Show();
} else {
ams_check->Hide();
}
}
void SelectMachineDialog::update_show_status() void SelectMachineDialog::update_show_status()
{ {
// refreshing return // refreshing return
@ -1948,6 +1963,7 @@ void SelectMachineDialog::update_show_status()
} }
reset_timeout(); reset_timeout();
update_ams_check(obj_);
// reading done // reading done
if (obj_->is_in_upgrading()) { if (obj_->is_in_upgrading()) {
@ -1977,6 +1993,14 @@ void SelectMachineDialog::update_show_status()
return; return;
} }
if (obj_->ams_support_use_ams) {
if (!ams_check->GetValue()) {
m_ams_mapping_result.clear();
show_status(PrintDialogStatus::PrintStatusDisableAms);
return;
}
}
// do ams mapping if no ams result // do ams mapping if no ams result
if (m_ams_mapping_result.empty()) { if (m_ams_mapping_result.empty()) {
do_ams_mapping(obj_); do_ams_mapping(obj_);

View file

@ -239,6 +239,7 @@ enum PrintDialogStatus {
PrintStatusNeedUpgradingAms, PrintStatusNeedUpgradingAms,
PrintStatusInSystemPrinting, PrintStatusInSystemPrinting,
PrintStatusInPrinting, PrintStatusInPrinting,
PrintStatusDisableAms,
PrintStatusAmsMappingSuccess, PrintStatusAmsMappingSuccess,
PrintStatusAmsMappingInvalid, PrintStatusAmsMappingInvalid,
PrintStatusAmsMappingU0Invalid, PrintStatusAmsMappingU0Invalid,
@ -373,6 +374,7 @@ protected:
void update_user_printer(); void update_user_printer();
void reset_ams_material(); void reset_ams_material();
void update_show_status(); void update_show_status();
void update_ams_check(MachineObject* obj);
wxTimer *m_refresh_timer { nullptr }; wxTimer *m_refresh_timer { nullptr };

View file

@ -1532,7 +1532,13 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj)
void StatusPanel::update_ams(MachineObject *obj) void StatusPanel::update_ams(MachineObject *obj)
{ {
// update obj in sub dlg // update obj in sub dlg
if (m_ams_setting_dlg) { m_ams_setting_dlg->obj = obj; } if (m_ams_setting_dlg) {
m_ams_setting_dlg->obj = obj;
if (obj && m_ams_setting_dlg->IsShown()) {
m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag);
m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag);
}
}
if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; } if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; }
if (!obj || !obj->is_connected()) { if (!obj || !obj->is_connected()) {
@ -1540,6 +1546,7 @@ void StatusPanel::update_ams(MachineObject *obj)
last_ams_exist_bits = -1; last_ams_exist_bits = -1;
last_tray_is_bbl_bits = -1; last_tray_is_bbl_bits = -1;
last_read_done_bits = -1; last_read_done_bits = -1;
last_reading_bits = -1;
last_ams_version = -1; last_ams_version = -1;
m_ams_control->EnterNoneAMSMode(); m_ams_control->EnterNoneAMSMode();
show_ams_group(false); show_ams_group(false);
@ -1583,6 +1590,7 @@ void StatusPanel::update_ams(MachineObject *obj)
last_ams_exist_bits = obj->ams_exist_bits; last_ams_exist_bits = obj->ams_exist_bits;
last_tray_is_bbl_bits = obj->tray_is_bbl_bits; last_tray_is_bbl_bits = obj->tray_is_bbl_bits;
last_read_done_bits = obj->tray_read_done_bits; last_read_done_bits = obj->tray_read_done_bits;
last_reading_bits = obj->tray_reading_bits;
last_ams_version = obj->ams_version; last_ams_version = obj->ams_version;
} }
@ -1683,11 +1691,21 @@ void StatusPanel::update_ams(MachineObject *obj)
for (auto tray_it = ams_it->second->trayList.begin(); tray_it != ams_it->second->trayList.end(); tray_it++) { for (auto tray_it = ams_it->second->trayList.begin(); tray_it != ams_it->second->trayList.end(); tray_it++) {
std::string tray_id = tray_it->first; std::string tray_id = tray_it->first;
int tray_id_int = atoi(tray_id.c_str()); int tray_id_int = atoi(tray_id.c_str());
if (obj->ams_insert_flag < 0) {
// old protocol
if ((obj->tray_read_done_bits & (1 << (ams_id_int * 4 + tray_id_int))) == 0) { if ((obj->tray_read_done_bits & (1 << (ams_id_int * 4 + tray_id_int))) == 0) {
m_ams_control->PlayRridLoading(ams_id, tray_id); m_ams_control->PlayRridLoading(ams_id, tray_id);
} else { } else {
m_ams_control->StopRridLoading(ams_id, tray_id); m_ams_control->StopRridLoading(ams_id, tray_id);
} }
} else {
// new protocol
if ((obj->tray_reading_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0) {
m_ams_control->PlayRridLoading(ams_id, tray_id);
} else {
m_ams_control->StopRridLoading(ams_id, tray_id);
}
}
} }
} catch (...) {} } catch (...) {}
} }
@ -2028,8 +2046,8 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event)
{ {
if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY); if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY);
if (obj) { if (obj) {
m_ams_setting_dlg->update_insert_material_read_mode(true); m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag);
m_ams_setting_dlg->update_starting_read_mode(true); m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag);
std::string ams_id = m_ams_control->GetCurentAms(); std::string ams_id = m_ams_control->GetCurentAms();
try { try {
int ams_id_int = atoi(ams_id.c_str()); int ams_id_int = atoi(ams_id.c_str());

View file

@ -357,6 +357,7 @@ public:
long last_ams_exist_bits { -1 }; long last_ams_exist_bits { -1 };
long last_tray_is_bbl_bits{ -1 }; long last_tray_is_bbl_bits{ -1 };
long last_read_done_bits{ -1 }; long last_read_done_bits{ -1 };
long last_reading_bits { -1 };
long last_ams_version { -1 }; long last_ams_version { -1 };
std::vector<int> last_stage_list_info; std::vector<int> last_stage_list_info;