From 1845c474e6802b80f3ee5dbae2cb94a2b6c5a901 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 21 Jun 2024 16:07:34 +0800 Subject: [PATCH] update --- .../pipette_module/pipette_ctrl_module_v2.cpp | 38 ++++++++++++++++++---- .../pipette_module/pipette_ctrl_module_v2.hpp | 9 +++-- components/zcancmder/zcan_protocol_parser.cpp | 18 ++++++++++ components/zcancmder/zcan_protocol_parser.hpp | 3 ++ 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/components/pipette_module/pipette_ctrl_module_v2.cpp b/components/pipette_module/pipette_ctrl_module_v2.cpp index a802c5e..c082c8a 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.cpp +++ b/components/pipette_module/pipette_ctrl_module_v2.cpp @@ -146,12 +146,12 @@ int32_t PipetteModule::pipette_mlld(int32_t zdpos, int32_t c_threshold, int32_t int32_t PipetteModule::pipette_aspirate(int32_t ul) { ZLOGI(TAG, "pipette_aspirate %d", ul); if (creg.module_status == 1) return err::kdevice_is_busy; - return do_pipette_aspirate(ul); + return do_pipette_aspirate(ul, 0, 0); }; int32_t PipetteModule::pipette_distribut(int32_t ul) { ZLOGI(TAG, "pipette_distribut %d", ul); if (creg.module_status == 1) return err::kdevice_is_busy; - return do_pipette_distribut(ul); + return do_pipette_distribut(ul, 0, 0); }; int32_t PipetteModule::pipette_shake_up(int32_t ul, int32_t times) { ZLOGI(TAG, "pipette_shake_up %d %d", ul, times); @@ -164,6 +164,21 @@ int32_t PipetteModule::pipette_lld_is_detect_liquid(int32_t *detect_liquid) { / return 0; } +int32_t PipetteModule::pipette_aspirate_llf(int32_t ul, int32_t dpos, int32_t zmotor_v) { // + ZLOGI(TAG, "pipette_aspirate_llf %d %d %d", ul, dpos, zmotor_v); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_aspirate(ul, dpos, zmotor_v); +} +int32_t PipetteModule::pipette_distribut_llf(int32_t ul, int32_t dpos, int32_t zmotor_v) { // + ZLOGI(TAG, "pipette_distribut_llf %d %d %d", ul, dpos, zmotor_v); + if (creg.module_status == 1) return err::kdevice_is_busy; + return do_pipette_distribut(ul, dpos, zmotor_v); +} +int32_t PipetteModule::pipette_shake_up_llf(int32_t ul, int32_t dpos, int32_t zmotor_v, int32_t times) { // + ZLOGI(TAG, "pipette_shake_up_llf %d %d %d %d", ul, dpos, zmotor_v, times); + return 0; +} + /*********************************************************************************************************************** * ACTION * ***********************************************************************************************************************/ @@ -467,7 +482,7 @@ int32_t PipetteModule::do_pipette_lld(lld_mode_t mode, int32_t zdpos, int32_t c_ ); return 0; } -int32_t PipetteModule::do_pipette_aspirate(int32_t ul) { +int32_t PipetteModule::do_pipette_aspirate(int32_t ul, int32_t dpos, int32_t zmotor_v) { /** * @brief */ @@ -481,8 +496,13 @@ int32_t PipetteModule::do_pipette_aspirate(int32_t ul) { m_thread.stop(); creg.module_status = 1; m_thread.start( - [this, ul]() { // + [this, ul, dpos, zmotor_v]() { // + auto submotor = m_zmotor->getMotor(); + DO_IN_THREAD(befor_run()); + if (dpos != 0) { + submotor->moveBy(dpos, zmotor_v); + } DO_IN_THREAD(m_smtp2.pump_aspirate(m_config.aspirate_distribut_pump_vel, ul)); while (true) { if (!check_when_run()) break; @@ -498,6 +518,7 @@ int32_t PipetteModule::do_pipette_aspirate(int32_t ul) { [this]() { // exit fn after_run(); m_smtp2.pump_stop(); + m_zmotor->getMotor()->stop(); m_state.load_val_ul = m_state.load_val_ul + m_state.dul; if (m_state.load_val_ul < 0) { m_state.load_val_ul = 0; @@ -509,7 +530,7 @@ int32_t PipetteModule::do_pipette_aspirate(int32_t ul) { ); return 0; } -int32_t PipetteModule::do_pipette_distribut(int32_t ul) { +int32_t PipetteModule::do_pipette_distribut(int32_t ul, int32_t dpos, int32_t zmotor_v) { /** * @brief */ @@ -519,9 +540,13 @@ int32_t PipetteModule::do_pipette_distribut(int32_t ul) { m_thread.stop(); creg.module_status = 1; m_thread.start( - [this, ul]() { // + [this, ul, dpos, zmotor_v]() { // + auto submotor = m_zmotor->getMotor(); DO_IN_THREAD(befor_run()); DO_IN_THREAD(m_smtp2.pump_distribut(m_config.aspirate_distribut_pump_vel, ul)); + if (dpos != 0) { + submotor->moveBy(-dpos, zmotor_v); + } while (true) { if (!check_when_run()) break; if (m_thread.getExitFlag()) break; @@ -536,6 +561,7 @@ int32_t PipetteModule::do_pipette_distribut(int32_t ul) { [this]() { // exit fn after_run(); m_smtp2.pump_stop(); + m_zmotor->getMotor()->stop(); m_state.load_val_ul = m_state.load_val_ul + m_state.dul; if (m_state.load_val_ul < 0) { diff --git a/components/pipette_module/pipette_ctrl_module_v2.hpp b/components/pipette_module/pipette_ctrl_module_v2.hpp index 9147e76..b4cb7a8 100644 --- a/components/pipette_module/pipette_ctrl_module_v2.hpp +++ b/components/pipette_module/pipette_ctrl_module_v2.hpp @@ -146,6 +146,10 @@ class PipetteModule : public ZIModule, public ZIPipetteCtrlModule { virtual int32_t pipette_distribut(int32_t ul) override; virtual int32_t pipette_shake_up(int32_t ul, int32_t times) override; + virtual int32_t pipette_aspirate_llf(int32_t ul, int32_t dpos, int32_t zmotor_v) override; + virtual int32_t pipette_distribut_llf(int32_t ul, int32_t dpos, int32_t zmotor_v) override; + virtual int32_t pipette_shake_up_llf(int32_t ul, int32_t dpos, int32_t zmotor_v, int32_t times) override; + virtual int32_t pipette_enable_zmotor(int32_t enable); virtual int32_t pipette_write_cmd_direct(uint8_t *tx, int32_t len, uint8_t *rx, int32_t *rxlen) override; virtual int32_t pipette_get_sensor_sample_data(int32_t index, int32_t *motor_pos, int32_t *cval, int32_t *pval) override; // @@ -157,8 +161,9 @@ class PipetteModule : public ZIModule, public ZIPipetteCtrlModule { int32_t do_pipette_ctrl_move_to_ul(int32_t ul); int32_t do_pipette_lld_prepare(); int32_t do_pipette_lld(lld_mode_t mode, int32_t zdpos, int32_t c_threshold, int32_t p_threshold); - int32_t do_pipette_aspirate(int32_t ul); - int32_t do_pipette_distribut(int32_t ul); + + int32_t do_pipette_aspirate(int32_t ul, int32_t dpos, int32_t zmotor_v); + int32_t do_pipette_distribut(int32_t ul, int32_t dpos, int32_t zmotor_v); private: int32_t befor_run(); diff --git a/components/zcancmder/zcan_protocol_parser.cpp b/components/zcancmder/zcan_protocol_parser.cpp index f6403c6..6b1a532 100644 --- a/components/zcancmder/zcan_protocol_parser.cpp +++ b/components/zcancmder/zcan_protocol_parser.cpp @@ -79,6 +79,9 @@ void ZCanProtocolParser::initialize(IZCanReceiver* cancmder) { REGFN(pipette_aspirate); REGFN(pipette_distribut); REGFN(pipette_shake_up); + REGFN(pipette_aspirate_llf); + REGFN(pipette_distribut_llf); + REGFN(pipette_shake_up_llf); REGFN(pipette_enable_zmotor); REGFN(pipette_write_cmd_direct); @@ -538,6 +541,21 @@ int32_t ZCanProtocolParser::pipette_shake_up(cmdcontxt_t* cxt) { return module->pipette_shake_up(cxt->params[0], cxt->params[1]); } +int32_t ZCanProtocolParser::pipette_aspirate_llf(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(3); + return module->pipette_aspirate_llf(cxt->params[0], cxt->params[1], cxt->params[2]); +} + +int32_t ZCanProtocolParser::pipette_distribut_llf(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(3); + return module->pipette_distribut_llf(cxt->params[0], cxt->params[1], cxt->params[2]); +} + +int32_t ZCanProtocolParser::pipette_shake_up_llf(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(4); + return module->pipette_shake_up_llf(cxt->params[0], cxt->params[1], cxt->params[2], cxt->params[3]); +} + int32_t ZCanProtocolParser::pipette_enable_zmotor(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); return module->pipette_enable_zmotor(cxt->params[0]); diff --git a/components/zcancmder/zcan_protocol_parser.hpp b/components/zcancmder/zcan_protocol_parser.hpp index 4a7ed56..c687a02 100644 --- a/components/zcancmder/zcan_protocol_parser.hpp +++ b/components/zcancmder/zcan_protocol_parser.hpp @@ -115,6 +115,9 @@ class ZCanProtocolParser : public IZCanReceiverListener { CMDFN(pipette_aspirate); CMDFN(pipette_distribut); CMDFN(pipette_shake_up); + CMDFN(pipette_aspirate_llf); + CMDFN(pipette_distribut_llf); + CMDFN(pipette_shake_up_llf); CMDFN(pipette_enable_zmotor); CMDFN(pipette_write_cmd_direct);