Browse Source

update

master
zhaohe 2 months ago
parent
commit
969d77792d
  1. 99
      sdk/components/pipette_module/pipette_ctrl_module.cpp
  2. 7
      sdk/components/pipette_module/pipette_ctrl_module.hpp
  3. 4
      sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp

99
sdk/components/pipette_module/pipette_ctrl_module.cpp

@ -52,6 +52,8 @@ void PipetteModule::initialize(int32_t id, hardward_config_t *hardwaredcfg) { /
test_connectivity(); test_connectivity();
parameter_init(); parameter_init();
zm_sync_base_cfg(); zm_sync_base_cfg();
get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo);
} }
void PipetteModule::test_connectivity() { void PipetteModule::test_connectivity() {
@ -698,10 +700,13 @@ int32_t PipetteModule::pipette_pump_init_device(int32_t platinfo_cpyid) {
thread_start_work(__FUNCTION__, [this, platinfo_cpyid]() { thread_start_work(__FUNCTION__, [this, platinfo_cpyid]() {
ZLOGI(TAG, "pipette_pump_init_device platinfo_cpyid: %d", platinfo_cpyid); ZLOGI(TAG, "pipette_pump_init_device platinfo_cpyid: %d", platinfo_cpyid);
check_platinfo_cpyid(platinfo_cpyid); check_platinfo_cpyid(platinfo_cpyid);
pump_apply_vcfg(kpm_v_max); // 默认配置 pump_apply_vcfg(kpm_v_max); // 默认配置
DO_IN_THREAD(m_smtp2.pump_init()); DO_IN_THREAD(m_smtp2.pump_init());
pump_waitfor_stop(); pump_waitfor_stop();
m_state.platinfo_cpyid = platinfo_cpyid;
m_state.platinfo_cpyid = platinfo_cpyid;
platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &m_now_platinfo);
}); });
return 0; return 0;
} }
@ -710,32 +715,91 @@ int32_t PipetteModule::pipette_pump_take_tip() {
/** /**
* @brief * @brief
* *
* ->
* ->
*
*
* -> tip开始位
* -> tip
* -> tip状态被触发停止移动
*/
platinfo_t *platform_info = &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;
while (true) {
int32_t tipstate = 0;
DO_IN_THREAD(m_smtp2.pump_get_tip_state(&tipstate));
if (tipstate == 1) {
takeTip = true;
zm_stop();
break;
}
if (m_zm->isStoped()) break;
thread_delay(1);
}
if (takeTip && platform_info->tip_picking_append_distance > 0) //
zm_move_by_block(platform_info->tip_picking_append_distance, kzm_v_picking_tip, 0);
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0);
ZLOGI(TAG, "pipette_pump_take_tip takeTip %s", takeTip ? "suc" : "fail");
});
return 0;
}
int32_t PipetteModule::pipette_pump_putbak_tip() {
thread_start_work(__FUNCTION__, [this]() {
/**
* @brief
* *
* -> tip_picking_pos上面10mm的位置
* -> tip
*/ */
platinfo_t *platform_info = &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);
// pump初始化(约等于丢tip,且保证百分百丢弃tip)
pump_apply_vcfg(kpm_v_max); //
DO_IN_THREAD(m_smtp2.pump_init());
pump_waitfor_stop(); pump_waitfor_stop();
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0);
}); });
return 0; return 0;
} }
int32_t PipetteModule::pipette_pump_putbak_tip() { return 0; }
int32_t PipetteModule::pipette_pump_deposit_tip() { int32_t PipetteModule::pipette_pump_deposit_tip() {
thread_start_work(__FUNCTION__, [this]() { thread_start_work(__FUNCTION__, [this]() {
pump_apply_vcfg(kpm_v_max); // 默认配置
DO_IN_THREAD(m_smtp2.pump_put_tip());
/**
* @brief
*
* -> tip_deposit_pos
* -> tip
*/
platinfo_t *platform_info = &m_now_platinfo;
zm_move_to_block(platform_info->tip_deposit_pos, kzm_v_default, 0);
pump_apply_vcfg(kpm_v_max); //
// DO_IN_THREAD(m_smtp2.pump_put_tip());
DO_IN_THREAD(m_smtp2.pump_init());
pump_waitfor_stop(); pump_waitfor_stop();
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0);
}); });
return 0; return 0;
} }
int32_t PipetteModule::pipette_pump_pierce_through() {
thread_start_work(__FUNCTION__, [this]() {
pump_apply_vcfg(kpm_v_max); // 默认配置
DO_IN_THREAD(m_smtp2.pump_put_tip());
pump_waitfor_stop();
int32_t PipetteModule::pipette_pump_pierce_through(int32_t container_info_index, int32_t container_pos) {
thread_start_work(__FUNCTION__, [this, container_info_index, container_pos]() {
// check param
check_container_info_cpyid(container_info_index);
platinfo_t *platform_info = &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);
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0);
}); });
return 0; return 0;
} }
@ -829,7 +893,7 @@ int32_t PipetteModule::pipette_pump_aspirate() {
ZLOGI(TAG, "-"); ZLOGI(TAG, "-");
// aspirate_run_cxt // aspirate_run_cxt
platinfo_t *platform_info = get_platinfo_smart(m_state.platinfo_cpyid, &aspirate_run_cxt.platinfo);
platinfo_t *platform_info = &m_now_platinfo;
liquid_info_t *liquidinfo = get_liquid_info_smart(acfg->liquid_cfg_index, &aspirate_run_cxt.liquid_info); liquid_info_t *liquidinfo = get_liquid_info_smart(acfg->liquid_cfg_index, &aspirate_run_cxt.liquid_info);
container_info_t *container_cfg = get_container_info_smart(acfg->container_info_index, &aspirate_run_cxt.container_info); container_info_t *container_cfg = get_container_info_smart(acfg->container_info_index, &aspirate_run_cxt.container_info);
/*********************************************************************************************************************** /***********************************************************************************************************************
@ -1089,6 +1153,10 @@ void PipetteModule::zm_move_by(int32_t dx, int32_t vindex, int32_t vel) {
zm_apply_vcfg(vindex, vel); zm_apply_vcfg(vindex, vel);
m_zm->moveBy(dx); m_zm->moveBy(dx);
} }
void PipetteModule::zm_move_by_block(int32_t dx, int32_t vindex, int32_t vel) {
zm_move_by(dx, vindex, vel);
zm_waitfor_stop();
}
void PipetteModule::zm_move_to_end(int32_t direction, int32_t vindex) { void PipetteModule::zm_move_to_end(int32_t direction, int32_t vindex) {
if (zmbcfg.enable_enc != 0) { if (zmbcfg.enable_enc != 0) {
@ -1547,7 +1615,8 @@ void PipetteModule::parameter_init() {
/*********************************************************************************************************************** /***********************************************************************************************************************
* pm_base_cfg * * pm_base_cfg *
***********************************************************************************************************************/ ***********************************************************************************************************************/
pm_base_cfg.pad = 0;
pm_base_cfg.pad = 0;
pm_base_cfg.mark = 9973;
/*********************************************************************************************************************** /***********************************************************************************************************************
* m_platinfo * * m_platinfo *

7
sdk/components/pipette_module/pipette_ctrl_module.hpp

@ -56,7 +56,6 @@ class PipetteModule : public ZIModule {
} hardward_config_t; } hardward_config_t;
typedef struct { typedef struct {
platinfo_t platinfo;
container_info_t container_info; container_info_t container_info;
liquid_info_t liquid_info; liquid_info_t liquid_info;
} aspirate_run_cxt_t; } aspirate_run_cxt_t;
@ -83,6 +82,9 @@ class PipetteModule : public ZIModule {
* state * * state *
***********************************************************************************************************************/ ***********************************************************************************************************************/
pipette_state_t m_state = {0}; pipette_state_t m_state = {0};
platinfo_t m_now_platinfo;
container_info_t m_now_container_info;
aspirate_run_cxt_t aspirate_run_cxt; aspirate_run_cxt_t aspirate_run_cxt;
distribu_run_cxt_t distribu_run_cxt; distribu_run_cxt_t distribu_run_cxt;
/*********************************************************************************************************************** /***********************************************************************************************************************
@ -176,7 +178,7 @@ class PipetteModule : public ZIModule {
virtual int32_t pipette_pump_take_tip(); virtual int32_t pipette_pump_take_tip();
virtual int32_t pipette_pump_putbak_tip(); virtual int32_t pipette_pump_putbak_tip();
virtual int32_t pipette_pump_deposit_tip(); virtual int32_t pipette_pump_deposit_tip();
virtual int32_t pipette_pump_pierce_through();
virtual int32_t pipette_pump_pierce_through(int32_t container_info_index, int32_t container_pos);
virtual int32_t pipette_pump_aspirate_set_param(aspiration_paramid_t param, int32_t val); virtual int32_t pipette_pump_aspirate_set_param(aspiration_paramid_t param, int32_t val);
virtual int32_t pipette_pump_aspirate(); virtual int32_t pipette_pump_aspirate();
@ -211,6 +213,7 @@ class PipetteModule : public ZIModule {
void zm_move_to(int32_t x, int32_t vbaseindex, int32_t vel); void zm_move_to(int32_t x, int32_t vbaseindex, int32_t vel);
void zm_move_to_block(int32_t x, int32_t vbaseindex, int32_t vel); void zm_move_to_block(int32_t x, int32_t vbaseindex, int32_t vel);
void zm_move_by(int32_t dx, int32_t vindex, int32_t vel); void zm_move_by(int32_t dx, int32_t vindex, int32_t vel);
void zm_move_by_block(int32_t dx, int32_t vindex, int32_t vel);
void zm_stop(); void zm_stop();
void zm_move_to_end(int32_t direction, int32_t vindex); void zm_move_to_end(int32_t direction, int32_t vindex);
void zm_update_dzero(int32_t dzero); void zm_update_dzero(int32_t dzero);

4
sdk/components/zcan_protocol_parser/zcan_protocol_parser.cpp

@ -1087,8 +1087,8 @@ int32_t ZCanProtocolParser::pipette_pump_deposit_tip(cmdcontxt_t* cxt) {
} }
int32_t ZCanProtocolParser::pipette_pump_pierce_through(cmdcontxt_t* cxt) { int32_t ZCanProtocolParser::pipette_pump_pierce_through(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(0);
return module->pipette_pump_pierce_through();
CHECK_AND_GET_MODULE(2);
return module->pipette_pump_pierce_through(cxt->params[0], cxt->params[1]);
} }
int32_t ZCanProtocolParser::pipette_pump_aspirate_set_param(cmdcontxt_t* cxt) { int32_t ZCanProtocolParser::pipette_pump_aspirate_set_param(cmdcontxt_t* cxt) {

Loading…
Cancel
Save