ENH: Improve some details for pa calib

Change-Id: I5d4e1b6a3385f28b616989e2a23cfda627eb79d8
(cherry picked from commit 01827ef8ede395d4bed856585e9ef6b316ee1d2c)
This commit is contained in:
zhimin.zeng 2023-06-05 09:25:43 +08:00 committed by Lane.Wei
parent 2d3f1c7d92
commit 6ea3259d05
5 changed files with 89 additions and 66 deletions

View File

@ -1618,11 +1618,13 @@ bool PressureAdvanceWizard::start_calibration(std::vector<int> tray_ids)
for (int tray_id : tray_ids) { for (int tray_id : tray_ids) {
X1CCalibInfos::X1CCalibInfo calib_info; X1CCalibInfos::X1CCalibInfo calib_info;
calib_info.tray_id = tray_id; calib_info.tray_id = tray_id;
calib_info.nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter"))->get_at(0);
calib_info.filament_id = m_filament_preset->filament_id;
calib_info.setting_id = m_filament_preset->setting_id; calib_info.setting_id = m_filament_preset->setting_id;
calib_info.bed_temp = bed_temp; calib_info.bed_temp = bed_temp;
calib_info.nozzle_temp = nozzle_temp; calib_info.nozzle_temp = nozzle_temp;
calib_info.max_volumetric_speed = max_volumetric_speed; calib_info.max_volumetric_speed = max_volumetric_speed;
calib_infos.calib_infos.push_back(calib_info); calib_infos.calib_datas.push_back(calib_info);
} }
std::string error_message; std::string error_message;
CalibUtils::calib_PA(calib_infos, error_message); CalibUtils::calib_PA(calib_infos, error_message);
@ -2064,11 +2066,13 @@ bool FlowRateWizard::start_calibration(std::vector<int> tray_ids)
for (int tray_id : tray_ids) { for (int tray_id : tray_ids) {
X1CCalibInfos::X1CCalibInfo calib_info; X1CCalibInfos::X1CCalibInfo calib_info;
calib_info.tray_id = tray_id; calib_info.tray_id = tray_id;
calib_info.nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter"))->get_at(0);
calib_info.filament_id = m_filament_preset->filament_id;
calib_info.setting_id = m_filament_preset->setting_id; calib_info.setting_id = m_filament_preset->setting_id;
calib_info.bed_temp = bed_temp; calib_info.bed_temp = bed_temp;
calib_info.nozzle_temp = nozzle_temp; calib_info.nozzle_temp = nozzle_temp;
calib_info.max_volumetric_speed = max_volumetric_speed; calib_info.max_volumetric_speed = max_volumetric_speed;
calib_infos.calib_infos.push_back(calib_info); calib_infos.calib_datas.push_back(calib_info);
} }
std::string error_message; std::string error_message;
CalibUtils::calib_flowrate_X1C(calib_infos, error_message); CalibUtils::calib_flowrate_X1C(calib_infos, error_message);

View File

