diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index d5ed440..e5a47bb 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/README.md b/README.md
index 6904c60..e993f2c 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,8 @@
```
-
-subboard20_plate_clamp_case OK
-subboard30_shake_module OK
-subboard60_inlet_and_outlet_module OK
-subboard70_incubation_turntable
-subboard80_cliptip
-subboard90_optical_module
+V602
+ 1. 修复移液枪Z轴控制部分BUG
```
@@ -22,14 +17,14 @@ subboard90_optical_module
ID地址:
0x080E0000
10 :A
-20 :14 板夹仓
+20 :14
30 :1E
40 :28
50 :32
60 :3C
70 :46
80 :50
-90 :5A 光学模组
+90 :5A
100:64
110:6E
200:CB
@@ -40,18 +35,6 @@ ID地址:
```
-# 公板IO资源分配
- PA12 CAN1_TX
- PA11 CAN1_RX
- PA10 USART1_RX
- PA9 USART1_TX
-
- PC9 RCC_MCO_2 --> 16MHZ
- PA14 SYS_JTCK_SWCLK
- PA13 SYS_JTCK_SWDIO
-
- PE2 调试指示灯
-
```
@@ -63,58 +46,7 @@ ID地址:
```
```
-~吸吐
- 此时探头中没有液体
- 1.液面探测(max_dpos)(混合液体探测)
- 2.吸液且液面跟随(step_motor_v)
-
-
-移液枪动作
- 刺破:
- Z轴电机移动
-
-
- 大瓶缓冲液+探测物质
- 1. 刺破探测物质
- 取tip
- 移动Z轴
- 丢tip(应该可以不丢)
- 2. 取大瓶子缓冲液(PS:1,2步应该可以使用同一个tip)
- 取tip
- 液面探测复位
- 移动z轴
- 液面探测(maxdpos,)
- 液体跟随&&取液体(v,ul)
- 3. 滴入探测物质
- 移动z轴
- 排空液体
- 丢tip
- 4. 取血液体
- 取tip
- 移动Z轴
- 液面探测
- 吸液&&液面跟随
- 5. 血液滴入探测物质(此过程中没有液面探测,没有液面跟随)
- 移动z轴(固定位置)
- 排空液体
- 吸吐混匀(液面跟随V)
-
- 小瓶缓冲液
- 1. 刺破小瓶缓冲液
- 取tip
- 移动Z轴(刺破)
- 丢tip(可以不丢弃)
- 2. 取血液
- 取tip
- 移动Z轴
- 液面探测
- 吸液&&液面跟随
- 3. 血液滴入探测物质(此过程中没有液面探测,没有液面跟随)
- 移动z轴(固定位置)
- 排空液体
- 吸吐混匀
- 排空液体
- 丢tip
+
diff --git a/a8000_protocol b/a8000_protocol
index 6c53aa3..51da893 160000
--- a/a8000_protocol
+++ b/a8000_protocol
@@ -1 +1 @@
-Subproject commit 6c53aa3ab6e9888e39bcc92f7956d9fc6ad135a9
+Subproject commit 51da893d74468dd8ae898e97936a2357a6120eb0
diff --git a/sdk/components/pipette_module/pipette_ctrl_module_v2.cpp b/sdk/components/pipette_module/pipette_ctrl_module_v2.cpp
index 62cfcc4..763925e 100644
--- a/sdk/components/pipette_module/pipette_ctrl_module_v2.cpp
+++ b/sdk/components/pipette_module/pipette_ctrl_module_v2.cpp
@@ -323,7 +323,10 @@ int32_t PipetteModuleV2::pipette_init_device() {
}
int32_t PipetteModuleV2::pipette_put_tip() {
- THREAD_START_WORK([this]() { DO_IN_THREAD(m_smtp2.pump_put_tip()); });
+ THREAD_START_WORK([this]() {
+ DO_IN_THREAD(m_smtp2.pump_put_tip());
+ pump_waitfor_stop();
+ });
return 0;
}
@@ -345,12 +348,12 @@ int32_t PipetteModuleV2::pipette_lld_prepare() {
return 0;
}
-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_test() { //
+ return do_pipette_lld(true, kplld, m_state.pipette_startz, m_state.pipette_endz, 100, 1000);
}
-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() { //
+ return do_pipette_lld(false, m_state.lld_type, m_state.pipette_startz, m_state.pipette_endz - m_state.pipette_startz, m_state.lld_c_threshold, m_state.lld_p_threshold);
}
int32_t PipetteModuleV2::pipette_lld_is_detect_liquid(int32_t *detect) {
@@ -361,12 +364,9 @@ int32_t PipetteModuleV2::pipette_lld_is_detect_liquid(int32_t *detect) {
int32_t PipetteModuleV2::pipette_aspirate_prepare() {
THREAD_START_WORK([this]() { //
ZLOGI(TAG, "pipette_aspirate_prepare");
- m_state.aspirate_cfg_eigen_time = 0;
- m_state.aspirate_cfg_p_thre = 0;
- m_state.aspirate_cfg_llf_zm_rpm = 0;
- m_state.load_val_ul = 0;
- int32_t nowpos = zm_get_now_pos();
- int32_t bak = nowpos - 100;
+ m_state.load_val_ul = 0;
+ int32_t nowpos = zm_get_now_pos();
+ int32_t bak = nowpos - 100;
if (bak < 0) bak = 0;
zm_move_to(bak, m_cfg.zm_default_velocity);
@@ -385,25 +385,52 @@ int32_t PipetteModuleV2::pipette_aspirate_prepare() {
return 0;
}
-int32_t PipetteModuleV2::pipette_aspirate_set_llf_velocity(int32_t llf_zm_rpm) {
+int32_t PipetteModuleV2::pipette_set_startz(int32_t startz) {
+ ZLOGI(TAG, "pipette_set_startz %d", startz);
+ m_state.pipette_startz = startz;
+ return 0;
+}
+int32_t PipetteModuleV2::pipette_set_endz(int32_t endz) {
+ ZLOGI(TAG, "pipette_set_endz %d", endz);
+ m_state.pipette_endz = endz;
+ return 0;
+}
+
+int32_t PipetteModuleV2::pipette_set_lld_type(int32_t lld_type) {
+ ZLOGI(TAG, "pipette_set_lld_type %d", lld_type);
+ m_state.lld_type = lld_type;
+ return 0;
+}
+int32_t PipetteModuleV2::pipette_set_lld_c_threshold(int32_t c_threshold) {
+ ZLOGI(TAG, "pipette_set_lld_c_threshold %d", c_threshold);
+ m_state.lld_c_threshold = c_threshold;
+ return 0;
+}
+int32_t PipetteModuleV2::pipette_set_lld_p_threshold(int32_t p_threshold) {
+ ZLOGI(TAG, "pipette_set_lld_p_threshold %d", p_threshold);
+ m_state.lld_p_threshold = p_threshold;
+ return 0;
+}
+
+int32_t PipetteModuleV2::pipette_set_llf_velocity(int32_t llf_zm_rpm) {
m_state.aspirate_cfg_llf_zm_rpm = llf_zm_rpm;
- ZLOGI(TAG, "pipette_aspirate_set_llf_velocity %d", llf_zm_rpm);
+ ZLOGI(TAG, "pipette_set_llf_velocity %d", llf_zm_rpm);
return 0;
}
-int32_t PipetteModuleV2::pipette_aspirate_set_operation_verifi_p_thre(int32_t p_thre) {
+int32_t PipetteModuleV2::pipette_set_aspirate_operation_verifi_p_thre(int32_t p_thre) {
m_state.aspirate_cfg_p_thre = p_thre;
- ZLOGI(TAG, "pipette_aspirate_set_operation_verifi_p_thre %d", p_thre);
+ ZLOGI(TAG, "pipette_set_aspirate_operation_verifi_p_thre %d", p_thre);
return 0;
}
-int32_t PipetteModuleV2::pipette_aspirate_set_operation_verifi_eigen_time(int32_t characteristic_time) {
+int32_t PipetteModuleV2::pipette_set_aspirate_operation_verifi_eigen_time(int32_t characteristic_time) {
m_state.aspirate_cfg_eigen_time = characteristic_time;
- ZLOGI(TAG, "pipette_aspirate_set_operation_verifi_eigen_time %d", characteristic_time);
+ ZLOGI(TAG, "pipette_set_aspirate_operation_verifi_eigen_time %d", characteristic_time);
return 0;
}
-int32_t PipetteModuleV2::pipette_aspirate_set_operation_verifi_tolerance(int32_t tolerance) {
+int32_t PipetteModuleV2::pipette_set_aspirate_operation_verifi_tolerance(int32_t tolerance) {
m_state.aspirate_cfg_tolerance = tolerance;
- ZLOGI(TAG, "pipette_aspirate_set_operation_verifi_tolerance %d", tolerance);
+ ZLOGI(TAG, "pipette_set_aspirate_operation_verifi_tolerance %d", tolerance);
return 0;
}
@@ -614,6 +641,10 @@ void PipetteModuleV2::do_pipette_zmotor_move_to_zero_point_quick() {
// 校验偏差
int32_t dpos = zm_get_now_pos() - startpos;
+ // 设置零点
+ zm_set_now_pos(0 + m_cfg.zm_dzero - m_cfg.zm_io_trigger_append_distance);
+ m_state.has_move_to_zero = 1;
+
if (m_cfg.zm_pos_devi_tolerance != 0 && (abs(expectation_dpos - dpos) > m_cfg.zm_pos_devi_tolerance)) {
throw zapp_exception(err::kstep_motor_lost_step);
}
@@ -769,7 +800,14 @@ void PipetteModuleV2::zm_update_dzero(int32_t dzero) {
bool PipetteModuleV2::zm0p_is_trigger() { return m_zm0p->getState(); }
void PipetteModuleV2::zm_waitfor_zm0p_trigger_and_stop_motor() {
- while (!zm0p_is_trigger() && !m_zm->isStoped()) thread_delay(2);
+ while (!zm0p_is_trigger()) {
+ if (m_zm->isStoped()) {
+ ZLOGI(TAG, "motor stop first.....");
+ break;
+ }
+ thread_delay(2);
+ }
+
// 停止电机
m_zm->stop();
// 等待电机停止
@@ -777,6 +815,23 @@ void PipetteModuleV2::zm_waitfor_zm0p_trigger_and_stop_motor() {
thread_delay(10);
}
}
+
+void PipetteModuleV2::zm_waitfor_zm0p_not_trigger_and_stop_motor() {
+ // 等待触发
+ while (zm0p_is_trigger()) {
+ if (m_zm->isStoped()) {
+ ZLOGI(TAG, "motor stop first.....");
+ break;
+ }
+ thread_delay(2);
+ }
+
+ // 停止电机
+ m_zm->stop();
+ // 等待电机停止
+ while (!m_zm->isStoped()) thread_delay(10);
+}
+
void PipetteModuleV2::pump_waitfor_stop() {
while (true) {
int32_t isbusy = 0;
@@ -801,15 +856,6 @@ int32_t PipetteModuleV2::pump_read_tip_state(int32_t *val) {
return 0;
}
-void PipetteModuleV2::zm_waitfor_zm0p_not_trigger_and_stop_motor() {
- // 等待触发
- while (zm0p_is_trigger()) thread_delay(2);
- // 停止电机
- m_zm->stop();
- // 等待电机停止
- while (!m_zm->isStoped()) thread_delay(10);
-}
-
void PipetteModuleV2::zm_waitfor_stop() {
while (!m_zm->isStoped()) thread_delay(10);
}
@@ -873,11 +919,11 @@ int32_t PipetteModuleV2::bfcall(int32_t cmdid, uint8_t *param, int32_t len) {
if (cmdid == kpipette_zmotor_move_by) goto check_motor_is_enable;
if (cmdid == kpipette_zmotor_move_to_zero_point_quick) goto check_motor_has_moveto_zero;
- if (cmdid == kpipette_zmotor_measure_distance) goto check_motor_has_moveto_zero;
+ if (cmdid == kpipette_zmotor_measure_distance) goto check_motor_is_enable;
if (cmdid == kpipette_zmotor_move_to) goto check_motor_has_moveto_zero;
- if (cmdid == kpipette_init_device) goto check_motor_has_moveto_zero;
- if (cmdid == kpipette_put_tip) goto check_motor_has_moveto_zero;
+ if (cmdid == kpipette_init_device) goto suc;
+ if (cmdid == kpipette_put_tip) goto suc;
if (cmdid == kpipette_lld_prepare) goto check_motor_has_moveto_zero;
if (cmdid == kpipette_lld) goto check_motor_has_moveto_zero;
if (cmdid == kpipette_lld_test) goto check_motor_has_moveto_zero;
@@ -912,6 +958,7 @@ check:
*/
return 0;
}
+suc:
return 0;
}
void PipetteModuleV2::aftercall(int32_t cmdid, uint8_t *param, int32_t len, uint8_t *ack, int32_t acklen, int32_t ret) {
diff --git a/sdk/components/pipette_module/pipette_ctrl_module_v2.hpp b/sdk/components/pipette_module/pipette_ctrl_module_v2.hpp
index 3b2a9e0..fa8bb4b 100644
--- a/sdk/components/pipette_module/pipette_ctrl_module_v2.hpp
+++ b/sdk/components/pipette_module/pipette_ctrl_module_v2.hpp
@@ -103,6 +103,13 @@ class PipetteModuleV2 : public ZIModule {
int32_t detected_liquid; // 检测到液面
int32_t dpos;
+ // setting
+ int32_t pipette_startz; // lld探测起始位
+ int32_t pipette_endz; // lld探测结束位置, llf液面跟随限制位
+ int32_t lld_type; // lld类型
+ int32_t lld_c_threshold; // lld c_threshold
+ int32_t lld_p_threshold; // lld p_threshold
+
int32_t aspirate_cfg_llf_zm_rpm; // 液面跟随速度
int32_t aspirate_cfg_p_thre; // 吸液操作验证,压力阈值,用来检测tip阻塞问题
int32_t aspirate_cfg_eigen_time; // 吸液操作验证,特征时间,用来检测气泡,吸空检测
@@ -169,19 +176,29 @@ class PipetteModuleV2 : public ZIModule {
virtual int32_t pipette_init_device();
virtual int32_t pipette_put_tip();
+
+ virtual int32_t pipette_set_startz(int32_t startz);
+ virtual int32_t pipette_set_endz(int32_t maxz);
+
+ virtual int32_t pipette_set_lld_type(int32_t lld_type);
+ virtual int32_t pipette_set_lld_c_threshold(int32_t c_threshold);
+ virtual int32_t pipette_set_lld_p_threshold(int32_t p_threshold);
+
+ virtual int32_t pipette_set_llf_velocity(int32_t llf_zm_rpm);
+ virtual int32_t pipette_set_aspirate_operation_verifi_p_thre(int32_t p_thre);
+ virtual int32_t pipette_set_aspirate_operation_verifi_eigen_time(int32_t eigen_time);
+ virtual int32_t pipette_set_aspirate_operation_verifi_tolerance(int32_t tolerance);
+
virtual int32_t pipette_lld_prepare();
- virtual int32_t pipette_lld(int32_t lldtype /*kclld = 0,kplld = 1, kmixlld = 2, */, int32_t startpos, int32_t zdpos, int32_t c_threshold, int32_t p_threshold);
- virtual int32_t pipette_lld_test(int32_t startpos, int32_t zdpos);
+ virtual int32_t pipette_lld();
+ virtual int32_t pipette_lld_test();
virtual int32_t pipette_lld_is_detect_liquid(int32_t *detect);
virtual int32_t pipette_aspirate_prepare();
- virtual int32_t pipette_aspirate_set_llf_velocity(int32_t llf_zm_rpm);
- virtual int32_t pipette_aspirate_set_operation_verifi_p_thre(int32_t p_thre);
- virtual int32_t pipette_aspirate_set_operation_verifi_eigen_time(int32_t eigen_time);
- virtual int32_t pipette_aspirate_set_operation_verifi_tolerance(int32_t tolerance);
virtual int32_t pipette_aspirate(int32_t ul);
virtual int32_t pipette_aspirate_and_verify(int32_t ul);
virtual int32_t pipette_shake_up(int32_t ul, int32_t times);
+
virtual int32_t pipette_aspirate_infer_pressure(int32_t ul);
virtual int32_t pipette_aspirate_infer_eigen_time(int32_t ul);
virtual int32_t pipette_get_aspirate_infer_pressure_result(int32_t *result);
@@ -217,6 +234,7 @@ class PipetteModuleV2 : public ZIModule {
void zm_waitfor_zm0p_trigger_and_stop_motor();
void zm_waitfor_zm0p_not_trigger_and_stop_motor();
+
void zm_waitfor_stop();
int32_t pump_read_pos_ul(int32_t *val);
diff --git a/sdk/components/zcancmder/zcan_protocol_parser.cpp b/sdk/components/zcancmder/zcan_protocol_parser.cpp
index b7c4965..11a128f 100644
--- a/sdk/components/zcancmder/zcan_protocol_parser.cpp
+++ b/sdk/components/zcancmder/zcan_protocol_parser.cpp
@@ -163,10 +163,10 @@ void ZCanProtocolParser::initialize(IZCanReceiver* cancmder) {
REGFN(pipette_lld_prepare);
REGFN(pipette_lld);
REGFN(pipette_aspirate_prepare);
- REGFN(pipette_aspirate_set_llf_velocity);
- REGFN(pipette_aspirate_set_operation_verifi_p_thre);
- REGFN(pipette_aspirate_set_operation_verifi_eigen_time);
- REGFN(pipette_aspirate_set_operation_verifi_tolerance);
+ REGFN(pipette_set_llf_velocity);
+ REGFN(pipette_set_aspirate_operation_verifi_p_thre);
+ REGFN(pipette_set_aspirate_operation_verifi_eigen_time);
+ REGFN(pipette_set_aspirate_operation_verifi_tolerance);
REGFN(pipette_aspirate);
REGFN(pipette_aspirate_and_verify);
REGFN(pipette_shake_up);
@@ -180,6 +180,12 @@ void ZCanProtocolParser::initialize(IZCanReceiver* cancmder) {
REGFN(pipette_zmotor_read_dev_status_cache);
REGFN(pipette_lld_is_detect_liquid);
REGFN(pipette_lld_test);
+
+ REGFN(pipette_set_startz);
+ REGFN(pipette_set_endz);
+ REGFN(pipette_set_lld_type);
+ REGFN(pipette_set_lld_c_threshold);
+ REGFN(pipette_set_lld_p_threshold);
}
void ZCanProtocolParser::_registerModule(uint16_t id, ZIModule* module) { m_modulers[id] = module; }
void ZCanProtocolParser::registerModule(ZIModule* module) {
@@ -986,28 +992,28 @@ int32_t ZCanProtocolParser::pipette_lld_prepare(cmdcontxt_t* cxt) {
return module->pipette_lld_prepare();
}
int32_t ZCanProtocolParser::pipette_lld(cmdcontxt_t* cxt) {
- CHECK_AND_GET_MODULE(5);
- return module->pipette_lld(cxt->params[0], cxt->params[1], cxt->params[2], cxt->params[3], cxt->params[4]);
+ CHECK_AND_GET_MODULE(0);
+ return module->pipette_lld();
}
int32_t ZCanProtocolParser::pipette_aspirate_prepare(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(0);
return module->pipette_aspirate_prepare();
}
-int32_t ZCanProtocolParser::pipette_aspirate_set_llf_velocity(cmdcontxt_t* cxt) {
+int32_t ZCanProtocolParser::pipette_set_llf_velocity(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(1);
- return module->pipette_aspirate_set_llf_velocity(cxt->params[0]);
+ return module->pipette_set_llf_velocity(cxt->params[0]);
}
-int32_t ZCanProtocolParser::pipette_aspirate_set_operation_verifi_p_thre(cmdcontxt_t* cxt) {
+int32_t ZCanProtocolParser::pipette_set_aspirate_operation_verifi_p_thre(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(1);
- return module->pipette_aspirate_set_operation_verifi_p_thre(cxt->params[0]);
+ return module->pipette_set_aspirate_operation_verifi_p_thre(cxt->params[0]);
}
-int32_t ZCanProtocolParser::pipette_aspirate_set_operation_verifi_eigen_time(cmdcontxt_t* cxt) {
+int32_t ZCanProtocolParser::pipette_set_aspirate_operation_verifi_eigen_time(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(1);
- return module->pipette_aspirate_set_operation_verifi_eigen_time(cxt->params[0]);
+ return module->pipette_set_aspirate_operation_verifi_eigen_time(cxt->params[0]);
}
-int32_t ZCanProtocolParser::pipette_aspirate_set_operation_verifi_tolerance(cmdcontxt_t* cxt) {
+int32_t ZCanProtocolParser::pipette_set_aspirate_operation_verifi_tolerance(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(1);
- return module->pipette_aspirate_set_operation_verifi_tolerance(cxt->params[0]);
+ return module->pipette_set_aspirate_operation_verifi_tolerance(cxt->params[0]);
}
int32_t ZCanProtocolParser::pipette_aspirate(cmdcontxt_t* cxt) {
CHECK_AND_GET_MODULE(1);
@@ -1073,8 +1079,33 @@ int32_t ZCanProtocolParser::pipette_lld_is_detect_liquid(cmdcontxt_t* cxt) {
}
// pipette_lld_test
int32_t ZCanProtocolParser::pipette_lld_test(cmdcontxt_t* cxt) {
- CHECK_AND_GET_MODULE(2);
- return module->pipette_lld_test(cxt->params[0],cxt->params[1]);
+ CHECK_AND_GET_MODULE(0);
+ return module->pipette_lld_test();
+}
+
+int32_t ZCanProtocolParser::pipette_set_startz(cmdcontxt_t* cxt) {
+ CHECK_AND_GET_MODULE(1);
+ return module->pipette_set_startz(cxt->params[0]);
+}
+
+int32_t ZCanProtocolParser::pipette_set_endz(cmdcontxt_t* cxt) {
+ CHECK_AND_GET_MODULE(1);
+ return module->pipette_set_endz(cxt->params[0]);
+}
+
+int32_t ZCanProtocolParser::pipette_set_lld_type(cmdcontxt_t* cxt) {
+ CHECK_AND_GET_MODULE(1);
+ return module->pipette_set_lld_type(cxt->params[0]);
+}
+
+int32_t ZCanProtocolParser::pipette_set_lld_c_threshold(cmdcontxt_t* cxt) {
+ CHECK_AND_GET_MODULE(1);
+ return module->pipette_set_lld_c_threshold(cxt->params[0]);
+}
+
+int32_t ZCanProtocolParser::pipette_set_lld_p_threshold(cmdcontxt_t* cxt) {
+ CHECK_AND_GET_MODULE(1);
+ return module->pipette_set_lld_p_threshold(cxt->params[0]);
}
#undef MODULE_CLASS
\ No newline at end of file
diff --git a/sdk/components/zcancmder/zcan_protocol_parser.hpp b/sdk/components/zcancmder/zcan_protocol_parser.hpp
index cc6a798..79b7e06 100644
--- a/sdk/components/zcancmder/zcan_protocol_parser.hpp
+++ b/sdk/components/zcancmder/zcan_protocol_parser.hpp
@@ -197,10 +197,10 @@ class ZCanProtocolParser : public IZCanReceiverListener {
CMDFN(pipette_lld_prepare);
CMDFN(pipette_lld);
CMDFN(pipette_aspirate_prepare);
- CMDFN(pipette_aspirate_set_llf_velocity);
- CMDFN(pipette_aspirate_set_operation_verifi_p_thre);
- CMDFN(pipette_aspirate_set_operation_verifi_eigen_time);
- CMDFN(pipette_aspirate_set_operation_verifi_tolerance);
+ CMDFN(pipette_set_llf_velocity);
+ CMDFN(pipette_set_aspirate_operation_verifi_p_thre);
+ CMDFN(pipette_set_aspirate_operation_verifi_eigen_time);
+ CMDFN(pipette_set_aspirate_operation_verifi_tolerance);
CMDFN(pipette_aspirate);
CMDFN(pipette_aspirate_and_verify);
CMDFN(pipette_shake_up);
@@ -214,7 +214,11 @@ class ZCanProtocolParser : public IZCanReceiverListener {
CMDFN(pipette_zmotor_read_dev_status_cache);
CMDFN(pipette_lld_is_detect_liquid);
CMDFN(pipette_lld_test);
-
+ CMDFN(pipette_set_startz);
+ CMDFN(pipette_set_endz);
+ CMDFN(pipette_set_lld_type);
+ CMDFN(pipette_set_lld_c_threshold);
+ CMDFN(pipette_set_lld_p_threshold);
};
} // namespace iflytop
\ No newline at end of file
diff --git a/usrc/project_configs.h b/usrc/project_configs.h
index a32adcc..61f8985 100644
--- a/usrc/project_configs.h
+++ b/usrc/project_configs.h
@@ -1,5 +1,5 @@
#pragma once
-#define PC_VERSION 601
+#define PC_VERSION 602
#define PC_MANUFACTURER "http://www.iflytop.com/"
#define PC_PROJECT_NAME "a8000_subboard"
#define PC_IFLYTOP_ENABLE_OS 1