ENH:compatible with AMS exist flag

jira:[none]

Change-Id: I6afeafe0676eded86f83838576d67233f50ee509
This commit is contained in:
tao wang 2025-04-02 14:39:20 +08:00 committed by lane.wei
parent c2adbe140b
commit a182fa1aa4
4 changed files with 54 additions and 28 deletions

View File

@ -798,23 +798,26 @@ void MachineObject::_parse_tray_now(std::string tray_now)
} else {
try {
int tray_now_int = atoi(tray_now.c_str());
if (tray_now_int == 255) {
if (tray_now_int == VIRTUAL_TRAY_MAIN_ID) {
m_ams_id = "0";
m_tray_id = "0";
m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = "";
m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "";
}
else if (tray_now_int == VIRTUAL_TRAY_DEPUTY_ID) {
m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID);
m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "0";
}
else {
if (tray_now_int == 254) {
m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID);
m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "0";
}
else {
m_ams_id = std::to_string(tray_now_int >> 2);
m_tray_id = std::to_string(tray_now_int & 0x3);
m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = m_ams_id;
m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = m_tray_id;
if (tray_now_int >= 0x80 && tray_now_int <= 0x87) {
m_ams_id = std::to_string(tray_now_int);
} else {
m_ams_id = std::to_string(tray_now_int >> 2);
}
m_tray_id = std::to_string(tray_now_int & 0x3);
m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = m_ams_id;
m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = m_tray_id;
}
}
catch(...) {
@ -3745,7 +3748,7 @@ int MachineObject::parse_json(std::string payload, bool key_field_only)
}
/*the param is invalid in np for Yeshu*/
if (!check_enable_np(jj) && jj.contains("hw_switch_state")) {
if (jj.contains("hw_switch_state")) {
hw_switch_state = jj["hw_switch_state"].get<int>();
m_extder_data.extders[MAIN_NOZZLE_ID].ext_has_filament = hw_switch_state;
}
@ -4517,21 +4520,6 @@ int MachineObject::parse_json(std::string payload, bool key_field_only)
if (ams_it == amsList.end()) {
Ams* new_ams = new Ams(ams_id, nozzle_id, type_id);
new_ams->info = info;
try {
if (!ams_id.empty()) {
int ams_id_int = atoi(ams_id.c_str());
if (type_id < 4 ) {
new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false;
} else {
new_ams->is_exists = get_flag_bits(ams_exist_bits, 4 + (ams_id_int - 128));
}
}
}
catch (...) {
;
}
amsList.insert(std::make_pair(ams_id, new_ams));
// new ams added event
curr_ams = new_ams;
@ -4545,6 +4533,25 @@ int MachineObject::parse_json(std::string payload, bool key_field_only)
}
if (!curr_ams) continue;
/*set ams type flag*/
curr_ams->type = type_id;
/*set ams exist flag*/
try {
if (!ams_id.empty()) {
int ams_id_int = atoi(ams_id.c_str());
if (type_id < 4) {
curr_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false;
} else {
curr_ams->is_exists = get_flag_bits(ams_exist_bits, 4 + (ams_id_int - 128));
}
}
} catch (...) {
;
}
if (it->contains("dry_time") && (*it)["dry_time"].is_number())
{
curr_ams->left_dry_time = (*it)["dry_time"].get<int>();

View File

@ -1130,6 +1130,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) {
}
}
if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE;
if (item->second->get_ams_model() == AMSModel::N3S_AMS) return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S;
return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
}
}
@ -1400,6 +1401,10 @@ void AMSControl::SwitchAms(std::string ams_id)
}
else {
AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
if (item->get_ams_model() == AMSModel::N3S_AMS)
mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S;
for (auto it : pair_id) {
if (it.first == ams_id || it.second == ams_id) {
mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
@ -1521,9 +1526,10 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
}
//Set path length in different case
model = ams->get_ams_model();
if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM) {
length = left ? 129 : 145;
model = ams->get_ams_model();
} else if (ams->get_can_count() == 1) {
for (auto it : pair_id){
if (it.first == ams_id){
@ -1537,8 +1543,12 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy
break;
}
}
model = ams->get_ams_model();
if (!in_pair && model == N3S_AMS) {
length = left ? 129 : 232;
}
}
if (model == AMSModel::AMS_LITE){
length = left ? 145 : 45;
}

View File

@ -2328,6 +2328,10 @@ void AMSRoadDownPart::doRender(wxDC& dc)
dc.DrawLine(left_nozzle_pos.x - FromDIP(218), 0, left_nozzle_pos.x - FromDIP(218), (size.y / 2));
break;
case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE:
dc.DrawLine(left_nozzle_pos.x - FromDIP(192), (size.y / 2), left_nozzle_pos.x, (size.y / 2));
dc.DrawLine(left_nozzle_pos.x - FromDIP(192), 0, left_nozzle_pos.x - FromDIP(192), (size.y / 2));
break;
case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S:
dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), (size.y / 2), left_nozzle_pos.x, (size.y / 2));
dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), 0, left_nozzle_pos.x - FromDIP((129)), (size.y / 2));
break;
@ -2353,6 +2357,10 @@ void AMSRoadDownPart::doRender(wxDC& dc)
dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(68), (size.y / 2));
dc.DrawLine(right_nozzle_pos.x + FromDIP(68), 0, right_nozzle_pos.x + FromDIP(68), (size.y / 2));
break;
case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S:
dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), (size.y / 2), left_nozzle_pos.x, (size.y / 2));
dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), 0, left_nozzle_pos.x - FromDIP((129)), (size.y / 2));
break;
case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE:
dc.DrawLine(left_nozzle_pos.x, (size.y / 2), left_nozzle_pos.x + FromDIP(145), (size.y / 2));
dc.DrawLine(left_nozzle_pos.x + FromDIP(145), 0, left_nozzle_pos.x + FromDIP(145), (size.y / 2));

View File

@ -72,6 +72,7 @@ enum class AMSRoadShowMode : int {
AMS_ROAD_MODE_FOUR,
AMS_ROAD_MODE_DOUBLE,
AMS_ROAD_MODE_SINGLE,
AMS_ROAD_MODE_SINGLE_N3S,
AMS_ROAD_MODE_AMS_LITE,
AMS_ROAD_MODE_NONE
};