ENH: refine extrusion_cali_set command for factor k

fix enable status of confirm btn in ams settings dlg

Change-Id: I25c11078bb723647fac6370f966c74c807362e21
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2023-01-16 17:34:33 +08:00 committed by Lane.Wei
parent a91d043d67
commit a3c34d0629
3 changed files with 35 additions and 14 deletions

View file

@ -360,11 +360,11 @@ void AMSMaterialsSetting::update()
void AMSMaterialsSetting::enable_confirm_button(bool en) void AMSMaterialsSetting::enable_confirm_button(bool en)
{ {
if (!m_is_third) { m_button_confirm->Show(en);
if (!m_is_third) {
m_tip_readonly->Hide(); m_tip_readonly->Hide();
} }
else { else {
m_button_confirm->Show(en);
m_comboBox_filament->Show(en); m_comboBox_filament->Show(en);
m_readonly_filament->Show(!en); m_readonly_filament->Show(!en);
m_tip_readonly->Show(!en); m_tip_readonly->Show(!en);

View file

@ -3037,10 +3037,12 @@ int MachineObject::parse_json(std::string payload)
} else { } else {
curr_tray->remain = -1; curr_tray->remain = -1;
} }
int ams_id_int = 0;
int tray_id_int = 0;
try { try {
if (!ams_id.empty() && !curr_tray->id.empty()) { if (!ams_id.empty() && !curr_tray->id.empty()) {
int ams_id_int = atoi(ams_id.c_str()); ams_id_int = atoi(ams_id.c_str());
int tray_id_int = atoi(curr_tray->id.c_str()); tray_id_int = atoi(curr_tray->id.c_str());
curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false;
} }
} }
@ -3049,11 +3051,19 @@ int MachineObject::parse_json(std::string payload)
if (tray_it->contains("setting_id")) { if (tray_it->contains("setting_id")) {
curr_tray->filament_setting_id = (*tray_it)["setting_id"].get<std::string>(); curr_tray->filament_setting_id = (*tray_it)["setting_id"].get<std::string>();
} }
if (tray_it->contains("k")) {
curr_tray->k = (*tray_it)["k"].get<float>();
} auto curr_time = std::chrono::system_clock::now();
if (tray_it->contains("n")) { auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(curr_time - extrusion_cali_set_hold_start);
curr_tray->n = (*tray_it)["n"].get<float>(); if (diff.count() > HOLD_TIMEOUT || diff.count() < 0
|| ams_id_int != (extrusion_cali_set_tray_id / 4)
|| tray_id_int != (extrusion_cali_set_tray_id % 4)) {
if (tray_it->contains("k")) {
curr_tray->k = (*tray_it)["k"].get<float>();
}
if (tray_it->contains("n")) {
curr_tray->n = (*tray_it)["n"].get<float>();
}
} }
} }
// remove not in trayList // remove not in trayList
@ -3084,10 +3094,15 @@ int MachineObject::parse_json(std::string payload)
if (jj.contains("vt_tray")) { if (jj.contains("vt_tray")) {
if (jj["vt_tray"].contains("id")) if (jj["vt_tray"].contains("id"))
vt_tray.id = jj["vt_tray"]["id"].get<std::string>(); vt_tray.id = jj["vt_tray"]["id"].get<std::string>();
if (jj["vt_tray"].contains("k")) auto curr_time = std::chrono::system_clock::now();
vt_tray.k = jj["vt_tray"]["k"].get<float>(); auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(curr_time - extrusion_cali_set_hold_start);
if (jj["vt_tray"].contains("n")) if (diff.count() > HOLD_TIMEOUT || diff.count() < 0
vt_tray.n = jj["vt_tray"]["n"].get<float>(); || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) {
if (jj["vt_tray"].contains("k"))
vt_tray.k = jj["vt_tray"]["k"].get<float>();
if (jj["vt_tray"].contains("n"))
vt_tray.n = jj["vt_tray"]["n"].get<float>();
}
ams_support_virtual_tray = true; ams_support_virtual_tray = true;
} else { } else {
ams_support_virtual_tray = false; ams_support_virtual_tray = false;
@ -3197,9 +3212,10 @@ int MachineObject::parse_json(std::string payload)
} else if (jj["command"].get<std::string>() == "extrusion_cali_set") { } else if (jj["command"].get<std::string>() == "extrusion_cali_set") {
int ams_id = -1; int ams_id = -1;
int tray_id = -1; int tray_id = -1;
int curr_tray_id = -1;
if (jj.contains("tray_id")) { if (jj.contains("tray_id")) {
try { try {
int curr_tray_id = jj["tray_id"].get<int>(); curr_tray_id = jj["tray_id"].get<int>();
if (curr_tray_id == VIRTUAL_TRAY_ID) if (curr_tray_id == VIRTUAL_TRAY_ID)
tray_id = curr_tray_id; tray_id = curr_tray_id;
else if (curr_tray_id >= 0 && curr_tray_id < 16){ else if (curr_tray_id >= 0 && curr_tray_id < 16){
@ -3230,6 +3246,8 @@ int MachineObject::parse_json(std::string payload)
} }
} }
} }
extrusion_cali_set_tray_id = curr_tray_id;
extrusion_cali_set_hold_start = std::chrono::system_clock::now();
} }
} }
} }

View file

@ -21,6 +21,7 @@
#define REQUEST_PUSH_MIN_TIME 15000.f // milliseconds #define REQUEST_PUSH_MIN_TIME 15000.f // milliseconds
#define REQUEST_START_MIN_TIME 15000.f // milliseconds #define REQUEST_START_MIN_TIME 15000.f // milliseconds
#define EXTRUSION_OMIT_TIME 20000.f // milliseconds #define EXTRUSION_OMIT_TIME 20000.f // milliseconds
#define HOLD_TIMEOUT 10000.f // milliseconds
#define FILAMENT_MAX_TEMP 300 #define FILAMENT_MAX_TEMP 300
#define FILAMENT_DEF_TEMP 220 #define FILAMENT_DEF_TEMP 220
@ -459,6 +460,8 @@ public:
int extrusion_cali_hold_count = 0; int extrusion_cali_hold_count = 0;
std::chrono::system_clock::time_point last_extrusion_cali_start_time; std::chrono::system_clock::time_point last_extrusion_cali_start_time;
int extrusion_cali_set_tray_id = -1;
std::chrono::system_clock::time_point extrusion_cali_set_hold_start;
bool is_in_extrusion_cali(); bool is_in_extrusion_cali();
bool is_extrusion_cali_finished(); bool is_extrusion_cali_finished();