Browse Source

update

master
zhaohe 2 months ago
parent
commit
2db617a034
  1. 3
      sdk/components/pipette_module/base/pipette_cfg.hpp
  2. 2
      sdk/components/pipette_module/base/pipette_state.hpp
  3. 51
      sdk/components/pipette_module/pipette_ctrl_module.cpp
  4. 5
      sdk/components/pipette_module/pipette_ctrl_module.hpp
  5. 4
      sdk/components/pipette_module/pipette_ctrl_module_config_function_impl.cpp
  6. 31
      sdk/components/pipette_module/pipette_ctrl_module_test.cpp
  7. 2
      sdk/components/pipette_module/pipette_ctrl_module_utils.cpp
  8. 4
      sdk/components/pipette_module/pipette_ctrl_module_zm_ctrl.cpp
  9. 11
      sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp
  10. 2
      sdk/components/zcan_protocol_parser/zcan_protocol_parser.hpp
  11. 2
      usrc/a8000_protocol/protocol/cmdid.cpp
  12. 1
      usrc/a8000_protocol/protocol/cmdid.hpp

3
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";

2
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 {

51
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) {

5
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 *

4
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 *
***********************************************************************************************************************/

31
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;
}
}
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结束位置
});
}

2
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);
}

4
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;

11
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);

2
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

2
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) {

1
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;

Loading…
Cancel
Save