| | |
| | | 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; |
| | |
| | | // 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 ? |
| | |
| | | |
| | | /** |
| | | * 调度对接充电桩 |
| | | * 状态1:开始充电 |
| | | * 状态2:充电中 |
| | | * 状态3:人为操作下发断开充电操作 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | private synchronized void startCharge() { |
| | |
| | | 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; |
| | | } |
| | | int chargeMode = chargeCoreService.getChargeMode(modbusTCPMaster); |
| | | if (chargeMode != 0) { |
| | | log.info("{} 该充电机不是自动充电模式", chargeMode); |
| | | continue; |
| | | } |
| | | switch (status) { |
| | | case 1: |
| | | // 后退信号消失,说明马达正在前进 |
| | | if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) { |
| | | chargeCoreService.startCharging(modbusTcp); |
| | | if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { |
| | | log.info("发送充电机充电指令:车号:{}", agvDetail.getAgvId$()); |
| | | chargeCoreService.startCharging(modbusTCPMaster); |
| | | continue; |
| | | } |
| | | 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"); |
| | | log.info("charge start:{}", agvDetail.getAgvId$()); |
| | | } else { |
| | | log.info("read charge current and voltage: {},{}", current, voltage); |
| | | } |
| | | } else { |
| | | log.info("前进到位信号失败:车号:{}", agvDetail.getAgvId$()); |
| | | } |
| | | break; |
| | | |
| | | case 2: |
| | | AgvModel agvModel = agvModelService.getByAgvId(agvDetail.getAgvId()); |
| | | if (agvDetail.getSoc() >= agvModel.getQuaBattery()) { |
| | | // 前进信号存在,说明机械臂未伸回 |
| | | if (chargeCoreService.checkForwardRelayOnline(modbusTcp)) { |
| | | chargeCoreService.stopCharging(modbusTcp); |
| | | } |
| | | if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) { |
| | | redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key); |
| | | log.info("charge over"); |
| | | // 如果充电机完成充电会自动断开 |
| | | // 但充电标识哈在缓存中,那么需要清除缓存标记 |
| | | // 获取充电机编号且后退到位信号存在,那么说明机械臂已经伸回,那么就需要清除缓存 |
| | | if (chargeCoreService.getChargeId(modbusTCPMaster) > 0 && chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { |
| | | redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key); |
| | | log.info("charge over By Auto:{}", agvDetail.getAgvId$()); |
| | | }else { |
| | | AgvModel agvModel = agvModelService.getByAgvId(agvDetail.getAgvId()); |
| | | if (agvDetail.getSoc() >= agvModel.getQuaBattery()) { |
| | | // 前进信号存在,说明机械臂未伸回 |
| | | if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) { |
| | | log.info("发送充电机断充指令:车号:{}", agvDetail.getAgvId$()); |
| | | chargeCoreService.stopCharging(modbusTCPMaster); |
| | | continue; |
| | | } |
| | | if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { |
| | | redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key); |
| | | log.info("charge over:{}", agvDetail.getAgvId$()); |
| | | } else { |
| | | log.info("后退到位信号失败:车号:{}", agvDetail.getAgvId$()); |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | // case 3: |
| | | // // 手动断开充电 |
| | | // // 前进信号存在,说明机械臂未伸回 |
| | | // if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) { |
| | | // log.info("发送充电机手动断充指令:车号:{}", agvDetail.getAgvId$()); |
| | | // chargeCoreService.stopCharging(modbusTCPMaster); |
| | | // continue; |
| | | // } |
| | | // if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) { |
| | | // redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key); |
| | | // log.info("charge over by handle:{}", agvDetail.getAgvId$()); |
| | | // } else { |
| | | // log.info("手动后退到位信号失败:车号:{}", agvDetail.getAgvId$()); |
| | | // } |
| | | // break; |
| | | default: |
| | | log.error("charge status error: {}", status); |
| | | break; |