From 45a29b0e29a7e3e0440548e1998a5f7486d19f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Sun, 11 May 2025 23:36:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=88=9D=E5=A7=8B=E5=8C=96=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=BA=94=E8=AF=A5=E6=A3=80=E6=B5=8B=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=98=AF=E8=99=9A=E6=8B=9F=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iflytop/gd/app/cmd/DoorCloseCommand.java | 3 + .../com/iflytop/gd/app/cmd/SolutionAddCommand.java | 3 +- .../iflytop/gd/app/service/CraftsStepService.java | 5 +- .../gd/app/service/DeviceCommandUtilService.java | 58 ++++++++++-------- .../iflytop/gd/app/service/DeviceInitService.java | 15 ++++- .../iflytop/gd/hardware/type/IO/InputIOMId.java | 24 ++++---- .../init/zapp_sub_module_reg_initial_value.csv | 68 +++++++++++----------- 7 files changed, 99 insertions(+), 77 deletions(-) diff --git a/src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java b/src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java index 882f255..baaf362 100644 --- a/src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java +++ b/src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java @@ -6,6 +6,7 @@ import com.iflytop.gd.app.service.DeviceCommandUtilService; import com.iflytop.gd.app.service.DevicePositionService; import com.iflytop.gd.common.annotation.CommandMapping; import com.iflytop.gd.common.enums.data.DevicePositionCode; +import com.iflytop.gd.hardware.service.GDDeviceStatusService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -22,12 +23,14 @@ import java.util.concurrent.CompletableFuture; public class DoorCloseCommand extends BaseCommandHandler { private final DeviceCommandUtilService deviceCommandUtilService; private final DevicePositionService devicePositionService; + private final GDDeviceStatusService gDDeviceStatusService; @Override public CompletableFuture handle(CmdDTO cmdDTO) { return runAsync(() -> { Double doorOpenDistance = devicePositionService.getPosition(DevicePositionCode.doorClose).getDistance(); deviceCommandUtilService.doorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), doorOpenDistance); + //TODO 关门口判断加液模块是否有托盘 }); } } diff --git a/src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java b/src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java index 9a5b16e..58939f4 100644 --- a/src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java +++ b/src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java @@ -44,8 +44,7 @@ public class SolutionAddCommand extends BaseCommandHandler { if (acidPumpDevice == null) { throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND); } - Point2D tubePoint2D = deviceCommandUtilService.getPointByTubeNum(tubeNum);//根据试管编号获取点位 - deviceCommandUtilService.dualRobotMovePoint(cmdDTO.getCommandId(), cmdDTO.getCommand(), tubePoint2D);//移动加液机械臂到指定试管点位 + deviceCommandUtilService.dualRobotMovePoint(tubeNum);//移动加液机械臂到指定试管点位 deviceCommandUtilService.acidPumpMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), acidPumpDevice, volume);//添加溶液 } } diff --git a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java index 10a25ae..e5610fb 100644 --- a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java +++ b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java @@ -126,9 +126,8 @@ public class CraftsStepService { if (acidPumpDevice == null) { throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND); } - Point2D tubePoint2D = deviceCommandUtilService.getPointByTubeNum(tubeNum);//根据试管编号获取点位 - webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "移动加液机械臂到指定试管点位", tubePoint2D)); - deviceCommandUtilService.dualRobotMovePoint(tubePoint2D);//移动加液机械臂到指定试管点位 + webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "移动加液机械臂到指定试管", tubeNum)); + deviceCommandUtilService.dualRobotMovePoint(tubeNum);//移动加液机械臂到指定试管 webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "添加溶液", addLiquid)); deviceCommandUtilService.acidPumpMoveBy(acidPumpDevice, volume);//添加溶液 } diff --git a/src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java b/src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java index ed8a53e..56c2c65 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java +++ b/src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java @@ -10,6 +10,8 @@ import com.iflytop.gd.common.enums.AcidPumpDeviceCode; import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.cmd.CmdAxis; import com.iflytop.gd.common.enums.data.DevicePositionCode; +import com.iflytop.gd.hardware.type.LiquidDistributionArmDriver; +import com.iflytop.gd.hardware.type.Servo.LiquidArmMId; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -22,6 +24,7 @@ import java.util.concurrent.TimeUnit; public class DeviceCommandUtilService { private final DeviceCommandService deviceCommandService; private final DevicePositionService devicePositionService; + private final LiquidDistributionArmDriver liquidDistributionArmDriver; /** * 门电机移动 @@ -287,39 +290,46 @@ public class DeviceCommandUtilService { commandWait(deviceCommandFuture); } - /** - * 双轴械臂 移动至指定点 - */ - public void dualRobotMovePoint(Point2D point2D) throws Exception { - dualRobotMovePoint(null, null, point2D); - } +// /** +// * 双轴械臂 移动至指定点 +// */ +// public void dualRobotMovePoint(Point2D point2D) throws Exception { +// dualRobotMovePoint(null, null, point2D); +// } - /** - * 双轴械臂 移动至指定点 - */ - public void dualRobotMovePoint(String cmdId, String cmdCode, Point2D point2D) throws Exception { - DeviceCommandBundle deviceCommand = DeviceCommandGenerator.dualRobotMovePoint(point2D.getX(), point2D.getY()); - CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); - commandWait(deviceCommandFuture); - } +// /** +// * 双轴械臂 移动至指定点 +// */ +// public void dualRobotMovePoint(String cmdId, String cmdCode, Point2D point2D) throws Exception { +// DeviceCommandBundle deviceCommand = DeviceCommandGenerator.dualRobotMovePoint(point2D.getX(), point2D.getY()); +// CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); +// commandWait(deviceCommandFuture); +// } /** - * 加液机械臂回原点 + * 双轴械臂 移动至指定试管 */ - public void dualRobotOrigin() throws Exception { - dualRobotOrigin(null, null); + public void dualRobotMovePoint(int index) throws Exception { + liquidDistributionArmDriver.liquidDistributionArmMoveTo(LiquidArmMId.LiquidDistributionArm, index); } /** * 加液机械臂回原点 */ - public void dualRobotOrigin(String cmdId, String cmdCode) throws Exception { - DeviceCommandBundle dualRobotJoint1OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint1Origin(); - DeviceCommandBundle dualRobotJoint2OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint2Origin(); - CommandFuture dualRobotJoint1OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint1OriginDeviceCommand); - CommandFuture dualRobotJoint2OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint2OriginDeviceCommand); - commandWait(dualRobotJoint1OriginDeviceCommandFuture, dualRobotJoint2OriginDeviceCommandFuture); - } + public void dualRobotOrigin() throws Exception { + liquidDistributionArmDriver.liquidDistributionArmMoveTo(LiquidArmMId.LiquidDistributionArm, 0); + } + +// /** +// * 加液机械臂回原点 +// */ +// public void dualRobotOrigin(String cmdId, String cmdCode) throws Exception { +// DeviceCommandBundle dualRobotJoint1OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint1Origin(); +// DeviceCommandBundle dualRobotJoint2OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint2Origin(); +// CommandFuture dualRobotJoint1OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint1OriginDeviceCommand); +// CommandFuture dualRobotJoint2OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint2OriginDeviceCommand); +// commandWait(dualRobotJoint1OriginDeviceCommandFuture, dualRobotJoint2OriginDeviceCommandFuture); +// } /** * 加液机械臂回原点 diff --git a/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java b/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java index 3c0521b..7ca74b4 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java +++ b/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java @@ -9,7 +9,9 @@ import com.iflytop.gd.common.enums.ContainerCode; import com.iflytop.gd.common.enums.ContainerType; import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.hardware.comm.can.A8kCanBusService; +import com.iflytop.gd.hardware.exception.HardwareException; import com.iflytop.gd.hardware.type.MId; +import com.iflytop.gd.hardware.type.RegIndex; import com.opencsv.CSVReader; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -35,6 +37,9 @@ public class DeviceInitService { } public void initDeviceSetData() { + if (deviceStateService.getDeviceState().isVirtual()) { + return; + } try { Thread.sleep(2000); String filePath = Paths.get("src", "main", "resources", "init", "zapp_sub_module_reg_initial_value.csv").toString(); @@ -51,14 +56,20 @@ public class DeviceInitService { } reader.close(); } catch (Exception e) { + initDeviceSetData(); log.error("设备初始化失败", e); } } public void sendToDevice(DeviceInitializationData data) { - System.out.println("Sending to device: " + data.getMid() + " - " + data.getRegIndex() + " = " + data.getRegInitVal()); -// canBusService.moduleSetReg(MId.valueOf(data.getMid())); + try { + log.info("初始化设备: {} - {} = {}", data.getMid(), data.getRegIndex(), data.getRegInitVal()); + canBusService.moduleSetReg(MId.valueOf(data.getMid()), RegIndex.valueOf(data.getRegIndex()), data.getRegInitVal()); + } catch (HardwareException e) { + log.error("初始化设备错误: {} - {} = {}", data.getMid(), data.getRegIndex(), data.getRegInitVal()); + throw new RuntimeException(e); + } } public void initDeviceState() { diff --git a/src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java b/src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java index 65176b6..217173a 100644 --- a/src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java +++ b/src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java @@ -3,18 +3,18 @@ package com.iflytop.gd.hardware.type.IO; import com.iflytop.gd.hardware.type.MId; public enum InputIOMId { - Heater_CAP1_EXSIT("Heater_CAP1_EXSIT [ 加热位拍子1到位 ]", MId.IO1_IO, 0,false), - Heater_CAP2_EXSIT("Heater_CAP2_EXSIT [ 加热位拍子2到位 ]", MId.IO1_IO, 1,false), - Heater_CAP3_EXSIT("Heater_CAP3_EXSIT [ 加热位拍子3到位 ]", MId.IO1_IO, 2,false), - Heater_CAP4_EXSIT("Heater_CAP4_EXSIT [ 加热位拍子4到位 ]", MId.IO1_IO, 3,false), - Heater_CAP5_EXSIT("Heater_CAP5_EXSIT [ 加热位拍子5到位 ]", MId.IO1_IO, 4,false), - Heater_CAP6_EXSIT("Heater_CAP6_EXSIT [ 加热位拍子6到位 ]", MId.IO1_IO, 5,false), - Heater_TUBE1_EXSIT("Heater_TUBE1_EXSIT [ 加热位试管架1到位 ]", MId.IO1_IO, 6,false), - Heater_TUBE2_EXSIT("Heater_TUBE2_EXSIT [ 加热位试管架2到位 ]", MId.IO1_IO, 7,false), - Heater_TUBE3_EXSIT("Heater_TUBE3_EXSIT [ 加热位试管架3到位 ]", MId.IO1_IO, 8,false), - Heater_TUBE4_EXSIT("Heater_TUBE4_EXSIT [ 加热位试管架4到位 ]", MId.IO1_IO, 9,false), - Heater_TUBE5_EXSIT("Heater_TUBE5_EXSIT [ 加热位试管架5到位 ]", MId.IO1_IO, 10,false), - Heater_TUBE6_EXSIT("Heater_TUBE6_EXSIT [ 加热位试管架6到位 ]", MId.IO1_IO, 11,false), + Heater_CAP1_EXSIT("Heater_CAP1_EXSIT [ 加热模块拍子1到位 ]", MId.IO1_IO, 0,false), + Heater_CAP2_EXSIT("Heater_CAP2_EXSIT [ 加热模块拍子2到位 ]", MId.IO1_IO, 1,false), + Heater_CAP3_EXSIT("Heater_CAP3_EXSIT [ 加热模块拍子3到位 ]", MId.IO1_IO, 2,false), + Heater_CAP4_EXSIT("Heater_CAP4_EXSIT [ 加热模块拍子4到位 ]", MId.IO1_IO, 3,false), + Heater_CAP5_EXSIT("Heater_CAP5_EXSIT [ 加热模块拍子5到位 ]", MId.IO1_IO, 4,false), + Heater_CAP6_EXSIT("Heater_CAP6_EXSIT [ 加热模块拍子6到位 ]", MId.IO1_IO, 5,false), + Heater_TUBE1_EXSIT("Heater_TUBE1_EXSIT [ 加热模块托盘1到位 ]", MId.IO1_IO, 6,false), + Heater_TUBE2_EXSIT("Heater_TUBE2_EXSIT [ 加热模块托盘2到位 ]", MId.IO1_IO, 7,false), + Heater_TUBE3_EXSIT("Heater_TUBE3_EXSIT [ 加热模块托盘3到位 ]", MId.IO1_IO, 8,false), + Heater_TUBE4_EXSIT("Heater_TUBE4_EXSIT [ 加热模块托盘4到位 ]", MId.IO1_IO, 9,false), + Heater_TUBE5_EXSIT("Heater_TUBE5_EXSIT [ 加热模块托盘5到位 ]", MId.IO1_IO, 10,false), + Heater_TUBE6_EXSIT("Heater_TUBE6_EXSIT [ 加热模块托盘6到位 ]", MId.IO1_IO, 11,false), TRAY_CAP1_EXSIT("TRAY_CAP1_EXSIT [ 拍子存放位拍子1到位 ]", MId.IO1_IO, 12,false), TRAY_CAP2_EXSIT("TRAY_CAP2_EXSIT [ 拍子存放位拍子2到位 ]", MId.IO1_IO, 13,false), TRAY_CAP3_EXSIT("TRAY_CAP3_EXSIT [ 拍子存放位拍子3到位 ]", MId.IO1_IO, 14,false), diff --git a/src/main/resources/init/zapp_sub_module_reg_initial_value.csv b/src/main/resources/init/zapp_sub_module_reg_initial_value.csv index 10fc7aa..dcb8020 100644 --- a/src/main/resources/init/zapp_sub_module_reg_initial_value.csv +++ b/src/main/resources/init/zapp_sub_module_reg_initial_value.csv @@ -48,40 +48,40 @@ id,mid,regIndex,regInitVal 47,DualRobotAxis2SV,kreg_mini_servo_servo_overload_torque,80 48,DualRobotAxis2SV,kreg_mini_servo_servo_acc,0 49,LiquidDistributionArm,kreg_liquid_distribution_arm_enable,1 -50,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d0,1800 -51,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d1,1800 -52,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d0,1799 -53,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d1,2100 -54,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d0,0 -55,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d1,0 -56,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d0,0 -57,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d1,0 -58,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d0,0 -59,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d1,0 -60,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d0,0 -61,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d1,0 -62,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d0,0 -63,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d1,0 -64,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d0,0 -65,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d1,0 -66,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d0,0 -67,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d1,0 -68,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d0,0 -69,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d1,0 -70,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d0,0 -71,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d1,0 -72,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d0,0 -73,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d1,0 -74,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d0,0 -75,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d1,0 -76,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d0,0 -77,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d1,0 -78,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d0,0 -79,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d1,0 -80,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d0,0 -81,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d1,0 -82,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d0,0 -83,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d1,0 +50,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d0,571 +51,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d1,1149 +52,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d0,616 +53,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d1,613 +54,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d0,841 +55,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d1,519 +56,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d0,1140 +57,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d1,514 +58,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d0,1504 +59,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d1,627 +60,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d0,834 +61,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d1,825 +62,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d0,987 +63,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d1,747 +64,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d0,1212 +65,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d1,758 +66,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d0,1469 +67,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d1,816 +68,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d0,1037 +69,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d1,1079 +70,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d0,1165 +71,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d1,1010 +72,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d0,1341 +73,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d1,1001 +74,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d0,1557 +75,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d1,1073 +76,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d0,1317 +77,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d1,1463 +78,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d0,1413 +79,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d1,1389 +80,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d0,1562 +81,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d1,1389 +82,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d0,1748 +83,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d1,1450 84,DoorM,kreg_step_motor_shaft,1 85,DoorM,kreg_step_motor_one_circle_pulse,10000 86,DoorM,kreg_step_motor_one_circle_pulse_denominator,1