diff --git a/README.BUG.md b/README.BUG.md new file mode 100644 index 0000000..9c98dc0 --- /dev/null +++ b/README.BUG.md @@ -0,0 +1,41 @@ +1.hbot在归零的时候卡死了,阻塞在了第四步,猜测可能原因是由于下面代码导致的 +```c +int32_t XYRobotCtrlModule::waiting_for_stop(function condition_fn, bool checkWhenLoop, int32_t delay) { + while (!_motor_is_reach_target()) { + if (m_thread.getExitFlag()) break; + if (condition_fn()) break; + if (checkWhenLoop && !check_when_run()) { + break; + } + osDelay(delay); + } + _motor_stop(); //可能原因这里发送SPI指令失败导致的。 + while (_motor_is_reach_target()) { //可能阻塞在这一行 + osDelay(10); + } + return 0; +} +``` + +```log +07445691 INFO [XYRobotCtrlModule] enable:1 +07445739 INFO [XYRobotCtrlModule] xymotor_move_to_zero +07445740 INFO [XYRobotCtrlModule] do_xymotor_move_to_zero +07445754 INFO [XYRobotCtrlModule] enable:1 +07445756 INFO [XYRobotCtrlModule] _motor_move_to_end xdirection:-1 ydirection:0 maxv:80 +07445757 INFO [XYRobotCtrlModule] moveTo x:-100000 y:0 m1:50000 m2:50000 v:80 +07445779 INFO [XYRobotCtrlModule] step1 reach x zero ok +07445780 INFO [XYRobotCtrlModule] _motor_move_to_end xdirection:1 ydirection:0 maxv:10 +07445781 INFO [XYRobotCtrlModule] moveTo x:99998 y:0 m1:-49999 m2:-49999 v:10 +07445819 INFO [XYRobotCtrlModule] step2 leave x zero ok +07445820 INFO [XYRobotCtrlModule] step3 reach y zero ok +07445821 INFO [XYRobotCtrlModule] _motor_move_to_end xdirection:0 ydirection:1 maxv:10 +07445823 INFO [XYRobotCtrlModule] moveTo x:0 y:100000 m1:-50000 m2:50000 v:10 +07465787 INFO [XYRobotCtrlModule] module_stop +00000018 INFO [SYS ] chip init ok +00000019 INFO [SYS ] = manufacturer : http://www.iflytop.com/ +00000020 INFO [SYS ] = project name : a8000_subboard +00000021 INFO [SYS ] = version : 600 +00000022 INFO [SYS ] = freq : 144000000 +00000023 INFO [SYS ] = build time : Aug 1 2024 12:52:10 +``` \ No newline at end of file diff --git a/README2.md b/README2.md index e33ff2c..08d6946 100644 --- a/README2.md +++ b/README2.md @@ -128,4 +128,29 @@ TODO: 4. 增加吸吐混匀速度 5. 修改处理流程的代码 -``` \ No newline at end of file +``` + +```angular2html +1. 错误没有设置fatal标志位 +2. 正在被处理的试管没有被设置异常标志位 +3. 如果在失能电机的情况下发生错误,设备不会暂停 + +调试页面添加以下接口 +1. 停止 +2. 暂停 +3. 继续 + +4. 失能整机 +5. 使能整机 + +6. 微打开试管夹爪 +7. 调整小瓶缓冲液,探测物质,大屏缓冲液坐标校准逻辑,均只探测一个瓶底点,其他为相对值。 +8. 小瓶缓冲液吐样和取样位置为瓶子上的水平线。 +9. 探测物质缓冲液吐样和取样位置为瓶子上的水平线 +10. 探测物质添加刺破流程 +刺破高度为取样高度+50 +11. 停止工作时,没有清空反应板夹 + + +``` + diff --git a/README3.md b/README3.md new file mode 100644 index 0000000..5aafb9a --- /dev/null +++ b/README3.md @@ -0,0 +1,25 @@ +```angular2html +1. 代码改善的点,主流程修改成以下样子,支持动作任意时刻调度 +while(true){ + 查找待执行的动作(去除掉正在执行的动作) + 执行动作(线程池) + 查找已完成的的动作 + 修改状态(串行) + 查找出问题的动作 + 收集异常处理异常(所有的异常处理统一处理,其他均以异常的形势抛出) +} + +2. EXCEPTION_PROCESSER单独提取出一个类。 +3. 硬件资源在使用时进行申请。 增加一个硬件资源管理类 +4. 温度支持修改PID,读取PID +``` + + + +```angular2html + +1. 控温逻辑修改成温度在目标温度3度附近时,采用PID,注意超过3度,积分项不累加。进入3度范围内,积分项不清零。 +2. (经验)控温周期修改成长一些,可减少震荡。 + + +``` \ No newline at end of file diff --git a/src/main/java/a8k/hardware/A8kModParamInitializer.java b/src/main/java/a8k/hardware/A8kModParamInitializer.java index ced156e..1f7240f 100644 --- a/src/main/java/a8k/hardware/A8kModParamInitializer.java +++ b/src/main/java/a8k/hardware/A8kModParamInitializer.java @@ -115,6 +115,16 @@ public class A8kModParamInitializer { pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_default_velocity, 1500); pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_lld_motor_vel_rpm, 100);//80的时候,刚好和液面齐平 + + canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_look_zero_edge_speed, 10); + + canBus.moduleSetReg(MId.IncubatorTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_kp, 3000); + canBus.moduleSetReg(MId.IncubatorTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_ki, 100); + canBus.moduleSetReg(MId.IncubatorTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_compute_interval, 9000); + canBus.moduleSetReg(MId.PlatesBoxTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_kp, 3000); + canBus.moduleSetReg(MId.PlatesBoxTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_ki, 100); + canBus.moduleSetReg(MId.PlatesBoxTCM, RegIndex.kreg_water_cooling_tmp_controler_pid_compute_interval, 9000); + } public void stopAllMotor() { diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java index 00b62f3..2cf13c5 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java @@ -72,6 +72,7 @@ public class DO_STOP extends A8kStepAction { } //deviceInitCtrlService.clearDevice(); + ejectAllPlates(); //弹出试管架 tubeFeedingCtrlService.ejectTubeHolder(); //丢弃tip头 diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java index 83bde43..2d8bb71 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java @@ -90,7 +90,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { //如果测试模式设置好了试管扫描结果,那么直接使用虚拟扫描结果 if (testModeState.getVirtualTubeScanResult() != null) { - if (result.isHasTubeInIt()) { + if (result!= null && result.isHasTubeInIt()) { throw AppException.of("试管架中有试管,但是测试模式中设置了虚拟试管扫描结果"); } result = testModeState.getVirtualTubeScanResult(); diff --git a/src/main/java/a8k/service/app/devicectrl/script/ProjScripter.java b/src/main/java/a8k/service/app/devicectrl/script/ProjScripter.java new file mode 100644 index 0000000..a52787a --- /dev/null +++ b/src/main/java/a8k/service/app/devicectrl/script/ProjScripter.java @@ -0,0 +1,24 @@ +package a8k.service.app.devicectrl.script; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class ProjScripter { + + + void doShakeLine() { + + } + + void doReactionPrepareLine() { + + } + + void doProcessLine() { + + } + +}