Browse Source

update

master
zhaohe 9 months ago
parent
commit
77173f63a8
  1. 4
      .settings/language.settings.xml
  2. 78
      README.md
  3. 2
      a8000_protocol
  4. 111
      sdk/components/pipette_module/pipette_ctrl_module_v2.cpp
  5. 30
      sdk/components/pipette_module/pipette_ctrl_module_v2.hpp
  6. 63
      sdk/components/zcancmder/zcan_protocol_parser.cpp
  7. 14
      sdk/components/zcancmder/zcan_protocol_parser.hpp
  8. 2
      usrc/project_configs.h

4
.settings/language.settings.xml

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1525288607546358955" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1281126318774174698" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1598357557437914462" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1354195268665730205" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

78
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

2
a8000_protocol

@ -1 +1 @@
Subproject commit 6c53aa3ab6e9888e39bcc92f7956d9fc6ad135a9
Subproject commit 51da893d74468dd8ae898e97936a2357a6120eb0

111
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) {

30
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);

63
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

14
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

2
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

Loading…
Cancel
Save