diff --git a/sdk/components/pipette_module/base/pipette_action_param.hpp b/sdk/components/pipette_module/base/pipette_action_param.hpp index afe60ae..cd0f84a 100644 --- a/sdk/components/pipette_module/base/pipette_action_param.hpp +++ b/sdk/components/pipette_module/base/pipette_action_param.hpp @@ -115,9 +115,9 @@ typedef struct { // // 目标容器信息 // - int32_t dest_container_cpyid; // 目标容器配置索引 - int32_t __dest_container_is_empty; // 占位 - int32_t dest_liquid_cfg_index; // 目标容器中的液体类型 + int32_t dest_container_cpyid; // 目标容器配置索引 + int32_t dest_container_has_liquid; // 目标容器中是否有液体 + int32_t dest_liquid_cfg_index; // 目标容器中的液体类型 // // 分配方式 @@ -146,7 +146,7 @@ typedef enum { // 目标容器信息 // kdistribu_all_paramid_dest_container_cpyid, - kdistribu_all_paramid_dest_container_is_empty, + kdistribu_all_paramid_dest_container_has_liquid, kdistribu_all_paramid_dest_liquid_cfg_index, // // 分配方式 @@ -168,7 +168,7 @@ static inline const char *distribu_all_paramid_to_string(distribu_all_paramid_t switch (index) { CASE_ENUM_TO_STRING(kdistribu_all_paramid_container_pos); CASE_ENUM_TO_STRING(kdistribu_all_paramid_dest_container_cpyid); - CASE_ENUM_TO_STRING(kdistribu_all_paramid_dest_container_is_empty); + CASE_ENUM_TO_STRING(kdistribu_all_paramid_dest_container_has_liquid); CASE_ENUM_TO_STRING(kdistribu_all_paramid_dest_liquid_cfg_index); CASE_ENUM_TO_STRING(kdistribu_all_paramid_distribu_type); CASE_ENUM_TO_STRING(kdistribu_all_paramid_mix_volume); diff --git a/sdk/components/pipette_module/base/pipette_cfg.hpp b/sdk/components/pipette_module/base/pipette_cfg.hpp index 2309078..c7b7bde 100644 --- a/sdk/components/pipette_module/base/pipette_cfg.hpp +++ b/sdk/components/pipette_module/base/pipette_cfg.hpp @@ -16,17 +16,20 @@ typedef struct { int32_t pressure_record_enable; + int32_t platform_info_cpyid; // 平台信息的副本ID int32_t max; } common_cfg_t; typedef enum { kpipette_common_cfg_pressure_record_enable, + kpipette_common_cfg_platform_info_cpyid, // 平台信息的副本ID kpipette_common_cfg_max, } pipette_common_cfg_index_t; static inline const char *common_cfg_index_to_string(pipette_common_cfg_index_t index) { switch (index) { CASE_ENUM_TO_STRING(kpipette_common_cfg_pressure_record_enable) + CASE_ENUM_TO_STRING(kpipette_common_cfg_platform_info_cpyid) // 平台信息的副本ID CASE_ENUM_TO_STRING(kpipette_common_cfg_max) } return "unknown"; diff --git a/sdk/components/pipette_module/pipette_ctrl_module.cpp b/sdk/components/pipette_module/pipette_ctrl_module.cpp index 52b1947..b483586 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module.cpp @@ -193,16 +193,24 @@ int32_t PipetteModule::pipette_zmotor_move_to_zero_point_quick() { return 0; } -int32_t PipetteModule::pipette_pump_init_device(int32_t platinfo_cpyid) { - thread_start_work(__FUNCTION__, [this, platinfo_cpyid]() { - ZLOGI(TAG, "pipette_pump_init_device platinfo_cpyid: %d", platinfo_cpyid); - check_platinfo_cpyid(platinfo_cpyid); +int32_t PipetteModule::pipette_pump_init_device(int32_t param__platinfo_cpyid) { + thread_start_work(__FUNCTION__, [this, param__platinfo_cpyid]() { + ZLOGI(TAG, "pipette_pump_init_device param__platinfo_cpyid: %d", param__platinfo_cpyid); + + int32_t platinfo_cpyid_setval = param__platinfo_cpyid; + + if (platinfo_cpyid_setval < 0) { + platinfo_cpyid_setval = m_common_cfg.platform_info_cpyid; + ZLOGI(TAG, "pipette_pump_init_device use common_cfg platinfo_cpyid: %d", platinfo_cpyid_setval); + } + + check_platinfo_cpyid(platinfo_cpyid_setval); pump_apply_vcfg(kpm_v_max); // 默认配置 DO_IN_THREAD(m_smtp2.pump_init()); pump_waitfor_stop(); - m_state.platinfo_cpyid = platinfo_cpyid; + m_state.platinfo_cpyid = platinfo_cpyid_setval; platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); clearPipetteGunState(); }); @@ -706,21 +714,30 @@ int32_t PipetteModule::pipette_pump_distribu_all() { */ auto *dcfg = &m_distribu_all_param; - check_liquid_info_cpyid(dcfg->dest_liquid_cfg_index); + if (dcfg->dest_container_has_liquid) check_liquid_info_cpyid(dcfg->dest_liquid_cfg_index); check_liquid_info_cpyid(m_pump_gun_state.liquid_type_cpyidx); check_container_info_cpyid(dcfg->dest_container_cpyid); check_platinfo_cpyid(m_state.platinfo_cpyid); - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); - liquid_info_t *liquidinfo = get_liquid_info_smart(dcfg->dest_liquid_cfg_index, &m_now_liquid_info); - container_info_t *container_cfg = get_container_info_smart(dcfg->dest_container_cpyid, &m_now_container_info); - liquid_info_t *liquidInGun_info = get_liquid_info_smart(m_pump_gun_state.liquid_type_cpyidx, &m_now_liquid_in_gun_info); + platinfo_t *platform_info = nullptr; + container_info_t *container_cfg = nullptr; + liquid_info_t *liquidInGuninfo = nullptr; + liquid_info_t *liquidinfo = nullptr; + + platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + container_cfg = get_container_info_smart(dcfg->dest_container_cpyid, &m_now_container_info); + liquidInGuninfo = get_liquid_info_smart(m_pump_gun_state.liquid_type_cpyidx, &m_now_liquid_in_gun_info); + if (dcfg->dest_container_has_liquid) { + liquidinfo = get_liquid_info_smart(dcfg->dest_liquid_cfg_index, &m_now_liquid_info); + } else { + liquidinfo = liquidInGuninfo; + } dump("distribu_all_param", dcfg); dump("platform_info", platform_info); dump("container_info", container_cfg); - dump("liquid_info", liquidinfo); - dump("liquid_in_gun_info", liquidInGun_info); + if (dcfg->dest_container_has_liquid) dump("liquid_info", liquidinfo); + dump("liquid_in_gun_info", liquidInGuninfo); adjust_container_pos(&dcfg->container_pos, m_state.platinfo_cpyid); int32_t container_pos = dcfg->container_pos; @@ -730,7 +747,7 @@ int32_t PipetteModule::pipette_pump_distribu_all() { ZLOGI(TAG, "-->jet mode distribu"); ZLOGI(TAG, "-->move to jet position"); zm_move_to_jet_pos_block(container_pos, -1, container_cfg, kzm_v_default, 0); // 移动到jet位置 - pump_move_to_x100nl_block(0, liquidInGun_info->jet_pm_vcpyid); // 快速喷射出所有液体(使用jet速度) + pump_move_to_x100nl_block(0, liquidInGuninfo->jet_pm_vcpyid); // 快速喷射出所有液体(使用jet速度) } else { ZLOGI(TAG, "-->under liquid distribu"); // 移动到swap位置 @@ -738,9 +755,9 @@ int32_t PipetteModule::pipette_pump_distribu_all() { zm_move_to_leaving_height_pos_block(container_pos, -1, container_cfg, kzm_v_default, 0); // 移动到swap位置 // 清空transport volume - if (liquidInGun_info->transport_volume != 0) { + if (liquidInGuninfo->transport_volume != 0) { ZLOGI(TAG, "-->clean transport volume"); - pump_move_by_x100nl_block(-liquidInGun_info->transport_volume, liquidInGun_info->transport_volume_pm_vcpyid); // 清空transport volume + pump_move_by_x100nl_block(-liquidInGuninfo->transport_volume, liquidInGuninfo->transport_volume_pm_vcpyid); // 清空transport volume } else { ZLOGI(TAG, "-->clean transport volume,skip"); } @@ -751,14 +768,14 @@ int32_t PipetteModule::pipette_pump_distribu_all() { // 分液 ZLOGI(TAG, "-->distribu liquid"); - int32_t distribu_volume = calibrate_liquid_volume(liquidInGun_info, m_pump_gun_state.liquid_volume); - pump_move_by_x100nl_block(-distribu_volume, liquidInGun_info->distribu_pm_vpyid); // 分液 + int32_t distribu_volume = calibrate_liquid_volume(liquidInGuninfo, m_pump_gun_state.liquid_volume); + pump_move_by_x100nl_block(-distribu_volume, liquidInGuninfo->distribu_pm_vpyid); // 分液 // 移动到swap位置,快速清空tip,使用(emptyTip速度) ZLOGI(TAG, "-->move to swap position and clean tip"); zm_move_to_leaving_height_pos_block(container_pos, -1, container_cfg, kzm_v_swap_out, 0); // 移动到swap位置 - pump_move_to_x100nl_block(0, liquidInGun_info->empty_tip_pm_vcpyid); // 快速清空tip,使用(emptyTip速度) + pump_move_to_x100nl_block(0, liquidInGuninfo->empty_tip_pm_vcpyid); // 快速清空tip,使用(emptyTip速度) } // @@ -780,7 +797,7 @@ int32_t PipetteModule::pipette_pump_distribu_all() { } // 吸入10ul过量的空气,防挂液 - pump_move_by_x100nl_block(100, liquidInGun_info->transport_volume_pm_vcpyid); + pump_move_by_x100nl_block(100, liquidInGuninfo->transport_volume_pm_vcpyid); // // 如果需要归零,则移动到transform_pos //