version/doc/AGV-RCS ͨÐÅÐÒé V1.1.xlsxBinary files differ
zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java
@@ -57,7 +57,18 @@ */ double getCurrent(ModbusRtuOverTcp client); /** * è·åå çµæºå çµæ¨¡å¼ * @param client * @return */ Short getChargeMode(ModbusRtuOverTcp client); /** * è·åå çµæºç¶æ * @param client * @return */ ChargerStatus getStatus(ModbusRtuOverTcp client); zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
@@ -20,7 +20,11 @@ @Slf4j public class AiPowerChargeServiceImpl implements ChargeCoreService { /** * å¼å§å çµ * @param client * @return */ @Override public boolean startCharging(ModbusRtuOverTcp client) { // AGV车æ¥åå°ä½ -> true @@ -28,32 +32,71 @@ return true; } /** * 忢å çµ * @param client * @return */ @Override public boolean stopCharging(ModbusRtuOverTcp client) { client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); return true; } /** * å¨çº¿æ£ç»§çµå¨ç¶æ(åè¿å°ä½) * @param client * @return */ @Override public boolean checkForwardRelayOnline(ModbusRtuOverTcp client) { return client.readBoolean(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1); } /** * 离线æ£ç»§çµå¨ç¶æ(åéå°ä½) * @param client * @return */ @Override public boolean checkBackwardRelayOffline(ModbusRtuOverTcp client) { return client.readBoolean(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1); } /** * è·åå çµæºå çµçµå * @param client * @return */ @Override public double getVoltage(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); } /** * è·åå çµæºå çµçµæµ * @param client * @return */ @Override public double getCurrent(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); } /** * è·åå çµæºå çµæ¨¡å¼ * @param client * @return */ @Override public Short getChargeMode(ModbusRtuOverTcp client) { return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1); } /** * è·åå çµæºç¶æ * @param client * @return */ @Override public ChargerStatus getStatus(ModbusRtuOverTcp client) { ChargerStatus status = new ChargerStatus(); @@ -101,21 +144,33 @@ } // æ¸ é¤æ é /** * æ¸ é¤æ é * @param client * @return */ @Override public boolean clearFault(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1); return true; } // 宿éåå½ä»¤ /** * 宿éå * @param client * @return */ @Override public boolean finishRetract(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2); return true; } // æ¢å¤å¾ æºç¶æ /** * æ¢å¤å¾ æº * @param client * @return */ @Override public boolean restoreStandby(ModbusRtuOverTcp client) { client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3); zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
@@ -132,8 +132,8 @@ // if (agvDetailService.isPowerLoss(agv, agvDetail, agvModel)) { // continue; // } // åå¨å çµæ è®°ï¼è·³è¿ if (redis.getMap(RedisConstant.AGV_CHARGE_FLAG, agv.getUuid()) != null) { // å¤è¯»æ¯å¦å¯ä»¥èªå¨æå¼å çµï¼å³å çµè¿ç¨ä¸ä¸è½æ¥åä»»å¡ï¼ï¼è·³è¿ if (!agvService.judgeAutoStopCharge(agvModel,agvDetail, agv)) { continue; } // is charging ? @@ -260,6 +260,9 @@ continue; } AgvDetail agvDetail = agvDetailService.selectByAgvNo(key); if (agvDetail.getCode() == null) { 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) { zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -1988,10 +1988,14 @@ if (taskComplete) { // å¨å çµä»»å¡è¡èµ°å°ç»ç¹ï¼åæ¶å¤æå çµæ¡©çç±»å if (segment.getPosType().equals(TaskPosDto.PosType.TO_CHARGE)){ FuncSta destFuncSta = funcStaService.getByCodeAndType(task.getDestCode(), FuncStaType.CHARGE.toString()); if (destFuncSta != null) { if (Cools.isEmpty(destFuncSta.getProtocol()) && destFuncSta.getProtocol().equalsIgnoreCase(ProtocolType.MODBUS.toString())) { redis.setMap(RedisConstant.AGV_CHARGE_FLAG,segment.getAgvId$(),1); AgvModel agvModel = agvModelService.getByAgvId(task.getAgvId()); // 夿æ¯å¦éè¦æå æä½ if (null != agvModel.getNeedUndocking() && agvModel.getNeedUndockingBool()){ FuncSta destFuncSta = funcStaService.getByCodeAndType(task.getDestCode(), FuncStaType.CHARGE.toString()); if (destFuncSta != null) { if (Cools.isEmpty(destFuncSta.getProtocol()) && destFuncSta.getProtocol().equalsIgnoreCase(ProtocolType.MODBUS.toString())) { redis.setMap(RedisConstant.AGV_CHARGE_FLAG,segment.getAgvId$(),1); } } } } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
@@ -7,6 +7,8 @@ import com.zy.acs.manager.core.domain.VehicleDto; import com.zy.acs.manager.manager.controller.result.AgvResult; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.AgvModel; import java.util.List; @@ -44,4 +46,6 @@ int getBackpackRemainingCapacity(Long agvId); Boolean judgeAutoStopCharge(AgvModel agvModel, AgvDetail agvDetail, Agv agv); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -2,6 +2,8 @@ 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.zy.acs.charge.ChargeCoreService; import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.enums.AgvStatusType; import com.zy.acs.common.utils.RedisSupport; @@ -12,12 +14,11 @@ import com.zy.acs.manager.common.domain.PageResult; import com.zy.acs.manager.core.cache.CoreCache; import com.zy.acs.manager.core.domain.VehicleDto; import com.zy.acs.manager.core.service.ChargeService; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.manager.controller.result.AgvResult; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.AgvModel; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.entity.*; import com.zy.acs.manager.manager.enums.FuncStaType; import com.zy.acs.manager.manager.enums.SegmentStateType; import com.zy.acs.manager.manager.mapper.AgvMapper; import com.zy.acs.manager.manager.service.*; @@ -66,6 +67,15 @@ private AreaAgvService areaAgvService; @Autowired private MapDataDispatcher mapDataDispatcher; @Autowired private FuncStaService funcStaService; @Autowired private ChargeService chargeService; @Autowired private ChargeCoreService chargeCoreService; @Autowired private AgvService agvService; @PostConstruct public void init() { @@ -224,8 +234,8 @@ return false; } } if (redis.getMap(RedisConstant.AGV_CHARGE_FLAG,agvDetail.getUuid()) != null) { log.warn("[{}]å·Agvå¨redisåå¨å çµæ è¯......", agvNo); if (judgeAutoStopCharge(agvModel, agvDetail,agvService.getById(agvId))) { log.warn("[{}]å·Agvéè¦æå æä½ï¼æ æ³æ§è¡ä»»å¡......", agvNo); return false; } if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { @@ -324,4 +334,27 @@ return Math.max(agvModel.getBackpack() - usedSlots, 0); // if less than zero, then return zero } /** * 夿å çµè¿ç¨ï¼èªå¨æå¼ * @param agvModel * @param agvDetail * @return */ @Override public Boolean judgeAutoStopCharge(AgvModel agvModel, AgvDetail agvDetail, Agv agv ) { if (redis.getMap(RedisConstant.AGV_CHARGE_FLAG, agv.getUuid()) != null){ return false; } // æå¨å çµæ¨¡å¼ï¼è·³è¿ if (agvModel.getNeedUndocking() != null && agvModel.getNeedUndockingBool()) { FuncSta funcSta = funcStaService.getByCodeAndType(agvDetail.getCode(), FuncStaType.CHARGE.toString()); ModbusRtuOverTcp modbusTcp = chargeService.get(funcSta.getUuid()); // æå¨å çµæ¨¡å¼,è·³è¿ if (chargeCoreService.getChargeMode(modbusTcp) != 1) { return false; } } return true; } }