Browse Source

update

tags/v0
zhaohe 9 months ago
parent
commit
440b4f45c7
  1. 41
      README.BUG.md
  2. 27
      README2.md
  3. 25
      README3.md
  4. 10
      src/main/java/a8k/hardware/A8kModParamInitializer.java
  5. 1
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java
  6. 2
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
  7. 24
      src/main/java/a8k/service/app/devicectrl/script/ProjScripter.java

41
README.BUG.md

@ -0,0 +1,41 @@
1.hbot在归零的时候卡死了,阻塞在了第四步,猜测可能原因是由于下面代码导致的
```c
int32_t XYRobotCtrlModule::waiting_for_stop(function<bool()> 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
```

27
README2.md

@ -128,4 +128,29 @@ TODO:
4. 增加吸吐混匀速度 4. 增加吸吐混匀速度
5. 修改处理流程的代码 5. 修改处理流程的代码
```
```
```angular2html
1. 错误没有设置fatal标志位
2. 正在被处理的试管没有被设置异常标志位
3. 如果在失能电机的情况下发生错误,设备不会暂停
调试页面添加以下接口
1. 停止
2. 暂停
3. 继续
4. 失能整机
5. 使能整机
6. 微打开试管夹爪
7. 调整小瓶缓冲液,探测物质,大屏缓冲液坐标校准逻辑,均只探测一个瓶底点,其他为相对值。
8. 小瓶缓冲液吐样和取样位置为瓶子上的水平线。
9. 探测物质缓冲液吐样和取样位置为瓶子上的水平线
10. 探测物质添加刺破流程
刺破高度为取样高度+50
11. 停止工作时,没有清空反应板夹
```

25
README3.md

@ -0,0 +1,25 @@
```angular2html
1. 代码改善的点,主流程修改成以下样子,支持动作任意时刻调度
while(true){
查找待执行的动作(去除掉正在执行的动作)
执行动作(线程池)
查找已完成的的动作
修改状态(串行)
查找出问题的动作
收集异常处理异常(所有的异常处理统一处理,其他均以异常的形势抛出)
}
2. EXCEPTION_PROCESSER单独提取出一个类。
3. 硬件资源在使用时进行申请。 增加一个硬件资源管理类
4. 温度支持修改PID,读取PID
```
```angular2html
1. 控温逻辑修改成温度在目标温度3度附近时,采用PID,注意超过3度,积分项不累加。进入3度范围内,积分项不清零。
2. (经验)控温周期修改成长一些,可减少震荡。
```

10
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_zm_default_velocity, 1500);
pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_lld_motor_vel_rpm, 100);//80的时候刚好和液面齐平 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() { public void stopAllMotor() {

1
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java

@ -72,6 +72,7 @@ public class DO_STOP extends A8kStepAction {
} }
//deviceInitCtrlService.clearDevice(); //deviceInitCtrlService.clearDevice();
ejectAllPlates();
//弹出试管架 //弹出试管架
tubeFeedingCtrlService.ejectTubeHolder(); tubeFeedingCtrlService.ejectTubeHolder();
//丢弃tip头 //丢弃tip头

2
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 (testModeState.getVirtualTubeScanResult() != null) {
if (result.isHasTubeInIt()) {
if (result!= null && result.isHasTubeInIt()) {
throw AppException.of("试管架中有试管,但是测试模式中设置了虚拟试管扫描结果"); throw AppException.of("试管架中有试管,但是测试模式中设置了虚拟试管扫描结果");
} }
result = testModeState.getVirtualTubeScanResult(); result = testModeState.getVirtualTubeScanResult();

24
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() {
}
}
Loading…
Cancel
Save