|
|
@ -28,8 +28,10 @@ void PipetteModule::initialize(int32_t id, hardward_config_t *hardwaredcfg) { / |
|
|
|
|
|
|
|
m_zm->getGState(); // 读取状态,清空下复位标识
|
|
|
|
|
|
|
|
//! TODO: 将初始化代码移动到模块外部
|
|
|
|
m_piette_gun_io1.initAsInput(PB1, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, true); // lld输入高
|
|
|
|
|
|
|
|
//! 测试IO1是否联通
|
|
|
|
m_smtp2.pump_set_io1_mode(2); // lld输入高
|
|
|
|
m_smtp2.pump_set_io1_state(0); |
|
|
|
osDelay(100); |
|
|
@ -39,7 +41,8 @@ void PipetteModule::initialize(int32_t id, hardward_config_t *hardwaredcfg) { / |
|
|
|
osDelay(100); |
|
|
|
ZLOGI(TAG, "read io1 state:%d", m_piette_gun_io1.getState()); |
|
|
|
m_smtp2.pump_set_io1_mode(0); // lld输入高
|
|
|
|
// m_smtp2.dumpparam();
|
|
|
|
|
|
|
|
parameter_init(); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t PipetteModule::module_stop() { |
|
|
@ -117,15 +120,22 @@ int32_t PipetteModule::pipette_get_pmbcfg(pm_bcfg_index_t index, int32_t *val) { |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t PipetteModule::pipette_set_platinfo(platinfo_index_t index, int32_t val) { |
|
|
|
int32_t PipetteModule::pipette_set_platinfo(int32_t cpyid, platinfo_index_t index, int32_t val) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_platinfo)) { |
|
|
|
ZLOGE(TAG, "pipette_set_platinfo cpyid %d out of range", cpyid); |
|
|
|
return err::kparam_out_of_range; |
|
|
|
} |
|
|
|
|
|
|
|
platinfo_t *platinfo = &m_platinfo[cpyid]; |
|
|
|
|
|
|
|
switch (index) { |
|
|
|
SET_CFG(kplatinfo_zm_ref_level, m_platform_info.zm_ref_level, val); |
|
|
|
SET_CFG(kplatinfo_tip_picking_pos, m_platform_info.tip_picking_pos, val); |
|
|
|
SET_CFG(kplatinfo_tip_picking_max_pos, m_platform_info.tip_picking_max_pos, val); |
|
|
|
SET_CFG(kplatinfo_tip_deposit_pos, m_platform_info.tip_deposit_pos, val); |
|
|
|
SET_CFG(kplatinfo_transform_pos, m_platform_info.transform_pos, val); |
|
|
|
SET_CFG(kplatinfo_tip_type, m_platform_info.tip_type, val); |
|
|
|
SET_CFG(kplatinfo_tip_length, m_platform_info.tip_length, val); |
|
|
|
SET_CFG(kplatinfo_work_ref_plane, platinfo->work_ref_plane, val); |
|
|
|
SET_CFG(kplatinfo_tip_picking_pos, platinfo->tip_picking_pos, val); |
|
|
|
SET_CFG(kplatinfo_tip_picking_search_range, platinfo->tip_picking_search_range, val); |
|
|
|
SET_CFG(kplatinfo_tip_deposit_pos, platinfo->tip_deposit_pos, val); |
|
|
|
// SET_CFG(kplatinfo_transform_pos, platinfo->transform_pos, val);
|
|
|
|
SET_CFG(kplatinfo_tip_type, platinfo->tip_type, val); |
|
|
|
SET_CFG(kplatinfo_tip_length, platinfo->tip_length, val); |
|
|
|
default: { |
|
|
|
ZLOGE(TAG, "pipette_set_platinfo index %d out of range", index); |
|
|
|
return err::kparam_out_of_range; |
|
|
@ -133,15 +143,21 @@ int32_t PipetteModule::pipette_set_platinfo(platinfo_index_t index, int32_t val) |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t PipetteModule::pipette_get_platinfo(platinfo_index_t index, int32_t *val) { |
|
|
|
int32_t PipetteModule::pipette_get_platinfo(int32_t cpyid, platinfo_index_t index, int32_t *val) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_platinfo)) { |
|
|
|
ZLOGE(TAG, "pipette_get_platinfo cpyid %d out of range", cpyid); |
|
|
|
return err::kparam_out_of_range; |
|
|
|
} |
|
|
|
|
|
|
|
platinfo_t *platinfo = &m_platinfo[cpyid]; |
|
|
|
switch (index) { |
|
|
|
GET_CFG(kplatinfo_zm_ref_level, m_platform_info.zm_ref_level, val); |
|
|
|
GET_CFG(kplatinfo_tip_picking_pos, m_platform_info.tip_picking_pos, val); |
|
|
|
GET_CFG(kplatinfo_tip_picking_max_pos, m_platform_info.tip_picking_max_pos, val); |
|
|
|
GET_CFG(kplatinfo_tip_deposit_pos, m_platform_info.tip_deposit_pos, val); |
|
|
|
GET_CFG(kplatinfo_transform_pos, m_platform_info.transform_pos, val); |
|
|
|
GET_CFG(kplatinfo_tip_type, m_platform_info.tip_type, val); |
|
|
|
GET_CFG(kplatinfo_tip_length, m_platform_info.tip_length, val); |
|
|
|
GET_CFG(kplatinfo_work_ref_plane, platinfo->work_ref_plane, val); |
|
|
|
GET_CFG(kplatinfo_tip_picking_pos, platinfo->tip_picking_pos, val); |
|
|
|
GET_CFG(kplatinfo_tip_picking_search_range, platinfo->tip_picking_search_range, val); |
|
|
|
GET_CFG(kplatinfo_tip_deposit_pos, platinfo->tip_deposit_pos, val); |
|
|
|
// GET_CFG(kplatinfo_transform_pos, platinfo->transform_pos, val);
|
|
|
|
GET_CFG(kplatinfo_tip_type, platinfo->tip_type, val); |
|
|
|
GET_CFG(kplatinfo_tip_length, platinfo->tip_length, val); |
|
|
|
default: { |
|
|
|
ZLOGE(TAG, "pipette_get_platinfo index %d out of range", index); |
|
|
|
return err::kparam_out_of_range; |
|
|
@ -387,6 +403,13 @@ liquid_info_t *PipetteModule::get_liquid_info(int32_t index) { |
|
|
|
} |
|
|
|
return &m_liquid_info[index]; |
|
|
|
} |
|
|
|
platinfo_t *PipetteModule::get_platinfo(int32_t index) { |
|
|
|
if (index < 0 || index >= ARRARY_SIZE(m_platinfo)) { |
|
|
|
ZLOGE(TAG, "get_platinfo index %d out of range", index); |
|
|
|
return &m_platinfo[0]; |
|
|
|
} |
|
|
|
return &m_platinfo[index]; |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::get_cfg_smart(int32_t index, zm_vcfg_t *cfg) { //
|
|
|
|
zm_vcfg_t *cfg0 = get_zm_vcfg(0); |
|
|
@ -538,8 +561,6 @@ int32_t PipetteModule::pipette_pump_init_device() { |
|
|
|
pump_apply_vcfg(kpm_v_max); // 默认配置
|
|
|
|
DO_IN_THREAD(m_smtp2.pump_init()); |
|
|
|
pump_waitfor_stop(); |
|
|
|
DO_IN_THREAD(m_smtp2.pump_set_io1_mode(0)); // lld输入高
|
|
|
|
DO_IN_THREAD(m_smtp2.pump_set_io2_mode(0)); // 通用输入
|
|
|
|
}); |
|
|
|
return 0; |
|
|
|
} |
|
|
@ -618,12 +639,16 @@ int32_t PipetteModule::pipette_pump_aspirate() { |
|
|
|
if (pump_read_tip_state() == 0) { |
|
|
|
throw zapp_exception(err::kpipette_error_no_tip_when_lld); |
|
|
|
} |
|
|
|
check_pipette_pump_aspirate_params(); |
|
|
|
|
|
|
|
// 移液枪部分参数初始化
|
|
|
|
DO_IN_THREAD(m_smtp2.pump_enable_temp_compensation(0)); // 关闭温度补偿
|
|
|
|
DO_IN_THREAD(m_smtp2.pump_set_back_clearance(0)); // 设置背隙为0
|
|
|
|
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 = &m_platform_info; |
|
|
|
aspiration_param_t *acfg = &m_aspiration_param; |
|
|
|
platinfo_t *platform_info = get_platinfo(acfg->platinfo_index); |
|
|
|
liquid_info_t *liquidinfo = get_liquid_info(acfg->liquid_cfg_index); |
|
|
|
container_info_t *container_cfg = get_container_info(acfg->container_info_index); |
|
|
|
/***********************************************************************************************************************
|
|
|
@ -633,7 +658,7 @@ int32_t PipetteModule::pipette_pump_aspirate() { |
|
|
|
if (acfg->lld_type != 0) { |
|
|
|
_do_lld(platform_info, container_cfg, liquidinfo, acfg); |
|
|
|
} else { |
|
|
|
m_state.water_level = platform_info->zm_ref_level - container_cfg->container_neck_pos + container_cfg->fix_aspiration_depth; |
|
|
|
m_state.water_level = platform_info->work_ref_plane - container_cfg->container_neck_pos + container_cfg->fix_aspiration_depth; |
|
|
|
ZLOGI(TAG, "lld isn't enable,use fix depth %d", m_state.water_level); |
|
|
|
zm_move_to_block(m_state.water_level - 150, kzm_v_default, 0); //
|
|
|
|
pump_move_to_x100nl_block(0, liquidinfo->empty_tip_pm_vindex); // 清空tip
|
|
|
@ -650,12 +675,12 @@ void PipetteModule::_do_lld(platinfo_t *platform_info, container_info_t *contain |
|
|
|
ZLOGI(TAG, "start lld, lld_type %d lld_pm_vindex %d plld_threshold %d", acfg->lld_type, liquidinfo->plld_pm_vindex, liquidinfo->plld_threshold); |
|
|
|
|
|
|
|
// 移动到转移位置
|
|
|
|
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0); |
|
|
|
zm_move_to_block(0, kzm_v_default, 0); |
|
|
|
// 清空tip
|
|
|
|
pump_move_to_x100nl_block(0, liquidinfo->empty_tip_pm_vindex); |
|
|
|
|
|
|
|
// 移动到瓶口
|
|
|
|
zm_move_to_pr_block(platform_info, container_cfg->container_neck_pos + 50 /*5mm*/, //
|
|
|
|
zm_wp_move_to_block(platform_info, container_cfg->container_neck_pos + 50 /*5mm*/, //
|
|
|
|
kzm_v_default, 0); |
|
|
|
pump_move_to_x100nl_block(0, kpm_v_default); // 回转一下,消除齿轮间隙
|
|
|
|
|
|
|
@ -666,10 +691,10 @@ void PipetteModule::_do_lld(platinfo_t *platform_info, container_info_t *contain |
|
|
|
DO_IN_THREAD(m_smtp2.pump_aspirate_plld(liquidinfo->plld_threshold)); |
|
|
|
|
|
|
|
// 快速移动到瓶口
|
|
|
|
zm_move_to_pr_block(platform_info, container_cfg->container_neck_pos + container_cfg->lld_start_search_depth, //
|
|
|
|
zm_wp_move_to_block(platform_info, container_cfg->container_neck_pos + container_cfg->lld_start_search_depth, //
|
|
|
|
kzm_v_default, 0); |
|
|
|
// lld,zm移动到瓶底
|
|
|
|
zm_move_to_pr(platform_info, container_cfg->container_neck_pos - container_cfg->container_depth, kzm_v_lld, 0); |
|
|
|
zm_wp_move_to(platform_info, container_cfg->container_neck_pos - container_cfg->container_depth, kzm_v_lld, 0); |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 等待压力大于阈值 |
|
|
@ -745,7 +770,7 @@ void PipetteModule::_do_sapirate(platinfo_t *platform_info, container_info_t *co |
|
|
|
int32_t mix_start_pos = zm_get_now_pos(); |
|
|
|
for (size_t i = 0; i < acfg->mix_times; i++) { |
|
|
|
if (acfg->mix_llf_enable > 0) { |
|
|
|
zm_move_to_pr(platform_info, |
|
|
|
zm_wp_move_to(platform_info, |
|
|
|
container_cfg->container_neck_pos - container_cfg->container_depth, // 瓶底
|
|
|
|
kzm_v_llf, // 基础速度配置
|
|
|
|
compute_zm_llf_vel(liquidinfo->mix_pm_vindex, container_cfg)); // 计算llf速度
|
|
|
@ -771,7 +796,7 @@ void PipetteModule::_do_sapirate(platinfo_t *platform_info, container_info_t *co |
|
|
|
int32_t x100nl = acfg->x100nl * liquidinfo->volume_calibration_coefficient_k * 0.0001 + liquidinfo->volume_calibration_coefficient_b * 0.0001; |
|
|
|
|
|
|
|
if (acfg->llf_enable > 0) { |
|
|
|
zm_move_to_pr(platform_info, //
|
|
|
|
zm_wp_move_to(platform_info, //
|
|
|
|
container_cfg->container_neck_pos - container_cfg->container_depth, // 瓶底
|
|
|
|
kzm_v_llf, //
|
|
|
|
compute_zm_llf_vel(aspiration_pm_index, container_cfg) //
|
|
|
@ -793,7 +818,7 @@ void PipetteModule::_do_sapirate(platinfo_t *platform_info, container_info_t *co |
|
|
|
} |
|
|
|
|
|
|
|
// z轴移动transform_pos
|
|
|
|
zm_move_to_block(platform_info->transform_pos, kzm_v_default, 0); |
|
|
|
zm_move_to_block(0, kzm_v_default, 0); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t PipetteModule::pipette_pump_distribu(int32_t distribu_cfg_index, int32_t n100nl /*0.1ul*/) { return 0; } |
|
|
@ -865,15 +890,15 @@ void PipetteModule::zm_move_to_block(int32_t x, int32_t vbaseindex, int32_t vel) |
|
|
|
zm_move_to(x, vbaseindex, vel); |
|
|
|
zm_waitfor_stop(); |
|
|
|
} |
|
|
|
void PipetteModule::zm_move_to_pr(platinfo_t *platform, int32_t x, int32_t vbaseindex, int32_t vel) { |
|
|
|
void PipetteModule::zm_wp_move_to(platinfo_t *platform, int32_t x, int32_t vbaseindex, int32_t vel) { |
|
|
|
/**
|
|
|
|
* @brief 以平台的参考位置为基准,向上为正向,向下为负向 |
|
|
|
*/ |
|
|
|
zm_move_to(platform->zm_ref_level - x, vbaseindex, vel); |
|
|
|
zm_move_to(platform->work_ref_plane - x, vbaseindex, vel); |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::zm_move_to_pr_block(platinfo_t *platform, int32_t x, int32_t vbaseindex, int32_t vel) { |
|
|
|
zm_move_to_pr(platform, x, vbaseindex, vel); |
|
|
|
void PipetteModule::zm_wp_move_to_block(platinfo_t *platform, int32_t x, int32_t vbaseindex, int32_t vel) { |
|
|
|
zm_wp_move_to(platform, x, vbaseindex, vel); |
|
|
|
zm_waitfor_stop(); |
|
|
|
} |
|
|
|
|
|
|
@ -922,6 +947,22 @@ void PipetteModule::zm_apply_vcfg(int32_t vbasecfgindex, int32_t vel) { |
|
|
|
m_zm->set_vstop(cfg.vstop); |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::zm_sync_base_cfg() { |
|
|
|
m_zm->enable(false); |
|
|
|
m_zm->setMRES((mres_type_t)zm_base_cfg.mres); |
|
|
|
m_zm->setIHOLD_IRUN(zm_base_cfg.ihold, zm_base_cfg.irun, zm_base_cfg.iholddelay); |
|
|
|
m_zm->setScale(zm_base_cfg.one_circle_pulse); |
|
|
|
m_zm->setScaleDenominator(zm_base_cfg.one_circle_pulse_denominator); |
|
|
|
m_zm->setMotorShaft(zm_base_cfg.shaft); |
|
|
|
m_zm->setGlobalScale(zm_base_cfg.iglobalscaler); |
|
|
|
m_zm->set_tzerowait(zm_base_cfg.tzerowait); |
|
|
|
m_zm->set_enc_resolution(zm_base_cfg.enc_resolution); |
|
|
|
zm_apply_vcfg(kzm_v_default, 0); |
|
|
|
if (m_state.enable) { |
|
|
|
m_zm->enable(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::zm_waitfor_zm0p_trigger_and_stop_motor() { |
|
|
|
while (!zm0p_is_trigger()) { |
|
|
|
if (m_zm->isStoped()) { |
|
|
@ -1188,3 +1229,175 @@ void PipetteModule::thread_start_work(const char *fnname, function<void()> fn) { |
|
|
|
ZLOGI(TAG, "<- end work"); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::check_platinfo_cpyid(int32_t cpyid) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_platinfo)) { |
|
|
|
ZLOGE(TAG, "pipette_get_container_info cpyid %d out of range", cpyid); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
} |
|
|
|
void PipetteModule::check_zmvcfg_cpyid(int32_t cpyid) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_zm_vcfg)) { |
|
|
|
ZLOGE(TAG, "pipette_get_zmvcfg cpyid %d out of range", cpyid); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
} |
|
|
|
void PipetteModule::check_pmvcfg_cpyid(int32_t cpyid) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_pm_vcfg)) { |
|
|
|
ZLOGE(TAG, "pipette_get_pmvcfg cpyid %d out of range", cpyid); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
} |
|
|
|
void PipetteModule::check_container_info_cpyid(int32_t cpyid) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_container_info)) { |
|
|
|
ZLOGE(TAG, "pipette_get_container_info cpyid %d out of range", cpyid); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
} |
|
|
|
void PipetteModule::check_liquid_info_cpyid(int32_t cpyid) { |
|
|
|
if (cpyid < 0 || cpyid >= ARRARY_SIZE(m_liquid_info)) { |
|
|
|
ZLOGE(TAG, "pipette_get_liquid_info cpyid %d out of range", cpyid); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::check_pipette_pump_aspirate_params() { |
|
|
|
aspiration_param_t *acfg = &m_aspiration_param; |
|
|
|
|
|
|
|
if (acfg->x100nl < 0) { |
|
|
|
ZLOGE(TAG, "pipette_pump_aspirate_set_param x100nl %d out of range", acfg->x100nl); |
|
|
|
throw zapp_exception(err::kparam_out_of_range); |
|
|
|
} |
|
|
|
check_platinfo_cpyid(acfg->platinfo_index); |
|
|
|
check_container_info_cpyid(acfg->container_info_index); |
|
|
|
check_liquid_info_cpyid(acfg->liquid_cfg_index); |
|
|
|
} |
|
|
|
|
|
|
|
void PipetteModule::parameter_init() { |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* zm_base_cfg * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
zm_base_cfg.shaft = 0; // Z轴电机运动方向调整
|
|
|
|
zm_base_cfg.one_circle_pulse = 80; // 电子齿轮比-分子
|
|
|
|
zm_base_cfg.one_circle_pulse_denominator = 1; // 电子齿轮比-分母
|
|
|
|
zm_base_cfg.ihold = 7; //
|
|
|
|
zm_base_cfg.irun = 7; //
|
|
|
|
zm_base_cfg.iholddelay = 10; //
|
|
|
|
zm_base_cfg.iglobalscaler = 0; //
|
|
|
|
zm_base_cfg.min_d = 0; //
|
|
|
|
zm_base_cfg.max_d = 0; //
|
|
|
|
zm_base_cfg.tzerowait = 0; //
|
|
|
|
zm_base_cfg.enc_resolution = 0; //
|
|
|
|
zm_base_cfg.enable_enc = 0; //
|
|
|
|
zm_base_cfg.dzero = 92; //
|
|
|
|
zm_base_cfg.io_trigger_append_distance = 20; //
|
|
|
|
zm_base_cfg.pos_devi_tolerance = 20; //
|
|
|
|
zm_base_cfg.mres = 0; //
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* pm_base_cfg * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
pm_base_cfg.pad = 0; |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* m_platinfo * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
for (int32_t i = 0; i < ARRARY_SIZE(m_platinfo); i++) { |
|
|
|
m_platinfo[i].work_ref_plane = 0; |
|
|
|
m_platinfo[i].tip_picking_pos = 0; |
|
|
|
m_platinfo[i].tip_picking_search_range = 0; |
|
|
|
m_platinfo[i].tip_deposit_pos = 0; |
|
|
|
// m_platinfo[i].transform_pos = 0; //
|
|
|
|
m_platinfo[i].tip_type = smtp2::TS200UL; |
|
|
|
m_platinfo[i].tip_length = 500; // 50mm
|
|
|
|
} |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* m_zm_vcfg * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
for (int32_t i = 0; i < ARRARY_SIZE(m_zm_vcfg); i++) { |
|
|
|
m_zm_vcfg[i].vstart = -1; |
|
|
|
m_zm_vcfg[i].a1 = -1; |
|
|
|
m_zm_vcfg[i].amax = -1; |
|
|
|
m_zm_vcfg[i].v1 = -1; |
|
|
|
m_zm_vcfg[i].dmax = -1; |
|
|
|
m_zm_vcfg[i].d1 = -1; |
|
|
|
m_zm_vcfg[i].vstop = -1; |
|
|
|
m_zm_vcfg[i].vmax = -1; |
|
|
|
} |
|
|
|
|
|
|
|
m_zm_vcfg[kzm_v_default].vstart = 100; |
|
|
|
m_zm_vcfg[kzm_v_default].a1 = 10; |
|
|
|
m_zm_vcfg[kzm_v_default].amax = 50; |
|
|
|
m_zm_vcfg[kzm_v_default].v1 = 300; |
|
|
|
m_zm_vcfg[kzm_v_default].dmax = 50; |
|
|
|
m_zm_vcfg[kzm_v_default].d1 = 10; |
|
|
|
m_zm_vcfg[kzm_v_default].vstop = 100; |
|
|
|
m_zm_vcfg[kzm_v_default].vmax = 1200; |
|
|
|
|
|
|
|
m_zm_vcfg[kzm_v_move_to_zero].vmax = 600; |
|
|
|
m_zm_vcfg[kzm_v_look_zero_edge].vmax = 100; |
|
|
|
m_zm_vcfg[kzm_v_lld].vmax = 600; |
|
|
|
m_zm_vcfg[kzm_v_swap].vmax = 300; |
|
|
|
m_zm_vcfg[kzm_v_llf].vmax = 500; |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* m_pm_vcfg * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ARRARY_SIZE(m_pm_vcfg); i++) { |
|
|
|
m_pm_vcfg[i].acc = 1; |
|
|
|
m_pm_vcfg[i].dec = 1; |
|
|
|
m_pm_vcfg[i].vstart = 0; |
|
|
|
m_pm_vcfg[i].vstop = 0; |
|
|
|
m_pm_vcfg[i].vmax = 2500; |
|
|
|
} |
|
|
|
|
|
|
|
m_pm_vcfg[kpm_v_default].vmax = 2500; |
|
|
|
m_pm_vcfg[kpm_v_slow_lv1].vmax = 5; |
|
|
|
m_pm_vcfg[kpm_v_slow_lv2].vmax = 10; |
|
|
|
m_pm_vcfg[kpm_v_slow_lv3].vmax = 50; |
|
|
|
m_pm_vcfg[kpm_v_mid].vmax = 1000; |
|
|
|
m_pm_vcfg[kpm_v_quick].vmax = 2000; |
|
|
|
m_pm_vcfg[kpm_v_max].vmax = 2500; |
|
|
|
m_pm_vcfg[kpm_v_lld].vmax = 100; |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* m_container_info * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ARRARY_SIZE(m_container_info); i++) { |
|
|
|
m_container_info[i].container_type = 0; |
|
|
|
m_container_info[i].container_neck_pos = 0; |
|
|
|
m_container_info[i].container_depth = 0; |
|
|
|
m_container_info[i].container_round = 0; |
|
|
|
m_container_info[i].container_bottom_section_height = 0; |
|
|
|
m_container_info[i].immersion_depth = 0; |
|
|
|
m_container_info[i].leaving_height = 150; |
|
|
|
m_container_info[i].jet_height = 0; |
|
|
|
} |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* m_liquid_info * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ARRARY_SIZE(m_liquid_info); i++) { |
|
|
|
m_liquid_info[i].plld_pm_vindex = kpm_v_lld; |
|
|
|
m_liquid_info[i].plld_threshold = 30; |
|
|
|
m_liquid_info[i].empty_tip_pm_vindex = kpm_v_max; |
|
|
|
m_liquid_info[i].blowout_air_volume = 0; |
|
|
|
m_liquid_info[i].blowout_air_pm_vindex = kpm_v_quick; |
|
|
|
m_liquid_info[i].over_aspirated_volume = 100; // 100(x100nl) == 10ul
|
|
|
|
m_liquid_info[i].over_aspirated_pm_vindex = kpm_v_slow_lv2; |
|
|
|
m_liquid_info[i].aspiration_pm_vindex_low = kpm_v_slow_lv1; |
|
|
|
m_liquid_info[i].aspiration_pm_vindex_high = kpm_v_slow_lv3; |
|
|
|
m_liquid_info[i].aspiration_volume_break_val = 500; // 500(x100nl) == 50ul
|
|
|
|
m_liquid_info[i].volume_calibration_coefficient_b = 1.0f; |
|
|
|
m_liquid_info[i].volume_calibration_coefficient_k = 1.0f; |
|
|
|
m_liquid_info[i].settling_time = 1000; // ms
|
|
|
|
m_liquid_info[i].transport_volume = 50; // 50(x100nl) == 5ul
|
|
|
|
m_liquid_info[i].transport_volume_pm_vindex = kpm_v_slow_lv2; |
|
|
|
m_liquid_info[i].mix_pm_vindex = kpm_v_max; |
|
|
|
} |
|
|
|
|
|
|
|
zm_sync_base_cfg(); |
|
|
|
} |