mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 01:37:53 -06:00
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:
parent
0ed5b956ae
commit
a688265bfd
7 changed files with 84 additions and 11 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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_);
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
||||||
|
|
|
@ -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,10 +1691,20 @@ 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->tray_read_done_bits & (1 << (ams_id_int * 4 + tray_id_int))) == 0) {
|
if (obj->ams_insert_flag < 0) {
|
||||||
m_ams_control->PlayRridLoading(ams_id, tray_id);
|
// old protocol
|
||||||
|
if ((obj->tray_read_done_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);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m_ams_control->StopRridLoading(ams_id, tray_id);
|
// 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());
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue