diff --git a/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java b/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java index 0a67ab3..c315232 100644 --- a/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java +++ b/src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java @@ -2,6 +2,7 @@ package com.qyft.ms.app.common.command; import com.qyft.ms.app.model.bo.CMDToDevice; +import com.qyft.ms.device.device.MotorNameEnum; import java.util.HashMap; import java.util.Map; @@ -138,4 +139,23 @@ public class DeviceCommandGenerator { return cmdToDevice; } + /** + * 电机移动 + * @return + */ + public static CMDToDevice motor_to_position(MotorNameEnum motorName, int position) { + + int cmdId = CyclicNumberGenerator.getInstance().generateNumber(); + CMDToDevice cmdToDevice = new CMDToDevice(); + cmdToDevice.setCmdId(cmdId); + cmdToDevice.setCmdName("controlMotorCmd"); + cmdToDevice.setDevice(motorName.getCode()); + cmdToDevice.setAction("move"); + + Map params = new HashMap<>(); + + + return cmdToDevice; + } + } diff --git a/src/main/java/com/qyft/ms/app/common/command/MatrxSprayCmdMapInstance.java b/src/main/java/com/qyft/ms/app/common/command/MatrxSprayCmdMapInstance.java new file mode 100644 index 0000000..f038045 --- /dev/null +++ b/src/main/java/com/qyft/ms/app/common/command/MatrxSprayCmdMapInstance.java @@ -0,0 +1,30 @@ +package com.qyft.ms.app.common.command; + +import java.util.concurrent.ConcurrentHashMap; + +public class MatrxSprayCmdMapInstance { + private static MatrxSprayCmdMapInstance instance; + + + ConcurrentHashMap commandMap = new ConcurrentHashMap<>(); + + + public static synchronized MatrxSprayCmdMapInstance getInstance() { + if (instance == null) { + instance = new MatrxSprayCmdMapInstance(); + } + return instance; + } + + public void putCommand(String key, CommandFuture commandFuture) { + commandMap.put(key, commandFuture); + } + + public CommandFuture removeCommand(String key) { + return commandMap.remove(key); + } + + public CommandFuture getCommand(String key) { + return commandMap.get(key); + } +} diff --git a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java index 97a08dd..c0dbccb 100644 --- a/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java +++ b/src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java @@ -3,8 +3,10 @@ package com.qyft.ms.app.handler.impl; import com.qyft.ms.app.common.annotation.CommandMapping; import com.qyft.ms.app.common.command.FrontCommandAck; import com.qyft.ms.app.common.constant.CommandStatus; +import com.qyft.ms.app.core.registry.CommandHandlerRegistry; import com.qyft.ms.app.handler.CommandHandler; import com.qyft.ms.app.model.form.CMDFormV2; +import com.qyft.ms.device.device.*; import com.qyft.ms.device.service.DeviceTcpCMDServiceV2; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,8 +28,82 @@ import java.util.Map; @CommandMapping("matrix_spray_start")//业务指令注解 public class MatrixSprayStart implements CommandHandler { + private final CommandHandlerRegistry registry; + /** + * { + * cmdName:'matrix_spray_start' + * cmdId:'', + * param:{ + * matrix_path_type:;//喷涂路径类型 + * motor_z_height:;//高度 + * gas_pressure://Mpa兆帕 + * volume:20;//单位uL微升 + * high_voltage:true/false;//是否打开高压 + * high_voltage_value:4000;//高压值 + * spacing:''//毫米 + * moving_speed:8mm/s;//移动速度 + * times:;//喷涂遍数 + * position:[{x1,y1,x2,y2,index}] + * } + * } + * @param cmdForm + * @param emitter + * @throws Exception + */ + @Override public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception { + String frontCmdId = cmdForm.getCmdId(); + String frontCmdName = cmdForm.getCmdName(); + Map param = cmdForm.getParam(); + + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);//向前端发送接收到指令 + + DeviceInstance deviceInstance = DeviceInstance.getInstance(); + MatrixSprayStatusEnum matrixSprayStatus = DeviceInstance.getInstance().getMatrixSprayStatusEnum(); + + /** + * 1.判断设备是否正在喷涂中 + */ + if("yes".equals(matrixSprayStatus.getCode())){ + emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "设备正在喷涂中,请勿重复操作"), MediaType.APPLICATION_JSON); + return; + } + /** + * 2.判断喷涂状态 + */ + deviceInstance.setMatrixSprayStatusEnum(MatrixSprayStatusEnum.YES); + + /** + * 3.获取XYZ轴的当前位置 + */ + MotorX motorX = deviceInstance.getMotorX(); + MotorY motorY = deviceInstance.getMotorY(); + MotorZ motorZ = deviceInstance.getMotorZ(); + + + param.get("position"); + + /** + * 4.XYZ回原点 + */ + + + /** + * 5. + */ + + for(int i=0;i<5;i++){ + + } + + //TODO 业务逻辑 + //1.生成指令 + //2.发送指令 + //3.等待设备反馈 + //4.返回结果 + + } } diff --git a/src/main/java/com/qyft/ms/app/model/entity/MatrixCraft.java b/src/main/java/com/qyft/ms/app/model/entity/MatrixCraft.java index 986603c..85d8721 100644 --- a/src/main/java/com/qyft/ms/app/model/entity/MatrixCraft.java +++ b/src/main/java/com/qyft/ms/app/model/entity/MatrixCraft.java @@ -7,6 +7,25 @@ import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; + +/** + * { + * cmdName:'matrix_spray_start' + * cmdId:'', + * param:{ + * matrix_path_type:;//喷涂路径类型 + * motor_z_height:;//高度 + * gas_pressure://Mpa兆帕 + * volume:20;//单位uL微升 + * high_voltage:true/false;//是否打开高压 + * high_voltage_value:4000;//高压值 + * spacing:''//毫米 + * moving_speed:8mm/s;//移动速度 + * times:;//喷涂遍数 + * position:[{x1,y1,x2,y2,index}] + * } + * } + */ @EqualsAndHashCode(callSuper = false) @Schema(description = "基质工艺") @TableName("matrix_craft") @@ -23,34 +42,38 @@ public class MatrixCraft extends BaseEntity { @NotBlank @Schema(description = "路径类型 0 竖向 1 横向") - private Integer routeType; + private Integer matrixPathType; @NotBlank @Schema(description = "喷涂高度") - private Integer height; + private Integer motorZHeight; @NotBlank @Schema(description = "氮气流速") private Integer nitrogenFlowVelocity; @NotBlank @Schema(description = "氮气气压") - private Integer nitrogenAirPressure; + private Integer gasPressure; @NotBlank @Schema(description = "基质流速") - private Integer matrixFlowVelocity; + private Integer volume; @NotBlank @Schema(description = "电压") - private Integer voltage; + private Integer highVoltage; @NotBlank @Schema(description = "移速") - private Integer movementSpeed; + private Integer movingSpeed; @NotBlank @Schema(description = "行间距") - private Integer space; + private Integer spacing; + + @NotBlank + @Schema(description = "喷涂遍数") + private Integer times; @NotBlank @Schema(description = "创建人") diff --git a/src/main/java/com/qyft/ms/device/device/CurrentTask.java b/src/main/java/com/qyft/ms/device/device/CurrentTask.java new file mode 100644 index 0000000..5918228 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/CurrentTask.java @@ -0,0 +1,11 @@ +package com.qyft.ms.device.device; + +import lombok.Data; + +@Data +public class CurrentTask { + + private String taskName; + private TaskStatusEnum taskStatus; + +} diff --git a/src/main/java/com/qyft/ms/device/device/DeviceInstance.java b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java index a385594..e91e965 100644 --- a/src/main/java/com/qyft/ms/device/device/DeviceInstance.java +++ b/src/main/java/com/qyft/ms/device/device/DeviceInstance.java @@ -36,9 +36,8 @@ public class DeviceInstance { //喷涂状态 private MatrixSprayStatusEnum matrixSprayStatusEnum; //当前任务 - private String currentTaskCommandName; - //上一个任务 - private String previousTaskCommandName; + private CurrentTask currentTask; + private MotorX motorX; private MotorY motorY; diff --git a/src/main/java/com/qyft/ms/device/device/MotorX.java b/src/main/java/com/qyft/ms/device/device/MotorX.java index bbc4403..44b3c91 100644 --- a/src/main/java/com/qyft/ms/device/device/MotorX.java +++ b/src/main/java/com/qyft/ms/device/device/MotorX.java @@ -7,4 +7,6 @@ public class MotorX { private Boolean isOrigin; private Double position; private String name = MotorNameEnum.X.getCode(); + private int speed; + private int current; } diff --git a/src/main/java/com/qyft/ms/device/device/MotorY.java b/src/main/java/com/qyft/ms/device/device/MotorY.java index bd9be15..d89067c 100644 --- a/src/main/java/com/qyft/ms/device/device/MotorY.java +++ b/src/main/java/com/qyft/ms/device/device/MotorY.java @@ -7,4 +7,6 @@ public class MotorY { private Boolean isOrigin; private Double position; private String name = MotorNameEnum.Y.getCode(); + private int speed; + private int current; } diff --git a/src/main/java/com/qyft/ms/device/device/MotorZ.java b/src/main/java/com/qyft/ms/device/device/MotorZ.java index 5d1e887..c6cca58 100644 --- a/src/main/java/com/qyft/ms/device/device/MotorZ.java +++ b/src/main/java/com/qyft/ms/device/device/MotorZ.java @@ -7,4 +7,6 @@ public class MotorZ { private Boolean isOrigin; private Double position; private String name = MotorNameEnum.Z.getCode(); + private int speed; + private int current; } diff --git a/src/main/java/com/qyft/ms/device/device/TaskStatusEnum.java b/src/main/java/com/qyft/ms/device/device/TaskStatusEnum.java new file mode 100644 index 0000000..2ef4b02 --- /dev/null +++ b/src/main/java/com/qyft/ms/device/device/TaskStatusEnum.java @@ -0,0 +1,19 @@ +package com.qyft.ms.device.device; + +public enum TaskStatusEnum { + + RUNNING("running"), + PAUSED("paused"), + STOPPED("stopped"), + FINISHED("finished"); + + private final String status; + + TaskStatusEnum(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } +} diff --git a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java b/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java index 1b5a3a5..f5cb043 100644 --- a/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java +++ b/src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java @@ -5,6 +5,8 @@ import cn.hutool.json.JSONUtil; import com.qyft.ms.app.common.command.CommandFuture; import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance; import com.qyft.ms.app.service.WebSocketService; +import com.qyft.ms.device.device.DeviceInstance; +import com.qyft.ms.device.device.MatrixSprayStatusEnum; import com.qyft.ms.device.model.bo.DeviceFeedback; import com.qyft.ms.device.service.DeviceStatusService; import io.netty.buffer.ByteBuf; @@ -52,7 +54,16 @@ public class DeviceMessageHandler extends ChannelInboundHandlerAdapter { String tag = deviceResult.get("tag").toString(); if ("event".equals(tag)) { //设备上报事件 + if(MatrixSprayStatusEnum.YES.getCode().equals(DeviceInstance.getInstance().getMatrixSprayStatusEnum().getCode())){ + //喷涂中 + event_type + + + MatrxSprayCmdMapInstance + + + }