From 1b8611070a72f78168c96aceca1a845b4c3be9a8 Mon Sep 17 00:00:00 2001 From: huangxiang <155373492@qq.com> Date: Mon, 28 Apr 2025 19:30:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E5=8A=A0=E6=B6=B2?= =?UTF-8?q?=E6=9C=BA=E6=A2=B0=E8=87=82=E5=92=8C=E8=BD=AC=E7=A7=BB=E6=9C=BA?= =?UTF-8?q?=E6=A2=B0=E8=87=82=E7=B1=BB=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iflytop/gd/common/result/ResultCode.java | 4 +- .../iflytop/gd/system/constants/DistanceUnit.java | 14 +- .../gd/system/devices/BaseStepStepMotor.java | 46 ------- .../gd/system/devices/LiquidFillingArm.java | 21 +++ .../gd/system/devices/StandardStepMotor.java | 153 +++++++++++++++++++++ .../com/iflytop/gd/system/devices/StepMotor.java | 10 +- .../gd/system/devices/TransportationArm.java | 22 +++ .../iflytop/gd/system/models/LiquidFillingArm.java | 9 -- .../gd/system/models/TubeTransportationArm.java | 9 -- 9 files changed, 219 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java create mode 100644 src/main/java/com/iflytop/gd/system/devices/LiquidFillingArm.java create mode 100644 src/main/java/com/iflytop/gd/system/devices/StandardStepMotor.java create mode 100644 src/main/java/com/iflytop/gd/system/devices/TransportationArm.java delete mode 100644 src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java delete mode 100644 src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java diff --git a/src/main/java/com/iflytop/gd/common/result/ResultCode.java b/src/main/java/com/iflytop/gd/common/result/ResultCode.java index 02aa2e3..504cc5c 100644 --- a/src/main/java/com/iflytop/gd/common/result/ResultCode.java +++ b/src/main/java/com/iflytop/gd/common/result/ResultCode.java @@ -42,7 +42,9 @@ public enum ResultCode implements IResultCode, Serializable { //============================ 5xxx:系统 & 第三方 ============================ SYSTEM_ERROR("5000", "系统内部错误"), SERVICE_UNAVAILABLE("5001", "服务暂不可用"), - EXTERNAL_API_ERROR("5002", "第三方服务调用失败"); + EXTERNAL_API_ERROR("5002", "第三方服务调用失败"), + COMMAND_EXEC_TIMEOUT("5003", "命令执行超时"), + HARDWARE_ERROR("5004", "硬件错误"); /** 状态码 */ private final String code; diff --git a/src/main/java/com/iflytop/gd/system/constants/DistanceUnit.java b/src/main/java/com/iflytop/gd/system/constants/DistanceUnit.java index 0e74158..e9528a6 100644 --- a/src/main/java/com/iflytop/gd/system/constants/DistanceUnit.java +++ b/src/main/java/com/iflytop/gd/system/constants/DistanceUnit.java @@ -1,5 +1,17 @@ package com.iflytop.gd.system.constants; public enum DistanceUnit { - MM, CM + MM, CM; + + public Integer toMM(Integer value) { + if (this == MM) { + return value; + } + + if (this == CM) { + return value * 10; + } + + return value; + } } diff --git a/src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java b/src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java deleted file mode 100644 index 13a3e24..0000000 --- a/src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.iflytop.gd.system.devices; - -import com.iflytop.gd.infrastructure.drivers.CmdId; -import com.iflytop.gd.infrastructure.drivers.ModuleId; -import com.iflytop.gd.system.constants.DistanceUnit; -import com.iflytop.gd.system.constants.SpeedUnit; -import com.iflytop.gd.system.drivers.CommandBus; -import com.iflytop.gd.system.exceptions.CommandExecTimeoutException; -import com.iflytop.gd.system.exceptions.HardwareErrorException; -import com.iflytop.gd.system.models.DataPacket; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -public abstract class BaseStepStepMotor implements StepMotor { - protected final ModuleId moduleId; - protected final CommandBus commandBus; - protected final Integer DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS = 10; - - protected BaseStepStepMotor(ModuleId moduleId, CommandBus commandBus) { - this.moduleId = moduleId; - this.commandBus = commandBus; - } - - - @Override - public void easyMoveTo(Integer value, DistanceUnit unit) { - DataPacket commandDataPacket = DataPacket.createCommandDataPacket(moduleId.index, CmdId.step_motor_easy_move_to.index, value); - try { - commandBus.waitForCommandExec(commandDataPacket, DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS, TimeUnit.SECONDS); - } catch (CommandExecTimeoutException e) { - throw new RuntimeException(e); - } catch (HardwareErrorException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - @Override - public void easyMoveBy(Integer value, DistanceUnit unit) { - - } -} diff --git a/src/main/java/com/iflytop/gd/system/devices/LiquidFillingArm.java b/src/main/java/com/iflytop/gd/system/devices/LiquidFillingArm.java new file mode 100644 index 0000000..3487d81 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/devices/LiquidFillingArm.java @@ -0,0 +1,21 @@ +package com.iflytop.gd.system.devices; + + +import com.iflytop.gd.infrastructure.drivers.ModuleId; +import com.iflytop.gd.system.drivers.CommandBus; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +/** + * 液体加注机械臂 + */ +@Component +public class LiquidFillingArm { + private final StepMotor largeArmMotor; + private final StepMotor smallArmMotor; + + public LiquidFillingArm(CommandBus commandBus) { + this.largeArmMotor = new StandardStepMotor(ModuleId.DualRobotAxis1M, commandBus); + this.smallArmMotor = new StandardStepMotor(ModuleId.DualRobotAxis2M, commandBus); + } +} diff --git a/src/main/java/com/iflytop/gd/system/devices/StandardStepMotor.java b/src/main/java/com/iflytop/gd/system/devices/StandardStepMotor.java new file mode 100644 index 0000000..c9ae12d --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/devices/StandardStepMotor.java @@ -0,0 +1,153 @@ +package com.iflytop.gd.system.devices; + +import com.iflytop.gd.infrastructure.drivers.CmdId; +import com.iflytop.gd.infrastructure.drivers.ModuleId; +import com.iflytop.gd.system.constants.DistanceUnit; +import com.iflytop.gd.system.constants.RotationDirection; +import com.iflytop.gd.system.drivers.CommandBus; +import com.iflytop.gd.system.exceptions.CommandExecTimeoutException; +import com.iflytop.gd.system.exceptions.HardwareErrorException; +import com.iflytop.gd.system.models.DataPacket; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +public class StandardStepMotor implements StepMotor { + protected final ModuleId moduleId; + protected final CommandBus commandBus; + protected final Integer DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS = 10; + + protected StandardStepMotor(ModuleId moduleId, CommandBus commandBus) { + this.moduleId = moduleId; + this.commandBus = commandBus; + } + + + @Override + public void easyMoveTo(Integer value, DistanceUnit unit) throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException { + DataPacket commandDataPacket = DataPacket.createCommandDataPacket(moduleId.index, CmdId.step_motor_easy_move_to.index, unit.toMM(value)); + commandBus.waitForCommandExec(commandDataPacket, DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + + @Override + public void easyMoveBy(Integer value, DistanceUnit unit) throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException { + DataPacket commandDataPacket = DataPacket.createCommandDataPacket(moduleId.index, CmdId.step_motor_easy_move_by.index, unit.toMM(value)); + commandBus.waitForCommandExec(commandDataPacket, DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + + @Override + public void easyMoveToZero() throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException { + DataPacket commandDataPacket = DataPacket.createCommandDataPacket(moduleId.index, CmdId.step_motor_easy_move_to_zero.index); + commandBus.waitForCommandExec(commandDataPacket, DEFAULT_COMMAND_EXEC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + + @Override + public void setCurrentPosition(Integer value) { + + } + + @Override + public void easyMoveToZeroPointQuick() { + + } + + @Override + public void easyMoveToEndPoint() { + + } + + @Override + public void enable() { + + } + + @Override + public Integer readPosition() { + return 0; + } + + @Override + public Integer readEncoderPosition() { + return 0; + } + + @Override + public void easyRotate(RotationDirection direction) { + + } + + @Override + public void easyMoveByBlock() { + + } + + @Override + public void easyMoveToBlock() { + + } + + @Override + public void easyMoveToZeroBlock() { + + } + + @Override + public void readPositionByMoveToZeroBlock() { + + } + + @Override + public void easyMoveToZeroPointQuickBlock() { + + } + + @Override + public void stop() { + + } + + @Override + public void moveByBlock() { + + } + + @Override + public void moveTOBlock() { + + } + + @Override + public void rotate() { + + } + + @Override + public Boolean readIOState() { + return null; + } + + @Override + public void easyReciprocatingMotion() { + + } + + @Override + public void easyReciprocatingMotionBlock() { + + } + + @Override + public Boolean isReturnToZero() { + return null; + } + + @Override + public void setReg() { + + } + + @Override + public Integer readReg() { + return 0; + } +} diff --git a/src/main/java/com/iflytop/gd/system/devices/StepMotor.java b/src/main/java/com/iflytop/gd/system/devices/StepMotor.java index c534ed6..003789f 100644 --- a/src/main/java/com/iflytop/gd/system/devices/StepMotor.java +++ b/src/main/java/com/iflytop/gd/system/devices/StepMotor.java @@ -2,6 +2,10 @@ package com.iflytop.gd.system.devices; import com.iflytop.gd.system.constants.DistanceUnit; import com.iflytop.gd.system.constants.RotationDirection; +import com.iflytop.gd.system.exceptions.CommandExecTimeoutException; +import com.iflytop.gd.system.exceptions.HardwareErrorException; + +import java.io.IOException; /** * 电机驱动类型设备 @@ -13,11 +17,11 @@ public interface StepMotor { * @param value * @param unit */ - void easyMoveBy(Integer value, DistanceUnit unit); + void easyMoveBy(Integer value, DistanceUnit unit) throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException; - void easyMoveTo(Integer value, DistanceUnit unit); + void easyMoveTo(Integer value, DistanceUnit unit) throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException; - void easyMoveToZero(); + void easyMoveToZero() throws HardwareErrorException, CommandExecTimeoutException, IOException, InterruptedException; void setCurrentPosition(Integer value); diff --git a/src/main/java/com/iflytop/gd/system/devices/TransportationArm.java b/src/main/java/com/iflytop/gd/system/devices/TransportationArm.java new file mode 100644 index 0000000..e499402 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/devices/TransportationArm.java @@ -0,0 +1,22 @@ +package com.iflytop.gd.system.devices; + +import com.iflytop.gd.infrastructure.drivers.ModuleId; +import com.iflytop.gd.system.drivers.CommandBus; +import org.springframework.stereotype.Component; + +/** + * 试管转移机械臂 + */ +@Component +public class TransportationArm { + + private StepMotor xDimMotor; + private StepMotor yDimMotor; + private StepMotor zDimMotor; + + public TransportationArm(CommandBus commandBus) { + this.xDimMotor = new StandardStepMotor(ModuleId.HBotXM, commandBus); + this.yDimMotor = new StandardStepMotor(ModuleId.HBotYM, commandBus); + this.zDimMotor = new StandardStepMotor(ModuleId.HBotZM, commandBus); + } +} diff --git a/src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java b/src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java deleted file mode 100644 index 57a00d4..0000000 --- a/src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iflytop.gd.system.models; - - -/** - * 液体加注机械臂 - */ -public interface LiquidFillingArm { - -} diff --git a/src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java b/src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java deleted file mode 100644 index a1190d6..0000000 --- a/src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iflytop.gd.system.models; - -/** - * 试管转移机械臂 - */ -public interface TubeTransportationArm { - - -}