Browse Source

opt: 1.修改过滤重复ndc指令

1
丁世豪 1 week ago
parent
commit
1d5d43c0eb
  1. 26
      nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java
  2. 88
      nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

26
nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java

@ -28,9 +28,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.IntStream;
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
@ -120,6 +118,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
log.info("接收agv上报任务信息:" + bs);
// 从字节流的开头开始读取
int offset = 0;
Map<Integer,Integer> map = new HashMap<>();
// 循环处理字节流,逐个拆包 按照S消息解析
while (offset < packetData.length) {
if (offset + 6 > packetData.length) {
@ -159,6 +158,27 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
int carno = arr[20];
//充电桩站点号
int station = arr[25];
// 处理重复phase
if (map.containsKey(index)){
if (map.get(index).equals(phase)){
log.info("agv上报phase已处理,不重复处理");
// 更新偏移量,继续处理下一个数据包
offset+=messageHeaderLength;
int indexNum = IntStream.range(offset, packetData.length - 1)
.filter(i -> packetData[i] == 135 && packetData[i + 1] == 205)
.findFirst()
.orElse(-1);
// 如果未找到,返回 -1
if (indexNum == -1) {
break;
}else {
offset = indexNum;
continue;
}
}
}
map.put(index,phase);
Instruction link_inst = null;
Instruction inst = null;
List<Instruction> insts = null;

88
nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -403,13 +403,18 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
//到达输送线取货完成
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
if (ssxDeviceDriver.getMode() != 0) {
//获取最新数据
inst = instructionService.findByCode(String.valueOf(ikey));
if (ssxDeviceDriver.getMode() != 0 && inst != null && !"2".equals(inst.getExecute_status())) {
log.info("agv进入" + device_code + ",取货完成,开始写入信号3进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
ssxDeviceDriver.writing(3);
if (ssxDeviceDriver.getMode() == 3) {
flag = true;
log.info("设备" + device_code + "的Mode信号已变更为3,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
ssxDeviceDriver.writing(0);
//提前更新 解决ndc上报指令残留问题
inst.setExecute_status(AgvActionEnum.ACTION_STATUS.code("取货完成"));
instructionService.update(inst);
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("取货完成")), "取货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
} else {
@ -418,12 +423,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
log.info("设备" + device_code + "已完成信号3写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
}
ssxDeviceDriver.setMessage("");
} else {
String message = "agv取货完成写入信号3安全交互失败,设备允许模式mode值为0,设备异常,请检查!";
agv_message = ssxDeviceDriver.getDevice_code() + message;
ssxDeviceDriver.setMessage(message);
log.info(message);
lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message));
}
}
//到达普通站点取货完成
@ -655,43 +654,50 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
//到达输送线放货完成
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
ssxDeviceDriver.writing(5);
if (ssxDeviceDriver.getMode() == 4) {
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
if (ObjectUtil.isNotEmpty(task)){
String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue();
if (!StrUtil.startWith(task.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) {
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest();
request.setTask_id(task.getExt_task_id());
request.setTask_code(task.getTask_code());
request.setTask_status("2");
request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode());
request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName());
request.setStartLocation(task.getStart_point_code());
request.setEndLocation(task.getNext_point_code());
String res = acsToWmsService.feedTaskStatus(request);
JSONObject result = JSONObject.parseObject(res);
if (StringUtil.isNotBlank(result.getString("status")) && "200".equals(result.getString("status"))) {
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "成功。");
} else if (StringUtil.isNotBlank(result.getString("status")) && !"200".equals(result.getString("status"))){
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "失败,服务器响应的失败原因为:" + result.getString("message"));
}else if (StringUtil.isNotBlank(result.getString("code")) && "500".equals(result.getString("code"))){
log.info("任务号" + request.getTask_code() + "放货完成---请求不通" + "失败,服务器响应的失败原因为:" + result.getString("message"));
return;
//获取最新数据
inst = instructionService.findByCode(String.valueOf(ikey));
if (ssxDeviceDriver.getMode() != 0 && inst != null && !"4".equals(inst.getExecute_status())) {
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
ssxDeviceDriver.writing(5);
if (ssxDeviceDriver.getMode() == 4) {
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
if (ObjectUtil.isNotEmpty(task)){
String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue();
if (!StrUtil.startWith(task.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) {
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest();
request.setTask_id(task.getExt_task_id());
request.setTask_code(task.getTask_code());
request.setTask_status("2");
request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode());
request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName());
request.setStartLocation(task.getStart_point_code());
request.setEndLocation(task.getNext_point_code());
String res = acsToWmsService.feedTaskStatus(request);
JSONObject result = JSONObject.parseObject(res);
if (StringUtil.isNotBlank(result.getString("status")) && "200".equals(result.getString("status"))) {
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "成功。");
} else if (StringUtil.isNotBlank(result.getString("status")) && !"200".equals(result.getString("status"))){
log.info("任务号" + request.getTask_code() + "放货完成---反馈wcs任务完成状态" + "失败,服务器响应的失败原因为:" + result.getString("message"));
}else if (StringUtil.isNotBlank(result.getString("code")) && "500".equals(result.getString("code"))){
log.info("任务号" + request.getTask_code() + "放货完成---请求不通" + "失败,服务器响应的失败原因为:" + result.getString("message"));
return;
}
}
}
ssxDeviceDriver.writing(0);
//提前更新 解决ndc上报指令残留问题
inst.setExecute_status(AgvActionEnum.ACTION_STATUS.code("放货完成"));
instructionService.update(inst);
flag = true;
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
} else {
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
ssxDeviceDriver.writing(5);
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
}
ssxDeviceDriver.writing(0);
flag = true;
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
} else {
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
ssxDeviceDriver.writing(5);
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
}
ssxDeviceDriver.setMessage("");
ssxDeviceDriver.setMessage("");
}
}
//agv普通站点放货完成
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {

Loading…
Cancel
Save