Browse Source

fix:喷涂过程中推送点位定时采集改为固定点位推送

tags/1.0
白凤吉 5 months ago
parent
commit
6969e0dcf7
  1. 55
      src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java
  2. 38
      src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java
  3. 1
      src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java
  4. 2
      src/main/java/com/qyft/ms/app/model/bo/Point2D.java
  5. 14
      src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java
  6. 2
      src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java

55
src/main/java/com/qyft/ms/app/device/spray/SprayTaskExecutor.java

@ -1,20 +1,23 @@
package com.qyft.ms.app.device.spray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qyft.ms.app.common.constant.WebSocketMessageType;
import com.qyft.ms.app.device.status.DeviceStatus;
import com.qyft.ms.app.device.status.SprayTask;
import com.qyft.ms.app.model.bo.Point2D;
import com.qyft.ms.app.model.bo.SprayTaskPointCollectorPushBO;
import com.qyft.ms.app.model.bo.SprayTaskSprayed;
import com.qyft.ms.app.model.bo.SprayTaskStep;
import com.qyft.ms.app.model.entity.Position;
import com.qyft.ms.app.model.entity.SysSettings;
import com.qyft.ms.app.service.PositionService;
import com.qyft.ms.app.service.SysSettingsService;
import com.qyft.ms.system.common.device.command.CommandFuture;
import com.qyft.ms.system.common.device.command.DeviceCommandGenerator;
import com.qyft.ms.system.model.bo.DeviceCommand;
import com.qyft.ms.system.service.WebSocketService;
import com.qyft.ms.system.service.device.DeviceCommandService;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@ -33,8 +36,25 @@ public class SprayTaskExecutor {
private final SprayTaskPointCollector sprayTaskPointCollector;
private final SysSettingsService sysSettingsService;
private final DeviceStatus deviceStatus;
private final PositionService positionService;
private Thread taskThread;
private Double[][] slideArr;
@PostConstruct
private void init() {
Position slidePosition1 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position1"));
Position slidePosition2 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position2"));
Position slidePosition3 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position3"));
Position slidePosition4 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position4"));
slideArr = new Double[][]{
{slidePosition1.getX(), slidePosition1.getY()},
{slidePosition2.getX(), slidePosition2.getY()},
{slidePosition3.getX(), slidePosition3.getY()},
{slidePosition4.getX(), slidePosition4.getY()}
};
}
/**
* 启动任务线程如果线程已存在且正在运行则不重复启动
@ -89,29 +109,40 @@ public class SprayTaskExecutor {
List<Point2D> sprayStepList = new ArrayList<>();
sprayTask.setSuspendable(true);//可以暂停单次喷涂范围内可以进行暂停
deviceStatus.setSuspendable(true);
for (List<DeviceCommand> sprayStepCommands : sprayTaskStep.getSpraySteps()) {//单次喷涂
if (reCurrentStep < currentStep) {
for (int i = 0; i < sprayTaskStep.getSpraySteps().size(); i++) {//单次喷涂
if (currentStep < reCurrentStep) {
break;
}
List<DeviceCommand> sprayStepCommands = sprayTaskStep.getSpraySteps().get(i);
List<CommandFuture> commandFutureList = new ArrayList<>();
for (DeviceCommand sprayStep : sprayStepCommands) {
CommandFuture commandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), sprayStep);
commandFutureList.add(commandFuture);
}
CommandFuture[] commandFutureArray = commandFutureList.toArray(new CommandFuture[0]);
sprayTaskPointCollector.startCollecting(sprayTaskStep.getIndex()); //开启点位推送
// sprayTaskPointCollector.startCollecting(sprayTaskStep.getIndex()); //开启点位推送
Point2D currentPoint = null;
try {
List<DeviceCommand> currentSprayStepCommands = sprayTaskStep.getSpraySteps().get(i - 1);
double currentXPoint = (Double) currentSprayStepCommands.get(0).getParam().get("position") - slideArr[sprayTaskStep.getIndex()][0];
double currentYPoint = 75.5 - (Double) currentSprayStepCommands.get(1).getParam().get("position");
currentPoint = new Point2D(currentXPoint, currentYPoint);
} catch (Exception ignored) {
}
double nextXPoint = (Double) sprayStepCommands.get(0).getParam().get("position") - slideArr[sprayTaskStep.getIndex()][0];
double nextYPoint = 75.5 - (Double) sprayStepCommands.get(1).getParam().get("position");
Point2D nextPoint = new Point2D(nextXPoint, nextYPoint);
SprayTaskPointCollectorPushBO sprayTaskPointCollectorPushBO = new SprayTaskPointCollectorPushBO(sprayTaskStep.getIndex(), currentPoint, nextPoint);
webSocketService.pushMsg(WebSocketMessageType.SPRAY_POINT, sprayTaskPointCollectorPushBO);
commandWait(commandFutureArray);
sprayTaskPointCollector.stopCollecting();//关闭点位推送
// sprayTaskPointCollector.stopCollecting();//关闭点位推送
currentStep++;
sprayTask.setCurrentStep(currentStep);//将当前的喷涂进度缓存
//将当前点位缓存
DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令
CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommand(sprayTask.getCmdId(), sprayTask.getCmdCode(), motorXyzPositionGetCommand);
commandWait(motorXyzPositionGetCommandFuture);
JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult();
Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition");
Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition");
sprayStepList.add(new Point2D(xAxisPosition, yAxisPosition));
sprayStepList.add(new Point2D(nextXPoint, nextYPoint));
}
sprayTask.setSuspendable(false);//不可暂停
deviceStatus.setSuspendable(false);

38
src/main/java/com/qyft/ms/app/device/spray/SprayTaskPointCollector.java

@ -40,7 +40,7 @@ public class SprayTaskPointCollector {
private Double[][] slideArr;
@PostConstruct
// @PostConstruct
private void init() {
Position slidePosition1 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position1"));
Position slidePosition2 = positionService.getOne(new LambdaQueryWrapper<Position>().eq(Position::getPointCode, "slide_position2"));
@ -75,23 +75,23 @@ public class SprayTaskPointCollector {
}
private void collectPoints() {
try {
if (SprayTask.getInstance().isPaused()) {
stopCollecting();
}
DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令
CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommandNoFront(motorXyzPositionGetCommand);
JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult();
Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition");
Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition");
xAxisPosition = xAxisPosition - slideArr[currentSprayIndex][0];
yAxisPosition = 75.5 - yAxisPosition;
Point2D point2D = new Point2D(xAxisPosition, yAxisPosition);
SprayTaskPointCollectorPushBO sprayTaskPointCollectorPushBO = new SprayTaskPointCollectorPushBO(currentSprayIndex, point2D);
log.info("喷涂点位采集,采集到点位:{}", JSONUtil.toJsonStr(sprayTaskPointCollectorPushBO));
webSocketService.pushMsg(WebSocketMessageType.SPRAY_POINT, sprayTaskPointCollectorPushBO);
} catch (Exception e) {
log.error("喷涂点位采集发生错误", e);
}
// try {
// if (SprayTask.getInstance().isPaused()) {
// stopCollecting();
// }
// DeviceCommand motorXyzPositionGetCommand = DeviceCommandGenerator.motorXyzPositionGet(); //生成电机XYZ相对原点坐标指令
// CommandFuture motorXyzPositionGetCommandFuture = deviceCommandService.sendCommandNoFront(motorXyzPositionGetCommand);
// JSONObject motorXyzPositionGetCommandResult = motorXyzPositionGetCommandFuture.getResponseResult();
// Double xAxisPosition = motorXyzPositionGetCommandResult.getDouble("xAxisPosition");
// Double yAxisPosition = motorXyzPositionGetCommandResult.getDouble("yAxisPosition");
// xAxisPosition = xAxisPosition - slideArr[currentSprayIndex][0];
// yAxisPosition = 75.5 - yAxisPosition;
// Point2D point2D = new Point2D(xAxisPosition, yAxisPosition);
// SprayTaskPointCollectorPushBO sprayTaskPointCollectorPushBO = new SprayTaskPointCollectorPushBO(currentSprayIndex, point2D);
// log.info("喷涂点位采集,采集到点位:{}", JSONUtil.toJsonStr(sprayTaskPointCollectorPushBO));
// webSocketService.pushMsg(WebSocketMessageType.SPRAY_POINT, sprayTaskPointCollectorPushBO);
// } catch (Exception e) {
// log.error("喷涂点位采集发生错误", e);
// }
}
}

1
src/main/java/com/qyft/ms/app/front/cmd/business/MatrixSprayStart.java

@ -274,6 +274,7 @@ public class MatrixSprayStart extends BaseCommandHandler {
}
}
// log.info(JSONUtil.toJsonStr(sprayTask.getSprayTaskStepList()));
// 10. 启动喷涂线程开始喷涂
sprayTaskExecutor.startTask();
webSocketService.pushDebugMsg(FrontResponseGenerator.generateJson(form.getCmdId(), form.getCmdCode(), CommandStatus.SEND, "已开启喷涂线程"));

2
src/main/java/com/qyft/ms/app/model/bo/Point2D.java

@ -8,5 +8,7 @@ public class Point2D {
private double y;
public Point2D(double x, double y) {
this.x = x;
this.y = y;
}
}

14
src/main/java/com/qyft/ms/app/model/bo/SprayTaskPointCollectorPushBO.java

@ -1,5 +1,6 @@
package com.qyft.ms.app.model.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@Data
@ -9,12 +10,17 @@ public class SprayTaskPointCollectorPushBO {
*/
Integer index;
/**
* 点位坐标
* 当前点位坐标
*/
Point2D point;
Point2D currentPoint;
/**
* 下一个点位坐标
*/
Point2D nextPoint;
public SprayTaskPointCollectorPushBO(Integer index, Point2D point) {
public SprayTaskPointCollectorPushBO(Integer index, Point2D currentPoint, Point2D nextPoint) {
this.index = index;
this.point = point;
this.currentPoint = currentPoint;
this.nextPoint = nextPoint;
}
}

2
src/main/java/com/qyft/ms/system/core/server/WebSocketServer.java

@ -23,11 +23,11 @@ public class WebSocketServer {
*/
public static void sendMessageToClients(String message) {
synchronized (sendLock) {
log.info("发送消息给客户端:{}", message);
for (Session session : sessions) {
if (session.isOpen()) {
try {
session.getBasicRemote().sendText(message);
log.info("发送消息给客户端(sessionId={}):{}", session.getId(), message);
} catch (Exception e) {
log.error("发送消息失败,sessionId={}", session.getId(), e);
}

Loading…
Cancel
Save