opt: 1.修改过滤重复ndc指令
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user