From 60c36dcee09a6c2c71e23414f8dba3b5e56ea296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=A2=A6=E8=BF=9C?= <1063331231@qq.com> Date: Sat, 7 Jun 2025 15:26:48 +0800 Subject: [PATCH] =?UTF-8?q?systemconfig=E5=A2=9E=E5=8A=A0=E9=A2=84?= =?UTF-8?q?=E5=85=85=E5=92=8C=E6=8E=92=E7=A9=BA=E7=9A=84=E8=B7=9D=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/app.db | Bin 135168 -> 0 bytes .../sgs/app/cmd/control/OutTrayCommand.java | 5 +- .../sgs/app/service/crafts/CraftsStepService.java | 437 ++++++++++----------- .../iflytop/sgs/common/enums/SystemConfigCode.java | 10 +- .../sgs/common/enums/data/DevicePositionCode.java | 5 +- 5 files changed, 216 insertions(+), 241 deletions(-) delete mode 100644 db/app.db diff --git a/db/app.db b/db/app.db deleted file mode 100644 index 81fe84142bb94b9e0fe7e01ef4b6e11cfb956695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135168 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 trayList = deviceStateService.getDeviceState().getTrays(); - trayList.removeIf(TrayState::isInFeedArea); - deviceStateService.getDeviceState().getSolutionModule().setFeedAreaTrayStatus(false); } finally { deviceStateService.getCommandMutexState().get().setTransferCommandExecuting(false); } diff --git a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java index 413b69b..1189bc5 100644 --- a/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java +++ b/src/main/java/com/iflytop/sgs/app/service/crafts/CraftsStepService.java @@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil; import com.iflytop.sgs.app.core.CraftsDebugGenerator; import com.iflytop.sgs.app.model.bo.CraftsStep; import com.iflytop.sgs.app.model.bo.Point3D; +import com.iflytop.sgs.app.model.bo.status.device.TrayState; import com.iflytop.sgs.app.model.bo.status.device.TubeState; import com.iflytop.sgs.app.model.entity.Container; import com.iflytop.sgs.app.model.entity.CraftMonitor; @@ -78,16 +79,15 @@ public class CraftsStepService { } /* - * - * 预热 + * 退火区预热 * */ public boolean preHeat(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { -// Double temperature = params.getDouble("temperature"); -// log.info("工艺{},预热", heatModuleCode); -// heatModuleService.heatRodOpen(heatModuleCode, temperature); -// deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTargetTemperature(temperature);//设置加热温度 -// deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setHeatingType(HeatingType.heating);//加热中 -// webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "开始预热", temperature)); + Double temperature = params.getDouble("temperature"); + log.info("工艺{},预热", HeatModuleCode.heat_module_04); + heatModuleService.heatRodOpen(HeatModuleCode.heat_module_04, temperature); + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setTargetTemperature(temperature);//设置加热温度 + deviceStateService.getDeviceState().getHeatModuleByCode(HeatModuleCode.heat_module_04).setHeatingType(HeatingType.heating);//加热中 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(HeatModuleCode.heat_module_04.toString(), "退火区开始预热", temperature)); return true; } @@ -96,22 +96,53 @@ public class CraftsStepService { * */ public boolean addLiquid(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { try { + /*工艺监控*/ JSONObject result = new JSONObject(); List finishColumns = new ArrayList<>(); result.set(ResultCode.SUCCESS.getCode(), finishColumns); craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitorService.saveOrUpdate(craftMonitor);//保存监控 + craftMonitorService.saveOrUpdate(craftMonitor); + /*工艺监控结束*/ + + /*获取配置信息*/ deviceStateService.getDeviceState().getSolutionModule().setPumping(true); Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点 Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液时托盘位置点 Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点 + Double drainDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.drain_distance);//排空距离 + Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance);//预充距离 + Double preFillPosition = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownPreFillPositon).getPositon(); + Integer containerId = params.getInt("containerId");//容器id + Double volume = params.getDouble("volume");//量 + JSONArray jsonArray = params.getJSONArray("columns");//列数 + //Assert.isTrue(containerId != null && volume != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 + Container container = containerService.getById(containerId);//容器id + Solutions solutions = solutionsService.getById(container.getSolutionId());//获取溶液 + Integer channel = container.getChannel();//获取阀门通道 + Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //托盘试管水平间距 + double scale = solutions.getDoubleScale();//根据溶液获取转换比 + Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon(); //加液模块电机下降进入试管加液位置 + double addLiquidDistance = volume * scale; + /*获取参数结束*/ + log.info("工艺{},申请转运模组并等待", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_liquid);//申请转运模组并等待 + + /*预充开始*/ log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区传感器状态 - if (heatTrayExist) {//加热区存在托盘 + solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 + solutionModuleService.solutionMotorMove(preFillPosition);//加液机械臂下降至预充位置 + solutionModuleService.liquidPumpMove(-drainDistance);//排空 + solutionModuleService.liquidValveSwitchByChannel(channel);//电磁阀对应通道打开 + solutionModuleService.liquidPumpMove(preFillDistance);//预充 + solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 + /*预充结束*/ + + /*移动至加液区开始*/ + boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区试管架 + if (heatTrayExist) {//加热区存在试管架 log.info("工艺{},加热区存在托盘", heatModuleCode); log.info("工艺{},机械臂移动至加热区", heatModuleCode); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode.name())); @@ -148,81 +179,49 @@ public class CraftsStepService { deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态 boolean clawTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.CLAW_TRAY_EXIST);//获取传感器状态 Assert.isTrue(clawTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_NO_TRAY));//加液区无托盘 - Integer containerId = params.getInt("containerId");//容器id - Double volume = params.getDouble("volume");//量 - JSONArray jsonArray = params.getJSONArray("columns");//列数 - //Assert.isTrue(containerId != null && volume != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 - Container container = containerService.getById(containerId);//容器id - Solutions solutions = solutionsService.getById(container.getSolutionId());//获取溶液 - Integer channel = container.getChannel();//获取阀门通道 - Integer currentChannel = deviceSensorService.readLiquidValvePosition();//获取当前阀门的状态 - Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance(); //托盘试管水平间距 - //double preFillDistance = solutions.getDoublePreDistance();//获取预充距离 - Double drainDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.drain_distance);//排空距离 - Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance);//预充距离 - Point3D liquidAreaTrayPoint = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D(); //获取加液区上方托盘点位 - if (!channel.equals(currentChannel)) {//判断是否与当前加酸的通道一致 不一致排空 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "电磁阀废液通道打开", SolutionCode.waste)); - log.info("工艺{},电磁阀废液通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitch(SolutionCode.waste);//废液通道打开 - log.info("工艺{},排空", heatModuleCode); - solutionModuleService.liquidPumpMove(-drainDistance);//排空 - } - double scale = solutions.getDoubleScale();//根据溶液获取转换比 - solutionModuleService.liquidPumpMove(preFillDistance);//预充 - double position = volume * scale; - Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon(); //加液模块电机下降进入试管加液位置 - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitchByChannel(channel);//电磁阀对应通道打开 - if (jsonArray != null) {//断电恢复 - for (int i = 0; i < jsonArray.size(); i++) { - int column = jsonArray.getInt(i);//列号 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "移动加液机械臂到指定试管", column)); - double distance = Math.abs(column - 5) * trayTubeHorizontalSpacingDistance;//机械臂右移距离 - log.info("工艺{},机械臂移动到试管位置{}", heatModuleCode, column); - transferModuleService.transferXMove(liquidAreaTrayPoint.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液机械臂下降", heatModuleCode); - solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "添加溶液", position)); - log.info("工艺{},加液", heatModuleCode); - solutionModuleService.liquidPumpMove(position);//加液 position - log.info("工艺{},加液机械臂上升", heatModuleCode); - solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - finishColumns.add(column); - result.set("columns", finishColumns);//添加到结果 - craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 - } + /*移动至加液区结束*/ + + + /*开始加液*/ + List columns = new ArrayList<>(); + if (jsonArray != null) { + jsonArray.forEach(item -> { + columns.add(Integer.parseInt(item.toString())); + }); } else { - List columns = new ArrayList<>(); TubeState[] tubes = deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).getTubes(); - for (int i = 0; i < tubes.length; i++) { - if (tubes[i].isNeedAddSolution()) { - columns.add(tubes[i].getColumnNum()); + for (TubeState tube : tubes) { + if (tube.isNeedAddSolution()) { + columns.add(tube.getColumnNum()); } } + } + if (!columns.isEmpty()) { for (int i = 0; i < columns.size(); i++) { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "移动加液机械臂到指定试管", i)); double distance = Math.abs(columns.get(i) - 5) * trayTubeHorizontalSpacingDistance;//机械臂右移距离 log.info("工艺{},机械臂移动到试管位置{}", heatModuleCode, i); - transferModuleService.transferXMove(liquidAreaTrayPoint.getX() + distance);//机械臂移动到试管位置 + transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 log.info("工艺{},加液机械臂下降", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液机械臂下降 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "添加溶液", position)); + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "添加溶液", addLiquidDistance)); log.info("工艺{},加液", heatModuleCode); - solutionModuleService.liquidPumpMove(position);//加液 position + solutionModuleService.liquidPumpMove(addLiquidDistance);//加液 position log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 + /*工艺监控开始*/ finishColumns.add(i); result.set("columns", finishColumns);//添加到结果 craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + craftMonitorService.saveOrUpdate(craftMonitor); + /*工艺监控结束*/ } } - //移动至加热区 + /*结束加液*/ + + /*移动至加热区*/ boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//提示被占用 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode)); @@ -252,13 +251,16 @@ public class CraftsStepService { public boolean reduceLiquid(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { try { + /*工艺监控开始*/ JSONObject result = new JSONObject(); List finishColumns = new ArrayList<>(); craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + craftMonitorService.saveOrUpdate(craftMonitor); + /*工艺监控结束*/ - deviceStateService.getDeviceState().getSolutionModule().setPumping(true); + /*获取参数开始*/ Double height = params.getDouble("height");//抽液试管头部到试管底部的高度 + JSONArray jsonArray = params.getJSONArray("columns");//列数 if (height > 50) { throw new AppException(ResultCode.CRAFT_PARAMS_MISTAKE); } @@ -266,6 +268,11 @@ public class CraftsStepService { Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点 Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液时托盘位置点 + Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance();//获取托盘试管水平间距 + double solutionModuleMotorDownInTubeExtPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeExtPositon).getDistance();//加液模块电机下降进入试管抽取位置 + Double reduceDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.reduce_distance);//抽液距离 + /*获取参数结束*/ + boolean heatTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//获取加热区传感器状态 Assert.isTrue(heatTrayExist, () -> new AppException(ResultCode.CRAFT_TARGET_HEAT_NO_TRAY));//加热区无托盘 log.info("工艺{},申请转运模组并等待", heatModuleCode); @@ -290,68 +297,53 @@ public class CraftsStepService { deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "电磁阀打开", SolutionCode.waste.name())); log.info("工艺{},电磁阀对应通道打开", heatModuleCode); + + /*抽液开始*/ solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 - Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance();//获取托盘试管水平间距 - double solutionModuleMotorDownInTubeExtPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeExtPositon).getDistance() + height;//加液模块电机下降进入试管抽取位置 - Double drainDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.drain_distance);//排空距离 - JSONArray jsonArray = params.getJSONArray("columns");//列数 + List columns = new ArrayList<>(); if (jsonArray != null) { - for (int i = 0; i < jsonArray.size(); i++) { - int column = jsonArray.getInt(i);//列号 - double distance = Math.abs(column - 5) * trayTubeHorizontalSpacingDistance; - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至试管位置", column)); - log.info("工艺{},机械臂移动到试管位置", heatModuleCode); - transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液模块下降进入试管", heatModuleCode); - solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管 - log.info("工艺{},开始抽液", heatModuleCode); - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "开始抽液", -10)); - solutionModuleService.liquidPumpMove(-drainDistance);//排空 - log.info("工艺{},加液模块上升", heatModuleCode); - solutionModuleService.solutionMotorMoveZero();//加液模块上升 - finishColumns.add(column); - result.set("columns", finishColumns);//添加到结果 - craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 - } + jsonArray.forEach(item -> { + columns.add(Integer.parseInt(item.toString())); + }); } else { - List columns = new ArrayList<>(); TubeState[] tubes = deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).getTubes(); - for (int i = 0; i < tubes.length; i++) { - if (tubes[i].isNeedAddSolution()) { - columns.add(tubes[i].getColumnNum()); + for (TubeState tube : tubes) { + if (tube.isNeedAddSolution()) { + columns.add(tube.getColumnNum()); } } - for (int i = 0; i < columns.size(); i++) { - double distance = Math.abs(columns.get(i) - 5) * trayTubeHorizontalSpacingDistance; - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至试管位置", i)); - log.info("工艺{},机械臂移动至试管位置", heatModuleCode); - transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 - log.info("工艺{},加液模块下降进入试管", heatModuleCode); - solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon);//加液模块下降进入试管 - log.info("工艺{},开始抽液", heatModuleCode); - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "开始抽液", -10)); - solutionModuleService.liquidPumpMove(-10);//抽液 reduceNumber0.1 - log.info("工艺{},加液模块上升", heatModuleCode); - solutionModuleService.solutionMotorMoveZero();//加液模块上升 - finishColumns.add(i); - result.set("columns", finishColumns);//添加到结果 - craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 - } + } + for (int i = 0; i < columns.size(); i++) { + double distance = Math.abs(columns.get(i) - 5) * trayTubeHorizontalSpacingDistance; + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至试管位置", i)); + log.info("工艺{},机械臂移动至试管位置", heatModuleCode); + transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 + log.info("工艺{},加液模块下降进入试管", heatModuleCode); + solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管 + log.info("工艺{},开始抽液", heatModuleCode); + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "开始抽液", -10)); + solutionModuleService.liquidPumpMove(-reduceDistance);//开始抽液 + log.info("工艺{},加液模块上升", heatModuleCode); + solutionModuleService.solutionMotorMoveZero();//加液模块上升 + + /*工艺监控开始*/ + finishColumns.add(i); + result.set("columns", finishColumns);//添加到结果 + craftMonitor.setCurrentStepResult(String.valueOf(result)); + craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); + craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + /*工艺监控结束*/ } log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 + /*抽液结束*/ + + /*移动至加热区开始*/ log.info("工艺{},移动至托盘至加液位置点", heatModuleCode); - transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至托盘至加液位置点 boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//目标加热模块有无托盘 Assert.isTrue(!heatModuleTrayExist, () -> new AppException(ResultCode.TARGET_HEAT_MODULE_OCCUPIED));//提示被占用 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleCode)); - log.info("工艺{},加液机械臂上升", heatModuleCode); - solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); @@ -360,9 +352,10 @@ public class CraftsStepService { transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴移出卡槽 log.info("工艺{},Z轴抬升至最高", heatModuleCode); transferModuleService.transferZMoveZero();//Z轴抬升至最高 + /*移动至加热区结束*/ + deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(true);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(true);//托盘状态 - deviceStateService.getDeviceState().getSolutionModule().setPumping(false);//正在加液 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(false);//托盘状态 return true; } finally { @@ -377,9 +370,12 @@ public class CraftsStepService { * 加热 * */ public boolean heat(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { + /*工艺监控清理上步的记录*/ JSONObject result = new JSONObject(); craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitorService.saveOrUpdate(craftMonitor); + /*工艺监控清理上步的记录*/ + Double temperature = params.getDouble("temperature");//温度 Integer time = params.getInt("time");//秒 //Assert.isTrue(temperature != null && time != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 @@ -400,14 +396,17 @@ public class CraftsStepService { delay(60); cycle--; clock = clock + 60; + /*保存到工艺监控*/ result.set("time", clock);//添加到结果 craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + /*保存到工艺监控*/ } delay(seconds); log.info("工艺{},加热结束", heatModuleCode); craftMonitor.setCurrentStepResult(String.valueOf(result)); + craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "加热结束,持续时间", time)); return true; @@ -418,11 +417,13 @@ public class CraftsStepService { * */ public boolean clean(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { try { + /*保存到监控开始*/ JSONObject result = new JSONObject(); - List finishColumns = new ArrayList<>(); craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + /*保存到监控结束*/ + /*获取参数开始*/ deviceStateService.getDeviceState().getSolutionModule().setPumping(true); Double volume = params.getDouble("volume") == null ? 2.0 : params.getDouble("volume");//加水量 Integer cycle = params.getInt("cycle");//次数 @@ -435,13 +436,19 @@ public class CraftsStepService { Point3D liquidAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.liquidAreaTrayPoint).getPoint3D();//获取加液时托盘位置点 Double trayTubeHorizontalSpacingDistance = devicePositionService.getPosition(DevicePositionCode.trayTubeHorizontalSpacingDistance).getDistance();//获取托盘试管水平间距 Double solutionModuleMotorDownInTubeExtPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeExtPositon).getPositon();//加液模块电机下降进入试管抽取位置 - Solutions solutions = solutionsService.getByCode(SolutionCode.water.name());//获取酸 - double cleanWaterVolume = volume * solutions.getDoubleScale();//清洁时加水的量 - double pumpPosition = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.number_reduce);//抽液时蠕动泵移动 + Double solutionModuleMotorDownInTubeAddPositon = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownInTubeAddPositon).getPositon();//加液模块电机下降进入试管加液位置 + Double waterScale = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.water);//蒸馏水的系数 + double cleanWaterDistance = volume * waterScale;//清洁时泵的移动距离 + Double reduceDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.reduce_distance);//抽液距离 + Double drainDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.drain_distance);//排空距离 + Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance);//过量预充距离 + Double preFillPosition = devicePositionService.getPosition(DevicePositionCode.solutionModuleMotorDownPreFillPositon).getPositon();//机械臂预充时下降距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加热区", heatModuleTrayClawPoint3D)); + /*获取参数结束*/ log.info("工艺{},申请转运模组并等待", heatModuleCode); transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_liquid);//申请转运模组并等待 + log.info("工艺{},加液机械臂上升", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 log.info("工艺{},将X轴移动至目标加热模块托盘夹取点 + 进出卡槽移动距离", heatModuleCode); @@ -456,58 +463,70 @@ public class CraftsStepService { webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动至加液区", liquidAreaTrayPoint3D)); deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(false);//加热区托盘状态 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(false);//托盘状态 - deviceStateService.getDeviceState().getSolutionModule().setPumping(true);//正在加液 deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInSolutionPositon(true);//托盘状态 deviceStateService.getDeviceState().getSolutionModule().setPumping(true); transferModuleService.transferMove(liquidAreaTrayPoint3D);//移动至加液时托盘位置点 - //排空 - Double drainDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.drain_distance);//排空距离 + /*列号开始*/ + List columns = new ArrayList<>(); + TubeState[] tubes = deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).getTubes(); + for (TubeState tube : tubes) { + if (tube.isNeedAddSolution()) { + columns.add(tube.getColumnNum()); + } + } + /*列号结束*/ + + + /*抽液开始*/ solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 - solutionModuleService.liquidPumpMove(-drainDistance);//蠕动泵排空 - //预充 - Double preFillDistance = systemConfigService.getSystemConfigDoubleByCode(SystemConfigCode.pre_fill_distance);//预充距离 - JSONArray jsonArray = params.getJSONArray("columns");//列数 - if (jsonArray != null) { - for (int j = 0; j < jsonArray.size(); j++) { - int column = jsonArray.getInt(j); - double distance = Math.abs(column - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 + for (int j = 0; j < columns.size(); j++) { + double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); + log.info("工艺{},机械臂移动到试管位置", heatModuleCode); + transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 + log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); + solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管抽取位置 + log.info("工艺{},电磁阀对应通道打开", heatModuleCode); + + log.info("工艺{},蠕动泵抽水", heatModuleCode); + solutionModuleService.liquidPumpMove(-reduceDistance);//蠕动泵抽水 + log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); + solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 + } + /*抽液结束*/ + + + /*预充开始*/ + log.info("工艺{},清洗-预充开始", heatModuleCode); + solutionModuleService.liquidPumpMove(-drainDistance);//排空 + solutionModuleService.solutionMotorMove(preFillPosition);//加液机械臂下降至预充位置 + solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开 + solutionModuleService.liquidPumpMove(preFillDistance);//预充 + solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 + /*预充结束*/ + + + /*清洗开始*/ + for (int i = 0; i < cycle; i++) { + /*加*/ + log.info("工艺{},电磁阀蒸馏水通道打开", heatModuleCode); + solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开 + for (int j = 0; j < columns.size(); j++) { + double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); log.info("工艺{},机械臂移动到试管位置", heatModuleCode); transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); - solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管抽取位置 - for (int i = 0; i < cycle; i++) { - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开 - solutionModuleService.liquidPumpMove(preFillDistance);//预充 - Thread.sleep(500); - log.info("工艺{},蠕动泵加水", heatModuleCode); - solutionModuleService.liquidPumpMove(cleanWaterVolume);//蠕动泵加水 - - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 - Thread.sleep(500); - log.info("工艺{},蠕动泵抽水", heatModuleCode); - solutionModuleService.liquidPumpMove(-pumpPosition);//蠕动泵抽水 - solutionModuleService.liquidPumpMove(-drainDistance);//蠕动泵排空 - } - finishColumns.add(column); - result.set("columns", finishColumns);//添加到结果 - craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeAddPositon);//加液模块下降进入试管加液位置 + log.info("工艺{},蠕动泵加水", heatModuleCode); + solutionModuleService.liquidPumpMove(cleanWaterDistance);//蠕动泵加水 log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 } - } else { - List columns = new ArrayList<>(); - TubeState[] tubes = deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).getTubes(); - for (int i = 0; i < tubes.length; i++) { - if (tubes[i].isNeedAddSolution()) { - columns.add(tubes[i].getColumnNum()); - } - - } + log.info("工艺{},电磁阀废液通道打开", heatModuleCode); + Thread.sleep(1000); + /*抽*/ + solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 for (int j = 0; j < columns.size(); j++) { double distance = Math.abs(columns.get(j) - 5) * trayTubeHorizontalSpacingDistance;//x轴移动距离 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatModuleCode.toString(), "机械臂移动到试管位置", j)); @@ -515,30 +534,22 @@ public class CraftsStepService { transferModuleService.transferXMove(liquidAreaTrayPoint3D.getX() + distance);//机械臂移动到试管位置 log.info("工艺{},加液模块下降进入试管抽取位置", heatModuleCode); solutionModuleService.solutionMotorMove(solutionModuleMotorDownInTubeExtPositon + height);//加液模块下降进入试管抽取位置 - for (int i = 0; i < cycle; i++) { - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitch(SolutionCode.water);//电磁阀对应通道打开 - solutionModuleService.liquidPumpMove(preFillDistance);//预充 - Thread.sleep(500); - log.info("工艺{},蠕动泵加水", heatModuleCode); - solutionModuleService.liquidPumpMove(cleanWaterVolume);//蠕动泵加水 - - log.info("工艺{},电磁阀对应通道打开", heatModuleCode); - solutionModuleService.liquidValveSwitch(SolutionCode.waste);//电磁阀对应通道打开 - Thread.sleep(500); - log.info("工艺{},蠕动泵抽水", heatModuleCode); - solutionModuleService.liquidPumpMove(-pumpPosition);//蠕动泵抽水 - solutionModuleService.liquidPumpMove(-drainDistance);//蠕动泵排空 - } - finishColumns.add(j); - result.set("columns", finishColumns);//添加到结果 - craftMonitor.setCurrentStepResult(String.valueOf(result)); - craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); - craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + log.info("工艺{},电磁阀对应通道打开", heatModuleCode); + + log.info("工艺{},蠕动泵抽水", heatModuleCode); + solutionModuleService.liquidPumpMove(-reduceDistance);//抽水 log.info("工艺{},加液模块上升至最高,移出试管", heatModuleCode); solutionModuleService.solutionMotorMoveZero();//加液模块上升至最高,移出试管 } + result.set("cycle", i+1);//添加到结果 + craftMonitor.setCurrentStepResult(String.valueOf(result)); + craftMonitor.setDeviceState(JSONUtil.toJsonStr(deviceStateService.getDeviceState())); + craftMonitorService.saveOrUpdate(craftMonitor);//保存到监控 + } + /*清洗结束*/ + + log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX());//将X轴移动至目标加热模块托盘夹取点 log.info("工艺{},Z轴下降至夹取点,使托盘落入石墨加热盘", heatModuleCode); @@ -563,9 +574,13 @@ public class CraftsStepService { * 烘干 * */ public boolean dry(HeatModuleCode heatModuleCode, JSONObject params, CraftMonitor craftMonitor) throws Exception { + /*工艺监控清理上步的记录*/ JSONObject result = new JSONObject(); craftMonitor.setCurrentStepResult(String.valueOf(result)); craftMonitorService.saveOrUpdate(craftMonitor); + /*工艺监控清理上步的记录*/ + + Double temperature = params.getDouble("temperature");//秒 Integer time = params.getInt("time");//秒 //Assert.isTrue(temperature != null && time != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 @@ -616,10 +631,10 @@ public class CraftsStepService { Double feedTemperature = params.getDouble("feedTemperature");//下料温度 Integer time = params.getInt("time");//秒 //Assert.isTrue(temperature != null && time != null, () -> new AppException(ResultCode.CRAFT_PARAMS_MISTAKE));//参数错误 - boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode);//加热模块有无托盘 - Assert.isTrue(heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_TARGET_HEAT_NO_TRAY));//提示无托盘 + boolean heatModuleTrayExist = deviceSensorService.getTrayStateByHeatModuleCode(heatModuleCode); + Assert.isTrue(heatModuleTrayExist, () -> new AppException(ResultCode.CRAFT_TARGET_HEAT_NO_TRAY));//提示加热模块无托盘 while (deviceSensorService.getTrayStateByHeatModuleCode(HeatModuleCode.heat_module_04)) {//判断退火区是否被占用 - delay(10);//等待30秒 + delay(10);//等待10秒 } Point3D annealTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(HeatModuleCode.heat_module_04);//获取退火区托盘夹取点 Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点 @@ -715,7 +730,7 @@ public class CraftsStepService { heatModuleService.fanStart(heatModuleCode);//散热打开 deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setFanOpen(true); //设置加热区风扇打开 while (!codeIsSuitable(heatModuleCode, 100.0)) { - delay(3); + delay(5); } log.info("工艺{},散热关闭", heatModuleCode); heatModuleService.fanClose(heatModuleCode);//散热关闭 @@ -766,54 +781,8 @@ public class CraftsStepService { */ public void finish(HeatModuleCode heatModuleCode, CraftMonitor craftMonitor) throws Exception { craftMonitorService.removeById(craftMonitor.getId()); - //moveToFeedModule(heatModuleCode); - } - - public void moveToFeedModule(HeatModuleCode heatModuleCode) throws Exception { - try { - boolean feedTrayExist = deviceSensorService.getSensorStatus(DeviceSensorCode.LIQUID_TRAY_EXIST);//上料区托盘状态 - while (feedTrayExist) { - deviceLightSoundService.openBeep(CmdBeepMode.info); - delay(2); - deviceLightSoundService.closeBeep(); - } - - Point3D heatModuleTrayClawPoint3D = heatModuleService.getHeatModuleTrayClawPoint3D(heatModuleCode);//获取目标加热模块托盘夹取点 - Double transferModuleXPickTrayMoveDistance = devicePositionService.getPosition(DevicePositionCode.transferModuleXPickTrayMoveDistance).getDistance();//获取转运模块X轴拿取托盘进出卡槽移动距离 - Point3D feedAreaTrayPoint3D = devicePositionService.getPosition(DevicePositionCode.feedAreaTrayPoint).getPoint3D();//获取上料区托盘夹爪位置点 - - transferModuleService.requestTransferModule(CraftsTransferTypeCode.move_feed);//获取转运模组锁 - log.info("工艺{},加液机械臂上升", heatModuleCode); - solutionModuleService.solutionMotorMoveZero();//加液机械臂上升 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); - transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},将X轴移动至目标加热模块托盘夹取点", heatModuleCode); - transferModuleService.transferXMove(heatModuleTrayClawPoint3D.getX() + transferModuleXPickTrayMoveDistance);//将X轴移动至目标加热模块托盘夹取点 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); - transferModuleService.transferZMove(heatModuleTrayClawPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴移出卡槽", heatModuleCode); - transferModuleService.transferXMoveBy(-transferModuleXPickTrayMoveDistance);//X轴移出卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); - transferModuleService.transferZMoveZero();//Z轴抬升至最高 - deviceStateService.getDeviceState().getHeatModuleByCode(heatModuleCode).setTrayStatus(false);//加热区托盘状态 - deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInHeatModule(false);//托盘状态 - log.info("工艺{},将X轴移动至上料区托盘夹取点", heatModuleCode); - transferModuleService.transferXMove(feedAreaTrayPoint3D.getX());//将X轴移动至上料区托盘夹取点 + 进出卡槽移动距离 - log.info("工艺{},Z轴下降至夹取点", heatModuleCode); - transferModuleService.transferZMove(feedAreaTrayPoint3D.getZ());//Z轴下降至夹取点,使托盘落入石墨加热盘 - log.info("工艺{},X轴进入卡槽", heatModuleCode); - transferModuleService.transferXMoveBy(transferModuleXPickTrayMoveDistance);//X轴进入卡槽 - log.info("工艺{},Z轴抬升至最高", heatModuleCode); - transferModuleService.transferZMoveZero();//Z轴抬升至最高 - log.info("工艺{},转运模组释放", heatModuleCode); - transferModuleService.releaseTransferModule();//转运模组释放 - deviceStateService.getDeviceState().getTrayByHeatModuleCode(heatModuleCode).setInFeedArea(true);//托盘状态 - deviceLightSoundService.openBeep(CmdBeepMode.info); - delay(2); - deviceLightSoundService.closeBeep(); - } finally { - transferModuleService.releaseTransferModule();//转运模组释放 - } + List trayList = deviceStateService.getDeviceState().getTrays(); + trayList.removeIf((tray)->tray.getHeatModuleCode().equals(heatModuleCode)); } diff --git a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java index 70652ad..20cac91 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/SystemConfigCode.java @@ -7,11 +7,15 @@ import lombok.Getter; */ @Getter public enum SystemConfigCode { + water("水加液系数"), + thick("浓硝酸加液系数"), + thin("稀硝酸加液系数"), + back_flow_distance("稀硝酸加液系数"), pre_fill_distance("预充距离"), drain_distance("排空距离"), - number_reduce("抽液时机蠕动泵的转数"), - cycle_clean_max("清洁最大次数"), - liquid_max_speed("蠕动泵最大转速"), + reduce_distance("过量抽液距离"), + cycle_clean_max("允许的最大清洁次数"), + liquid_max_speed("蠕动泵最大转速限制"), ignore_door_self_test("忽略门自检"), ignore_dual_robot_self_test("忽略加液升降自检"), diff --git a/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java b/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java index 544a1b4..636e89e 100644 --- a/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java +++ b/src/main/java/com/iflytop/sgs/common/enums/data/DevicePositionCode.java @@ -18,7 +18,10 @@ public enum DevicePositionCode { transferModuleXPickTrayMoveDistance(DevicePositionType.DISTANCE, "转运模块X轴拿取托盘进出卡槽移动距离"), ////////////////位置 - + /** + * 加液模块电机下降进入试管加液位置 + */ + solutionModuleMotorDownPreFillPositon(DevicePositionType.POSITION, "加液模块电机下降进入预充位置"), /** * 加液模块电机下降进入试管加液位置 */