diff --git a/src/main/java/a8k/app/service/background/TemperatureSyncService.java b/src/main/java/a8k/app/service/background/TemperatureSyncService.java index a48291a..c0b031c 100644 --- a/src/main/java/a8k/app/service/background/TemperatureSyncService.java +++ b/src/main/java/a8k/app/service/background/TemperatureSyncService.java @@ -7,6 +7,7 @@ import a8k.app.iflytophald.driver.OutputIOCtrlDriver; import a8k.app.iflytophald.driver.WaterTemperatureControllerDriver; import a8k.app.iflytophald.type.protocol.InputIOId; import a8k.app.iflytophald.type.protocol.TemperatureControlerMid; +import a8k.app.service.setting.AppSettingsMgrService; import a8k.app.service.statemgr.AppFlagStateMgr; import a8k.app.service.statemgr.GStateMgrService; import a8k.app.service.statemgr.OptScanModuleStateMgr; @@ -33,6 +34,7 @@ public class TemperatureSyncService { private final GStateMgrService gStateMgrService; private final WaterTemperatureControllerDriver waterTemperatureControllerDriver; private final A8kCanBusBaseDriver canBus; + private final AppSettingsMgrService appSettingsMgrService; List incubateBoxTemperatureCurve = new ArrayList<>(); @@ -104,24 +106,32 @@ public class TemperatureSyncService { } try { - Double incubateBoxTemp = waterTemperatureControllerDriver.readTemperature(TemperatureControlerMid.IncubatorTCM); - gStateMgrService.updateIncubateBoxTemperature((int) (incubateBoxTemp + 0.5)); + Double incubateBoxTemp = waterTemperatureControllerDriver.readTemperature(TemperatureControlerMid.IncubatorTCM); + double incubateBoxTempTarget = (double) appSettingsMgrService.getDeviceSetting().getIncubateBoxTemperature(); + gStateMgrService.updateIncubateBoxTemperature((int) (incubateBoxTemp + 0.5), isTempReady(incubateBoxTemp, incubateBoxTempTarget)); addIncubateBoxTemperatureCurve(incubateBoxTemp); } catch (AppException e) { addIncubateBoxTemperatureCurve(0.0); - gStateMgrService.updateIncubateBoxTemperature(0); + gStateMgrService.updateIncubateBoxTemperature(0, false); log.warn("Failed to read incubate box temperature: {}", e.getMessage()); } - try { - Double pbtemp = waterTemperatureControllerDriver.readTemperature(TemperatureControlerMid.PlatesBoxTCM); - gStateMgrService.updatePboxTemperature((int) (pbtemp + 0.5)); - addPlateBoxTemperatureCurve(pbtemp); + Double pbtemp = waterTemperatureControllerDriver.readTemperature(TemperatureControlerMid.PlatesBoxTCM); + double pbtempTarget = (double) appSettingsMgrService.getDeviceSetting().getPlateBoxTemperature(); + + gStateMgrService.updatePboxTemperature((int) (pbtemp + 0.5), isTempReady(pbtemp, pbtempTarget)); } catch (AppException e) { addPlateBoxTemperatureCurve(0.0); - gStateMgrService.updatePboxTemperature(0); + gStateMgrService.updatePboxTemperature(0, false); log.warn("Failed to read plate box temperature: {}", e.getMessage()); } } + private boolean isTempReady(double nowtemp, double targettemp) { + //TODO:改成可配置 + if (Math.abs(nowtemp - targettemp) < 1) { + return true; + } + return false; + } } diff --git a/src/main/java/a8k/app/service/lowerctrl/TurntableMoveCtrlService.java b/src/main/java/a8k/app/service/lowerctrl/TurntableMoveCtrlService.java index a21a7dd..68c3791 100644 --- a/src/main/java/a8k/app/service/lowerctrl/TurntableMoveCtrlService.java +++ b/src/main/java/a8k/app/service/lowerctrl/TurntableMoveCtrlService.java @@ -128,15 +128,15 @@ public class TurntableMoveCtrlService { } public void trunableMoveToPushPos(IncubatorPos index) throws AppException { - trunableMoveTo(turntablePosParamMgr.getPushPos0() - index.off * turntablePosParamMgr.getPosSpacing()); + trunableMoveTo(turntablePosParamMgr.getPushPos0() + index.off * turntablePosParamMgr.getPosSpacing()); } public void trunableMoveToPullPos(IncubatorPos index) throws AppException { - trunableMoveTo(turntablePosParamMgr.getPullPos0() - index.off * turntablePosParamMgr.getPosSpacing()); + trunableMoveTo(turntablePosParamMgr.getPullPos0() + index.off * turntablePosParamMgr.getPosSpacing()); } public void trunableMoveToDropLiquidPos(IncubatorPos index) throws AppException { - trunableMoveTo(turntablePosParamMgr.getDropLiquidPos0() - index.off * turntablePosParamMgr.getPosSpacing()); + trunableMoveTo(turntablePosParamMgr.getDropLiquidPos0() + index.off * turntablePosParamMgr.getPosSpacing()); } diff --git a/src/main/java/a8k/app/service/statemgr/GStateMgrService.java b/src/main/java/a8k/app/service/statemgr/GStateMgrService.java index 0b8955a..5236863 100644 --- a/src/main/java/a8k/app/service/statemgr/GStateMgrService.java +++ b/src/main/java/a8k/app/service/statemgr/GStateMgrService.java @@ -20,7 +20,7 @@ import org.springframework.stereotype.Component; @Slf4j @RequiredArgsConstructor public class GStateMgrService { - private final GState gState; + private final GState gState; private final DeviceVirtualStateMgrService deviceVirtualStateMgrService; @@ -44,12 +44,14 @@ public class GStateMgrService { return this.gState.sensorState; } - public void updatePboxTemperature(Integer val) { + public void updatePboxTemperature(Integer val, Boolean isReady) { gState.sensorState.setPboxTemperature(val); + gState.sensorState.setPboxTemperatureReady(isReady); } - public void updateIncubateBoxTemperature(Integer val) { + public void updateIncubateBoxTemperature(Integer val, Boolean isReady) { gState.sensorState.setIncubateBoxTemperature(val); + gState.sensorState.setIncubateBoxTemperatureReady(isReady); } public void updateWasteBinFullFlag(Boolean val) { diff --git a/src/main/java/a8k/app/service/virtualstate/DeviceVirtualStateMgrService.java b/src/main/java/a8k/app/service/virtualstate/DeviceVirtualStateMgrService.java index 55aafac..e10009d 100644 --- a/src/main/java/a8k/app/service/virtualstate/DeviceVirtualStateMgrService.java +++ b/src/main/java/a8k/app/service/virtualstate/DeviceVirtualStateMgrService.java @@ -166,11 +166,18 @@ public class DeviceVirtualStateMgrService { return gridGroup; } + int cnt = 0; + public SensorState getVirtualSensorState() { SensorState sensorState = new SensorState(); sensorState.setPboxTemperature(24); sensorState.setIncubateBoxTemperature(25); sensorState.setWasteBinFullFlag(false); + cnt++; + sensorState.setIncubateBoxTemperatureReady(cnt % 2 == 0); //每次调用切换一次状态 + sensorState.setPboxTemperatureReady(cnt % 2 == 0); //每次调用切换一次状态 + + return sensorState; } diff --git a/src/main/java/a8k/app/type/a8k/state/SensorState.java b/src/main/java/a8k/app/type/a8k/state/SensorState.java index 2e9249f..732d9f5 100644 --- a/src/main/java/a8k/app/type/a8k/state/SensorState.java +++ b/src/main/java/a8k/app/type/a8k/state/SensorState.java @@ -5,11 +5,16 @@ import io.swagger.v3.oas.annotations.media.Schema; public class SensorState { @Schema(description = "板夹仓温度") - Integer pboxTemperature = 25; + Integer pboxTemperature = 25; @Schema(description = "孵育盒温度") - Integer incubateBoxTemperature = 25; + Integer incubateBoxTemperature = 25; @Schema(description = "废液桶满标志") - Boolean wasteBinFullFlag = false; + Boolean wasteBinFullFlag = false; + @Schema(description = "板夹仓温度是否就绪") + Boolean pboxTemperatureReady = false; + @Schema(description = "孵育盒温度是否就绪") + Boolean incubateBoxTemperatureReady = false; + public synchronized Integer getPboxTemperature() { return pboxTemperature; @@ -19,6 +24,22 @@ public class SensorState { this.pboxTemperature = pboxTemperature; } + public synchronized Boolean getPboxTemperatureReady() { + return pboxTemperatureReady; + } + + public synchronized void setPboxTemperatureReady(Boolean pboxTemperatureReady) { + this.pboxTemperatureReady = pboxTemperatureReady; + } + + public synchronized Boolean getIncubateBoxTemperatureReady() { + return incubateBoxTemperatureReady; + } + + public synchronized void setIncubateBoxTemperatureReady(Boolean incubateBoxTemperatureReady) { + this.incubateBoxTemperatureReady = incubateBoxTemperatureReady; + } + public synchronized Integer getIncubateBoxTemperature() { return incubateBoxTemperature; } diff --git a/src/main/java/a8k/extui/page/test/verification/P31ReactionPlatesTransmitPosVerificationPage.java b/src/main/java/a8k/extui/page/test/verification/P31ReactionPlatesTransmitPosVerificationPage.java index 56099b1..90b0b00 100644 --- a/src/main/java/a8k/extui/page/test/verification/P31ReactionPlatesTransmitPosVerificationPage.java +++ b/src/main/java/a8k/extui/page/test/verification/P31ReactionPlatesTransmitPosVerificationPage.java @@ -44,11 +44,11 @@ public class P31ReactionPlatesTransmitPosVerificationPage { //光学模组单步 - public void trunableMoveToPushPos(ConsumableGroup group,IncubatorPos index) throws AppException { + public void pushPlateQuick(ConsumableGroup group,IncubatorPos index) throws AppException { plateBoxCtrlService.pushPlateQuick(group, index); } - public void trunableMoveToPullPos(IncubatorPos index) throws AppException { + public void pullPlate(IncubatorPos index) throws AppException { optScanModuleLowerCtrlService.pullPlate(index); } @@ -56,10 +56,18 @@ public class P31ReactionPlatesTransmitPosVerificationPage { optScanModuleLowerCtrlService.dropPlate(); } - public void trunableMoveToDropLiquidPos(IncubatorPos index) throws AppException { + public void turntableMoveToDropLiquidPos(IncubatorPos index) throws AppException { turntableMoveCtrlService.trunableMoveToDropLiquidPos(index); } + public void turntableMoveToPullPos(IncubatorPos index) throws AppException { + turntableMoveCtrlService.trunableMoveToPullPos(index); + } + + public void turntableMoveToPushPos(IncubatorPos index) throws AppException { + turntableMoveCtrlService.trunableMoveToPushPos(index); + } + public void pushOneAndRemove(ConsumableGroup PBCh, IncubatorPos incubatorPos) throws AppException { plateBoxCtrlService.pushPlateQuick(PBCh, incubatorPos); @@ -99,10 +107,12 @@ public class P31ReactionPlatesTransmitPosVerificationPage { public void init() { var page = extApiPageMgr.newPage(this); page.newGroup("单步测试"); - page.addFunction("推入", this::trunableMoveToPushPos); - page.addFunction("拉出", this::trunableMoveToPullPos); + page.addFunction("推入", this::pushPlateQuick); + page.addFunction("拉出", this::pullPlate); page.addFunction("丢弃", this::dropPlate); - page.addFunction("移动到滴液位置", this::trunableMoveToDropLiquidPos); + page.addFunction("转盘-移动到滴液位置", this::turntableMoveToDropLiquidPos); + page.addFunction("转盘-移动到拉出位置", this::turntableMoveToPullPos); + page.addFunction("转盘-移动到推入位置", this::turntableMoveToPushPos); page.newGroup("反应板夹仓-脚本测试"); page.addFunction("推入&&推出(One)", this::pushOneAndRemove);