From 2db617a03412cdeea80f2e4a2a61d8dce5794fe3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 29 May 2025 20:51:54 +0800 Subject: [PATCH] update --- sdk/components/pipette_module/base/pipette_cfg.hpp | 3 ++ .../pipette_module/base/pipette_state.hpp | 2 +- .../pipette_module/pipette_ctrl_module.cpp | 51 +++++++++++----------- .../pipette_module/pipette_ctrl_module.hpp | 5 ++- .../pipette_ctrl_module_config_function_impl.cpp | 4 ++ .../pipette_module/pipette_ctrl_module_test.cpp | 31 ++++++++----- .../pipette_module/pipette_ctrl_module_utils.cpp | 2 +- .../pipette_module/pipette_ctrl_module_zm_ctrl.cpp | 4 ++ .../zcan_protocol_parser/zcan_protocol_parser.cpp | 11 +++-- .../zcan_protocol_parser/zcan_protocol_parser.hpp | 2 + usrc/a8000_protocol/protocol/cmdid.cpp | 2 + usrc/a8000_protocol/protocol/cmdid.hpp | 1 + 12 files changed, 75 insertions(+), 43 deletions(-) diff --git a/sdk/components/pipette_module/base/pipette_cfg.hpp b/sdk/components/pipette_module/base/pipette_cfg.hpp index dfb7814..a367573 100644 --- a/sdk/components/pipette_module/base/pipette_cfg.hpp +++ b/sdk/components/pipette_module/base/pipette_cfg.hpp @@ -274,6 +274,7 @@ typedef struct { int32_t fix_water_level_depth; // 固定吸液深度((0.1mm),当lld失能时,移液枪先移动到这个位置,然后开始吸液 int32_t llf_vconvert_coneff; // 液面跟随转换系数 0.0001 llf_zm_vel = aspiration_pm_vel * llf_vconvert_coneff * 0.0001 int32_t pierce_depth; // 穿刺深度(0.1mm),用于刺破容器防尘膜 + int32_t lld_end_pos_margin; // lld结束位置冗余,精度0.1mm,abspos = container_neck_pos + lld_end_pos_margin int32_t mark; // 结构体最后一个数值,设置9973,用于保证单片机端和java端均正确更新了枚举 } container_info_t; @@ -290,6 +291,7 @@ typedef enum { kcontainer_info_fix_water_level_depth, kcontainer_info_llf_vconvert_coneff, kcontainer_info_pierce_depth, + kcontainer_info_lld_end_pos_margin, // lld结束位置冗余,精度0.1mm,abspos = container_neck_pos + lld_end_pos_margin kcontainer_info_mark, } container_info_index_t; @@ -307,6 +309,7 @@ static inline const char *container_info_index_to_string(container_info_index_t CASE_ENUM_TO_STRING(kcontainer_info_fix_water_level_depth) CASE_ENUM_TO_STRING(kcontainer_info_llf_vconvert_coneff) CASE_ENUM_TO_STRING(kcontainer_info_pierce_depth) + CASE_ENUM_TO_STRING(kcontainer_info_lld_end_pos_margin) CASE_ENUM_TO_STRING(kcontainer_info_mark) } return "unknown"; diff --git a/sdk/components/pipette_module/base/pipette_state.hpp b/sdk/components/pipette_module/base/pipette_state.hpp index 473f16b..0d3063b 100644 --- a/sdk/components/pipette_module/base/pipette_state.hpp +++ b/sdk/components/pipette_module/base/pipette_state.hpp @@ -35,7 +35,7 @@ typedef struct { /** * @brief 当前平台参数 */ - int32_t platinfo_cpyid = 0; + int32_t __platinfo_cpyid = 0; } pipette_state_t; typedef enum { diff --git a/sdk/components/pipette_module/pipette_ctrl_module.cpp b/sdk/components/pipette_module/pipette_ctrl_module.cpp index b483586..c7472aa 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module.cpp @@ -193,25 +193,17 @@ int32_t PipetteModule::pipette_zmotor_move_to_zero_point_quick() { return 0; } -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); - } +int32_t PipetteModule::pipette_pump_init_device() { + thread_start_work(__FUNCTION__, [this]() { + ZLOGI(TAG, "pipette_pump_init_device use platinfo_cpyid: %d", m_common_cfg.platform_info_cpyid); - check_platinfo_cpyid(platinfo_cpyid_setval); + check_platinfo_cpyid(m_common_cfg.platform_info_cpyid); pump_apply_vcfg(kpm_v_max); // 默认配置 DO_IN_THREAD(m_smtp2.pump_init()); pump_waitfor_stop(); - m_state.platinfo_cpyid = platinfo_cpyid_setval; - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); clearPipetteGunState(); }); return 0; @@ -228,7 +220,7 @@ int32_t PipetteModule::pipette_pump_take_tip() { * -> 直到tip状态被触发停止移动 */ - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); zm_move_to_block(platform_info->tip_picking_pos, kzm_v_default, 0); zm_move_by(platform_info->tip_picking_search_range, kzm_v_picking_tip, 0); bool takeTip = false; @@ -241,10 +233,15 @@ int32_t PipetteModule::pipette_pump_take_tip() { break; } if (m_zm->isStoped()) break; + ZLOGI(TAG, "wait for tip state trigger , %d", tipstate); thread_delay(1); } - if (takeTip && platform_info->tip_picking_append_distance > 0) // + + if (takeTip && platform_info->tip_picking_append_distance > 0) { + ZLOGI(TAG, "wait for tip stable, append distance:%d", platform_info->tip_picking_append_distance); zm_move_by_block(platform_info->tip_picking_append_distance, kzm_v_picking_tip, 0); + thread_delay(platform_info->tip_picking_settling_time); // 等待tip稳定 + } // 移动到tip搜索位置,检查tip是否存在,如果不存在,则强制退tip一次 if (takeTip) { @@ -252,6 +249,8 @@ int32_t PipetteModule::pipette_pump_take_tip() { for (int i = 0; i < 3; i++) { DO_IN_THREAD(m_smtp2.pump_get_tip_state(&tipstate)); if (tipstate == 0) { + ZLOGI(TAG, "pipette_pump_take_tip tip is not exist, force put bak tip again"); + pump_apply_vcfg(kpm_v_max); // DO_IN_THREAD(m_smtp2.pump_init()); // 强制退tip takeTip = false; break; @@ -260,6 +259,7 @@ int32_t PipetteModule::pipette_pump_take_tip() { } zm_move_to_zero_quick_block(); + pump_waitfor_stop(); ZLOGI(TAG, "pipette_pump_take_tip takeTip %s", takeTip ? "suc" : "fail"); }); return 0; @@ -275,7 +275,7 @@ int32_t PipetteModule::pipette_pump_putbak_tip() { * -> 丢tip */ - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); int32_t putbakpos = platform_info->tip_picking_pos - 100; if (putbakpos < 0) putbakpos = 0; zm_move_to_block(putbakpos, kzm_v_default, 0); @@ -303,7 +303,7 @@ int32_t PipetteModule::pipette_pump_deposit_tip() { * -> 丢tip */ - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); zm_move_to_block(platform_info->tip_deposit_pos, kzm_v_default, 0); pump_apply_vcfg(kpm_v_max); // @@ -319,13 +319,13 @@ int32_t PipetteModule::pipette_pump_deposit_tip() { return 0; } int32_t PipetteModule::pipette_pump_pierce_through(int32_t container_info_index, int32_t container_pos) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_info_index, container_pos]() { // check param check_container_info_cpyid(container_info_index); - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); container_info_t *container_info = get_container_info_smart(container_info_index, &m_now_container_info); zm_move_to_block(container_info->pierce_depth + container_pos, kzm_v_default, 0); @@ -389,7 +389,7 @@ int32_t PipetteModule::pipette_pump_aspirate() { DO_IN_THREAD(m_smtp2.pump_set_io1_mode(0)); // lld输入高 // DO_IN_THREAD(m_smtp2.pump_set_io2_mode(0)); // 通用输入 - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); liquid_info_t *liquidinfo = get_liquid_info_smart(acfg->liquid_cfg_index, &m_now_liquid_info); container_info_t *container_cfg = get_container_info_smart(acfg->container_info_index, &m_now_container_info); @@ -400,7 +400,7 @@ int32_t PipetteModule::pipette_pump_aspirate() { clearPipetteGunState(); zm_move_to_zero_quick_block(); - adjust_container_pos(&acfg->container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&acfg->container_pos, m_common_cfg.platform_info_cpyid); if (acfg->lld_enable) { _do_lld(acfg->container_pos, platform_info, container_cfg, liquidinfo); // 液面探测 @@ -471,7 +471,8 @@ void PipetteModule::_do_lld(int32_t container_pos, platinfo_t *platform_info, co zm_move_to_lld_start_search_pos_block(container_pos, container_cfg, kzm_v_default, 0); // lld,zm移动到瓶底 ZLOGI(TAG, "-->zm move slow to container bottom pos"); - zm_move_to(container_pos + container_cfg->container_depth - 50, kzm_v_lld, liquidinfo->plld_zm_vel); + int32_t lld_end_pos = container_pos + container_cfg->container_depth - container_cfg->lld_end_pos_margin; + zm_move_to(lld_end_pos, kzm_v_lld, liquidinfo->plld_zm_vel); /** * @brief 等待压力大于阈值 @@ -717,14 +718,14 @@ int32_t PipetteModule::pipette_pump_distribu_all() { 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); + check_platinfo_cpyid(m_common_cfg.platform_info_cpyid); 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); + platform_info = get_platinfo_smart(m_common_cfg.platform_info_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) { @@ -739,7 +740,7 @@ int32_t PipetteModule::pipette_pump_distribu_all() { 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); + adjust_container_pos(&dcfg->container_pos, m_common_cfg.platform_info_cpyid); int32_t container_pos = dcfg->container_pos; if (dcfg->distribu_type == 0) { diff --git a/sdk/components/pipette_module/pipette_ctrl_module.hpp b/sdk/components/pipette_module/pipette_ctrl_module.hpp index a0fc5d7..e9bab1f 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module.hpp +++ b/sdk/components/pipette_module/pipette_ctrl_module.hpp @@ -190,7 +190,7 @@ class PipetteModule : public ZIModule { void zm_move_to_container_bottom_section_begin_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); void zm_move_to_lld_start_search_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); void zm_move_to_pierce_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); - + void zm_move_to_lld_end_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); void zm_move_to_fix_water_level_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); void zm_move_to_immersion_pos_block(int32_t container_pos, int32_t waterlevel, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); void zm_move_to_leaving_height_pos_block(int32_t container_pos, int32_t waterlevel, container_info_t *containInfo, int32_t vbcpyid, int32_t vel); @@ -278,7 +278,7 @@ class PipetteModule : public ZIModule { /*********************************************************************************************************************** * PUMP * ***********************************************************************************************************************/ - virtual int32_t pipette_pump_init_device(int32_t platinfo_cpyid); + virtual int32_t pipette_pump_init_device(); virtual int32_t pipette_pump_take_tip(); virtual int32_t pipette_pump_putbak_tip(); virtual int32_t pipette_pump_deposit_tip(); @@ -310,6 +310,7 @@ class PipetteModule : public ZIModule { virtual int32_t pipette_test_move_to_lld_start_search_pos(int32_t container_pos, int32_t container_cpyid); virtual int32_t pipette_test_move_to_fix_water_level_pos(int32_t container_pos, int32_t container_cpyid); virtual int32_t pipette_test_move_to_pierce_pos(int32_t container_pos, int32_t container_cpyid); + virtual int32_t pipette_test_move_to_lld_end_pos(int32_t container_pos, int32_t container_cpyid); /*********************************************************************************************************************** * Utils * diff --git a/sdk/components/pipette_module/pipette_ctrl_module_config_function_impl.cpp b/sdk/components/pipette_module/pipette_ctrl_module_config_function_impl.cpp index 8a20f0b..423947b 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module_config_function_impl.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module_config_function_impl.cpp @@ -384,6 +384,10 @@ liquid_info_t *PipetteModule::get_liquid_info_smart(int32_t index, liquid_info_t } void PipetteModule::parameter_init() { + m_common_cfg.platform_info_cpyid = 0; + m_common_cfg.pressure_record_enable = 0; + m_common_cfg.max = 9973; + /*********************************************************************************************************************** * zmbcfg * ***********************************************************************************************************************/ diff --git a/sdk/components/pipette_module/pipette_ctrl_module_test.cpp b/sdk/components/pipette_module/pipette_ctrl_module_test.cpp index 3e0a65a..d4c99d5 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module_test.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module_test.cpp @@ -30,7 +30,7 @@ int32_t PipetteModule::pipette_test_pump_move_to_x100nl(int32_t x100nl, int32_t return 0; } int32_t PipetteModule::pipette_test_lld(int32_t container_pos, int32_t container_cpyid, int32_t liquid_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid, liquid_cpyid]() { ZLOGI(TAG, "pipette_pump_aspirate"); if (pump_read_tip_state() == 0) { @@ -42,7 +42,7 @@ int32_t PipetteModule::pipette_test_lld(int32_t container_pos, int32_t container DO_IN_THREAD(m_smtp2.pump_set_back_clearance(0)); // 设置背隙为0 DO_IN_THREAD(m_smtp2.pump_set_io1_mode(0)); // lld输入高 - platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo); + platinfo_t *platform_info = get_platinfo_smart(m_common_cfg.platform_info_cpyid, &m_now_platinfo); liquid_info_t *liquidinfo = get_liquid_info_smart(container_cpyid, &m_now_liquid_info); container_info_t *container_cfg = get_container_info_smart(liquid_cpyid, &m_now_container_info); @@ -52,7 +52,7 @@ int32_t PipetteModule::pipette_test_lld(int32_t container_pos, int32_t container } int32_t PipetteModule::pipette_test_move_to_container_bottom(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); check_container_info_cpyid(container_cpyid); @@ -61,7 +61,7 @@ int32_t PipetteModule::pipette_test_move_to_container_bottom(int32_t container_p return 0; } int32_t PipetteModule::pipette_test_move_to_container_bottom_section_begin(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); check_container_info_cpyid(container_cpyid); @@ -70,7 +70,7 @@ int32_t PipetteModule::pipette_test_move_to_container_bottom_section_begin(int32 return 0; } int32_t PipetteModule::pipette_test_move_to_immersion_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); check_container_info_cpyid(container_cpyid); @@ -79,7 +79,7 @@ int32_t PipetteModule::pipette_test_move_to_immersion_pos(int32_t container_pos, return 0; } int32_t PipetteModule::pipette_test_move_to_leaving_height_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); check_container_info_cpyid(container_cpyid); @@ -88,7 +88,7 @@ int32_t PipetteModule::pipette_test_move_to_leaving_height_pos(int32_t container return 0; } int32_t PipetteModule::pipette_test_move_to_jet_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); @@ -98,7 +98,7 @@ int32_t PipetteModule::pipette_test_move_to_jet_pos(int32_t container_pos, int32 return 0; } int32_t PipetteModule::pipette_test_move_to_lld_start_search_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); @@ -108,7 +108,7 @@ int32_t PipetteModule::pipette_test_move_to_lld_start_search_pos(int32_t contain return 0; } int32_t PipetteModule::pipette_test_move_to_fix_water_level_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); @@ -118,7 +118,7 @@ int32_t PipetteModule::pipette_test_move_to_fix_water_level_pos(int32_t containe return 0; } int32_t PipetteModule::pipette_test_move_to_pierce_pos(int32_t container_pos, int32_t container_cpyid) { - adjust_container_pos(&container_pos, m_state.platinfo_cpyid); + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); @@ -126,4 +126,13 @@ int32_t PipetteModule::pipette_test_move_to_pierce_pos(int32_t container_pos, in zm_move_to_pierce_pos_block(container_pos, container_info, kzm_v_default, 0); // 移动到穿刺位置 }); return 0; -} \ No newline at end of file +} + int32_t PipetteModule::pipette_test_move_to_lld_end_pos(int32_t container_pos, int32_t container_cpyid){ + adjust_container_pos(&container_pos, m_common_cfg.platform_info_cpyid); + + thread_start_work(__FUNCTION__, [this, container_pos, container_cpyid]() { + container_info_t *container_info = get_container_info_smart(container_cpyid, &m_now_container_info); + check_container_info_cpyid(container_cpyid); + zm_move_to_lld_end_pos_block(container_pos, container_info, kzm_v_default, 0); // 移动到lld结束位置 + }); + } diff --git a/sdk/components/pipette_module/pipette_ctrl_module_utils.cpp b/sdk/components/pipette_module/pipette_ctrl_module_utils.cpp index 40d142a..a007b86 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module_utils.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module_utils.cpp @@ -78,7 +78,7 @@ void PipetteModule::check_pipette_pump_aspirate_params() { ZLOGE(TAG, "pipette_pump_aspirate_set_param x100nl %d out of range", acfg->volumeX100nl); throw zapp_exception(err::kparam_out_of_range); } - check_platinfo_cpyid(m_state.platinfo_cpyid); + check_platinfo_cpyid( m_common_cfg.platform_info_cpyid); check_container_info_cpyid(acfg->container_info_index); check_liquid_info_cpyid(acfg->liquid_cfg_index); } diff --git a/sdk/components/pipette_module/pipette_ctrl_module_zm_ctrl.cpp b/sdk/components/pipette_module/pipette_ctrl_module_zm_ctrl.cpp index 192a613..50b9fe9 100644 --- a/sdk/components/pipette_module/pipette_ctrl_module_zm_ctrl.cpp +++ b/sdk/components/pipette_module/pipette_ctrl_module_zm_ctrl.cpp @@ -51,6 +51,10 @@ void PipetteModule::zm_move_to_fix_water_level_pos_block(int32_t container_pos, void PipetteModule::zm_move_to_pierce_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel) { // zm_move_to_block(container_pos + containInfo->pierce_depth, vbcpyid, vel); } +void PipetteModule::zm_move_to_lld_end_pos_block(int32_t container_pos, container_info_t *containInfo, int32_t vbcpyid, int32_t vel) { + // 移动到lld结束位置 + zm_move_to_block(container_pos + containInfo->container_depth - containInfo->lld_end_pos_margin, vbcpyid, vel); +} void PipetteModule::do_zm_move_0p() { bool is_trigger = false; diff --git a/sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp b/sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp index 673a4ea..aecf86a 100644 --- a/sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp +++ b/sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp @@ -210,6 +210,7 @@ void ZCanProtocolParser::initialize(ZCanReceiver* cancmder) { REGFN(pipette_test_move_to_lld_start_search_pos); REGFN(pipette_test_move_to_fix_water_level_pos); REGFN(pipette_test_move_to_pierce_pos); + REGFN(pipette_test_move_to_lld_end_pos); } void ZCanProtocolParser::_registerModule(uint16_t id, ZIModule* module) { m_modulers[id] = module; } void ZCanProtocolParser::registerModule(ZIModule* module) { _registerModule(module->getid(), module); } @@ -1086,8 +1087,8 @@ int32_t ZCanProtocolParser::pipette_zmotor_read_dev_status_cache(cmdcontxt_t* cx } int32_t ZCanProtocolParser::pipette_pump_init_device(cmdcontxt_t* cxt) { - CHECK_AND_GET_MODULE(1); - return module->pipette_pump_init_device(cxt->params[0]); + CHECK_AND_GET_MODULE(0); + return module->pipette_pump_init_device(); } int32_t ZCanProtocolParser::pipette_pump_take_tip(cmdcontxt_t* cxt) { @@ -1240,7 +1241,11 @@ int32_t ZCanProtocolParser::pipette_test_move_to_pierce_pos(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(2); return module->pipette_test_move_to_pierce_pos(cxt->params[0], cxt->params[1]); } - +// pipette_test_move_to_lld_end_pos +int32_t ZCanProtocolParser::pipette_test_move_to_lld_end_pos(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(2); + return module->pipette_test_move_to_lld_end_pos(cxt->params[0], cxt->params[1]); +} int32_t ZCanProtocolParser::pipette_set_common_cfg(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(2); diff --git a/sdk/components/zcan_protocol_parser/zcan_protocol_parser.hpp b/sdk/components/zcan_protocol_parser/zcan_protocol_parser.hpp index f1df48e..6bcec27 100644 --- a/sdk/components/zcan_protocol_parser/zcan_protocol_parser.hpp +++ b/sdk/components/zcan_protocol_parser/zcan_protocol_parser.hpp @@ -233,6 +233,8 @@ class ZCanProtocolParser : public IZCanRxProcesser { CMDFN(pipette_test_move_to_lld_start_search_pos); CMDFN(pipette_test_move_to_fix_water_level_pos); CMDFN(pipette_test_move_to_pierce_pos); + CMDFN(pipette_test_move_to_lld_end_pos); + }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/a8000_protocol/protocol/cmdid.cpp b/usrc/a8000_protocol/protocol/cmdid.cpp index f3ef4e0..df4bc1f 100644 --- a/usrc/a8000_protocol/protocol/cmdid.cpp +++ b/usrc/a8000_protocol/protocol/cmdid.cpp @@ -178,6 +178,8 @@ static cmdinfo_t table[] = { CMD_ITERM(kpipette_test_move_to_lld_start_search_pos), CMD_ITERM(kpipette_test_move_to_fix_water_level_pos), CMD_ITERM(kpipette_test_move_to_pierce_pos), + CMD_ITERM(kpipette_test_move_to_lld_end_pos), + }; const char* cmdid2str(int32_t code) { diff --git a/usrc/a8000_protocol/protocol/cmdid.hpp b/usrc/a8000_protocol/protocol/cmdid.hpp index 019c693..9891ae3 100644 --- a/usrc/a8000_protocol/protocol/cmdid.hpp +++ b/usrc/a8000_protocol/protocol/cmdid.hpp @@ -189,6 +189,7 @@ typedef enum { kpipette_test_move_to_lld_start_search_pos = 0x7607, // int32_t container_pos, int32_t container_cpyid, kpipette_test_move_to_fix_water_level_pos = 0x7608, // int32_t container_pos, int32_t container_cpyid, kpipette_test_move_to_pierce_pos = 0x7609, // int32_t container_pos, int32_t container_cpyid, + kpipette_test_move_to_lld_end_pos = 0x760A, // int32_t container_pos, int32_t container_cpyid, } cmdid_t;