@ -1874,17 +1874,18 @@ int MachineObject::command_start_calibration(bool vibration, bool bed_leveling,
} }
} }
int MachineObject::command_start_pa_calibration(const CalibDatas &pa_data) int MachineObject::command_start_pa_calibration(const X1CCalibInfos& pa_data)
{ {
pa_calib_results.clear(); pa_calib_results.clear();
if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) {
json j; json j;
j["print"]["command"] = "extrusion_cali"; j["print"]["command"] = "extrusion_cali";
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["nozzle_diameter"] = std::to_string(pa_data.calib_datas[0].nozzle_diameter);
for (int i = 0; i < pa_data.calib_datas.size(); ++i) { for (int i = 0; i < pa_data.calib_datas.size(); ++i) {
j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp;
j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id; j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id;
j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp;
j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id; j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id;
j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id; j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id;
j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp; j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp;
@ -1918,31 +1919,29 @@ int MachineObject::command_set_pa_calibration(const std::vector<PACalibResult>&
return -1; return -1;
} }
int MachineObject::command_delete_pa_calibration(const PACalibResult& pa_calib) int MachineObject::command_delete_pa_calibration(const PACalibIndexInfo& pa_calib)
{ {
if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) {
json j; json j;
j["print"]["command"] = "extrusion_cali_del"; j["print"]["command"] = "extrusion_cali_del";
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["tray_id"] = pa_calib.tray_id; j["print"]["tray_id"] = pa_calib.tray_id; // no need
j["print"]["filament_id"] = pa_calib.filament_id; j["print"]["filament_id"] = pa_calib.filament_id;
j["print"]["setting_id"] = pa_calib.setting_id; j["print"]["index"] = pa_calib.index;
j["print"]["name"] = pa_calib.name; j["print"]["nozzle_diameter"] = std::to_string(pa_calib.nozzle_diameter);
j["print"]["k_value"] = std::to_string(pa_calib.k_value);
j["print"]["n_coef"] = std::to_string(pa_calib.n_coef);
return this->publish_json(j.dump()); return this->publish_json(j.dump());
} }
return -1; return -1;
} }
int MachineObject::command_get_pa_calibration_infos(const std::string& filament_id) int MachineObject::command_get_pa_calibration_tab(const std::string &filament_id)
{ {
if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) {
json j; json j;
j["print"]["command"] = "extrusion_cali_get"; j["print"]["command"] = "extrusion_cali_get";
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["sequence_id"] = filament_id; j["print"]["filament_id"] = filament_id;
return this->publish_json(j.dump()); return this->publish_json(j.dump());
} }
@ -1961,7 +1960,23 @@ int MachineObject::command_get_pa_calibration_result()
return -1; return -1;
} }
int MachineObject::command_start_flow_ratio_calibration(const CalibDatas& calib_data) int MachineObject::commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info)
{
if ((printer_type == "BL-P001" || printer_type == "BL-P002")) {
json j;
j["print"]["command"] = "extrusion_cali_sel";
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
j["print"]["tray_id"] = pa_calib_info.tray_id;
j["print"]["index"] = pa_calib_info.index;
j["print"]["filament_id"] = pa_calib_info.filament_id;
j["print"]["nozzle_diameter"] = std::to_string(pa_calib_info.nozzle_diameter);
return this->publish_json(j.dump());
}
return -1;
}
int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data)
{ {
if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) {
json j; json j;
@ -1969,8 +1984,9 @@ int MachineObject::command_start_flow_ratio_calibration(const CalibDatas& calib_
j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
for (int i = 0; i < calib_data.calib_datas.size(); ++i) { for (int i = 0; i < calib_data.calib_datas.size(); ++i) {
j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp;
j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id; j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id;
j["print"]["filaments"][i]["nozzle_diameter"] = std::to_string(calib_data.calib_datas[i].nozzle_diameter);
j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp;
j["print"]["filaments"][i]["filament_id"] = calib_data.calib_datas[i].filament_id; j["print"]["filaments"][i]["filament_id"] = calib_data.calib_datas[i].filament_id;
j["print"]["filaments"][i]["setting_id"] = calib_data.calib_datas[i].setting_id; j["print"]["filaments"][i]["setting_id"] = calib_data.calib_datas[i].setting_id;
j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp; j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp;
@ -3753,6 +3769,8 @@ int MachineObject::parse_json(std::string payload)
pa_calib_result.tray_id = (*it)["tray_id"].get<int>(); pa_calib_result.tray_id = (*it)["tray_id"].get<int>();
pa_calib_result.filament_id = (*it)["filament_id"].get<std::string>(); pa_calib_result.filament_id = (*it)["filament_id"].get<std::string>();
pa_calib_result.setting_id = (*it)["setting_id"].get<std::string>(); pa_calib_result.setting_id = (*it)["setting_id"].get<std::string>();
pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get<std::string>().c_str());
if ((*it)["k_value"].is_number_float()) if ((*it)["k_value"].is_number_float())
pa_calib_result.k_value = (*it)["k_value"].get<float>(); pa_calib_result.k_value = (*it)["k_value"].get<float>();
else if ((*it)["k_value"].is_string()) else if ((*it)["k_value"].is_string())
@ -3777,6 +3795,7 @@ int MachineObject::parse_json(std::string payload)
flow_ratio_calib_result.tray_id = (*it)["tray_id"].get<int>(); flow_ratio_calib_result.tray_id = (*it)["tray_id"].get<int>();
flow_ratio_calib_result.filament_id = (*it)["filament_id"].get<std::string>(); flow_ratio_calib_result.filament_id = (*it)["filament_id"].get<std::string>();
flow_ratio_calib_result.setting_id = (*it)["setting_id"].get<std::string>(); flow_ratio_calib_result.setting_id = (*it)["setting_id"].get<std::string>();
flow_ratio_calib_result.nozzle_diameter = stof((*it)["nozzle_diameter"].get<std::string>().c_str());
flow_ratio_calib_result.flow_ratio = stof((*it)["flow_ratio"].get<std::string>().c_str()); flow_ratio_calib_result.flow_ratio = stof((*it)["flow_ratio"].get<std::string>().c_str());
flow_ratio_results.push_back(flow_ratio_calib_result); flow_ratio_results.push_back(flow_ratio_calib_result);

View File

@ -308,26 +308,28 @@ public:
static wxString get_hms_msg_level_str(HMSMessageLevel level); static wxString get_hms_msg_level_str(HMSMessageLevel level);
}; };
class CalibDatas class X1CCalibInfos
{ {
public: public:
struct CalibData struct X1CCalibInfo
{ {
int tray_id; int tray_id;
int bed_temp; int bed_temp;
int nozzle_temp; int nozzle_temp;
float nozzle_diameter;
std::string filament_id; std::string filament_id;
std::string setting_id; std::string setting_id;
float max_volumetric_speed; float max_volumetric_speed;
}; };
std::vector<CalibData> calib_datas; std::vector<X1CCalibInfo> calib_datas;
}; };
class PACalibResult class PACalibResult
{ {
public: public:
int tray_id; int tray_id;
float nozzle_diameter;
std::string filament_id; std::string filament_id;
std::string setting_id; std::string setting_id;
std::string name; std::string name;
@ -335,10 +337,19 @@ public:
float n_coef; float n_coef;
}; };
struct PACalibIndexInfo
{
int tray_id;
int index;
float nozzle_diameter;
std::string filament_id;
};
class FlowRatioCalibResult class FlowRatioCalibResult
{ {
public: public:
int tray_id; int tray_id;
float nozzle_diameter;
std::string filament_id; std::string filament_id;
std::string setting_id; std::string setting_id;
float flow_ratio; float flow_ratio;
@ -806,14 +817,15 @@ public:
int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali); int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali);
// PA calibration // PA calibration
int command_start_pa_calibration(const CalibDatas& pa_data); int command_start_pa_calibration(const X1CCalibInfos& pa_data);
int command_set_pa_calibration(const std::vector<PACalibResult>& pa_calib_values); int command_set_pa_calibration(const std::vector<PACalibResult>& pa_calib_values);
int command_delete_pa_calibration(const PACalibResult& pa_calib); int command_delete_pa_calibration(const PACalibIndexInfo& pa_calib);
int command_get_pa_calibration_infos(const std::string& filament_id = ""); int command_get_pa_calibration_tab(const std::string& filament_id = "");
int command_get_pa_calibration_result(); int command_get_pa_calibration_result();
int commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info);
// flow ratio calibration // flow ratio calibration
int command_start_flow_ratio_calibration(const CalibDatas& calib_data); int command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data);
int command_get_flow_ratio_calibration_result(); int command_get_flow_ratio_calibration_result();
int command_unload_filament(); int command_unload_filament();

