diff --git a/errorlog/error1.log b/errorlog/error1.log deleted file mode 100644 index 0a1ae0b..0000000 --- a/errorlog/error1.log +++ /dev/null @@ -1,19 +0,0 @@ -13:33:54.560 [http-nio-80-exec-8] INFO a.a.s.m.AppDeviceCtrlService - [startWork,24] - 开始工作 -13:33:54.562 [http-nio-80-exec-8] INFO a.a.s.m.m.MainFlowCtrlScheduler - [txInfo,12] - 核对TIP1头数量 -13:33:54.563 [http-nio-80-exec-8] INFO a.a.s.l.HbotMoveExCtrlService - [checkIfTipExist,99] - checkIfTipExist groupId:0 index:0 -13:33:54.570 [http-nio-80-exec-8] INFO a.a.s.l.HbotMoveCtrlService - [hbotMoveTo,67] - hbot move to:(11680, 1138, 805) -13:33:58.565 [http-nio-80-exec-8] ERROR a.a.h.c.A8kCanBusConnection - [autoReSend,208] - send cmd [CMD ] index:[999] (liquid_operation_set_gun_runparams PipetteMod(82) :param:[14,14,0,1000,8000]) A0517452E703140E0000000E00000000000000E8030000401F00001B fail, retry 0 -13:34:03.038 [MainFlowCtrlScheduler] INFO a.a.s.m.m.MainFlowCtrlScheduler - [tryDoAction,174] - ================== AC20ScanReactionPlate =================== -13:34:03.039 [MainFlowCtrlScheduler] INFO a.a.s.m.m.MainFlowCtrlScheduler - [tryDoAction,175] - = AC20ScanReactionPlate -> DO ACTION: -13:34:03.040 [MainFlowCtrlScheduler] INFO a.a.s.s.OptScanModuleStateMgrService - [changeOptScanModuleStateToScanning,76] - 光学模块: 状态->开始扫描 -13:34:03.043 [MainFlowCtrlScheduler] INFO a.a.s.m.m.a.AC20ScanReactionPlate - [doAction,121] - 扫描板夹 -13:34:03.044 [MainFlowCtrlScheduler] ERROR a.a.s.m.m.MainFlowCtrlScheduler - [onWorking,193] - error Cannot invoke "a8k.app.type.a8k.state.ProjectTaskContext.getProjBuildinInfo()" because "cxt" is null -java.lang.NullPointerException: Cannot invoke "a8k.app.type.a8k.state.ProjectTaskContext.getProjBuildinInfo()" because "cxt" is null - at a8k.app.service.mainctrl.mainflowctrl.action.AC20ScanReactionPlate.doOptScanXX(AC20ScanReactionPlate.java:88) - at a8k.app.service.mainctrl.mainflowctrl.action.AC20ScanReactionPlate.doAction(AC20ScanReactionPlate.java:122) - at a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler.tryDoAction(MainFlowCtrlScheduler.java:176) - at a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler.onWorking(MainFlowCtrlScheduler.java:190) - at a8k.app.service.mainctrl.mainflowctrl.MaConnection to 192.168.8.10 closed by remote host.java:294) -Connection to 192.168.8.10 closed.ead.run(Thread.java:1583) -PS D:\java_workspace\a8000> ^Cduler] INFO a.a.s.b.AppEventBusService - [pushEvent,46] - pushEvent: AppPromptEvent a8k.app.type.appevent.AppPromptEvent@3b24ca29 -PS D:\java_workspace\a8000> heduler] INFO a.a.s.s.TubeStateMgrService - [resetAll,384] - 重置所有试管状态 \ No newline at end of file diff --git a/errorlog/error2.log b/errorlog/error2.log deleted file mode 100644 index e6e4b3b..0000000 --- a/errorlog/error2.log +++ /dev/null @@ -1,20 +0,0 @@ -13:40:10.205 [MainFlowCtrlScheduler] WARN a.a.s.l.TubeFeedingExCtrlService - [scanClampModRelease,84] - DISABLE SCAN CLAMPING SERVO -13:40:10.340 [MainFlowCtrlScheduler] ERROR a.a.h.c.A8kCanBusService - [waitForMod,124] - ShakeModLiftingSV waitting for action mini_servo_move_to , catch error LOW_ERROR_SUBDEVICE_OVERTIME, defail ecode 0 -13:40:10.353 [MainFlowCtrlScheduler] ERROR a.a.s.m.m.a.AC30ScanTubeHolderTask - [doAction,243] - error {"code":"LOW_ERROR_SUBDEVICE_OVERTIME","type":"AEHardwareError","exmsg":null,"mid":"ShakeModLiftingSV","cmdId":"mini_servo_move_to","rawtxcmd":null,"rawrxcmd":null} -a8k.app.type.exception.AppException: {"code":"LOW_ERROR_SUBDEVICE_OVERTIME","type":"AEHardwareError","exmsg":null,"mid":"ShakeModLiftingSV","cmdId":"mini_servo_move_to","rawtxcmd":null,"rawrxcmd":null} - at a8k.app.type.exception.AppException.of(AppException.java:49) - at a8k.app.hardware.channel.A8kCanBusService.waitForMod(A8kCanBusService.java:125) - at a8k.app.hardware.driver.MiniServoDriver.miniServoMoveToBlock(MiniServoDriver.java:90) - at a8k.app.hardware.driver.MiniServoDriver.miniServoMoveToZeroBlock(MiniServoDriver.java:57) - at a8k.app.service.lowerctrl.TubeFeedingExCtrlService.moveTubeRackTo(TubeFeedingExCtrlService.java:53) - at a8k.app.service.lowerctrl.TubeFeedingCtrlService.moveAndjudgeTubeExist(TubeFeedingCtrlService.java:227) - at a8k.app.service.lowerctrl.TubeFeedingCtrlService.scanTubeHodler(TubeFeedingCtrlService.java:254) - at a8k.app.service.lowerctrl.TubeFeedingCtrlService.enterAndScanTubeHodler(TubeFeedingCtrlService.java:296) - at a8k.app.service.mainctrl.mainflowctrl.action.AC30ScanTubeHolderTask.doScanHolder(AC30ScanTubeHolderTask.java:184) - at a8k.app.service.mainctrl.mainflowctrl.action.AC30ScanTubeHolderTask.priDoAction(AC30ScanTubeHolderTask.java:206) - at a8k.app.service.mainctrl.mainflowctrl.action.AC30ScanTubeHolderTask.doAction(AC30ScanTubeHolderTask.java:241) - at a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler.tryDoAction(MainFlowCtrlScheduler.java:176) - at a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler.onWorking(MainFlowCtrlScheduler.java:190) - at a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler.workFn(MainFlowCtrlScheduler.java:294) - at java.base/java.lang.Thread.run(Thread.java:1583) -13:40:10.359 [MainFlowCtrlScheduler] INFO a.a.s.b.AppEventBusService \ No newline at end of file diff --git a/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceCtrlControler.java b/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceCtrlControler.java index 41202e7..75a8e66 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceCtrlControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceCtrlControler.java @@ -1,6 +1,6 @@ package a8k.app.controler.api.v1.app.ctrl; -import a8k.app.service.mainctrl.AppDeviceCtrlService; +import a8k.app.service.mainctrl.AppDeviceMainFlowCtrlService; import a8k.app.type.ui.ApiRet; import a8k.app.type.exception.AppException; import io.swagger.v3.oas.annotations.Operation; @@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.ResponseBody; public class DeviceCtrlControler { @Resource - AppDeviceCtrlService appDeviceCtrlService; + AppDeviceMainFlowCtrlService appDeviceMainFlowCtrlService; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // EXT FUNC @@ -32,28 +32,28 @@ public class DeviceCtrlControler { @Operation(description = "开始工作") @PostMapping("/startWork") public ApiRet startWork() throws AppException { - appDeviceCtrlService.startWork(); + appDeviceMainFlowCtrlService.startWork(); return ApiRet.success(); } @Operation(description = "停止工作") @PostMapping("/stopWork") public ApiRet stopWork() throws AppException { - appDeviceCtrlService.stopWork(); + appDeviceMainFlowCtrlService.stopWork(); return ApiRet.success(); } @Operation(description = "暂停工作") @PostMapping("/pauseWork") public ApiRet pauseWork() throws AppException { - appDeviceCtrlService.pauseWork(); + appDeviceMainFlowCtrlService.pauseWork(); return ApiRet.success(); } @Operation(description = "继续工作") @PostMapping("/continueWork") public ApiRet continueWork() throws AppException { - appDeviceCtrlService.continueWork(); + appDeviceMainFlowCtrlService.continueWork(); return ApiRet.success(); } diff --git a/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceInitControler.java b/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceInitControler.java index 51132d8..45b8962 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceInitControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/ctrl/DeviceInitControler.java @@ -1,7 +1,6 @@ package a8k.app.controler.api.v1.app.ctrl; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; -import a8k.app.service.mainctrl.DeviceInitService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.type.exception.AppException; import a8k.app.type.ui.ApiRet; @@ -21,27 +20,27 @@ import org.springframework.web.bind.annotation.ResponseBody; @ResponseBody @RequiredArgsConstructor public class DeviceInitControler { - private final DeviceInitService deviceInitService; - private final GStateMgrService gStateMgrService; + private final AppDeviceInitCtrlService deviceInitService; + private final GStateMgrService gStateMgrService; - @Operation(description = "初始化设备") - @PostMapping("/initDevice") - public ApiRet initDevice() throws AppException { - deviceInitService.initDeviceAsync(); - return ApiRet.success(); - } + @Operation(description = "初始化设备") + @PostMapping("/initDevice") + public ApiRet initDevice() throws AppException { + deviceInitService.initDeviceAsync(); + return ApiRet.success(); + } - @Operation(description = "获取设备初始化状态") - @PostMapping("/getDeviceInitedTaskState") - public ApiRet getDeviceInitedTaskState() { - return ApiRet.success(deviceInitService.getDeviceInitedTaskState()); - } + @Operation(description = "获取设备初始化状态") + @PostMapping("/getDeviceInitedTaskState") + public ApiRet getDeviceInitedTaskState() { + return ApiRet.success(deviceInitService.getState()); + } - @Operation(description = "获取设备是否完成启动") - @PostMapping("/isBoardParamInited") - public ApiRet isBoardParamInited() { - return ApiRet.success(gStateMgrService.getBoardParamInited()); - } + @Operation(description = "获取设备是否完成启动") + @PostMapping("/isBoardParamInited") + public ApiRet isBoardParamInited() { + return ApiRet.success(gStateMgrService.getBoardParamInited()); + } } diff --git a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java index 3e6d8a4..9a2f7cf 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java @@ -1,7 +1,7 @@ package a8k.app.controler.api.v1.app.data; import a8k.app.service.data.ReactionRecordMgrService; -import a8k.app.service.peripheral.PrinterService; +import a8k.app.service.peripheral_ctrl.PrinterService; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.dao.type.db.ReactionReport; import a8k.app.type.ui.ApiRet; diff --git a/src/main/java/a8k/app/controler/api/v1/app/ws/AppWebSocketEndpointMgr.java b/src/main/java/a8k/app/controler/api/v1/app/ws/AppWebSocketEndpointMgr.java index ae9e592..217f764 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/ws/AppWebSocketEndpointMgr.java +++ b/src/main/java/a8k/app/controler/api/v1/app/ws/AppWebSocketEndpointMgr.java @@ -7,7 +7,7 @@ import a8k.app.type.appevent.AppTubeholderSettingUpdateEvent; import a8k.app.dao.type.db.AppUser; import a8k.app.service.background.AppEventBusService; import a8k.app.service.data.AppUserMgrService; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; import a8k.app.service.mainctrl.TubeHolderSettingMgrService; import a8k.app.service.statemgr.*; import a8k.app.service.background.FrontEndMessageBoxAndEventMgr; @@ -30,9 +30,9 @@ import java.util.Objects; @Slf4j public class AppWebSocketEndpointMgr { @Resource - private AppUserMgrService appUserMgrService; + private AppUserMgrService appUserMgrService; @Resource - private DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; + private AppDeviceInitCtrlService appDeviceInitCtrlService; public static class Report { @@ -187,7 +187,7 @@ public class AppWebSocketEndpointMgr { deviceContext.runMode = gstate.getDeviceRunMode(); deviceContext.loginFlag = appUserMgrService.getLoginUsr() != null; deviceContext.loginUser = appUserMgrService.getLoginUsr(); - deviceContext.deviceInitedFlag = deviceMoveToZeroCtrlService.getState().deviceInited; + deviceContext.deviceInitedFlag = appDeviceInitCtrlService.getState().deviceInited; deviceContext.fatalErrorFlag = deviceWorkStateMgrService.getDeviceWorkState().fatalErrorFlag; reportState("DeviceContext", deviceContext); } diff --git a/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java b/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java index 59ce537..5774150 100644 --- a/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java +++ b/src/main/java/a8k/app/hardware/driver/CodeScanerDriver.java @@ -27,7 +27,7 @@ public class CodeScanerDriver { } public String pipetteModCodeScannerScanCode() throws AppException { - return pipetteModCodeScannerScanCode(300); + return pipetteModCodeScannerScanCode(1000); } public void pipetteModCodeScannerStartScan() throws AppException { diff --git a/src/main/java/a8k/app/service/background/FrontEndMessageBoxAndEventMgr.java b/src/main/java/a8k/app/service/background/FrontEndMessageBoxAndEventMgr.java index f6128ed..c9050e4 100644 --- a/src/main/java/a8k/app/service/background/FrontEndMessageBoxAndEventMgr.java +++ b/src/main/java/a8k/app/service/background/FrontEndMessageBoxAndEventMgr.java @@ -52,9 +52,6 @@ public class FrontEndMessageBoxAndEventMgr { return event; //前端需要更新IDcard的状态 } else if (event instanceof AppTubeholderSettingUpdateEvent) { return null;//不再上报,直接从websocket上报消息 - } else if (event instanceof DoA8kStepActionEvent) { - // return new MessageBoxUpdateEvent(((DoA8kStepActionEvent) event).actionStepName); - return null; } /* @@ -101,10 +98,6 @@ public class FrontEndMessageBoxAndEventMgr { } synchronized void processEventInternal(AppEvent event) { - if (event instanceof DoA8kStepActionEvent e) { - pushMessageBox(new MessageBox(MessageLevel.Info, e.actionStepName)); - } - } synchronized public void onAppEvent(AppEvent event) { diff --git a/src/main/java/a8k/app/service/lowerctrl/DeviceMoveToZeroCtrlService.java b/src/main/java/a8k/app/service/mainctrl/AppDeviceInitCtrlService.java similarity index 80% rename from src/main/java/a8k/app/service/lowerctrl/DeviceMoveToZeroCtrlService.java rename to src/main/java/a8k/app/service/mainctrl/AppDeviceInitCtrlService.java index f47050f..501d506 100644 --- a/src/main/java/a8k/app/service/lowerctrl/DeviceMoveToZeroCtrlService.java +++ b/src/main/java/a8k/app/service/mainctrl/AppDeviceInitCtrlService.java @@ -1,19 +1,20 @@ -package a8k.app.service.lowerctrl; +package a8k.app.service.mainctrl; import a8k.app.hardware.driver.*; import a8k.app.hardware.type.*; +import a8k.app.service.lowerctrl.HbotMoveCtrlService; +import a8k.app.service.lowerctrl.HbotMoveExCtrlService; +import a8k.app.service.lowerctrl.TubeFeedingCtrlService; +import a8k.app.service.lowerctrl.TubePreProcesModuleCtrlService; import a8k.app.type.ui.ZAppPromopt; import a8k.app.type.ui.ZAppPromoptFormsItem; import a8k.app.type.ui.MessageLevel; import a8k.app.factory.ZAppPromoptFactory; -import a8k.app.hardware.channel.A8kCanBusService; -import a8k.app.service.background.AppEventBusService; import a8k.app.teststate.VirtualDevice; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.type.exception.AppException; import jakarta.annotation.PostConstruct; -import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -24,20 +25,15 @@ import java.util.List; @Component @Slf4j @RequiredArgsConstructor -public class DeviceMoveToZeroCtrlService { - - - private final PipetteCtrlDriverV2 pipetteCtrlDriverV2; - +public class AppDeviceInitCtrlService { public static class Checkpoint { public enum Type { - CHECK_TUBE_XCHANNEL_IS_EMPTY,//入料通道是否为空 + CHECK_TUBE_X_CHANNEL_IS_EMPTY,//入料通道是否为空 CHECK_PLATE_BOX_IS_COVER,//板夹仓盖子是否盖着 CHECK_PLATE_STUCK_DETECTOR_SENSOR1_IS_TRIGGER,//板夹仓卡板检测 CHECK_PLATE_STUCK_DETECTOR_SENSOR2_IS_TRIGGER,//板夹仓卡板检测 - - CHECK_PULLERM_IS_IN_ZEROPOS,//检查拉杆电机是否在零点位置 - CHECK_PUSHERM_IN_IN_ZEROPOS,//检查推杆电机是否在零点位置 + CHECK_PULLER_MOTOR_IS_IN_ZERO_POS,//检查拉杆电机是否在零点位置 + CHECK_PUSHER_MOTOR_IN_IN_ZERO_POS,//检查推杆电机是否在零点位置 CHECK_RECYCLE_BIN_IS_OVERFLOW,//检查垃圾箱是否满 } @@ -65,99 +61,170 @@ public class DeviceMoveToZeroCtrlService { } public static class State { - public Boolean deviceInited = false; - public Boolean isBusy = false; - public Boolean passed = false; - public ZAppPromopt promopt; + public Boolean deviceInited = false; //设备是否已经被初始化 + public Boolean isBusy = false; //是否正在初始化 + public Boolean passed = false; //设备自检是否通过 + public ZAppPromopt promopt; //设备初始化报告 } - private final GStateMgrService gstate; - - private final VirtualDevice virtualDevice; - private final AppEventBusService appEventBusService; - + private final GStateMgrService gstate; + private final VirtualDevice virtualDevice; // // Driver // - - private final A8kCanBusService canBus; - private final InputDetectDriver inputDetectDriver; - private final MiniServoDriver miniServoDriver; - private final StepMotorCtrlDriver stepMotorCtrlDriver; - private final PipetteCtrlDriverV2 pipetteCtrlDriver; - - - // - // ExDriver - // - - private final ModuleEnableCtrlDriver moduleEnableCtrlDriver; + private final InputDetectDriver inputDetectDriver; + private final MiniServoDriver miniServoDriver; + private final StepMotorCtrlDriver stepMotorCtrlDriver; + private final PipetteCtrlDriverV2 pipetteCtrlDriverV2; + private final ModuleEnableCtrlDriver moduleEnableCtrlDriver; // // Service // - private final TubeFeedingCtrlService tubeFeedingCtrlService; private final TubePreProcesModuleCtrlService tubePreProcesModuleCtrlService; private final HbotMoveExCtrlService hbotMoveExCtrlService; + private final HbotMoveCtrlService hbotMoveCtrlService; - private final HbotMoveCtrlService hbotMoveCtrlService; - - List checkPoints = new ArrayList<>(); - + private final List checkPoints = new ArrayList<>(); + private final State state = new State(); + private Thread workThread; + public List checkResults; - Thread workThread; - @Getter - State state = new State(); - public List checkResults; - - - @PostConstruct - void init() { - // checkPoints.add(new Checkpoint("检查入料通道是否为空",// - // CheckPointType.CHECK_TUBE_XCHANNEL_IS_EMPTY, () -> !inputDetectDriver.getIOState(InputIOId.THChInterPPS) && !inputDetectDriver.getIOState(InputIOId.THChOuterPPS))); - checkPoints.add(new Checkpoint("检查板夹仓盖子是否盖上",// - Checkpoint.Type.CHECK_PLATE_BOX_IS_COVER, () -> inputDetectDriver.getIOState(InputIOId.PlateBoxCoverClosurePPS))); - checkPoints.add(new Checkpoint("检测孵育盘入口是否卡板",// - Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR1_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateInletStuckPPS))); - checkPoints.add(new Checkpoint("检测孵育盘出口是否卡板",// - Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR2_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateOutletStuckPPS))); - // checkPoints.add(new Checkpoint("检查拉杆电机是否在零点位置",// - // CheckPointType.CHECK_PULLERM_IS_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PullerMZeroPPS))); - // checkPoints.add(new Checkpoint("检查推杆电机是否在零点位置",// - // CheckPointType.CHECK_PUSHERM_IN_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PusherMZeroPPS))); + synchronized public State getState() { + return state; } + + /** + * 使能所有电机 + * @throws AppException e + */ public void enableAllMotor() throws AppException { moduleEnableCtrlDriver.enableAllMotor(); } + /** + * 失能所有电机 + * @throws AppException e + */ public void disableAllMotor() throws AppException { moduleEnableCtrlDriver.forceDisableAllMotor(); } - // disableAllMiniServo - //enableAllMiniServo - + /** + * 失能所有舵机 + * @throws AppException e + */ public void disableAllMiniServo() throws AppException { for (MiniServoMId miniServoMId : MiniServoMId.values()) { miniServoDriver.miniServoEnable(miniServoMId, 0); } } + /** + * 使能所有舵机 + * @throws AppException e + */ public void enableAllMiniServo() throws AppException { for (MiniServoMId miniServoMId : MiniServoMId.values()) { miniServoDriver.miniServoEnable(miniServoMId, 1); } } - public void moveAllMotorToZero() throws AppException { + + /** + * 设备初始化(同步操作) + * @return 设备自检结果 + * @throws AppException e + */ + synchronized public List initDevice() throws AppException { + try { + return doDeviceMoveToZero(); + } catch (AppException e) { + throw e; + } + } + + /** + * 设备初始化(异步操作) + * @throws AppException e + */ + synchronized public void initDeviceAsync() throws AppException { + if (workThread != null && workThread.isAlive()) { + throw AppException.ofAECodeError("设备正在初始化中"); + } + if (!gstate.getBoardParamInited()) { + throw AppException.of(A8kEcode.DEVICE_STARTUP_IN_PROGRESS); + } + if (workThread != null) { + try { + workThread.join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + workThread = new Thread(() -> { + log.info("设备初始化开始"); + state.isBusy = true; + state.passed = false; + state.deviceInited = false; + try { + checkResults = initDevice(); + for (CheckResult checkResult : checkResults) { + if (!checkResult.pass) { + throw AppException.of(A8kEcode.APPE_DEVICE_INIT_CHECK_FAIL); + } + } + state.passed = true; + state.deviceInited = true; + state.promopt = ZAppPromoptFactory.buildNotifyPromopt("设备初始化成功"); + + } catch (AppException e) { + state.passed = false; + state.deviceInited = false; + if (e.getError().code.equals(A8kEcode.APPE_DEVICE_INIT_CHECK_FAIL)) { + state.promopt = buildAppPromopt(checkResults); + } else { + state.promopt = ZAppPromoptFactory.buildAppPromopt(e); + } + } + state.isBusy = false; + log.info("设备初始化结束"); + }); + workThread.start(); + } + + //****************************************************************************************** + // PRIVATE + //****************************************************************************************** + + + @PostConstruct + private void init() { + // checkPoints.add(new Checkpoint("检查入料通道是否为空",// + // CheckPointType.CHECK_TUBE_XCHANNEL_IS_EMPTY, () -> !inputDetectDriver.getIOState(InputIOId.THChInterPPS) && !inputDetectDriver.getIOState(InputIOId.THChOuterPPS))); + checkPoints.add(new Checkpoint("检查板夹仓盖子是否盖上",// + Checkpoint.Type.CHECK_PLATE_BOX_IS_COVER, () -> inputDetectDriver.getIOState(InputIOId.PlateBoxCoverClosurePPS))); + checkPoints.add(new Checkpoint("检测孵育盘入口是否卡板",// + Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR1_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateInletStuckPPS))); + checkPoints.add(new Checkpoint("检测孵育盘出口是否卡板",// + Checkpoint.Type.CHECK_PLATE_STUCK_DETECTOR_SENSOR2_IS_TRIGGER, () -> !inputDetectDriver.getIOState(InputIOId.IncubationPlateOutletStuckPPS))); + // checkPoints.add(new Checkpoint("检查拉杆电机是否在零点位置",// + // CheckPointType.CHECK_PULLERM_IS_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PullerMZeroPPS))); + // checkPoints.add(new Checkpoint("检查推杆电机是否在零点位置",// + // CheckPointType.CHECK_PUSHERM_IN_IN_ZEROPOS, () -> inputDetectDriver.getIOState(InputIOId.PusherMZeroPPS))); + + } + + + private void moveAllMotorToZero() throws AppException { moduleEnableCtrlDriver.enableAllMotor(); try { log.info("HbotZ轴回零"); - pipetteCtrlDriver.zMotorMoveZeroBlock(); + pipetteCtrlDriverV2.zMotorMoveZeroBlock(); log.info("HBot回零"); hbotMoveCtrlService.moveToZero(); //进出料初始化 @@ -206,16 +273,8 @@ public class DeviceMoveToZeroCtrlService { }//HBot初始化 } - Boolean firstInit = true; - void doSomeThingWhenError() throws AppException { - stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); - stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, 5); - moduleEnableCtrlDriver.forceDisableAllMotor(); - } - - - List doDeviceMoveToZero() throws AppException { + private List doDeviceMoveToZero() throws AppException { List results = checkBeforeInitDevice(); if (virtualDevice.isEnable()) { @@ -234,11 +293,6 @@ public class DeviceMoveToZeroCtrlService { moveAllMotorToZero(); - - //弹出无效物料 - if (firstInit) { - firstInit = false; - } //弹出试管架 tubeFeedingCtrlService.ejectTubeHolder(); tubeFeedingCtrlService.moveTubeRackMoveToEnterPos(); @@ -256,78 +310,6 @@ public class DeviceMoveToZeroCtrlService { } - // - - synchronized public List initDevice() throws AppException { - try { - return doDeviceMoveToZero(); - } catch (AppException e) { - //释放试管夹爪 - // doSomeThingWhenError(); - throw e; - } - } - - - synchronized public void initDeviceWithException() throws AppException { - List results = initDevice(); - for (CheckResult result : results) { - if (!result.pass) { - throw AppException.ofAECodeError("设备初始化失败: check " + result.info + " fail"); - } - } - } - - synchronized public State getState() { - return state; - } - - - synchronized public void initDeviceAsync() throws AppException { - if (workThread != null && workThread.isAlive()) { - throw AppException.ofAECodeError("设备正在初始化中"); - } - if (!gstate.getBoardParamInited()) { - throw AppException.of(A8kEcode.DEVICE_STARTUP_IN_PROGRESS); - } - if (workThread != null) { - try { - workThread.join(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - workThread = new Thread(() -> { - log.info("设备初始化开始"); - state.isBusy = true; - state.passed = false; - state.deviceInited = false; - try { - checkResults = initDevice(); - for (CheckResult checkResult : checkResults) { - if (!checkResult.pass) { - throw AppException.of(A8kEcode.APPE_DEVICE_INIT_CHECK_FAIL); - } - } - state.passed = true; - state.deviceInited = true; - state.promopt = ZAppPromoptFactory.buildNotifyPromopt("设备初始化成功"); - - } catch (AppException e) { - state.passed = false; - state.deviceInited = false; - if (e.getError().code.equals(A8kEcode.APPE_DEVICE_INIT_CHECK_FAIL)) { - state.promopt = buildAppPromopt(checkResults); - } else { - state.promopt = ZAppPromoptFactory.buildAppPromopt(e); - } - } - state.isBusy = false; - log.info("设备初始化结束"); - }); - workThread.start(); - } - private static ZAppPromopt buildAppPromopt(List checkResults) { List detailInfos = new ArrayList<>(); diff --git a/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java b/src/main/java/a8k/app/service/mainctrl/AppDeviceMainFlowCtrlService.java similarity index 95% rename from src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java rename to src/main/java/a8k/app/service/mainctrl/AppDeviceMainFlowCtrlService.java index 3c125d8..802c626 100644 --- a/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java +++ b/src/main/java/a8k/app/service/mainctrl/AppDeviceMainFlowCtrlService.java @@ -2,7 +2,6 @@ package a8k.app.service.mainctrl; import a8k.app.engineer.service.qatest.EngineerModeActionCtrlService; import a8k.app.hardware.type.A8kEcode; -import a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler; import a8k.app.service.statemgr.DeviceWorkStateMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.type.exception.AppException; @@ -12,7 +11,7 @@ import org.springframework.stereotype.Component; @Component @Slf4j -public class AppDeviceCtrlService { +public class AppDeviceMainFlowCtrlService { @Resource GStateMgrService gstate; diff --git a/src/main/java/a8k/app/service/mainctrl/DeviceInitService.java b/src/main/java/a8k/app/service/mainctrl/DeviceInitService.java deleted file mode 100644 index c158cde..0000000 --- a/src/main/java/a8k/app/service/mainctrl/DeviceInitService.java +++ /dev/null @@ -1,23 +0,0 @@ -package a8k.app.service.mainctrl; - -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; -import a8k.app.type.exception.AppException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -@Slf4j -public class DeviceInitService { - private final DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; - - public void initDeviceAsync() throws AppException { - log.info("开始初始化设备"); - deviceMoveToZeroCtrlService.initDeviceAsync(); - } - - public DeviceMoveToZeroCtrlService.State getDeviceInitedTaskState() { - return deviceMoveToZeroCtrlService.getState(); - } -} diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java b/src/main/java/a8k/app/service/mainctrl/MainFlowCtrlScheduler.java similarity index 93% rename from src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java rename to src/main/java/a8k/app/service/mainctrl/MainFlowCtrlScheduler.java index 637d98f..58a23ae 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java +++ b/src/main/java/a8k/app/service/mainctrl/MainFlowCtrlScheduler.java @@ -1,7 +1,6 @@ -package a8k.app.service.mainctrl.mainflowctrl; +package a8k.app.service.mainctrl; import a8k.OS; -import a8k.SpringBootBeanUtil; import a8k.app.engineer.service.state.EngineerModeStateMgrService; import a8k.app.engineer.service.type.EngineerWorkState; import a8k.app.service.module.*; @@ -9,30 +8,21 @@ import a8k.app.service.statemgr.*; import a8k.app.type.DeviceRunMode; //import a8k.app.a8ktype.appevent.A8kErrorsPromptEvent; import a8k.app.type.a8k.state.enumtype.A8kWorkTaskType; -import a8k.app.type.error.AECodeError; import a8k.app.type.error.AppError; import a8k.app.type.exception.AppException; import a8k.app.type.a8k.state.enumtype.A8kWorkState; import a8k.app.factory.ZAppPromoptFactory; -import a8k.app.hardware.driver.ModuleEnableCtrlDriver; import a8k.app.hardware.type.A8kEcode; import a8k.app.service.background.AppEventBusService; import a8k.app.service.utils.UISender; -import a8k.app.service.mainctrl.TubeHolderSettingMgrService; -import a8k.app.service.mainctrl.mainflowctrl.base.*; -import a8k.app.utils.ZStringUtils; import a8k.app.utils.ZWorkThread; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.NotNull; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Component @Slf4j diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/A8kActionTask.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/A8kActionTask.java deleted file mode 100644 index fe32774..0000000 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/A8kActionTask.java +++ /dev/null @@ -1,33 +0,0 @@ -package a8k.app.service.mainctrl.mainflowctrl.base; - - -import a8k.app.type.error.AppError; -import lombok.Data; - -import java.util.ArrayList; -import java.util.List; - -@Data -public class A8kActionTask { - - public A8kActionTask() { - ; - } - - public Boolean isReady() { - return false; - } - - // 串行 - public List doAction() { - return new ArrayList<>(); - } - - public String toString() { - return this.getClass().getSimpleName(); - } - - public String toDisplayString() { - return this.getClass().getSimpleName(); - } -} diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/AppActionErrorContext.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/AppActionErrorContext.java deleted file mode 100644 index 71d9666..0000000 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/AppActionErrorContext.java +++ /dev/null @@ -1,31 +0,0 @@ -package a8k.app.service.mainctrl.mainflowctrl.base; - -import a8k.app.type.error.AppError; - -import java.util.List; - -public class AppActionErrorContext { - public A8kActionTask dowhat; - public AppError ecode; - - public AppActionErrorContext(A8kActionTask dowhat, AppError ecode) { - this.dowhat = dowhat; - this.ecode = ecode; - } - - public Boolean equals(AppActionErrorContext other) { - return this.dowhat.equals(other.dowhat) && this.ecode.code.equals(other.ecode.code); - } - - public String toString() { - return String.format("[%s:%s]", dowhat, ecode); - } - - static public AppActionErrorContext of(A8kActionTask type, AppError error) { - return new AppActionErrorContext(type, error); - } - - static public List ofList(A8kActionTask type, List errors) { - return errors.stream().map(error -> new AppActionErrorContext(type, error)).toList(); - } -} diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/IMainFlowStateChangeProcesser.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/IMainFlowStateChangeProcesser.java deleted file mode 100644 index 4086f73..0000000 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/IMainFlowStateChangeProcesser.java +++ /dev/null @@ -1,14 +0,0 @@ -package a8k.app.service.mainctrl.mainflowctrl.base; - -import a8k.app.type.exception.AppException; - -public interface IMainFlowStateChangeProcesser { - - void onStop() throws AppException; - - void onPause() throws AppException; - - void onResume() throws AppException; - - void onStart() throws AppException; -} diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/MainFlowProcesser.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/MainFlowProcesser.java deleted file mode 100644 index 1ec9c9a..0000000 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/MainFlowProcesser.java +++ /dev/null @@ -1,13 +0,0 @@ -package a8k.app.service.mainctrl.mainflowctrl.base; - - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface MainFlowProcesser { - -} diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java deleted file mode 100644 index 26cc62f..0000000 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java +++ /dev/null @@ -1,99 +0,0 @@ -package a8k.app.service.mainctrl.mainflowctrl.processer; - -import a8k.app.service.mainctrl.mainflowctrl.base.IMainFlowStateChangeProcesser; -import a8k.app.service.mainctrl.mainflowctrl.base.MainFlowProcesser; -import a8k.app.service.module.TipOperationCtrlModule; -import a8k.app.service.statemgr.*; -import a8k.app.type.a8k.state.IncubationSubTank; -import a8k.app.type.a8k.state.enumtype.IncubationSubTankState; -import a8k.app.service.lowerctrl.HbotMoveExCtrlService; -import a8k.app.service.lowerctrl.OptScanModuleCtrlService; -import a8k.app.service.lowerctrl.TubeFeedingCtrlService; -import a8k.app.teststate.VirtualDevice; -import a8k.app.type.exception.AppException; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -@MainFlowProcesser -public class MainFlowStateChangeProcesser implements IMainFlowStateChangeProcesser { - - @Resource - VirtualDevice virtualDevice; - - @Resource - TubeFeedingCtrlService tubeFeedingCtrlService; - @Resource - HbotMoveExCtrlService hbotMoveExCtrlService; - @Resource - OptScanModuleCtrlService optScanModuleCtrlService; - @Resource - IncubationPlateStateMgr incubationPlateStateMgr; - @Resource - TubeStateMgr tubeStateMgrService; - @Resource - ConsumablesMgrService consumablesMgrService; - @Resource - TipOperationCtrlModule tipOperationCtrlModule; - - @Autowired - private DeviceWorkStateMgrService deviceWorkStateMgrService; - - void ejectAllPlates() throws AppException { - var tanks = incubationPlateStateMgr.get().subtanks; - for (IncubationSubTank tank : tanks) { - if (!tank.state.equals(IncubationSubTankState.EMPTY)) { - optScanModuleCtrlService.pullPlate(tank.getPos()); - optScanModuleCtrlService.dropPlate(); - } - } - } - - void doClearDevice() throws AppException { - if (virtualDevice.isEnable()) { - virtualDevice.doVirtualThings("清空设备"); - return; - } - //光学模组清空 - optScanModuleCtrlService.dropPlate(); - //弹出所有孵育盘 - ejectAllPlates(); - //弹出试管架 - tubeFeedingCtrlService.ejectTubeHolder(); - //丢弃tip头 - tipOperationCtrlModule.dropTip(); - //hbot快速归零 - hbotMoveExCtrlService.moveQuickToZero(); - } - - @Override - public void onStop() throws AppException { - //物理清空设备 - if (!deviceWorkStateMgrService.getDeviceWorkState().fatalErrorFlag) { - //如果发生了致命错误,不执行物理操作 - doClearDevice(); - } - //清空孵育盘状态 - incubationPlateStateMgr.resetAll(); - //清空试管状态 - tubeStateMgrService.resetAll(); - //恢复耗材预定状态 - consumablesMgrService.bakAllReserveConsumable(); - } - - @Override - public void onPause() throws AppException { - } - - @Override - public void onResume() throws AppException { - } - - @Override - public void onStart() throws AppException { - - } -} diff --git a/src/main/java/a8k/app/service/module/SamplePreProcessModule.java b/src/main/java/a8k/app/service/module/SamplePreProcessModule.java index ba65545..c45db13 100644 --- a/src/main/java/a8k/app/service/module/SamplePreProcessModule.java +++ b/src/main/java/a8k/app/service/module/SamplePreProcessModule.java @@ -6,7 +6,7 @@ import a8k.app.engineer.service.type.A8kCmdRunnable; import a8k.app.factory.AppErrorFactory; import a8k.app.service.lowerctrl.*; import a8k.app.service.mainctrl.erroranalyzer.ErrorProcessor; -import a8k.app.service.mainctrl.mainflowctrl.base.BoolCondition; +import a8k.app.type.BoolCondition; import a8k.app.service.module.bean.SamplePreProcessModuleState; import a8k.app.service.statemgr.*; import a8k.app.service.utils.UISender; diff --git a/src/main/java/a8k/app/service/peripheral/PrinterService.java b/src/main/java/a8k/app/service/peripheral_ctrl/PrinterService.java similarity index 93% rename from src/main/java/a8k/app/service/peripheral/PrinterService.java rename to src/main/java/a8k/app/service/peripheral_ctrl/PrinterService.java index de70caf..01b26ff 100644 --- a/src/main/java/a8k/app/service/peripheral/PrinterService.java +++ b/src/main/java/a8k/app/service/peripheral_ctrl/PrinterService.java @@ -1,4 +1,4 @@ -package a8k.app.service.peripheral; +package a8k.app.service.peripheral_ctrl; import a8k.app.dao.type.db.ProjExtInfoCard; import a8k.app.dao.type.db.ReactionReport; @@ -7,14 +7,7 @@ import a8k.app.optalgo.type.ReactionResultStatus; import a8k.app.service.data.ProjInfoMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.type.a8k.BloodType; -import a8k.app.type.a8k.opt.A8kOptType; -import a8k.app.type.a8k.opt.OptScanResult; import a8k.app.type.a8k.proj.A8kResultUnit; -import a8k.app.type.a8k.proj.ProjInfo; -import a8k.app.type.a8k.state.SampleInfo; -import a8k.app.type.exception.AppException; -import a8k.extui.factory.FakeOptScanResultFactory; -import a8k.extui.factory.ProjExtInfoCardFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/app/service/statemgr/DeviceWorkStateMgrService.java b/src/main/java/a8k/app/service/statemgr/DeviceWorkStateMgrService.java index b9280e5..bdb0809 100644 --- a/src/main/java/a8k/app/service/statemgr/DeviceWorkStateMgrService.java +++ b/src/main/java/a8k/app/service/statemgr/DeviceWorkStateMgrService.java @@ -1,6 +1,5 @@ package a8k.app.service.statemgr; -import a8k.app.service.mainctrl.mainflowctrl.base.AppActionErrorContext; import a8k.app.type.a8k.state.DeviceWorkState; import a8k.app.type.a8k.state.enumtype.A8kWorkState; import a8k.app.type.a8k.state.enumtype.A8kWorkTaskType; @@ -23,15 +22,6 @@ public class DeviceWorkStateMgrService { return deviceWorkState; } - - synchronized public void addError(List errorList) { - deviceWorkState.ecodeList.addAll(errorList); - } - - synchronized public void addError(AppActionErrorContext error) { - deviceWorkState.ecodeList.add(error); - } - synchronized public Boolean isMayHaveNewTubeHolder() { return deviceWorkState.mayHaveNewTubeHolder; } @@ -73,7 +63,7 @@ public class DeviceWorkStateMgrService { synchronized public void clearFatalErrorFlag() { gstate.clearFatalError(); - deviceWorkState.ecodeList.clear(); + deviceWorkState.fatalErrorFlag = false; } synchronized public void setConsumeNotEnoughErrorFlag() { diff --git a/src/main/java/a8k/app/service/statemgr/consumables_mgr/TipStateMgr.java b/src/main/java/a8k/app/service/statemgr/consumables_mgr/TipStateMgr.java index 34174f8..51fd938 100644 --- a/src/main/java/a8k/app/service/statemgr/consumables_mgr/TipStateMgr.java +++ b/src/main/java/a8k/app/service/statemgr/consumables_mgr/TipStateMgr.java @@ -7,6 +7,7 @@ import a8k.app.type.a8k.container.TipContainer; import a8k.app.type.a8k.pos.TipGroupPos; import a8k.app.type.a8k.pos.TipPos; import a8k.app.type.exception.AppException; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -19,6 +20,14 @@ public class TipStateMgr { public TipContainer[] tips = new TipContainer[3]; + @PostConstruct + void init() { + for (int i = 0; i < tips.length; i++) { + tips[i] = new TipContainer(); + tips[i].tipNum = 0; + } + } + /** * 申请Tip * @return Tip坐标 @@ -55,6 +64,7 @@ public class TipStateMgr { if (num > AppConstant.TIP_NUM) { throw AppException.of(A8kEcode.CODEERROR, "设置Tip数量超出范围"); } + log.info("setTipNum: group={}, num={}", group, num); tips[group.ordinal()].tipNum = num; } diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/BoolCondition.java b/src/main/java/a8k/app/type/BoolCondition.java similarity index 94% rename from src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/BoolCondition.java rename to src/main/java/a8k/app/type/BoolCondition.java index 5e9ab53..772b12d 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/base/BoolCondition.java +++ b/src/main/java/a8k/app/type/BoolCondition.java @@ -1,4 +1,4 @@ -package a8k.app.service.mainctrl.mainflowctrl.base; +package a8k.app.type; import a8k.OS; import a8k.app.type.exception.ZAppInterruptException; diff --git a/src/main/java/a8k/app/type/a8k/state/DeviceWorkState.java b/src/main/java/a8k/app/type/a8k/state/DeviceWorkState.java index 360d7ca..bca292b 100644 --- a/src/main/java/a8k/app/type/a8k/state/DeviceWorkState.java +++ b/src/main/java/a8k/app/type/a8k/state/DeviceWorkState.java @@ -1,6 +1,5 @@ package a8k.app.type.a8k.state; -import a8k.app.service.mainctrl.mainflowctrl.base.AppActionErrorContext; import a8k.app.type.a8k.state.enumtype.A8kWorkState; import a8k.app.type.a8k.state.enumtype.A8kWorkTaskType; import a8k.app.utils.ZJsonHelper; @@ -15,23 +14,19 @@ import java.util.List; public class DeviceWorkState implements Serializable { @Schema(description = "设备工作状态") - public A8kWorkState workState = A8kWorkState.IDLE; // + public A8kWorkState workState = A8kWorkState.IDLE; // @Schema(description = "设备运行任务类型") - public A8kWorkTaskType workTaskType = A8kWorkTaskType.None; //当前工作任务类型 + public A8kWorkTaskType workTaskType = A8kWorkTaskType.None; //当前工作任务类型 @Schema(description = "设备错误标志") - public Boolean fatalErrorFlag = false; //错误标志 - @Schema(description = "错误列表") - public List ecodeList = new ArrayList<>(); + public Boolean fatalErrorFlag = false; //错误标志 @Schema(description = "当前状态是否切换完成") public Boolean isPending() { return stopActionPending || pauseActionPending || resumeActionPending || startActionPending; } - - public Boolean consumeNotEnoughErrorFlag = false; - - public Boolean tipNotEnoughErrorFlag = false; + public Boolean consumeNotEnoughErrorFlag = false; //耗材不足标识位 + public Boolean tipNotEnoughErrorFlag = false; //tip不足标识位 /** * diff --git a/src/main/java/a8k/app/type/appevent/DoA8kStepActionEvent.java b/src/main/java/a8k/app/type/appevent/DoA8kStepActionEvent.java deleted file mode 100644 index 929722b..0000000 --- a/src/main/java/a8k/app/type/appevent/DoA8kStepActionEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package a8k.app.type.appevent; - -import a8k.app.service.mainctrl.mainflowctrl.base.A8kActionTask; - -public class DoA8kStepActionEvent extends AppEvent { - public A8kActionTask actionStep; - public String actionStepName; - - public DoA8kStepActionEvent(A8kActionTask actionStep) { - super(DoA8kStepActionEvent.class.getSimpleName()); - this.actionStep = actionStep; - this.actionStepName = actionStep.toDisplayString(); - } - - public String toString() { - return actionStep.toString(); - } -} diff --git a/src/main/java/a8k/app/utils/ActionTaskPool.java b/src/main/java/a8k/app/utils/ActionTaskPool.java index 937e20a..a53abdc 100644 --- a/src/main/java/a8k/app/utils/ActionTaskPool.java +++ b/src/main/java/a8k/app/utils/ActionTaskPool.java @@ -5,7 +5,7 @@ import a8k.app.type.error.AECodeError; import a8k.app.type.error.AppError; import a8k.app.type.exception.AppException; import a8k.app.hardware.type.A8kEcode; -import a8k.app.service.mainctrl.mainflowctrl.base.BoolCondition; +import a8k.app.type.BoolCondition; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 1bbb42a..3000a5d 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -94,7 +94,7 @@ public class ExtApiPageGroupCfgMgr { new Menu(ReactionRecordMgrDebugPage.class, "反应记录") )), new Menu(A8kSubModuleParameterInitDebugPage.class, "子模块初始化参数"), - new Menu(A8kSubModuleConfigDebugPage.class, "子模块配置初始化"), + new Menu(A8kSubModuleConfigDebugPage.class, "子模块配置初始化(移液枪专用)"), new Menu("坐标设置", ZList.of( new Menu(DeviceActionParameterSettingPage.class, "设备动作参数设置"), new Menu(P02TubeFeedingModulePosCalibrationPage.class, "试管入料设置"), diff --git a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java b/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java index c20c401..5f767a1 100644 --- a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java +++ b/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java @@ -2,8 +2,8 @@ package a8k.extui.page.debug; import a8k.app.service.background.SensorDataUpdateService; import a8k.app.service.background.TemperatureCtrlService; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; -import a8k.app.service.mainctrl.AppDeviceCtrlService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; +import a8k.app.service.mainctrl.AppDeviceMainFlowCtrlService; import a8k.app.service.statemgr.DeviceWorkStateMgrService; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.type.a8k.state.DeviceWorkState; @@ -30,16 +30,16 @@ public class P00MainflowCtrlServiceDebugPage { @Resource DeviceWorkStateMgrService deviceWorkStateMgrService; @Resource - GStateMgrService gStateMgrService; + GStateMgrService gStateMgrService; // // Ctrl // @Resource - AppDeviceCtrlService appDeviceCtrlService; + AppDeviceMainFlowCtrlService appDeviceMainFlowCtrlService; @Resource - DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; + AppDeviceInitCtrlService appDeviceInitCtrlService; @Resource - TemperatureCtrlService temperatureCtrlService; + TemperatureCtrlService temperatureCtrlService; @Resource SensorDataUpdateService sensorDataUpdateService; @@ -63,19 +63,19 @@ public class P00MainflowCtrlServiceDebugPage { public void start() throws AppException { - appDeviceCtrlService.startWork(); + appDeviceMainFlowCtrlService.startWork(); } public void stop() throws AppException { - appDeviceCtrlService.stopWork(); + appDeviceMainFlowCtrlService.stopWork(); } public void pause() throws AppException { - appDeviceCtrlService.pauseWork(); + appDeviceMainFlowCtrlService.pauseWork(); } public void continueWork() throws AppException { - appDeviceCtrlService.continueWork(); + appDeviceMainFlowCtrlService.continueWork(); } public ExtApiCurve getIncubateBoxTemperatureCurve() { diff --git a/src/main/java/a8k/extui/page/driver/PrinterDebugPage.java b/src/main/java/a8k/extui/page/driver/PrinterDebugPage.java index 815878c..783c938 100644 --- a/src/main/java/a8k/extui/page/driver/PrinterDebugPage.java +++ b/src/main/java/a8k/extui/page/driver/PrinterDebugPage.java @@ -2,11 +2,10 @@ package a8k.extui.page.driver; import a8k.OS; import a8k.app.hardware.channel.PrinterUartChannel; -import a8k.app.service.peripheral.PrinterService; +import a8k.app.service.peripheral_ctrl.PrinterService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtUIPageCfg; import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java b/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java index 5183209..3964381 100644 --- a/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java +++ b/src/main/java/a8k/extui/page/extapp/A8kOptVerification.java @@ -6,7 +6,7 @@ import a8k.app.type.a8k.opt.OptScanResult; import a8k.app.type.a8k.BloodType; import a8k.app.type.a8k.state.SampleInfo; import a8k.app.dao.type.db.ProjExtInfoCard; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; import a8k.extui.factory.A8kScanCurveFactory; import a8k.app.service.data.ProjIdCardInfoMgrService; import a8k.app.type.a8k.proj.ProjInfo; @@ -38,7 +38,7 @@ import java.util.Map; public class A8kOptVerification { @Resource - DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; + AppDeviceInitCtrlService appDeviceInitCtrlService; @Resource PlateBoxCtrlService plateBoxCtrlService; @@ -82,8 +82,6 @@ public class A8kOptVerification { @PostConstruct void init() throws NoSuchMethodException { ExtUIPageCfg page = new ExtUIPageCfg(this); - page.newGroup("测试工具"); - page.addFunction("测试初始化", this::testInit); page.newGroup("环境配置"); page.addFunction("设置血液类型", this::setBloodType); @@ -104,11 +102,6 @@ public class A8kOptVerification { page.addFunction("进行一次光学扫描(自动推板,丢板)", this::autoScanAndDownloadScanResult); extApiPageMgr.addPage(page); } - - public void testInit() throws AppException { - deviceMoveToZeroCtrlService.initDeviceWithException(); - } - public Map getProjInfoBreifList() throws AppException { var allproj = projInfoMgrService.getAllProjBuildInInfo(); Map result = new java.util.HashMap<>(); diff --git a/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java b/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java index b34f636..f8cb0d4 100644 --- a/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java +++ b/src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java @@ -5,7 +5,6 @@ import a8k.app.optalgo.type.A8kOptPeakInfo; import a8k.app.service.data.ProjInfoMgrService; import a8k.app.type.a8k.ConsumableGroup; import a8k.app.type.a8k.pos.IncubatorPos; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; import a8k.extui.factory.A8kScanCurveFactory; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ret.A8kScanCurve; @@ -46,7 +45,6 @@ public class OptModuleParamCalibration { private final OptModuleExtParamsMgr optModuleExtParamsMgr; private final PlateBoxCtrlService plateBoxCtrlService; private final OptScanModuleCtrlService optScanModuleCtrlService; - private final DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; private final ProjInfoMgrService projInfoMgrService; @@ -68,10 +66,6 @@ public class OptModuleParamCalibration { return desc; } - public void deviceReset() throws AppException { - deviceMoveToZeroCtrlService.initDeviceWithException(); - } - // // 辅助方法 @@ -205,7 +199,6 @@ public class OptModuleParamCalibration { var page = extApiPageMgr.newPage(this); page.newGroup("基础"); - page.addFunction("设备初始化", this::deviceReset); page.addFunction("推板到光学模组", this::pushOnePlateToOptModule); page.addFunction("丢板", this::dropPlate); diff --git a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java index 63002e5..f34fe0e 100644 --- a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java +++ b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java @@ -1,6 +1,6 @@ package a8k.extui.page.extsetting.db; -import a8k.app.service.peripheral.PrinterService; +import a8k.app.service.peripheral_ctrl.PrinterService; import a8k.app.type.exception.AppException; import a8k.app.optalgo.type.ReactionResultStatus; import a8k.app.controler.filemgr.StorageControler; diff --git a/src/main/java/a8k/extui/page/init/DeviceInitPage.java b/src/main/java/a8k/extui/page/init/DeviceInitPage.java index 1a8b343..c484a8a 100644 --- a/src/main/java/a8k/extui/page/init/DeviceInitPage.java +++ b/src/main/java/a8k/extui/page/init/DeviceInitPage.java @@ -3,7 +3,7 @@ package a8k.extui.page.init; import a8k.app.service.statemgr.DeviceWorkStateMgrService; import a8k.app.type.DeviceRunMode; import a8k.app.type.exception.AppException; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; import a8k.app.service.statemgr.GStateMgrService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtApiStatu; @@ -23,11 +23,9 @@ public class DeviceInitPage { @Resource - DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; + AppDeviceInitCtrlService appDeviceInitCtrlService; private final DeviceWorkStateMgrService deviceWorkStateMgrService; - - @ExtApiStatu(name = "", group = "设备工作模式", order = 1) public String getDeviceRunMode() { if (gstate.getDeviceRunMode() == DeviceRunMode.RealMode) { @@ -76,36 +74,31 @@ public class DeviceInitPage { } - public String moveAllStepMotorToZero() throws AppException { - deviceMoveToZeroCtrlService.moveAllMotorToZero(); - return "SUCCESS"; - } - public String disableAll() throws AppException { - deviceMoveToZeroCtrlService.disableAllMotor(); + appDeviceInitCtrlService.disableAllMotor(); return "已失能所有电机"; } public String enableAll() throws AppException { - deviceMoveToZeroCtrlService.enableAllMotor(); + appDeviceInitCtrlService.enableAllMotor(); return "已使能所有电机"; } public String disableAllMiniServo() throws AppException { - deviceMoveToZeroCtrlService.disableAllMiniServo(); + appDeviceInitCtrlService.disableAllMiniServo(); return "已失能所有舵机"; } public String enableAllMiniServo() throws AppException { - deviceMoveToZeroCtrlService.enableAllMiniServo(); + appDeviceInitCtrlService.enableAllMiniServo(); return "已使能所有舵机"; } - public List initializeDevice() throws AppException { - var ret = deviceMoveToZeroCtrlService.initDevice(); - List errorList = new java.util.ArrayList<>(); + public List initializeDevice() throws AppException { + var ret = appDeviceInitCtrlService.initDevice(); + List errorList = new java.util.ArrayList<>(); for (var checkResult : ret) { if (!checkResult.pass) { errorList.add(checkResult); @@ -135,7 +128,6 @@ public class DeviceInitPage { page.addFunction("清空设备严重错误状态", this::clearFatalError); page.newGroup("电机使能"); - page.addFunction("电机归零", this::moveAllStepMotorToZero); page.addFunction("使能所有电机", this::enableAll); page.addFunction("失能所有电机", this::disableAll); diff --git a/src/main/java/a8k/extui/page/test/verification/HbotCodeScanPosVerificationPage.java b/src/main/java/a8k/extui/page/test/verification/HbotCodeScanPosVerificationPage.java index 4c5b86f..1170d0a 100644 --- a/src/main/java/a8k/extui/page/test/verification/HbotCodeScanPosVerificationPage.java +++ b/src/main/java/a8k/extui/page/test/verification/HbotCodeScanPosVerificationPage.java @@ -1,29 +1,16 @@ package a8k.extui.page.test.verification; -import a8k.app.dao.type.db.ProjExtInfoCard; import a8k.app.hardware.driver.CodeScanerDriver; -import a8k.app.hardware.type.A8kEcode; -import a8k.app.i18n.Internationalization; -import a8k.app.service.background.ProjIDCardCtrlAndMonitorService; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; -import a8k.app.service.lowerctrl.HbotMoveCtrlService; import a8k.app.service.lowerctrl.HbotMoveExCtrlService; -import a8k.app.service.param.hbotpos.Hbot2DCodeScanParamMgr; import a8k.app.type.a8k.ConsumableGroup; import a8k.app.type.exception.AppException; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtUIPageCfg; -import com.fasterxml.jackson.annotation.JsonInclude; import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.List; - import static a8k.OS.threadSleep; @Component diff --git a/src/main/java/a8k/extui/page/test/verification/P10ProjejIDCardTestPage.java b/src/main/java/a8k/extui/page/test/verification/P10ProjejIDCardTestPage.java index 1e7f320..97c88b2 100644 --- a/src/main/java/a8k/extui/page/test/verification/P10ProjejIDCardTestPage.java +++ b/src/main/java/a8k/extui/page/test/verification/P10ProjejIDCardTestPage.java @@ -5,7 +5,7 @@ import a8k.app.dao.type.db.ProjExtInfoCard; import a8k.app.hardware.type.A8kEcode; import a8k.app.i18n.Internationalization; import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService; +import a8k.app.service.mainctrl.AppDeviceInitCtrlService; import a8k.app.service.background.ProjIDCardCtrlAndMonitorService; import a8k.extui.mgr.ExtApiPageMgr; import a8k.extui.type.ExtUIPageCfg; @@ -22,9 +22,9 @@ import java.util.List; @Slf4j public class P10ProjejIDCardTestPage { @Resource - ExtApiPageMgr extApiPageMgr; + ExtApiPageMgr extApiPageMgr; @Resource - DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService; + AppDeviceInitCtrlService appDeviceInitCtrlService; @Resource ProjIDCardCtrlAndMonitorService projIDCardCtrlAndMonitorService;