From 2ab7962eb943638f62988bf69e177049c62ff58e Mon Sep 17 00:00:00 2001 From: HSZ_HeSongZhen <210202959@qq.com> Date: Wed, 28 May 2025 11:43:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=B5=E6=9C=BA=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hardware/command/handlers/AcidPumpHandler.java | 95 ---------------- .../command/handlers/ChimeBuzzerHandler.java | 4 + .../sgs/hardware/command/handlers/DoorHandler.java | 72 ------------ .../sgs/hardware/command/handlers/FanHandler.java | 57 ---------- .../command/handlers/HeaterMotorHandler.java | 73 ------------ .../hardware/command/handlers/IOCtrlHandler.java | 57 ++++++++++ .../command/handlers/LiquidPumpHandler.java | 5 + .../command/handlers/LiquidValveHandler.java | 5 + .../hardware/command/handlers/MotorHandler.java | 123 ++++++++++++++++++++ .../hardware/command/handlers/ServoHandler.java | 124 +++++++++++++++++++++ .../command/handlers/ShakeMotorHandler.java | 68 ----------- .../drivers/StepMotorDriver/DoorDriver.java | 79 ------------- .../StepMotorDriver/MotorWrapperDriver.java | 100 +++++++++++++++++ .../hardware/type/StepMotor/DeviceStepMotorId.java | 19 ---- 14 files changed, 418 insertions(+), 463 deletions(-) delete mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/AcidPumpHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/ChimeBuzzerHandler.java delete mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/DoorHandler.java delete mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/FanHandler.java delete mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/HeaterMotorHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/IOCtrlHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidPumpHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidValveHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/MotorHandler.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/ServoHandler.java delete mode 100644 src/main/java/com/iflytop/sgs/hardware/command/handlers/ShakeMotorHandler.java delete mode 100644 src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/DoorDriver.java create mode 100644 src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/MotorWrapperDriver.java diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/AcidPumpHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/AcidPumpHandler.java deleted file mode 100644 index d396782..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/command/handlers/AcidPumpHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.iflytop.sgs.hardware.command.handlers; - -import com.iflytop.sgs.common.cmd.DeviceCommand; -import com.iflytop.sgs.common.enums.cmd.CmdAction; -import com.iflytop.sgs.common.enums.cmd.CmdDevice; -import com.iflytop.sgs.common.enums.cmd.CmdDirection; -import com.iflytop.sgs.hardware.command.CommandHandler; -import com.iflytop.sgs.hardware.drivers.StepMotorDriver.AcidPumpDriver; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorDirect; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; -import com.iflytop.sgs.hardware.type.MId; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static com.iflytop.sgs.common.enums.cmd.CmdDirection.backward; -import static com.iflytop.sgs.common.enums.cmd.CmdDirection.forward; - -@Slf4j -@Component -@RequiredArgsConstructor -public class AcidPumpHandler extends CommandHandler { - private final AcidPumpDriver driver_; - - private final Map stepMotorMIdMap_ = Map.ofEntries( -// Map.entry(CmdDevice.acid_pump_1, StepMotorMId.ACID_PUMP_1_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_2, StepMotorMId.ACID_PUMP_2_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_3, StepMotorMId.ACID_PUMP_3_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_4, StepMotorMId.ACID_PUMP_4_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_5, StepMotorMId.ACID_PUMP_5_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_6, StepMotorMId.ACID_PUMP_6_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_7, StepMotorMId.ACID_PUMP_7_MOTOR_MID), -// Map.entry(CmdDevice.acid_pump_8, StepMotorMId.ACID_PUMP_8_MOTOR_MID) - ); - private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). - collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); - private final Set supportActions = Set.of(CmdAction.set, CmdAction.move_by, CmdAction.stop, CmdAction.rotate); - - @Override - protected Map getSupportCmdDeviceMIdMap() - { - return supportCmdDeviceMIdMap; - } - - @Override - protected Set getSupportActions() { - return supportActions; - } - - public StepMotorDirect getMotorDirect(CmdDirection cmdDirection) - { - return switch (cmdDirection) { - case forward -> StepMotorDirect.FORWARD; - case backward -> StepMotorDirect.BACKWARD; - }; - } - - @Override - public void handleCommand(DeviceCommand command) throws Exception { - // 发送命令 - StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); - if (command.getAction() == CmdAction.origin) { - driver_.moveToHome(stepMotorMId); - } - else if(command.getAction() == CmdAction.stop) { - driver_.stop(stepMotorMId); - } - else if(command.getAction() == CmdAction.move) { - double position = command.getParam().getPosition(); - driver_.moveTo(stepMotorMId, position); - } - else if(command.getAction() == CmdAction.move_by) { - - double distance = command.getParam().getPosition(); - - driver_.moveBy(stepMotorMId, distance); - } - else if(command.getAction() == CmdAction.rotate) { - CmdDirection cmdDirection = command.getParam().getDirection(); - - StepMotorDirect direct = getMotorDirect(cmdDirection); - driver_.rotate(stepMotorMId, direct); - } - else if(command.getAction() == CmdAction.set) { - Double speed = command.getParam().getSpeed(); - if(speed != null) { - driver_.setSpeed(stepMotorMId, speed); - } - } - } -} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/ChimeBuzzerHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/ChimeBuzzerHandler.java new file mode 100644 index 0000000..dab3efc --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/ChimeBuzzerHandler.java @@ -0,0 +1,4 @@ +package com.iflytop.sgs.hardware.command.handlers; + +public class ChimeBuzzerHandler { +} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/DoorHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/DoorHandler.java deleted file mode 100644 index 6f5734f..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/command/handlers/DoorHandler.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.iflytop.sgs.hardware.command.handlers; - -import com.iflytop.sgs.common.cmd.DeviceCommand; -import com.iflytop.sgs.common.enums.cmd.CmdAction; -import com.iflytop.sgs.common.enums.cmd.CmdDevice; -import com.iflytop.sgs.hardware.command.CommandHandler; -import com.iflytop.sgs.hardware.drivers.StepMotorDriver.DoorDriver; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; -import com.iflytop.sgs.hardware.type.MId; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class DoorHandler extends CommandHandler { - private final DoorDriver driver_; - - private final Map stepMotorMIdMap_ = Map.ofEntries( -// Map.entry(CmdDevice.door_motor, StepMotorMId.DOOR_MOTOR_MID) - ); - private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). - collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); - private final Set supportActions = Set.of(CmdAction.set, CmdAction.origin, CmdAction.move, CmdAction.move_by, CmdAction.stop); - - @Override - protected Map getSupportCmdDeviceMIdMap() - { - return supportCmdDeviceMIdMap; - } - - @Override - protected Set getSupportActions() { - return supportActions; - } - - @Override - public void handleCommand(DeviceCommand command) throws Exception { - // 发送命令 - StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); - if (command.getAction() == CmdAction.origin) { - driver_.moveToHome(stepMotorMId); - } - else if(command.getAction() == CmdAction.stop) { - driver_.stop(stepMotorMId); - } - else if(command.getAction() == CmdAction.move) { - double position = command.getParam().getPosition(); - driver_.moveTo(stepMotorMId, position); - } - else if(command.getAction() == CmdAction.move_by) { - double distance = command.getParam().getPosition(); - - driver_.moveBy(stepMotorMId, distance); - } - else if(command.getAction() == CmdAction.set) { - Double speed = command.getParam().getSpeed(); - if(speed != null) { - driver_.setSpeed(stepMotorMId, speed); - } - } - } -} - - - - diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/FanHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/FanHandler.java deleted file mode 100644 index 174b5dc..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/command/handlers/FanHandler.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.iflytop.sgs.hardware.command.handlers; - -import com.iflytop.sgs.common.cmd.DeviceCommand; -import com.iflytop.sgs.common.enums.cmd.CmdAction; -import com.iflytop.sgs.common.enums.cmd.CmdDevice; -import com.iflytop.sgs.hardware.command.CommandHandler; -import com.iflytop.sgs.hardware.drivers.DODriver.FanDriver; -import com.iflytop.sgs.hardware.type.MId; -import com.iflytop.sgs.hardware.type.IO.OutputIOMId; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -// - -@Slf4j -@Component -@RequiredArgsConstructor -public class FanHandler extends CommandHandler { - private final FanDriver fanDriver_; - private final Map supportCmdDeviceIOOutputMap = Map.ofEntries( - Map.entry(CmdDevice.fan_1, OutputIOMId.DO_FAN1), - Map.entry(CmdDevice.fan_2, OutputIOMId.DO_FAN2), - Map.entry(CmdDevice.fan_3, OutputIOMId.DO_FAN3), - Map.entry(CmdDevice.fan_4, OutputIOMId.DO_FAN4) - ); - - private final Map supportCmdDeviceMIdMap = supportCmdDeviceIOOutputMap.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); - - private final Set supportActions = Set.of(CmdAction.open, CmdAction.close); - - @Override - protected Map getSupportCmdDeviceMIdMap() - { - return supportCmdDeviceMIdMap; - } - - @Override - protected Set getSupportActions() { - return supportActions; - } - - @Override - public void handleCommand(DeviceCommand command) throws Exception { - // 发送命令 - if (command.getAction() == CmdAction.open) { - fanDriver_.open(supportCmdDeviceIOOutputMap.get(command.getDevice())); - } else if (command.getAction() == CmdAction.close) { - fanDriver_.close(supportCmdDeviceIOOutputMap.get(command.getDevice())); - } - } -} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/HeaterMotorHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/HeaterMotorHandler.java deleted file mode 100644 index 7454795..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/command/handlers/HeaterMotorHandler.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.iflytop.sgs.hardware.command.handlers; - -import com.iflytop.sgs.common.cmd.DeviceCommand; -import com.iflytop.sgs.common.enums.cmd.CmdAction; -import com.iflytop.sgs.common.enums.cmd.CmdDevice; -import com.iflytop.sgs.hardware.command.CommandHandler; -import com.iflytop.sgs.hardware.drivers.StepMotorDriver.HeaterMotorDriver; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; -import com.iflytop.sgs.hardware.type.MId; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class HeaterMotorHandler extends CommandHandler { - private final HeaterMotorDriver driver_; - - private final Map stepMotorMIdMap_ = Map.ofEntries( -// Map.entry(CmdDevice.heater_motor_1, StepMotorMId.HEATER_4_MOTOR_MID),//前后端顺序定义不一致,这里做了映射关系 -// Map.entry(CmdDevice.heater_motor_2, StepMotorMId.HEATER_5_MOTOR_MID), -// Map.entry(CmdDevice.heater_motor_3, StepMotorMId.HEATER_6_MOTOR_MID), -// Map.entry(CmdDevice.heater_motor_4, StepMotorMId.HEATER_1_MOTOR_MID), -// Map.entry(CmdDevice.heater_motor_5, StepMotorMId.HEATER_2_MOTOR_MID), -// Map.entry(CmdDevice.heater_motor_6, StepMotorMId.HEATER_3_MOTOR_MID) - ); - private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). - collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); - private final Set supportActions = Set.of(CmdAction.set, CmdAction.origin, CmdAction.move, CmdAction.move_by, CmdAction.stop); - - @Override - protected Map getSupportCmdDeviceMIdMap() - { - return supportCmdDeviceMIdMap; - } - - @Override - protected Set getSupportActions() { - return supportActions; - } - - @Override - public void handleCommand(DeviceCommand command) throws Exception { - // 发送命令 - StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); - if (command.getAction() == CmdAction.origin) { - driver_.moveToHome(stepMotorMId); - } - else if(command.getAction() == CmdAction.stop) { - driver_.stop(stepMotorMId); - } - else if(command.getAction() == CmdAction.move) { - double position = command.getParam().getPosition(); - driver_.moveTo(stepMotorMId, position); - } - else if(command.getAction() == CmdAction.move_by) { - double distance = command.getParam().getPosition(); - - driver_.moveBy(stepMotorMId, distance); - } - else if(command.getAction() == CmdAction.set) { - Double speed = command.getParam().getSpeed(); - if(speed != null) { - driver_.setSpeed(stepMotorMId, speed); - } - } - } -} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/IOCtrlHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/IOCtrlHandler.java new file mode 100644 index 0000000..5f09e78 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/IOCtrlHandler.java @@ -0,0 +1,57 @@ +package com.iflytop.sgs.hardware.command.handlers; + +import com.iflytop.sgs.common.cmd.DeviceCommand; +import com.iflytop.sgs.common.enums.cmd.CmdAction; +import com.iflytop.sgs.common.enums.cmd.CmdDevice; +import com.iflytop.sgs.hardware.command.CommandHandler; +import com.iflytop.sgs.hardware.drivers.DODriver.FanDriver; +import com.iflytop.sgs.hardware.type.MId; +import com.iflytop.sgs.hardware.type.IO.OutputIOMId; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +// + +@Slf4j +@Component +@RequiredArgsConstructor +public class IOCtrlHandler extends CommandHandler { + private final FanDriver fanDriver_; + private final Map supportCmdDeviceIOOutputMap = Map.ofEntries( + Map.entry(CmdDevice.fan_1, OutputIOMId.DO_FAN1), + Map.entry(CmdDevice.fan_2, OutputIOMId.DO_FAN2), + Map.entry(CmdDevice.fan_3, OutputIOMId.DO_FAN3), + Map.entry(CmdDevice.fan_4, OutputIOMId.DO_FAN4) + ); + + private final Map supportCmdDeviceMIdMap = supportCmdDeviceIOOutputMap.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); + + private final Set supportActions = Set.of(CmdAction.open, CmdAction.close); + + @Override + protected Map getSupportCmdDeviceMIdMap() + { + return supportCmdDeviceMIdMap; + } + + @Override + protected Set getSupportActions() { + return supportActions; + } + + @Override + public void handleCommand(DeviceCommand command) throws Exception { + // 发送命令 + if (command.getAction() == CmdAction.open) { + fanDriver_.open(supportCmdDeviceIOOutputMap.get(command.getDevice())); + } else if (command.getAction() == CmdAction.close) { + fanDriver_.close(supportCmdDeviceIOOutputMap.get(command.getDevice())); + } + } +} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidPumpHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidPumpHandler.java new file mode 100644 index 0000000..6ddd4f3 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidPumpHandler.java @@ -0,0 +1,5 @@ +package com.iflytop.sgs.hardware.command.handlers; + +// TODO: Implement the LiquidPumpHandler class to handle liquid pump operations. +public class LiquidPumpHandler { +} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidValveHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidValveHandler.java new file mode 100644 index 0000000..a2ffadb --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/LiquidValveHandler.java @@ -0,0 +1,5 @@ +package com.iflytop.sgs.hardware.command.handlers; + + +public class LiquidValveHandler { +} diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/MotorHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/MotorHandler.java new file mode 100644 index 0000000..8938b1d --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/MotorHandler.java @@ -0,0 +1,123 @@ +package com.iflytop.sgs.hardware.command.handlers; + +import com.iflytop.sgs.common.cmd.DeviceCommand; +import com.iflytop.sgs.common.enums.cmd.CmdAction; +import com.iflytop.sgs.common.enums.cmd.CmdDevice; +import com.iflytop.sgs.common.enums.cmd.CmdDirection; +import com.iflytop.sgs.hardware.command.CommandHandler; +import com.iflytop.sgs.hardware.drivers.StepMotorDriver.MotorWrapperDriver; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorDirect; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; +import com.iflytop.sgs.hardware.type.MId; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MotorHandler extends CommandHandler { + private final MotorWrapperDriver driver_; + + private final Map stepMotorMIdMap_ = Map.ofEntries( + Map.entry(CmdDevice.door_motor, StepMotorMId.DoorM), + Map.entry(CmdDevice.z_motor, StepMotorMId.ZM), + Map.entry(CmdDevice.liquid_motor, StepMotorMId.LiquidM) // TODO: 蠕动泵后期可能会调整方案 + ); + private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). + collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); + + private final Set supportActions = Set.of( + CmdAction.set, + CmdAction.enable, + CmdAction.disable, + CmdAction.open_clamp, + CmdAction.close_clamp, + CmdAction.origin, + CmdAction.move, + CmdAction.move_by, + CmdAction.rotate, + CmdAction.stop); + + @Override + protected Map getSupportCmdDeviceMIdMap() { + return supportCmdDeviceMIdMap; + } + + @Override + protected Set getSupportActions() { + return supportActions; + } + + public StepMotorDirect getMotorDirect(CmdDirection cmdDirection) + { + return switch (cmdDirection) { + case forward -> StepMotorDirect.FORWARD; + case backward -> StepMotorDirect.BACKWARD; + }; + } + + @Override + public void handleCommand(DeviceCommand command) throws Exception { + // 发送命令 + StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); + + switch (command.getAction()) { + case enable -> { + log.info("Motor {} Enable", stepMotorMId.mid.getDescription()); + driver_.motorEnable(stepMotorMId, true); + } + case disable -> { + log.info("Motor {} Disable", stepMotorMId.mid.getDescription()); + driver_.motorEnable(stepMotorMId, false); + } + case open_clamp -> { + log.info("Motor {} Open Clamp", stepMotorMId.mid.getDescription()); + driver_.openClamp(stepMotorMId); + } + case close_clamp -> { + log.info("Motor {} Close Clamp", stepMotorMId.mid.getDescription()); + driver_.closeClamp(stepMotorMId); + } + case origin -> { + log.info("Motor {} Move To Origin", stepMotorMId.mid.getDescription()); + driver_.moveToHome(stepMotorMId); + } + case move -> { + double position = command.getParam().getPosition(); + log.info("Motor {} Move To Position {}", stepMotorMId.mid.getDescription(), position); + driver_.moveTo(stepMotorMId, position); + } + case move_by -> { + double distance = command.getParam().getPosition(); + log.info("Motor {} Move By Distance {}", stepMotorMId.mid.getDescription(), distance); + driver_.moveBy(stepMotorMId, distance); + } + case rotate -> { + CmdDirection cmdDirection = command.getParam().getDirection(); + StepMotorDirect direct = getMotorDirect(cmdDirection); + log.info("Motor {} Rotate {}", stepMotorMId.mid.getDescription(), direct.name()); + driver_.rotate(stepMotorMId, direct); + } + case stop -> { + log.info("Motor {} Stop", stepMotorMId.mid.getDescription()); + driver_.stop(stepMotorMId); + } + case set -> { + Double speed = command.getParam().getSpeed(); + if (speed != null) { + log.info("Motor {} Set Speed {}", stepMotorMId.mid.getDescription(), speed); + driver_.setSpeed(stepMotorMId, speed); + } + } + } + } +} + + + + diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/ServoHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/ServoHandler.java new file mode 100644 index 0000000..01bac75 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/command/handlers/ServoHandler.java @@ -0,0 +1,124 @@ +package com.iflytop.sgs.hardware.command.handlers; + +import com.iflytop.sgs.common.cmd.DeviceCommand; +import com.iflytop.sgs.common.enums.cmd.CmdAction; +import com.iflytop.sgs.common.enums.cmd.CmdDevice; +import com.iflytop.sgs.common.enums.cmd.CmdDirection; +import com.iflytop.sgs.hardware.command.CommandHandler; +import com.iflytop.sgs.hardware.drivers.StepMotorDriver.MotorWrapperDriver; +import com.iflytop.sgs.hardware.type.MId; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorDirect; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class ServoHandler extends CommandHandler { + private final MotorWrapperDriver driver_; + + private final Map stepMotorMIdMap_ = Map.ofEntries( + Map.entry(CmdDevice.door_motor, StepMotorMId.DoorM), + Map.entry(CmdDevice.z_motor, StepMotorMId.ZM), + Map.entry(CmdDevice.liquid_motor, StepMotorMId.LiquidM) // TODO: 蠕动泵后期可能会调整方案 + ); + private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). + collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); + + private final Set supportActions = Set.of( + CmdAction.set, + CmdAction.enable, + CmdAction.disable, + CmdAction.open_clamp, + CmdAction.close_clamp, + CmdAction.origin, + CmdAction.move, + CmdAction.move_by, + CmdAction.rotate, + CmdAction.stop); + + @Override + protected Map getSupportCmdDeviceMIdMap() { + return supportCmdDeviceMIdMap; + } + + @Override + protected Set getSupportActions() { + return supportActions; + } + + public StepMotorDirect getMotorDirect(CmdDirection cmdDirection) + { + return switch (cmdDirection) { + case forward -> StepMotorDirect.FORWARD; + case backward -> StepMotorDirect.BACKWARD; + }; + } + + @Override + public void handleCommand(DeviceCommand command) throws Exception { + // 发送命令 + StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); + + switch (command.getAction()) { + case enable -> { + log.info("Motor {} Enable", stepMotorMId.mid.getDescription()); + driver_.motorEnable(stepMotorMId, true); + } + case disable -> { + log.info("Motor {} Disable", stepMotorMId.mid.getDescription()); + driver_.motorEnable(stepMotorMId, false); + } + case open_clamp -> { + log.info("Motor {} Open Clamp", stepMotorMId.mid.getDescription()); + driver_.openClamp(stepMotorMId); + } + case close_clamp -> { + log.info("Motor {} Close Clamp", stepMotorMId.mid.getDescription()); + driver_.closeClamp(stepMotorMId); + } + case origin -> { + log.info("Motor {} Move To Origin", stepMotorMId.mid.getDescription()); + driver_.moveToHome(stepMotorMId); + } + case move -> { + double position = command.getParam().getPosition(); + log.info("Motor {} Move To Position {}", stepMotorMId.mid.getDescription(), position); + driver_.moveTo(stepMotorMId, position); + } + case move_by -> { + double distance = command.getParam().getPosition(); + log.info("Motor {} Move By Distance {}", stepMotorMId.mid.getDescription(), distance); + driver_.moveBy(stepMotorMId, distance); + } + case rotate -> { + CmdDirection cmdDirection = command.getParam().getDirection(); + StepMotorDirect direct = getMotorDirect(cmdDirection); + log.info("Motor {} Rotate {}", stepMotorMId.mid.getDescription(), direct.name()); + driver_.rotate(stepMotorMId, direct); + } + case stop -> { + log.info("Motor {} Stop", stepMotorMId.mid.getDescription()); + driver_.stop(stepMotorMId); + } + case set -> { + Double speed = command.getParam().getSpeed(); + if (speed != null) { + log.info("Motor {} Set Speed {}", stepMotorMId.mid.getDescription(), speed); + driver_.setSpeed(stepMotorMId, speed); + } + } + } + } +} + + + + diff --git a/src/main/java/com/iflytop/sgs/hardware/command/handlers/ShakeMotorHandler.java b/src/main/java/com/iflytop/sgs/hardware/command/handlers/ShakeMotorHandler.java deleted file mode 100644 index 0967212..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/command/handlers/ShakeMotorHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iflytop.sgs.hardware.command.handlers; - - -import com.iflytop.sgs.common.cmd.DeviceCommand; -import com.iflytop.sgs.common.enums.cmd.CmdAction; -import com.iflytop.sgs.common.enums.cmd.CmdDevice; -import com.iflytop.sgs.hardware.command.CommandHandler; -import com.iflytop.sgs.hardware.drivers.StepMotorDriver.ShakeMotorDriver; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorDirect; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; -import com.iflytop.sgs.hardware.type.MId; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class ShakeMotorHandler extends CommandHandler { - private final ShakeMotorDriver driver_; - - private final Map stepMotorMIdMap_ = Map.ofEntries( - ); - private final Map supportCmdDeviceMIdMap = stepMotorMIdMap_.entrySet().stream(). - collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); - - private final Set supportActions = Set.of(CmdAction.start, CmdAction.stop, CmdAction.set, CmdAction.origin); - - - @Override - protected Map getSupportCmdDeviceMIdMap() - { - return supportCmdDeviceMIdMap; - } - - @Override - protected Set getSupportActions() { - return supportActions; - } - - @Override - public void handleCommand(DeviceCommand command) throws Exception { - // 发送命令 - StepMotorMId stepMotorMId = stepMotorMIdMap_.get(command.getDevice()); - - if(command.getAction() == CmdAction.stop) { - driver_.stopShake(stepMotorMId); - } - else if(command.getAction() == CmdAction.set) { - Double speed = command.getParam().getSpeed(); - if(speed != null) { - driver_.setSpeed(stepMotorMId, speed); - } - } - else if (command.getAction() == CmdAction.start) { - StepMotorDirect direct = StepMotorDirect.FORWARD; - driver_.startShake(stepMotorMId, direct); - } - else if(command.getAction() == CmdAction.origin){ - driver_.moveToHome(stepMotorMId); - } - } -} - diff --git a/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/DoorDriver.java b/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/DoorDriver.java deleted file mode 100644 index edadacd..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/DoorDriver.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.iflytop.sgs.hardware.drivers.StepMotorDriver; - -import com.iflytop.sgs.hardware.config.StepMotorConfig; -import com.iflytop.sgs.hardware.exception.HardwareException; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; -import com.iflytop.sgs.hardware.type.StepMotor.StepMotorRegIndex; -import com.iflytop.sgs.hardware.utils.Math.StepMotorConverter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.security.InvalidParameterException; - -@Slf4j -@Component -@RequiredArgsConstructor -public class DoorDriver{ - private final StepMotorConfig config_; - private final StepMotorCtrlDriver stepMotorCtrlDriver_; - - // ==== ==== ==== ==== ==== ==== Get ==== ==== ==== ==== ==== ==== - private double getSpeed(StepMotorMId stepMotorMId) - { - // TODO: 从单片机中获取速度 - return 0.0; - } - - // ==== ==== ==== ==== ==== ==== Set ==== ==== ==== ==== ==== ==== - public void setSpeed(StepMotorMId stepMotorMId, double speed) throws HardwareException { - // 检查速度是否合法 - // 设置速度到单片机 - int motorSpeed = StepMotorConverter.toMotorSpeed(Math.abs(speed), config_.getLead(stepMotorMId)); - stepMotorCtrlDriver_.setReg(stepMotorMId, StepMotorRegIndex.kreg_step_motor_default_velocity, motorSpeed); - } - - // ==== ==== ==== ==== ==== ==== Ctrl ==== ==== ==== ==== ==== ==== - public void motorEnable(StepMotorMId stepMotorMId, Boolean enable) throws Exception { - Integer i_enable = enable ? 1 : 0; - stepMotorCtrlDriver_.stepMotorEnable(stepMotorMId, i_enable); - } - - public void moveToHome(StepMotorMId stepMotorMId) throws Exception { - log.info("Motor {} Move To Home", stepMotorMId.mid.getDescription()); - motorEnable(stepMotorMId, true); - stepMotorCtrlDriver_.stepMotorEasyMoveToZeroBlock(stepMotorMId); - } - - public void moveTo(StepMotorMId stepMotorMId, double position) throws Exception { - // 检查位置是否合法 - if (Math.abs(position) > Math.abs(config_.getMaxLimit(stepMotorMId))) { - log.error("Motor {} Move To position out of range, position {}, limit {}", stepMotorMId.mid.getDescription(), position, config_.getMaxLimit(stepMotorMId)); - throw new InvalidParameterException("position is out of range"); - } - - motorEnable(stepMotorMId, true); - int motorPosition = StepMotorConverter.toMotorPosition(position); - log.info("Motor {} Move To position {}, Motor Position {}", stepMotorMId.mid.getDescription(), position, motorPosition); - stepMotorCtrlDriver_.stepMotorEasyMoveToBlock(stepMotorMId, motorPosition); - } - - public void moveBy(StepMotorMId stepMotorMId, double distance) throws Exception { - // 检查位置是否合法 - if (Math.abs(distance) > Math.abs(config_.getMaxLimit(stepMotorMId))) { - log.error("Motor {} Move By distance out of range, distance {}, limit {}", stepMotorMId.mid.getDescription(), distance, config_.getMaxLimit(stepMotorMId)); - throw new InvalidParameterException("Distance is out of range"); - } - - motorEnable(stepMotorMId, true); - int motorPosition = StepMotorConverter.toMotorPosition(distance); - log.info("Motor {} Move By distance {}, Motor Position {}", stepMotorMId.mid.getDescription(), distance, motorPosition); - stepMotorCtrlDriver_.stepMotorEasyMoveByBlock(stepMotorMId, motorPosition); - } - - public void stop(StepMotorMId stepMotorMId) throws Exception { - log.info("Motor {} Stop", stepMotorMId.mid.getDescription()); - stepMotorCtrlDriver_.stepMotorStop(stepMotorMId); - motorEnable(stepMotorMId, true); - } -} diff --git a/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/MotorWrapperDriver.java b/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/MotorWrapperDriver.java new file mode 100644 index 0000000..d8ef770 --- /dev/null +++ b/src/main/java/com/iflytop/sgs/hardware/drivers/StepMotorDriver/MotorWrapperDriver.java @@ -0,0 +1,100 @@ +package com.iflytop.sgs.hardware.drivers.StepMotorDriver; + +import com.iflytop.sgs.hardware.config.StepMotorConfig; +import com.iflytop.sgs.hardware.exception.HardwareException; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorDirect; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorMId; +import com.iflytop.sgs.hardware.type.StepMotor.StepMotorRegIndex; +import com.iflytop.sgs.hardware.utils.Math.StepMotorConverter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.security.InvalidParameterException; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MotorWrapperDriver { + private final StepMotorConfig config_; + private final StepMotorCtrlDriver stepMotorCtrlDriver_; + + // ==== ==== ==== ==== ==== ==== Get ==== ==== ==== ==== ==== ==== + private double getSpeed(StepMotorMId stepMotorMId) + { + // TODO: 从单片机中获取速度 + return 0.0; + } + + // ==== ==== ==== ==== ==== ==== Set ==== ==== ==== ==== ==== ==== + public void setSpeed(StepMotorMId stepMotorMId, double speed) throws HardwareException { + // 检查速度是否合法 + // 设置速度到单片机 + int motorSpeed = StepMotorConverter.toMotorSpeed(Math.abs(speed), config_.getLead(stepMotorMId)); + stepMotorCtrlDriver_.setReg(stepMotorMId, StepMotorRegIndex.kreg_step_motor_default_velocity, motorSpeed); + } + + // ==== ==== ==== ==== ==== ==== Ctrl ==== ==== ==== ==== ==== ==== + public void motorEnable(StepMotorMId stepMotorMId, Boolean enable) throws HardwareException { + Integer i_enable = enable ? 1 : 0; + stepMotorCtrlDriver_.stepMotorEnable(stepMotorMId, i_enable); + } + + public void openClamp(StepMotorMId stepMotorMId) throws HardwareException + { + log.info("Motor {} Open Clamp", stepMotorMId.mid.getDescription()); + motorEnable(stepMotorMId, true); + stepMotorCtrlDriver_.stepMotorOpenClamp(stepMotorMId); + } + + public void closeClamp(StepMotorMId stepMotorMId) throws HardwareException + { + log.info("Motor {} Close Clamp", stepMotorMId.mid.getDescription()); + motorEnable(stepMotorMId, true); + stepMotorCtrlDriver_.stepMotorCloseClamp(stepMotorMId); + } + + public void moveToHome(StepMotorMId stepMotorMId) throws HardwareException { + log.info("Motor {} Move To Home", stepMotorMId.mid.getDescription()); + motorEnable(stepMotorMId, true); + stepMotorCtrlDriver_.stepMotorEasyMoveToZeroBlock(stepMotorMId); + } + + public void moveTo(StepMotorMId stepMotorMId, double position) throws HardwareException { + // 检查位置是否合法 + if (Math.abs(position) > Math.abs(config_.getMaxLimit(stepMotorMId))) { + log.error("Motor {} Move To position out of range, position {}, limit {}", stepMotorMId.mid.getDescription(), position, config_.getMaxLimit(stepMotorMId)); + throw new InvalidParameterException("position is out of range"); + } + + motorEnable(stepMotorMId, true); + int motorPosition = StepMotorConverter.toMotorPosition(position); + log.info("Motor {} Move To position {}, Motor Position {}", stepMotorMId.mid.getDescription(), position, motorPosition); + stepMotorCtrlDriver_.stepMotorEasyMoveToBlock(stepMotorMId, motorPosition); + } + + public void moveBy(StepMotorMId stepMotorMId, double distance) throws HardwareException { + // 检查位置是否合法 + if (Math.abs(distance) > Math.abs(config_.getMaxLimit(stepMotorMId))) { + log.error("Motor {} Move By distance out of range, distance {}, limit {}", stepMotorMId.mid.getDescription(), distance, config_.getMaxLimit(stepMotorMId)); + throw new InvalidParameterException("Distance is out of range"); + } + + motorEnable(stepMotorMId, true); + int motorPosition = StepMotorConverter.toMotorPosition(distance); + log.info("Motor {} Move By distance {}, Motor Position {}", stepMotorMId.mid.getDescription(), distance, motorPosition); + stepMotorCtrlDriver_.stepMotorEasyMoveByBlock(stepMotorMId, motorPosition); + } + + public void rotate(StepMotorMId stepMotorMId, StepMotorDirect direct) throws Exception + { + motorEnable(stepMotorMId, true); + stepMotorCtrlDriver_.stepMotorEasyRotate(stepMotorMId, direct.getValue()); + } + + public void stop(StepMotorMId stepMotorMId) throws HardwareException { + log.info("Motor {} Stop", stepMotorMId.mid.getDescription()); + stepMotorCtrlDriver_.stepMotorStop(stepMotorMId); + motorEnable(stepMotorMId, true); + } +} diff --git a/src/main/java/com/iflytop/sgs/hardware/type/StepMotor/DeviceStepMotorId.java b/src/main/java/com/iflytop/sgs/hardware/type/StepMotor/DeviceStepMotorId.java index 47df1b3..6c574d5 100644 --- a/src/main/java/com/iflytop/sgs/hardware/type/StepMotor/DeviceStepMotorId.java +++ b/src/main/java/com/iflytop/sgs/hardware/type/StepMotor/DeviceStepMotorId.java @@ -3,25 +3,6 @@ package com.iflytop.sgs.hardware.type.StepMotor; public enum DeviceStepMotorId { // door(StepMotorMId.DOOR_MOTOR_MID, "门"), -// shake_motor(StepMotorMId.SHAKE_MOTOR_MID, "摇匀电机"), -// tray_motor(StepMotorMId.TRAY_MOTOR_MID, "托盘电机"), -// gantry_x(StepMotorMId.HBOT_X_MOTOR_MID, "龙门架X轴"), -// gantry_y(StepMotorMId.HBOT_Y_MOTOR_MID, "龙门架Y轴"), -// gantry_z(StepMotorMId.HBOT_Z_MOTOR_MID, "龙门架Z轴"), -// heater_motor_1(StepMotorMId.HEATER_1_MOTOR_MID, "加热位顶升电机1"), -// heater_motor_2(StepMotorMId.HEATER_2_MOTOR_MID, "加热位顶升电机2"), -// heater_motor_3(StepMotorMId.HEATER_3_MOTOR_MID, "加热位顶升电机3"), -// heater_motor_4(StepMotorMId.HEATER_4_MOTOR_MID, "加热位顶升电机4"), -// heater_motor_5(StepMotorMId.HEATER_5_MOTOR_MID, "加热位顶升电机5"), -// heater_motor_6(StepMotorMId.HEATER_6_MOTOR_MID, "加热位顶升电机6"), -// acid_pump_1(StepMotorMId.ACID_PUMP_1_MOTOR_MID, "加酸泵电机1"), -// acid_pump_2(StepMotorMId.ACID_PUMP_2_MOTOR_MID, "加酸泵电机2"), -// acid_pump_3(StepMotorMId.ACID_PUMP_3_MOTOR_MID, "加酸泵电机3"), -// acid_pump_4(StepMotorMId.ACID_PUMP_4_MOTOR_MID, "加酸泵电机4"), -// acid_pump_5(StepMotorMId.ACID_PUMP_5_MOTOR_MID, "加酸泵电机5"), -// acid_pump_6(StepMotorMId.ACID_PUMP_6_MOTOR_MID, "加酸泵电机6"), -// acid_pump_7(StepMotorMId.ACID_PUMP_7_MOTOR_MID, "加酸泵电机7"), -// acid_pump_8(StepMotorMId.ACID_PUMP_8_MOTOR_MID, "加酸泵电机8"), ; private StepMotorMId stepMotorMId;