View File

@ -77,20 +77,8 @@ void CalibUtils::calib_PA(const X1CCalibInfos& calib_infos, std::string& error_m
if (obj_ == nullptr) if (obj_ == nullptr)
return; return;
CalibDatas pa_datas; if (calib_infos.calib_datas.size() > 0)
for (auto calib_info : calib_infos.calib_infos) { obj_->command_start_pa_calibration(calib_infos);
CalibDatas::CalibData pa_calib;
pa_calib.tray_id = calib_info.tray_id;
pa_calib.setting_id = calib_info.setting_id;
pa_calib.bed_temp = calib_info.bed_temp;
pa_calib.nozzle_temp = calib_info.nozzle_temp;
pa_calib.max_volumetric_speed = calib_info.max_volumetric_speed;
pa_datas.calib_datas.push_back(pa_calib);
}
if (pa_datas.calib_datas.size() > 0)
obj_->command_start_pa_calibration(pa_datas);
} }
void CalibUtils::emit_get_PA_calib_results() void CalibUtils::emit_get_PA_calib_results()
@ -130,7 +118,7 @@ void CalibUtils::emit_get_PA_calib_infos()
if (obj_ == nullptr) if (obj_ == nullptr)
return; return;
obj_->command_get_pa_calibration_infos(); obj_->command_get_pa_calibration_tab();
} }
bool CalibUtils::get_PA_calib_tab(std::vector<PACalibResult> &pa_calib_infos) bool CalibUtils::get_PA_calib_tab(std::vector<PACalibResult> &pa_calib_infos)
@ -160,6 +148,32 @@ void CalibUtils::set_PA_calib_result(const std::vector<PACalibResult>& pa_calib_
obj_->command_set_pa_calibration(pa_calib_values); obj_->command_set_pa_calibration(pa_calib_values);
} }
void CalibUtils::select_PA_calib_result(const PACalibIndexInfo& pa_calib_info)
{
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev)
return;
MachineObject* obj_ = dev->get_selected_machine();
if (obj_ == nullptr)
return;
obj_->commnad_select_pa_calibration(pa_calib_info);
}
void CalibUtils::delete_PA_calib_result(const PACalibIndexInfo& pa_calib_info)
{
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev)
return;
MachineObject* obj_ = dev->get_selected_machine();
if (obj_ == nullptr)
return;
obj_->command_delete_pa_calibration(pa_calib_info);
}
void CalibUtils::calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message) void CalibUtils::calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message)
{ {
DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager();
@ -170,20 +184,8 @@ void CalibUtils::calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::strin
if (obj_ == nullptr) if (obj_ == nullptr)
return; return;
CalibDatas calib_datas; if (calib_infos.calib_datas.size() > 0)
for (auto calib_info : calib_infos.calib_infos) { obj_->command_start_flow_ratio_calibration(calib_infos);
CalibDatas::CalibData pa_calib;
pa_calib.tray_id = calib_info.tray_id;
pa_calib.setting_id = calib_info.setting_id;
pa_calib.bed_temp = calib_info.bed_temp;
pa_calib.nozzle_temp = calib_info.nozzle_temp;
pa_calib.max_volumetric_speed = calib_info.max_volumetric_speed;
calib_datas.calib_datas.push_back(pa_calib);
}
if (calib_datas.calib_datas.size() > 0)
obj_->command_start_flow_ratio_calibration(calib_datas);
} }
void CalibUtils::emit_get_flow_ratio_calib_results() void CalibUtils::emit_get_flow_ratio_calib_results()

View File

@ -8,22 +8,6 @@ class ProgressIndicator;
class Preset; class Preset;
namespace GUI { namespace GUI {
class X1CCalibInfos
{
public:
struct X1CCalibInfo
{
int tray_id;
std::string setting_id;
int bed_temp;
int nozzle_temp;
float max_volumetric_speed;
};
std::vector<X1CCalibInfo> calib_infos;
};
class CalibInfo class CalibInfo
{ {
public: public:
@ -48,6 +32,8 @@ public:
static void emit_get_PA_calib_infos(); static void emit_get_PA_calib_infos();
static bool get_PA_calib_tab(std::vector<PACalibResult> &pa_calib_infos); static bool get_PA_calib_tab(std::vector<PACalibResult> &pa_calib_infos);
static void set_PA_calib_result(const std::vector<PACalibResult>& pa_calib_values); static void set_PA_calib_result(const std::vector<PACalibResult>& pa_calib_values);
static void select_PA_calib_result(const PACalibIndexInfo &pa_calib_info);
static void delete_PA_calib_result(const PACalibIndexInfo &pa_calib_info);
static void calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message); static void calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message);
static void emit_get_flow_ratio_calib_results(); static void emit_get_flow_ratio_calib_results();