31 changed files with 933 additions and 584 deletions
-
19src/main/java/a8k/service/app/appctrl/AppDeviceCtrlService.java
-
16src/main/java/a8k/service/app/appctrl/AppMainFlowCtrlService.java
-
21src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_CLEAR_ERROR_BEFORE_WORK.java
-
51src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_FINISH_TUBE_PROCESS.java
-
35src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_PLATE.java
-
19src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_START.java
-
36src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_STOP.java
-
25src/main/java/a8k/service/app/appctrl/mainflowctrl/action/README.md
-
11src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
-
6src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java
-
14src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java
-
4src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java
-
6src/main/java/a8k/service/app/appstate/GStateService.java
-
10src/main/java/a8k/service/app/appstate/SensorState.java
-
3src/main/java/a8k/service/app/appstate/resource/A8kPublicResourceType.java
-
32src/main/java/a8k/service/app/devicectrl/calibration/ReactionPlatesTransmitControlerCalibration.java
-
15src/main/java/a8k/service/app/devicectrl/calibration/TubeFeedingModulePosCalibration.java
-
102src/main/java/a8k/service/app/devicectrl/ctrlservice/DeviceInitCtrlService.java
-
19src/main/java/a8k/service/app/devicectrl/ctrlservice/HbotCtrlService.java
-
49src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModule.java
-
18src/main/java/a8k/service/app/devicectrl/ctrlservice/PipetteGunCtrlService.java
-
50src/main/java/a8k/service/app/devicectrl/ctrlservice/PlateBoxCtrlService.java
-
18src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java
-
62src/main/java/a8k/service/app/devicectrl/ctrlservice/TubePreProcesCtrlService.java
-
52src/main/java/a8k/service/app/devicectrl/ctrlservice/TurnableMoveCtrlService.java
-
2src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java
-
1src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java
-
15src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java
-
30src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java
@ -0,0 +1,25 @@ |
|||
|
|||
```angular2html |
|||
|
|||
当某个试管处理过程中触发错误? |
|||
耗材不足错误: |
|||
检测点:开始处理试管前 |
|||
错误处理逻辑: 上报错误,设备暂停,试管状态为待处理 |
|||
|
|||
取Tip头失败: |
|||
检查点:试管处理过程中 |
|||
错误处理:当前样本相关的测试全部失败,设备暂停,试管状态被标记为错误。 |
|||
|
|||
取样本失败: |
|||
检查点:试管处理过程中 |
|||
错误处理:当前样本相关的测试全部失败,不抛出异常,试管标记为错误,处理下一个试管。 |
|||
|
|||
|
|||
|
|||
什么情况下设备不允许暂停? |
|||
1. 当试管正在处理的过程中,不允许暂停,因为此时耗材已经作为资源分配出去了,暂停后如果用户修改耗材状态就会造成资源状态无法同步。 |
|||
|
|||
|
|||
|
|||
|
|||
``` |
@ -0,0 +1,10 @@ |
|||
package a8k.service.app.appstate; |
|||
|
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class SensorState { |
|||
public Integer pboxTemperature = 25; |
|||
public Integer incubateBoxTemperature = 25; |
|||
public Boolean wasteBinFullFlag = false; |
|||
} |
@ -0,0 +1,49 @@ |
|||
package a8k.service.app.devicectrl.ctrlservice; |
|||
|
|||
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; |
|||
import a8k.extapi_controler.utils.ExtApiTab; |
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; |
|||
import a8k.service.app.devicectrl.driver.type.StepMotorMId; |
|||
import a8k.service.app.devicectrl.param.OptModuleParamsMgr; |
|||
import a8k.service.app.devicectrl.param.PlatesBoxPosParamMgr; |
|||
import a8k.service.app.devicectrl.param.TurntablePosParamMgr; |
|||
import a8k.service.bases.ActionReactorService; |
|||
import a8k.type.IncubatorPos; |
|||
import a8k.type.exception.AppException; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitCtrl) |
|||
public class OptScanModule { |
|||
static final Integer overtime = 10000; |
|||
|
|||
|
|||
@Resource |
|||
StepMotorCtrlDriver stepMotorCtrlDriver; |
|||
@Resource |
|||
ActionReactorService actionReactor; |
|||
|
|||
@Resource |
|||
OptModuleParamsMgr optModuleParamsMgr; |
|||
@Resource |
|||
TurnableMoveCtrlService turnableMoveCtrlService; |
|||
|
|||
|
|||
public void pullPlate(IncubatorPos turntablePosIndex) throws AppException { |
|||
turnableMoveCtrlService.trunableMoveToPullPos(turntablePosIndex); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.OptModScannerM, optModuleParamsMgr.getOptScanerScandbyPos(), overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.OptModPullM, optModuleParamsMgr.getPullerTargetPos(), overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroPointQuickBlock(StepMotorMId.OptModPullM, overtime); |
|||
} |
|||
|
|||
public void dropPlate() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.OptModScannerM, optModuleParamsMgr.getOptScanerDropPos(), overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroPointQuickBlock(StepMotorMId.OptModScannerM, overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.OptModScannerM, optModuleParamsMgr.getOptScanerScandbyPos(), overtime); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,50 @@ |
|||
package a8k.service.app.devicectrl.ctrlservice; |
|||
|
|||
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; |
|||
import a8k.extapi_controler.utils.ExtApiTab; |
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.hardware.type.a8kcanprotocol.A8kEcode; |
|||
import a8k.hardware.type.a8kcanprotocol.IOId; |
|||
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver; |
|||
import a8k.service.app.devicectrl.driver.type.StepMotorMId; |
|||
import a8k.service.app.devicectrl.param.OptModuleParamsMgr; |
|||
import a8k.service.app.devicectrl.param.PlatesBoxPosParamMgr; |
|||
import a8k.service.app.devicectrl.param.TurntablePosParamMgr; |
|||
import a8k.service.bases.ActionReactorService; |
|||
import a8k.type.ConsumableGroup; |
|||
import a8k.type.IncubatorPos; |
|||
import a8k.type.exception.AppException; |
|||
import freemarker.core.TruncateBuiltinAlgorithm; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitCtrl) |
|||
public class PlateBoxCtrlService { |
|||
static final Integer overtime = 10000; |
|||
|
|||
|
|||
@Resource |
|||
StepMotorCtrlDriver stepMotorCtrlDriver; |
|||
@Resource |
|||
ActionReactorService actionReactor; |
|||
|
|||
|
|||
@Resource |
|||
PlatesBoxPosParamMgr platesBoxPosParamMgr; |
|||
@Resource |
|||
TurnableMoveCtrlService turnableMoveCtrlService; |
|||
|
|||
|
|||
public void pushPlateQuick(ConsumableGroup PBCh, IncubatorPos turntablePosIndex) throws AppException { |
|||
turnableMoveCtrlService.trunableMoveToPushPos(turntablePosIndex); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.PlatesBoxYM, platesBoxPosParamMgr.getChXPos(PBCh.off), overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.PlatesBoxPusherM, platesBoxPosParamMgr.getPushEndXPos(), overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroPointQuickBlock(StepMotorMId.PlatesBoxPusherM, overtime); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroPointQuickBlock(StepMotorMId.PlatesBoxYM, overtime); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
package a8k.service.app.devicectrl.script; |
|||
|
|||
import a8k.service.app.devicectrl.ctrlservice.OptScanModule; |
|||
import a8k.service.bases.ActionReactorService; |
|||
import a8k.type.IncubatorPos; |
|||
import a8k.type.exception.AppException; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
public class DeviceCtrlScripter { |
|||
|
|||
@Resource |
|||
ActionReactorService actionReactor; |
|||
|
|||
@Resource |
|||
OptScanModule optScanModule; |
|||
|
|||
|
|||
public void dropAllPlates() throws AppException { |
|||
log.info("清空孵育盘"); |
|||
actionReactor.dosome("丢板", () -> optScanModule.dropPlate()); |
|||
for (var incubatorPos : IncubatorPos.values()) { |
|||
actionReactor.dosome("拉板" + incubatorPos.name(), () -> optScanModule.pullPlate(incubatorPos)); |
|||
actionReactor.dosome("丢板", () -> optScanModule.dropPlate()); |
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue