|
|
@ -33,10 +33,10 @@ |
|
|
|
|
|
|
|
#define THREAD_START_WORK(...) thread_start_work(__FUNCTION__, __VA_ARGS__)
|
|
|
|
|
|
|
|
#define PIPETTE_PREPARE_POS 400
|
|
|
|
#define PIPETTE_PREPARE_POS 550
|
|
|
|
#define LLD_PREPARE_DISTRIBUT_POS 100
|
|
|
|
#define LLF_DPOS 1000
|
|
|
|
#define ASPIRATE_POS 100
|
|
|
|
#define ASPIRATE_POS 150
|
|
|
|
|
|
|
|
using namespace iflytop; |
|
|
|
// using namespace pipette_module_v3;
|
|
|
@ -77,8 +77,8 @@ void PipetteModuleV2::create_default_cfg(config_t *defaultcfg) { |
|
|
|
defaultcfg->aspirate_pump_vel = 500; //
|
|
|
|
defaultcfg->pump_vmax = 1000; |
|
|
|
defaultcfg->aspirate_zmotor_max_move_by = 400; // 50mm,tip头的长度
|
|
|
|
defaultcfg->lld_pump_vel = 100; // lld推荐使用速度为50->200,这里
|
|
|
|
defaultcfg->lld_motor_vel_rpm = 110; |
|
|
|
defaultcfg->lld_pump_vel = 80; // lld推荐使用速度为50->200,这里
|
|
|
|
defaultcfg->lld_motor_vel_rpm = 80; |
|
|
|
defaultcfg->lld_detect_period_ms = 1; // 100ms
|
|
|
|
defaultcfg->lld_prepare_pos = PIPETTE_PREPARE_POS; |
|
|
|
defaultcfg->lld_prepare_pre_distribut_ul = LLD_PREPARE_DISTRIBUT_POS; |
|
|
@ -345,12 +345,12 @@ int32_t PipetteModuleV2::pipette_lld_prepare() { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t PipetteModuleV2::pipette_lld_test(int32_t zdpos) { //
|
|
|
|
return do_pipette_lld(true, kplld, zdpos, 100, 1000); |
|
|
|
int32_t PipetteModuleV2::pipette_lld_test(int32_t startpos, int32_t zdpos) { //
|
|
|
|
return do_pipette_lld(true, kplld, startpos, zdpos, 100, 1000); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t PipetteModuleV2::pipette_lld(int32_t lldtype, int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { //
|
|
|
|
return do_pipette_lld(false, lldtype, zdpos, c_threshold, p_threshold); |
|
|
|
int32_t PipetteModuleV2::pipette_lld(int32_t lldtype, int32_t startpos, int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { //
|
|
|
|
return do_pipette_lld(false, lldtype, startpos, zdpos, c_threshold, p_threshold); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t PipetteModuleV2::pipette_lld_is_detect_liquid(int32_t *detect) { |
|
|
@ -426,9 +426,11 @@ int32_t PipetteModuleV2::pipette_aspirate(int32_t ul) { |
|
|
|
pump_waitfor_stop(); |
|
|
|
|
|
|
|
// 全部排空时,多分配10ul去掉挂液
|
|
|
|
if ((m_state.load_val_ul - dul) == 0) { |
|
|
|
m_smtp2.pump_aspirate(m_cfg.aspirate_pump_vel, -10); |
|
|
|
if ((m_state.load_val_ul + dul) == 0) { |
|
|
|
m_smtp2.pump_aspirate(m_cfg.aspirate_pump_vel, -50); |
|
|
|
pump_waitfor_stop(); |
|
|
|
// for (size_t i = 0; i < 3; i++) {
|
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
// stop
|
|
|
@ -616,15 +618,15 @@ void PipetteModuleV2::do_pipette_zmotor_move_to_zero_point_quick() { |
|
|
|
throw zapp_exception(err::kstep_motor_lost_step); |
|
|
|
} |
|
|
|
} |
|
|
|
int32_t PipetteModuleV2::do_pipette_lld(bool recorddata, int32_t lldtype /*kclld = 0,kplld = 1, kmixlld = 2, */, int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { |
|
|
|
int32_t PipetteModuleV2::do_pipette_lld(bool recorddata, int32_t lldtype, int32_t startpos, int32_t zdpos, int32_t c_threshold, int32_t p_threshold) { |
|
|
|
// 检查泵机是否初始化过
|
|
|
|
|
|
|
|
if (lldtype < 0 || lldtype > klldtypemax) { |
|
|
|
return err::kparam_out_of_range; |
|
|
|
} |
|
|
|
|
|
|
|
THREAD_START_WORK([this, recorddata, lldtype, zdpos, c_threshold, p_threshold]() { //
|
|
|
|
m_state.lld_prepared = 0; // 失效m_state.lld_prepared
|
|
|
|
THREAD_START_WORK([this, recorddata, lldtype, startpos, zdpos, c_threshold, p_threshold]() { //
|
|
|
|
m_state.lld_prepared = 0; // 失效m_state.lld_prepared
|
|
|
|
|
|
|
|
int32_t start_capacitance = 0; // 启动时电容数值
|
|
|
|
int32_t start_pressure = 0; // 启动时压力数值
|
|
|
@ -645,7 +647,10 @@ int32_t PipetteModuleV2::do_pipette_lld(bool recorddata, int32_t lldtype /*kclld |
|
|
|
ZLOGI(TAG, "lld before distribut ok"); |
|
|
|
|
|
|
|
ZLOGI(TAG, "start lld"); |
|
|
|
zm_move_by(zdpos, m_cfg.lld_motor_vel_rpm); |
|
|
|
|
|
|
|
bool moveToStartPos = false; |
|
|
|
|
|
|
|
zm_move_to(startpos, m_cfg.zm_default_velocity); |
|
|
|
osDelay(10); |
|
|
|
if (lldtype == kclld) { |
|
|
|
DO_IN_THREAD(m_smtp2.pump_clld(c_threshold)); |
|
|
@ -690,11 +695,16 @@ int32_t PipetteModuleV2::do_pipette_lld(bool recorddata, int32_t lldtype /*kclld |
|
|
|
|
|
|
|
// 电机停了也没有探测到液面
|
|
|
|
if (m_zm->isStoped()) { |
|
|
|
ZLOGI(TAG, "motorstoped,but not detect liquid"); |
|
|
|
creg.module_errorcode = 0; |
|
|
|
m_state.detected_liquid = 0; |
|
|
|
if (recorddata) push_snesor_sample_data(motorpos, capacitance, pressure); |
|
|
|
break; |
|
|
|
if (!moveToStartPos) { |
|
|
|
zm_move_by(zdpos, m_cfg.lld_motor_vel_rpm); |
|
|
|
moveToStartPos = true; |
|
|
|
} else { |
|
|
|
ZLOGI(TAG, "motorstoped,but not detect liquid"); |
|
|
|
creg.module_errorcode = 0; |
|
|
|
m_state.detected_liquid = 0; |
|
|
|
if (recorddata) push_snesor_sample_data(motorpos, capacitance, pressure); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (recorddata) push_snesor_sample_data(motorpos, capacitance, pressure); |
|
|
|