rev:更新
This commit is contained in:
@@ -76,14 +76,14 @@ public class AppRun {
|
||||
@GetMapping("/kaishichongdian/{no}")
|
||||
@SaIgnore
|
||||
public String kaishichongdian(@PathVariable Integer no) {
|
||||
BMSSocketConnectionAutoRun.writeStartCharge(no);
|
||||
BMSSocketConnectionAutoRun.writeStartChargeAndArmExtend(no);
|
||||
return "Backend service started successfully";
|
||||
}
|
||||
|
||||
@GetMapping("/tingzhichongdian/{no}")
|
||||
@SaIgnore
|
||||
public String tingzhichongdian(@PathVariable Integer no) {
|
||||
BMSSocketConnectionAutoRun.writeStopCharge(no);
|
||||
BMSSocketConnectionAutoRun.writeStopChargeAndArmRetract(no);
|
||||
return "Backend service started successfully";
|
||||
}
|
||||
|
||||
@@ -115,4 +115,3 @@ public class AppRun {
|
||||
return String.valueOf(armExtended);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -35,7 +36,6 @@ import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.zip.CRC32;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@@ -71,8 +71,10 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
private static final long RECONNECT_DELAY_MS = 3000L;
|
||||
private static final long CONFIG_REFRESH_MS = 5000L;
|
||||
private static final long STATUS_EXPIRE_MS = 3000L;
|
||||
private static final long COMMAND_RESPONSE_WINDOW_MS = 5000L;
|
||||
private static final int CIRCUIT_FAILURE_THRESHOLD = 5;
|
||||
private static final long CIRCUIT_OPEN_MS = 30000L;
|
||||
private static final int LOCAL_PORT_BASE = 10000;
|
||||
|
||||
private static final Map<Integer, StationClient> CLIENTS = new ConcurrentHashMap<>();
|
||||
private static final AtomicBoolean stopRequested = new AtomicBoolean(false);
|
||||
@@ -137,10 +139,18 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
write(buildFixedFrame(CHARGE_CMD_START, ARM_CMD_NONE, stationNo), stationNo);
|
||||
}
|
||||
|
||||
public static void writeStartChargeAndArmExtend(int stationNo) {
|
||||
write(buildFixedFrame(CHARGE_CMD_START, ARM_CMD_EXTEND, stationNo), stationNo);
|
||||
}
|
||||
|
||||
public static void writeStopCharge(int stationNo) {
|
||||
write(buildFixedFrame(CHARGE_CMD_STOP, ARM_CMD_NONE, stationNo), stationNo);
|
||||
}
|
||||
|
||||
public static void writeStopChargeAndArmRetract(int stationNo) {
|
||||
write(buildFixedFrame(CHARGE_CMD_STOP, ARM_CMD_RETRACT, stationNo), stationNo);
|
||||
}
|
||||
|
||||
public static void writeChargeComplete(int stationNo) {
|
||||
writeStopCharge(stationNo);
|
||||
}
|
||||
@@ -189,6 +199,41 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
return waitUntil(stationNo, timeoutMs, WaitTarget.CHARGE_STOPPED);
|
||||
}
|
||||
|
||||
private static String armStateToText(int armState) {
|
||||
switch (armState) {
|
||||
case ARM_STATE_RETRACTED:
|
||||
return "退回到位";
|
||||
case ARM_STATE_EXTENDED:
|
||||
return "伸出到位";
|
||||
case ARM_STATE_UNKNOWN:
|
||||
default:
|
||||
return "未知";
|
||||
}
|
||||
}
|
||||
|
||||
private static String chargerStateToText(int chargerState) {
|
||||
switch (chargerState) {
|
||||
case CHARGER_STATE_CHARGING:
|
||||
return "充电中";
|
||||
case CHARGER_STATE_STOPPED:
|
||||
return "停止充电/充满";
|
||||
case CHARGER_STATE_INVALID:
|
||||
default:
|
||||
return "未知";
|
||||
}
|
||||
}
|
||||
|
||||
private static String describeWord7(int word7) {
|
||||
switch (word7) {
|
||||
case 0x0000:
|
||||
return "无附加状态";
|
||||
case 0x0006:
|
||||
return "保留位返回0x0006";
|
||||
default:
|
||||
return "保留位状态未知";
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] buildFixedFrame(int chargeCmd, int armCmd, int stationNo) {
|
||||
if (stationNo < 0 || stationNo > 0xFFFF) {
|
||||
throw new IllegalArgumentException("stationNo must be in [0, 65535]");
|
||||
@@ -203,7 +248,7 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
offset += 2;
|
||||
writeUInt16BE(frame, offset, stationNo);
|
||||
offset += 2;
|
||||
writeUInt32BE(frame, offset, calculateCrc32(frame, FRAME_HEAD.length, 6));
|
||||
writeUInt32BE(frame, offset, 0L);
|
||||
offset += 4;
|
||||
|
||||
System.arraycopy(FRAME_TAIL, 0, frame, offset, FRAME_TAIL.length);
|
||||
@@ -307,6 +352,10 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
log.warn("BMS站点配置无效,stationNo异常: {}", item);
|
||||
continue;
|
||||
}
|
||||
if (LOCAL_PORT_BASE + stationNo > 65535) {
|
||||
log.warn("BMS站点{}配置无效,本地端口{}超出范围", stationNo, LOCAL_PORT_BASE + stationNo);
|
||||
continue;
|
||||
}
|
||||
if (StrUtil.isBlank(ip)) {
|
||||
log.warn("BMS站点{}配置无效,ip为空", stationNo);
|
||||
continue;
|
||||
@@ -385,10 +434,12 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
| (long) (source[offset + 3] & 0xFF);
|
||||
}
|
||||
|
||||
private static long calculateCrc32(byte[] source, int offset, int len) {
|
||||
CRC32 crc32 = new CRC32();
|
||||
crc32.update(source, offset, len);
|
||||
return crc32.getValue();
|
||||
private static long calculateWordChecksum(byte[] source, int offset, int wordCount) {
|
||||
long checksum = 0L;
|
||||
for (int i = 0; i < wordCount; i++) {
|
||||
checksum += readUInt16BE(source, offset + i * 2);
|
||||
}
|
||||
return checksum & 0xFFFFFFFFL;
|
||||
}
|
||||
|
||||
private static boolean validateChecksum(byte[] frame) {
|
||||
@@ -397,12 +448,12 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
}
|
||||
if (frame.length == FRAME_LEN) {
|
||||
long expected = readUInt32BE(frame, FRAME_HEAD.length + 6);
|
||||
long actual = calculateCrc32(frame, FRAME_HEAD.length, 6);
|
||||
long actual = calculateWordChecksum(frame, FRAME_HEAD.length, 3);
|
||||
return expected == actual;
|
||||
}
|
||||
if (frame.length == REPORT_FRAME_LEN) {
|
||||
long expected = readUInt32BE(frame, FRAME_HEAD.length + 14);
|
||||
long actual = calculateCrc32(frame, FRAME_HEAD.length, 14);
|
||||
long actual = calculateWordChecksum(frame, FRAME_HEAD.length, 7);
|
||||
return expected == actual;
|
||||
}
|
||||
return false;
|
||||
@@ -473,6 +524,8 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
private volatile String lastConnectError = "";
|
||||
private volatile long lastConnectSuccessTimeMs = 0L;
|
||||
private volatile long lastConnectAttemptTimeMs = 0L;
|
||||
private volatile String pendingCommandHex;
|
||||
private volatile long pendingCommandTimeMs = 0L;
|
||||
|
||||
private StationClient(StationConfig config) {
|
||||
this.config = config;
|
||||
@@ -525,6 +578,7 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
.channel(NioSocketChannel.class)
|
||||
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
|
||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
||||
.option(ChannelOption.SO_REUSEADDR, true)
|
||||
.option(ChannelOption.TCP_NODELAY, true)
|
||||
.handler(new ChannelInitializer<SocketChannel>() {
|
||||
@Override
|
||||
@@ -535,7 +589,9 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
});
|
||||
|
||||
StationConfig currentConfig = this.config;
|
||||
ChannelFuture future = bootstrap.connect(currentConfig.ip, currentConfig.port);
|
||||
int localPort = getLocalPort(currentConfig.stationNo);
|
||||
ChannelFuture future = bootstrap.connect(new InetSocketAddress(currentConfig.ip, currentConfig.port),
|
||||
new InetSocketAddress(localPort));
|
||||
future.addListener((ChannelFutureListener) f -> {
|
||||
reconnectScheduled.set(false);
|
||||
if (closed.get() || stopRequested.get()) {
|
||||
@@ -548,7 +604,8 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
if (f.isSuccess()) {
|
||||
channel = f.channel();
|
||||
onConnectSuccess();
|
||||
log.info("BMS站点{}连接成功 {}:{}", currentConfig.stationNo, currentConfig.ip, currentConfig.port);
|
||||
log.info("BMS站点{}连接成功 localPort={}, remote={}:{}",
|
||||
currentConfig.stationNo, localPort, currentConfig.ip, currentConfig.port);
|
||||
} else {
|
||||
onConnectFailure(f.cause());
|
||||
}
|
||||
@@ -602,21 +659,31 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
ensureConnected();
|
||||
return;
|
||||
}
|
||||
log.info("下发BMS站点{}数据(HEX): {}", config.stationNo, bytesToHex(data));
|
||||
String commandHex = bytesToHex(data);
|
||||
log.info("下发BMS站点{}数据(HEX): {}", config.stationNo, commandHex);
|
||||
current.writeAndFlush(current.alloc().buffer(data.length).writeBytes(data)).addListener((ChannelFutureListener) future -> {
|
||||
if (!future.isSuccess()) {
|
||||
log.error("下发BMS站点{}数据失败: {}", config.stationNo, bytesToHex(data), future.cause());
|
||||
log.error("下发BMS站点{}数据失败: {}", config.stationNo, commandHex, future.cause());
|
||||
Channel failedChannel = future.channel();
|
||||
if (failedChannel != null && failedChannel.isOpen()) {
|
||||
failedChannel.close();
|
||||
}
|
||||
} else {
|
||||
pendingCommandHex = commandHex;
|
||||
pendingCommandTimeMs = System.currentTimeMillis();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateStatus(byte[] frame) {
|
||||
if (!validateChecksum(frame)) {
|
||||
log.warn("BMS站点{}收到CRC校验失败报文,忽略: {}", config.stationNo, bytesToHex(frame));
|
||||
long expected = frame.length == REPORT_FRAME_LEN ? readUInt32BE(frame, FRAME_HEAD.length + 14) : -1L;
|
||||
long actual = frame.length == REPORT_FRAME_LEN ? calculateWordChecksum(frame, FRAME_HEAD.length, 7) : -1L;
|
||||
log.warn("BMS站点{}收到校验失败报文,expected=0x{}, actual=0x{}, 忽略: {}",
|
||||
config.stationNo,
|
||||
Long.toHexString(expected),
|
||||
Long.toHexString(actual),
|
||||
bytesToHex(frame));
|
||||
return;
|
||||
}
|
||||
int dataOffset = FRAME_HEAD.length;
|
||||
@@ -625,6 +692,9 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
int armState = readUInt16BE(frame, dataOffset + 4);
|
||||
int chargerState = readUInt16BE(frame, dataOffset + 6);
|
||||
int reportStationNo = readUInt16BE(frame, dataOffset + 8);
|
||||
int reservedWord6 = readUInt16BE(frame, dataOffset + 10);
|
||||
int reservedWord7 = readUInt16BE(frame, dataOffset + 12);
|
||||
long checksum = readUInt32BE(frame, dataOffset + 14);
|
||||
if (reportStationNo != config.stationNo) {
|
||||
log.warn("BMS站点{}收到站点{}上报,忽略异常报文: {}", config.stationNo, reportStationNo, bytesToHex(frame));
|
||||
return;
|
||||
@@ -636,12 +706,31 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
status.outputCurrentRaw = outputCurrent;
|
||||
status.armState = armState;
|
||||
status.chargerState = chargerState;
|
||||
status.reservedWord6 = reservedWord6;
|
||||
status.reservedWord7 = reservedWord7;
|
||||
status.checksum = checksum;
|
||||
status.lastUpdateTimeMs = System.currentTimeMillis();
|
||||
status.rawFrameHex = bytesToHex(frame);
|
||||
latestStatus = status;
|
||||
|
||||
log.info("BMS状态更新 stationNo={}, armState={}, chargerState={}, voltageRaw={}, currentRaw={}",
|
||||
reportStationNo, armState, chargerState, outputVoltage, outputCurrent);
|
||||
String commandHex = pendingCommandHex;
|
||||
if (commandHex != null && status.lastUpdateTimeMs - pendingCommandTimeMs <= COMMAND_RESPONSE_WINDOW_MS) {
|
||||
log.info("BMS站点{}下发后收到回包: commandHex={}, replyHex={}",
|
||||
config.stationNo, commandHex, status.rawFrameHex);
|
||||
pendingCommandHex = null;
|
||||
pendingCommandTimeMs = 0L;
|
||||
}
|
||||
|
||||
log.info("BMS站点{}状态更新: 机械臂={}, 充电状态={}, 输出电压原始值={}, 输出电流原始值={}, 保留字6=0x{}, 保留字7=0x{}({}), 校验值=0x{}",
|
||||
reportStationNo,
|
||||
armStateToText(armState),
|
||||
chargerStateToText(chargerState),
|
||||
outputVoltage,
|
||||
outputCurrent,
|
||||
Integer.toHexString(reservedWord6),
|
||||
Integer.toHexString(reservedWord7),
|
||||
describeWord7(reservedWord7),
|
||||
Long.toHexString(checksum));
|
||||
}
|
||||
|
||||
private BmsStationStatus snapshotStatus() {
|
||||
@@ -652,6 +741,9 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
copy.outputCurrentRaw = source.outputCurrentRaw;
|
||||
copy.armState = source.armState;
|
||||
copy.chargerState = source.chargerState;
|
||||
copy.reservedWord6 = source.reservedWord6;
|
||||
copy.reservedWord7 = source.reservedWord7;
|
||||
copy.checksum = source.checksum;
|
||||
copy.lastUpdateTimeMs = source.lastUpdateTimeMs;
|
||||
copy.rawFrameHex = source.rawFrameHex;
|
||||
if (copy.lastUpdateTimeMs <= 0 || System.currentTimeMillis() - copy.lastUpdateTimeMs > STATUS_EXPIRE_MS) {
|
||||
@@ -699,6 +791,10 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
return latestStatus.lastUpdateTimeMs;
|
||||
}
|
||||
|
||||
private int getLocalPort(int stationNo) {
|
||||
return LOCAL_PORT_BASE + stationNo;
|
||||
}
|
||||
|
||||
private boolean allowConnectAttempt() {
|
||||
long now = System.currentTimeMillis();
|
||||
if (circuitState == CircuitState.OPEN) {
|
||||
@@ -839,6 +935,9 @@ public class BMSSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
public int outputCurrentRaw;
|
||||
public int armState = ARM_STATE_UNKNOWN;
|
||||
public int chargerState = CHARGER_STATE_INVALID;
|
||||
public int reservedWord6;
|
||||
public int reservedWord7;
|
||||
public long checksum;
|
||||
public long lastUpdateTimeMs;
|
||||
public String rawFrameHex;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
|
||||
@Slf4j
|
||||
@Component
|
||||
public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
private static final long BMS_COMMAND_WAIT_TIMEOUT_MS = 5000L;
|
||||
|
||||
|
||||
static volatile Socket socket;
|
||||
String ip = "192.168.46.225";
|
||||
@@ -149,13 +151,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver;
|
||||
//开始任务
|
||||
if (phase == 0x01) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x01")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x01;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x01").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x01;ikey=" + ikey + ",index=" + index).build());
|
||||
|
||||
if (!ObjectUtil.isEmpty(inst)) {
|
||||
inst.setInstruction_status("1");
|
||||
@@ -163,26 +159,13 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
inst.setSend_status("1");
|
||||
instructionService.update(inst);
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x01")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x01;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x01").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x01;ikey=" + ikey + ",index=" + index).build());
|
||||
}
|
||||
}
|
||||
//任务完毕
|
||||
//(无车id及状态)
|
||||
else if (phase == 0x14) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x14")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x14;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x14").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x14;ikey=" + ikey + ",index=" + index).build());
|
||||
if (ObjectUtil.isEmpty(inst)) {
|
||||
log.info("未找到指令号{}对应的指令", ikey);
|
||||
} else {
|
||||
@@ -202,96 +185,37 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
}
|
||||
}
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x14")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x14;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x14").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x14;ikey=" + ikey + ",index=" + index).build());
|
||||
}
|
||||
//请求删除任务
|
||||
//(需要WCS反馈)
|
||||
else if (phase == 0x30) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x30")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x30;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x30").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x30;ikey=" + ikey + ",index=" + index).build());
|
||||
data = ndcAgvService.sendAgvTwoModeInst(0x8F, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x30")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x30;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x30").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x30;ikey=" + ikey + ",index=" + index).build());
|
||||
}
|
||||
//任务删除确认
|
||||
//(需要WCS反馈)
|
||||
else if (phase == 0xFF) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0xFF")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0xFF;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0xFF").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0xFF;ikey=" + ikey + ",index=" + index).build());
|
||||
if (ObjectUtil.isEmpty(inst)) {
|
||||
log.info("未找到指令号{}对应的指令", ikey);
|
||||
} else {
|
||||
instructionService.cancelNOSendAgv(inst.getInstruction_id());
|
||||
}
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0xFF")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0xFF;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0xFF").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0xFF;ikey=" + ikey + ",index=" + index).build());
|
||||
}
|
||||
//任务删除结束
|
||||
else if (phase == 0x0F) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x0F")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x0F;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x0F").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x0F;ikey=" + ikey + ",index=" + index).build());
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x0F")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x0F;ikey=" + ikey + ",index=" + index)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x0F").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x0F;ikey=" + ikey + ",index=" + index).build());
|
||||
} // 开门
|
||||
else if (phase == 0x50) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
if (ObjectUtil.isEmpty(device_code)) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: agvaddr=" + agvaddr + " 对应设备号为空")
|
||||
.content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: agvaddr=" + agvaddr + " 对应设备号为空").content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info(agvaddr + "对应设备号为空!");
|
||||
return;
|
||||
}
|
||||
@@ -300,14 +224,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
try {
|
||||
elevatorDoorDeviceDriver.writing("call", "1");
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 下发开门信号异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 下发开门信号异常: " + e.getMessage()).content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("下发电气信号失败:" + e.getMessage());
|
||||
log.error("下发呼叫电梯信号失败", e);
|
||||
}
|
||||
@@ -315,79 +232,31 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
if (elevatorDoorDeviceDriver.getOpen() == 1 && elevatorDoorDeviceDriver.getCall() == 1 && elevatorDoorDeviceDriver.getFire_open() == 1) {
|
||||
log.info("下发开门信号值为:{},读取开门信号值为:{}", elevatorDoorDeviceDriver.getCall(), elevatorDoorDeviceDriver.getOpen());
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen() + ", fire_open=" + elevatorDoorDeviceDriver.getFire_open())
|
||||
.content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen() + ", fire_open=" + elevatorDoorDeviceDriver.getFire_open()).content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("未下发NDC信号原因: 下发开门信号值为:{},读取开门信号值为:{},读取防火门状态:{}", elevatorDoorDeviceDriver.getCall(), elevatorDoorDeviceDriver.getOpen(), elevatorDoorDeviceDriver.getFire_open());
|
||||
}
|
||||
} else {
|
||||
if (elevatorDoorDeviceDriver.getOpen() == 1 && elevatorDoorDeviceDriver.getCall() == 1) {
|
||||
log.info("下发开门信号值为:{},读取开门信号值为:{}", elevatorDoorDeviceDriver.getCall(), elevatorDoorDeviceDriver.getOpen());
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen())
|
||||
.content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen()).content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("未下发NDC信号原因: 下发开门信号值为:{},读取开门信号值为:{}", elevatorDoorDeviceDriver.getCall(), elevatorDoorDeviceDriver.getOpen());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x50")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: device_code=" + device_code + " 不是电梯门设备")
|
||||
.content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x50").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: device_code=" + device_code + " 不是电梯门设备").content("未反馈AGVphase=0x50;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info(agvaddr + "对应设备号为空!");
|
||||
}
|
||||
}
|
||||
// 关门
|
||||
else if (phase == 0x51) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
if (ObjectUtil.isEmpty(device_code)) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: agvaddr=" + agvaddr + " 对应设备号为空")
|
||||
.content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: agvaddr=" + agvaddr + " 对应设备号为空").content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info(agvaddr + "对应设备号为空!");
|
||||
return;
|
||||
}
|
||||
@@ -396,48 +265,20 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
try {
|
||||
elevatorDoorDeviceDriver.writing("call", "0");
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 下发关门信号异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 下发关门信号异常: " + e.getMessage()).content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("下发电气信号失败:" + e.getMessage());
|
||||
log.error("下发关门信号失败", e);
|
||||
}
|
||||
if (elevatorDoorDeviceDriver.getOpen() == 0 && elevatorDoorDeviceDriver.getCall() == 0) {
|
||||
log.info("读取关门信号值为:{}", elevatorDoorDeviceDriver.getOpen());
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen())
|
||||
.content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 未满足反馈条件, call=" + elevatorDoorDeviceDriver.getCall() + ", open=" + elevatorDoorDeviceDriver.getOpen()).content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("未下发NDC信号原因: 读取自动门信号值为:{}", elevatorDoorDeviceDriver.getOpen());
|
||||
}
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x51")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: device_code=" + device_code + " 不是电梯门设备")
|
||||
.content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x51").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: device_code=" + device_code + " 不是电梯门设备").content("未反馈AGVphase=0x51;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info(device_code + "对应设备号为空!");
|
||||
}
|
||||
} //请求充电,需要充电桩伸出到位
|
||||
@@ -446,83 +287,29 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
//carno是车号
|
||||
//ADDR_STATION 是AGV站点号对应的充电桩桩号
|
||||
Integer stationNo = ADDR_STATION.get(ikey);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
if (ObjectUtil.isEmpty(stationNo)) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: ikey=" + ikey + " 未映射到充电桩stationNo")
|
||||
.content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: ikey=" + ikey + " 未映射到充电桩stationNo").content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
BMSSocketConnectionAutoRun.writeStartChargeAndArmExtend(stationNo);
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 下发组合命令(开始充电+伸臂)异常: " + e.getMessage()).content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
boolean armExtended = false;
|
||||
try {
|
||||
armExtended = BMSSocketConnectionAutoRun.isArmExtended(stationNo);
|
||||
armExtended = BMSSocketConnectionAutoRun.waitArmExtended(stationNo, BMS_COMMAND_WAIT_TIMEOUT_MS);
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 查询充电臂状态异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 等待充电桩伸出到位异常: " + e.getMessage()).content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
if (armExtended) {
|
||||
try {
|
||||
BMSSocketConnectionAutoRun.writeStartCharge(stationNo);
|
||||
}catch (Exception e){
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 下发开始充电异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
continue;
|
||||
}
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
} else {
|
||||
try {
|
||||
BMSSocketConnectionAutoRun.writeArmExtend(stationNo);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 充电臂未伸出,已下发伸臂命令")
|
||||
.content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x64")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 下发伸臂命令异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
continue;
|
||||
}
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x64").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 已下发组合命令(开始充电+伸臂),但充电桩未伸出到位,不给NDC反馈").content("未反馈AGVphase=0x64;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
}
|
||||
}
|
||||
//请求离开,需要充电桩缩回到位
|
||||
@@ -531,61 +318,32 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
//carno是车号
|
||||
//ADDR_STATION 是AGV站点号对应的充电桩桩号
|
||||
Integer stationNo = ADDR_STATION.get(ikey);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x66")
|
||||
.request_direction("AGV->ACS")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.content("phase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("AGV->ACS").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).content("phase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
if (ObjectUtil.isEmpty(stationNo)) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x66")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: ikey=" + ikey + " 未映射到充电桩stationNo")
|
||||
.content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: ikey=" + ikey + " 未映射到充电桩stationNo").content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
boolean armRetracted = BMSSocketConnectionAutoRun.isArmRetracted(stationNo);
|
||||
if (armRetracted) {
|
||||
try {
|
||||
BMSSocketConnectionAutoRun.writeStopCharge(stationNo);
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x66")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data))
|
||||
.content("已反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x66")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 停止充电或反馈异常: " + e.getMessage())
|
||||
.content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
}
|
||||
} else {
|
||||
BMSSocketConnectionAutoRun.writeStopCharge(stationNo);
|
||||
BMSSocketConnectionAutoRun.writeArmRetract(stationNo);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x66")
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 充电臂未缩回到位,下发退回")
|
||||
.content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo)
|
||||
.build());
|
||||
try {
|
||||
BMSSocketConnectionAutoRun.writeStopChargeAndArmRetract(stationNo);
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 下发组合命令(停止充电+退回伸臂)异常," + e.getMessage()).content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
//退回到位
|
||||
boolean armRetracted = false;
|
||||
try {
|
||||
armRetracted = BMSSocketConnectionAutoRun.waitArmRetracted(stationNo, BMS_COMMAND_WAIT_TIMEOUT_MS);
|
||||
} catch (Exception e) {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 等待停止充电/退回到位异常: " + e.getMessage()).content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
continue;
|
||||
}
|
||||
if (armRetracted) {
|
||||
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param(ObjectUtil.isEmpty(data) ? "" : Bytes2HexString(data)).content("已反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x66").request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 已下发组合命令(停止充电+退回伸臂),但充电桩未同时满足停止充电和退回到位,不给NDC反馈").content("未反馈AGVphase=0x66;ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code + ",stationNo=" + stationNo).build());
|
||||
}
|
||||
} else {
|
||||
if (phase == 0x70 || phase == 0x71 || phase == 0x72 || phase == 0x73 || phase == 0x74) {
|
||||
device = deviceAppService.findDeviceByCode(Integer.toString(arr[18] * 256 + arr[19]));
|
||||
} else {
|
||||
@@ -598,14 +356,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable {
|
||||
agvNdcTwoDeviceDriver.processSocket(arr);
|
||||
}
|
||||
} else {
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder()
|
||||
.request_url("socket://ndc/phase/0x" + Integer.toHexString(phase).toUpperCase())
|
||||
.request_direction("ACS->AGV")
|
||||
.method("NDCSocketConnectionAutoRun.autoRun")
|
||||
.request_param(bs.toString().toUpperCase())
|
||||
.response_param("原因: 当前phase=" + phase + " 未找到对应设备")
|
||||
.content("未反馈AGVphase=0x" + Integer.toHexString(phase).toUpperCase() + ";ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code)
|
||||
.build());
|
||||
luceneExecuteLogService.interfaceExecuteLog(LuceneLogDto.builder().request_url("socket://ndc/phase/0x" + Integer.toHexString(phase).toUpperCase()).request_direction("ACS->AGV").method("NDCSocketConnectionAutoRun.autoRun").request_param(bs.toString().toUpperCase()).response_param("原因: 当前phase=" + phase + " 未找到对应设备").content("未反馈AGVphase=0x" + Integer.toHexString(phase).toUpperCase() + ";ikey=" + ikey + ",index=" + index + ",agvaddr=" + agvaddr + ",device_code=" + device_code).build());
|
||||
log.info("当前phase:" + phase + "未找到对应设备");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
@@ -83,6 +83,17 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
|
||||
String error_type = "agv_error_type";
|
||||
|
||||
|
||||
/**
|
||||
* 屏蔽拆封盖机需要用到
|
||||
* 四点任务从拆包机对接位->料筒库缓存位空位;从料筒库缓存位空桶位->拆包机对接位;
|
||||
* 在拆包机对接位取货完成后,需要人工确认盖盖子
|
||||
* 在拆包机对接位放货前,需要人工拆盖子
|
||||
* 拆盖标记 open_flag 封盖标记close_flag
|
||||
*/
|
||||
private boolean open_flag = false;
|
||||
private boolean close_flag = false;
|
||||
|
||||
|
||||
private Integer lastPhase = 0;
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,6 +53,7 @@ public class WmsToAcsController {
|
||||
|
||||
@PostMapping("/areaControl")
|
||||
@Log(value = "区域控制")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> areaControl(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(wmstoacsService.areaControl(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user