Browse Source

feat:增加加液机械臂和转移机械臂类定义

tags/freeze
黄翔 3 months ago
parent
commit
1b8611070a
  1. 4
      src/main/java/com/iflytop/gd/common/result/ResultCode.java
  2. 14
      src/main/java/com/iflytop/gd/system/constants/DistanceUnit.java
  3. 46
      src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java
  4. 21
      src/main/java/com/iflytop/gd/system/devices/LiquidFillingArm.java
  5. 153
      src/main/java/com/iflytop/gd/system/devices/StandardStepMotor.java
  6. 10
      src/main/java/com/iflytop/gd/system/devices/StepMotor.java
  7. 22
      src/main/java/com/iflytop/gd/system/devices/TransportationArm.java
  8. 9
      src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java
  9. 9
      src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java

4
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;

14
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;
}
}

46
src/main/java/com/iflytop/gd/system/devices/BaseStepStepMotor.java

@ -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) {
}
}

21
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);
}
}

153
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;
}
}

10
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);

22
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);
}
}

9
src/main/java/com/iflytop/gd/system/models/LiquidFillingArm.java

@ -1,9 +0,0 @@
package com.iflytop.gd.system.models;
/**
* 液体加注机械臂
*/
public interface LiquidFillingArm {
}

9
src/main/java/com/iflytop/gd/system/models/TubeTransportationArm.java

@ -1,9 +0,0 @@
package com.iflytop.gd.system.models;
/**
* 试管转移机械臂
*/
public interface TubeTransportationArm {
}
Loading…
Cancel
Save