Browse Source

20250213

master
仁冬 5 months ago
parent
commit
ddb8fcbf13
  1. 20
      src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java
  2. 30
      src/main/java/com/qyft/ms/app/common/command/MatrxSprayCmdMapInstance.java
  3. 76
      src/main/java/com/qyft/ms/app/handler/impl/MatrixSprayStart.java
  4. 37
      src/main/java/com/qyft/ms/app/model/entity/MatrixCraft.java
  5. 11
      src/main/java/com/qyft/ms/device/device/CurrentTask.java
  6. 5
      src/main/java/com/qyft/ms/device/device/DeviceInstance.java
  7. 2
      src/main/java/com/qyft/ms/device/device/MotorX.java
  8. 2
      src/main/java/com/qyft/ms/device/device/MotorY.java
  9. 2
      src/main/java/com/qyft/ms/device/device/MotorZ.java
  10. 19
      src/main/java/com/qyft/ms/device/device/TaskStatusEnum.java
  11. 11
      src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java

20
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<String, Object> params = new HashMap<>();
return cmdToDevice;
}
}

30
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<String, CommandFuture> 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);
}
}

76
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<String, Object> 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.返回结果
}
}

37
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 = "创建人")

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

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

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

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

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

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

11
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
}

Loading…
Cancel
Save