| | |
| | | package com.zy.acs.charge.impl; |
| | | |
| | | import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; |
| | | import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp; |
| | | 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.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Primary; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class AiPowerChargeServiceImpl implements ChargeCoreService { |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public boolean startCharging(ModbusTcp modbusTcp) { |
| | | public boolean startCharging(ModbusRtuOverTcp client) { |
| | | // AGV车报告到位 -> true |
| | | modbusTcp.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); |
| | | client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public boolean stopCharging(ModbusTcp modbusTcp) { |
| | | modbusTcp.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); |
| | | public boolean stopCharging(ModbusRtuOverTcp client) { |
| | | client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public ChargerStatus getStatus(ModbusTcp modbusTcp) { |
| | | public boolean checkForwardRelayOnline(ModbusRtuOverTcp client) { |
| | | return client.readBoolean(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1); |
| | | } |
| | | |
| | | @Override |
| | | public boolean checkBackwardRelayOffline(ModbusRtuOverTcp client) { |
| | | return client.readBoolean(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1); |
| | | } |
| | | |
| | | @Override |
| | | public double getVoltage(ModbusRtuOverTcp client) { |
| | | return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | } |
| | | |
| | | @Override |
| | | public double getCurrent(ModbusRtuOverTcp client) { |
| | | return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | } |
| | | |
| | | @Override |
| | | public ChargerStatus getStatus(ModbusRtuOverTcp client) { |
| | | ChargerStatus status = new ChargerStatus(); |
| | | |
| | | // ---------- 批量读取线圈(地址100~115共16个) ---------- |
| | | List<Boolean> coils = modbusTcp.readCoil(100, 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.setCommBmsSuccess(!coils.get(15)); // 115 |
| | | |
| | | // ---------- 批量读取保持寄存器(地址100~116共17个) ---------- |
| | | byte[] bytes = modbusTcp.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)); |
| | | 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)); |
| | | |
| | | return status; |
| | | } |
| | |
| | | |
| | | // 清除故障 |
| | | @Override |
| | | public boolean clearFault(ModbusTcp modbusTcp) { |
| | | modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1); |
| | | public boolean clearFault(ModbusRtuOverTcp client) { |
| | | client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1); |
| | | return true; |
| | | } |
| | | |
| | | // 完成退回命令 |
| | | @Override |
| | | public boolean finishRetract(ModbusTcp modbusTcp) { |
| | | modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2); |
| | | public boolean finishRetract(ModbusRtuOverTcp client) { |
| | | client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2); |
| | | return true; |
| | | } |
| | | |
| | | // 恢复待机状态 |
| | | @Override |
| | | public boolean restoreStandby(ModbusTcp modbusTcp) { |
| | | modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3); |
| | | public boolean restoreStandby(ModbusRtuOverTcp client) { |
| | | client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3); |
| | | return true; |
| | | } |
| | | } |