pom.xml
@@ -35,6 +35,7 @@ <jedis.version>2.9.0</jedis.version> <snakeyaml.version>1.33</snakeyaml.version> <druid.version>1.2.27</druid.version> <j2mod.version>3.2.2</j2mod.version> </properties> <dependencies> @@ -76,6 +77,11 @@ <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> </dependency> <dependency> <groupId>com.ghgande</groupId> <artifactId>j2mod</artifactId> <version>${j2mod.version}</version> <!-- 可在 Maven 中央仓库查找最新版本 --> </dependency> </dependencies> </dependencyManagement> zy-acs-charge/pom.xml
@@ -28,9 +28,8 @@ <version>1.0.0</version> </dependency> <dependency> <groupId>com.github.xingshuangs</groupId> <artifactId>iot-communication</artifactId> <version>1.5.6</version> <groupId>com.ghgande</groupId> <artifactId>j2mod</artifactId> </dependency> </dependencies> zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java
@@ -1,6 +1,6 @@ package com.zy.acs.charge; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.zy.acs.charge.model.ChargerStatus; /** @@ -14,7 +14,7 @@ * @param client * @return */ boolean startCharging(ModbusRtuOverTcp client); boolean startCharging(ModbusTCPMaster client); /** * 调度停止充电 @@ -22,7 +22,7 @@ * @param client * @return */ boolean stopCharging(ModbusRtuOverTcp client); boolean stopCharging(ModbusTCPMaster client); /** * 在线正继电器状态(前进到位) @@ -30,7 +30,7 @@ * @param client * @return */ boolean checkForwardRelayOnline(ModbusRtuOverTcp client); boolean checkForwardRelayOnline(ModbusTCPMaster client); /** @@ -39,7 +39,7 @@ * @param client * @return */ boolean checkBackwardRelayOffline(ModbusRtuOverTcp client); boolean checkBackwardRelayOffline(ModbusTCPMaster client); /** * 获取充电机充电电压 @@ -47,7 +47,7 @@ * @param client * @return */ double getVoltage(ModbusRtuOverTcp client); double getVoltage(ModbusTCPMaster client); /** * 获取充电机充电电流 @@ -55,27 +55,27 @@ * @param client * @return */ double getCurrent(ModbusRtuOverTcp client); double getCurrent(ModbusTCPMaster client); /** * 获取充电机充电模式 * @param client * @return */ Short getChargeMode(ModbusRtuOverTcp client); int getChargeMode(ModbusTCPMaster client); /** * 获取充电机状态 * @param client * @return */ ChargerStatus getStatus(ModbusRtuOverTcp client); ChargerStatus getStatus(ModbusTCPMaster client); boolean clearFault(ModbusRtuOverTcp client); boolean clearFault(ModbusTCPMaster client); boolean finishRetract(ModbusRtuOverTcp client); boolean finishRetract(ModbusTCPMaster client); boolean restoreStandby(ModbusRtuOverTcp client); boolean restoreStandby(ModbusTCPMaster client); } zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java
@@ -52,4 +52,6 @@ public String getDes() { return des; } } zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
@@ -1,16 +1,17 @@ package com.zy.acs.charge.impl; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; import com.ghgande.j2mod.modbus.ModbusException; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.ghgande.j2mod.modbus.procimg.Register; import com.ghgande.j2mod.modbus.procimg.SimpleRegister; import com.ghgande.j2mod.modbus.util.BitVector; import com.zy.acs.charge.ChargeCoreService; import com.zy.acs.charge.constant.AiPowerChargerCoilEnum; import com.zy.acs.charge.constant.AiPowerChargerRegisterEnum; import com.zy.acs.charge.model.ChargerStatus; import com.zy.acs.common.utils.ByteUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import java.util.List; /** * 爱普拉AGV锂电智能充电机调度 @@ -22,123 +23,252 @@ /** * 开始充电 * * @param client * @return */ @Override public boolean startCharging(ModbusRtuOverTcp client) { public boolean startCharging(ModbusTCPMaster client) { // AGV车报告到位 -> true client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); return true; try { return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); } catch (ModbusException e) { log.info("写入开始充电指令报错:{} ", e.getMessage()); } return false; } /** * 停止充电 * * @param client * @return */ @Override public boolean stopCharging(ModbusRtuOverTcp client) { client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); return true; public boolean stopCharging(ModbusTCPMaster client) { try { return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); } catch (ModbusException e) { log.info("写入停止充电指令报错:{} ", e.getMessage()); } return false; } /** * 在线正继电器状态(前进到位) * * @param client * @return */ @Override public boolean checkForwardRelayOnline(ModbusRtuOverTcp client) { return client.readBoolean(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1); public boolean checkForwardRelayOnline(ModbusTCPMaster client) { try { return client.readCoils(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1).getBit(0); } catch (ModbusException e) { log.info("读取在线正继电器状态报错:{} ", e.getMessage()); } return false; } /** * 离线正继电器状态(后退到位) * * @param client * @return */ @Override public boolean checkBackwardRelayOffline(ModbusRtuOverTcp client) { return client.readBoolean(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1); public boolean checkBackwardRelayOffline(ModbusTCPMaster client) { try { return client.readCoils(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1).getBit(0); } catch (ModbusException e) { log.info("读取离线正继电器状态报错:{} ", e.getMessage()); } return false; } /** * 获取充电机充电电压 * * @param client * @return */ @Override public double getVoltage(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); public double getVoltage(ModbusTCPMaster client) { try { return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); } catch (ModbusException e) { log.info("读取充电电压报错:{} ", e.getMessage()); } return 0; } /** * 获取充电机充电电流 * * @param client * @return */ @Override public double getCurrent(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); public double getCurrent(ModbusTCPMaster client) { try { return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); } catch (ModbusException e) { log.info("读取充电电流报错:{} ", e.getMessage()); } return 0; } /** * 获取充电机充电模式 * * @param client * @return */ @Override public Short getChargeMode(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1); public int getChargeMode(ModbusTCPMaster client) { try { return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1)[0].getValue(); } catch (ModbusException e) { log.info("读取充电模式报错:{} ", e.getMessage()); } return -1; } /** * 获取充电机状态 * * @param client * @return */ @Override public ChargerStatus getStatus(ModbusRtuOverTcp client) { public ChargerStatus getStatus(ModbusTCPMaster client) { ChargerStatus status = new ChargerStatus(); // ---------- 批量读取线圈(地址100~115共16个) ---------- List<Boolean> coils = client.readCoil(100, 16); status.setWorking(coils.get(0)); // 地址100 status.setOverheat(coils.get(0)); // 101 status.setFault(coils.get(0)); // 102 status.setCvMode(coils.get(0)); // 103 status.setBatteryConnected(coils.get(0)); // 104 status.setFanAbnormal(coils.get(0)); // 105 status.setPlateOverheat(coils.get(0)); // 106 status.setBrushPressed(coils.get(0)); // 107 status.setAgvReportedInPosition(coils.get(8)); // 108 status.setChargerConfirmedAgvReady(coils.get(9)); // 109 status.setForwardRelayOnline(coils.get(10)); // 110 status.setBackwardRelayOffline(coils.get(11)); // 111 status.setBmsChargeEnable(coils.get(12)); // 112 status.setCommRs485Success(!coils.get(13)); // 113(注意:0=成功,1=超时) status.setCommCanSuccess(!coils.get(14)); // 114 status.setCommBmsSuccess(!coils.get(15)); // 115 BitVector coils = null; try { coils = client.readCoils(AiPowerChargerCoilEnum.WORK_STATUS.getAddr(), AiPowerChargerCoilEnum.values().length); for (int i = 0; i < coils.size(); i++) { switch (i) { case 0: status.setWorking(coils.getBit(i)); break; case 1: status.setOverheat(coils.getBit(i)); break; case 2: status.setFault(coils.getBit(i)); break; case 3: status.setCvMode(coils.getBit(i)); break; case 4: status.setBatteryConnected(coils.getBit(i)); break; case 5: status.setFanAbnormal(coils.getBit(i)); break; case 6: status.setPlateOverheat(coils.getBit(i)); break; case 7: status.setBrushPressed(coils.getBit(i)); break; case 8: status.setAgvReportedInPosition(coils.getBit(i)); break; case 9: status.setChargerConfirmedAgvReady(coils.getBit(i)); break; case 10: status.setForwardRelayOnline(coils.getBit(i)); break; case 11: status.setBackwardRelayOffline(coils.getBit(i)); break; case 12: status.setBmsChargeEnable(coils.getBit(i)); break; case 13: status.setCommRs485Success(!coils.getBit(i)); break; case 14: status.setCommCanSuccess(!coils.getBit(i)); break; case 15: status.setCommBmsSuccess(!coils.getBit(i)); break; default: break; } } } catch (ModbusException e) { log.info("批量读取线圈报错:{} ", e.getMessage()); } // ---------- 批量读取保持寄存器(地址100~116共17个) ---------- byte[] bytes = client.readHoldRegister(100, 16); status.setVoltage(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw()); status.setCurrent(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw()); status.setChargingTime(ByteUtils.getInt(bytes, 0)); status.setCapacity(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.CHARGE_CAPACITY.getRaw()); status.setEnergy(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.CHARGE_ENERGY.getRaw()); status.setCellMaxVoltage(ByteUtils.getInt(bytes, 0)); status.setCellMinVoltage(ByteUtils.getInt(bytes, 0)); status.setPackVoltage(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.BMS_PACK_VOLTAGE.getRaw()); status.setVoltageDemand(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw()); status.setCurrentDemand(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.BMS_CURRENT_DEMAND.getRaw()); status.setTemperature(ByteUtils.getInt(bytes, 0)); status.setSoc(ByteUtils.getInt(bytes, 0) * AiPowerChargerRegisterEnum.BMS_SOC.getRaw()); status.setEndFlag(ByteUtils.getInt(bytes, 0)); status.setChargerId(ByteUtils.getInt(bytes, 0)); status.setFaultCode(ByteUtils.getInt(bytes, 0)); status.setChargeMode(ByteUtils.getInt(bytes, 0)); status.setScheduleFlag(ByteUtils.getInt(bytes, 0)); try { Register[] registers = client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), AiPowerChargerRegisterEnum.values().length); for (int i = 0; i < registers.length; i++) { switch (i) { case 0: status.setVoltage(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw()); break; case 1: status.setCurrent(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw()); break; case 2: status.setChargingTime(registers[i].getValue()); break; case 3: status.setCapacity(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CAPACITY.getRaw()); break; case 4: status.setEnergy(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_ENERGY.getRaw()); break; case 5: status.setCellMaxVoltage(registers[i].getValue()); break; case 6: status.setCellMinVoltage(registers[i].getValue()); break; case 7: status.setPackVoltage(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_PACK_VOLTAGE.getRaw()); break; case 8: status.setVoltageDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw()); break; case 9: status.setCurrentDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_CURRENT_DEMAND.getRaw()); break; case 10: status.setTemperature(registers[i].getValue()); break; case 11: status.setSoc(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_SOC.getRaw()); break; case 12: status.setEndFlag(registers[i].getValue()); break; case 13: status.setChargerId(registers[i].getValue()); break; case 14: status.setFaultCode(registers[i].getValue()); break; case 15: status.setChargeMode(registers[i].getValue()); break; case 16: status.setScheduleFlag(registers[i].getValue()); break; default: break; } } } catch (ModbusException e) { log.info("批量读取保持寄存器报错:{} ", e.getMessage()); } return status; } @@ -146,34 +276,49 @@ /** * 清除故障 * * @param client * @return */ @Override public boolean clearFault(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1); public boolean clearFault(ModbusTCPMaster client) { try { client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(1)); } catch (ModbusException e) { log.error("充电器清除故障失败......"); } return true; } /** * 完成退回 * * @param client * @return */ @Override public boolean finishRetract(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2); public boolean finishRetract(ModbusTCPMaster client) { try { client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(2)); } catch (ModbusException e) { log.error("充电器完成退回失败......"); } return true; } /** * 恢复待机 * * @param client * @return */ @Override public boolean restoreStandby(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3); public boolean restoreStandby(ModbusTCPMaster client) { try { client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(3)); } catch (ModbusException e) { log.error("充电器恢复待机失败......"); } return true; } } zy-acs-manager/pom.xml
@@ -167,15 +167,13 @@ </dependency> <dependency> <groupId>com.github.xingshuangs</groupId> <artifactId>iot-communication</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>com.zy</groupId> <artifactId>acs-charge</artifactId> <version>1.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.ghgande</groupId> <artifactId>j2mod</artifactId> </dependency> </dependencies> zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/charge/ChargeTestController.java
New file @@ -0,0 +1,46 @@ package com.zy.acs.manager.core.integrate.charge; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.zy.acs.charge.ChargeCoreService; import com.zy.acs.charge.model.ChargerStatus; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.R; import com.zy.acs.manager.common.annotation.IntegrationAuth; import com.zy.acs.manager.core.domain.type.NamespaceType; import com.zy.acs.manager.core.service.ChargeService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @Api(tags = "Open Api") @RestController @RequestMapping("/api/open") public class ChargeTestController { private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired private ChargeService chargeService; @Autowired private ChargeCoreService chargeCoreService; @IntegrationAuth(name = NamespaceType.RCS_STA_QUERY) @GetMapping("/charge/{type}") public R test(@PathVariable("type") Integer type){ ModbusTCPMaster modbusTCPMaster = chargeService.get("10"); ChargerStatus status = chargeCoreService.getStatus(modbusTCPMaster); return R.ok(status); } @IntegrationAuth(name = NamespaceType.RCS_STA_QUERY) @GetMapping("/write/{agvId}/{type}") public R test2(@PathVariable("agvId") Integer agvId,@PathVariable("type") Integer type){ redis.setMap(RedisConstant.AGV_CHARGE_FLAG, agvId+"", type); return R.ok(); } } zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
@@ -1,7 +1,7 @@ package com.zy.acs.manager.core.scheduler; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.zy.acs.charge.ChargeCoreService; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.enums.AgvStatusType; @@ -250,6 +250,8 @@ /** * 调度对接充电桩 * 状态1:开始充电 * 状态2:充电中 */ @Scheduled(cron = "0/5 * * * * ? ") private synchronized void startCharge() { @@ -260,23 +262,32 @@ continue; } AgvDetail agvDetail = agvDetailService.selectByAgvNo(key); if (agvDetail == null){ log.error("{} 号待充电小车不存在", key); continue; } if (agvDetail.getCode() == null) { log.error("{} 号待充电小车无地址码", key); continue; } FuncSta funcSta = funcStaService.getByCodeAndType(agvDetail.getCode(), FuncStaType.CHARGE.toString()); ModbusRtuOverTcp modbusTcp = chargeService.get(funcSta.getUuid()); if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus() || funcSta == null || null == modbusTcp) { ModbusTCPMaster modbusTCPMaster = chargeService.get(funcSta.getUuid()); if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus() || funcSta == null || null == modbusTCPMaster) { continue; } if (chargeCoreService.getChargeMode(modbusTCPMaster) != 0) { log.info("{} 该充电机不是自动充电模式", funcSta.getName()); continue; } switch (status) { case 1: // 后退信号消失,说明马达正在前进 if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) { chargeCoreService.startCharging(modbusTcp); if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { chargeCoreService.startCharging(modbusTCPMaster); } if (chargeCoreService.checkForwardRelayOnline(modbusTcp)) { double current = chargeCoreService.getCurrent(modbusTcp); double voltage = chargeCoreService.getVoltage(modbusTcp); if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) { double current = chargeCoreService.getCurrent(modbusTCPMaster); double voltage = chargeCoreService.getVoltage(modbusTCPMaster); if (current > 0 && voltage > 0) { redis.setMap(RedisConstant.AGV_CHARGE_FLAG, key, 2); log.info("charge complete"); @@ -290,10 +301,10 @@ AgvModel agvModel = agvModelService.getByAgvId(agvDetail.getAgvId()); if (agvDetail.getSoc() >= agvModel.getQuaBattery()) { // 前进信号存在,说明机械臂未伸回 if (chargeCoreService.checkForwardRelayOnline(modbusTcp)) { chargeCoreService.stopCharging(modbusTcp); if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) { chargeCoreService.stopCharging(modbusTCPMaster); } if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) { if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key); log.info("charge over"); } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
@@ -1,9 +1,7 @@ package com.zy.acs.manager.core.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; import com.github.xingshuangs.iot.utils.HexUtil; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.manager.entity.FuncSta; import com.zy.acs.manager.manager.enums.FuncStaType; @@ -26,7 +24,7 @@ @Autowired private FuncStaService funcStaService; private final Map<String, ModbusRtuOverTcp> CHARGE_CACHE = new ConcurrentHashMap<>(); private final Map<String, ModbusTCPMaster> CHARGE_CACHE = new ConcurrentHashMap<>(); @PostConstruct @@ -43,8 +41,7 @@ public void add(FuncSta funcSta) { ModbusRtuOverTcp modbusTcp = new ModbusRtuOverTcp(funcSta.getIp(), funcSta.getPort()); modbusTcp.setComCallback((tag, bytes) -> log.info("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes))); ModbusTCPMaster modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(), true); CHARGE_CACHE.put(funcSta.getUuid(), modbusTcp); } @@ -52,14 +49,13 @@ CHARGE_CACHE.remove(chargePointId); } public ModbusRtuOverTcp get(String chargePointId) { ModbusRtuOverTcp modbusTcp = CHARGE_CACHE.get(chargePointId); public ModbusTCPMaster get(String chargePointId) { ModbusTCPMaster modbusTcp = CHARGE_CACHE.get(chargePointId); if (modbusTcp != null) { return modbusTcp; } FuncSta funcSta = funcStaService.getOne(new LambdaQueryWrapper<FuncSta>().eq(FuncSta::getUuid, chargePointId)); modbusTcp = new ModbusRtuOverTcp(funcSta.getIp(), funcSta.getPort()); modbusTcp.setComCallback((tag, bytes) -> log.info("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes))); modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(),true); CHARGE_CACHE.put(chargePointId, modbusTcp); return modbusTcp; } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
@@ -383,25 +383,25 @@ } return; } for (Route route : routeList) { Code startCode = codeService.getCacheById(route.getStartCode()); int[] startCodeIdx = getCodeMatrixIdx(lev, startCode.getData()); Code endCode = codeService.getCacheById(route.getEndCode()); int[] codeMatrixIdx = getCodeMatrixIdx(lev, endCode.getData()); String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData()); if (Cools.isEmpty(routeKey)) { continue; } redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE); String routeCdaKey = RouteGenerator.generateRouteCdaKey(startCodeIdx, codeMatrixIdx); if (Cools.isEmpty(routeCdaKey)) { continue; } redis.setMap(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG, routeCdaKey, Boolean.TRUE); this.routeCdaMap.put(routeCdaKey, Boolean.TRUE); } // for (Route route : routeList) { // Code startCode = codeService.getCacheById(route.getStartCode()); // int[] startCodeIdx = getCodeMatrixIdx(lev, startCode.getData()); // Code endCode = codeService.getCacheById(route.getEndCode()); // int[] codeMatrixIdx = getCodeMatrixIdx(lev, endCode.getData()); // // String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData()); // if (Cools.isEmpty(routeKey)) { // continue; // } // redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE); // // String routeCdaKey = RouteGenerator.generateRouteCdaKey(startCodeIdx, codeMatrixIdx); // if (Cools.isEmpty(routeCdaKey)) { // continue; // } // redis.setMap(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG, routeCdaKey, Boolean.TRUE); // this.routeCdaMap.put(routeCdaKey, Boolean.TRUE); // } } public synchronized String[][] initCodeMatrix(Integer lev) { zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -2,7 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.zy.acs.charge.ChargeCoreService; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.enums.AgvStatusType; @@ -348,10 +348,10 @@ // 手动充电模式,跳过 if (agvModel.getNeedUndocking() != null && agvModel.getNeedUndockingBool()) { FuncSta funcSta = funcStaService.getByCodeAndType(agvDetail.getCode(), FuncStaType.CHARGE.toString()); ModbusRtuOverTcp modbusTcp = chargeService.get(funcSta.getUuid()); ModbusTCPMaster modbusTCPMaster = chargeService.get(funcSta.getUuid()); // 手动充电模式,跳过 if (chargeCoreService.getChargeMode(modbusTcp) != 1) { return false; if (chargeCoreService.getChargeMode(modbusTCPMaster) != 1) { return false; } } return true; zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; import com.zy.acs.common.enums.AgvStatusType; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.utils.CommonUtil; zy-acs-manager/src/main/resources/application.yml
@@ -7,7 +7,7 @@ static-path-pattern: /** datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: xltys1995 type: com.alibaba.druid.pool.DruidDataSource