package com.zy.acs.charge.impl;
|
|
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.context.annotation.Primary;
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
|
/**
|
* 爱普拉AGV锂电智能充电机调度
|
*/
|
@Service
|
@Primary
|
@Slf4j
|
public class AiPowerChargeServiceImpl implements ChargeCoreService {
|
|
|
@Override
|
public boolean startCharging(ModbusRtuOverTcp client) {
|
// AGV车报告到位 -> true
|
client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
|
return true;
|
}
|
|
@Override
|
public boolean stopCharging(ModbusRtuOverTcp client) {
|
client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
|
return true;
|
}
|
|
@Override
|
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 = 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
|
|
// ---------- 批量读取保持寄存器(地址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));
|
|
return status;
|
}
|
|
|
// 清除故障
|
@Override
|
public boolean clearFault(ModbusRtuOverTcp client) {
|
client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1);
|
return true;
|
}
|
|
// 完成退回命令
|
@Override
|
public boolean finishRetract(ModbusRtuOverTcp client) {
|
client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2);
|
return true;
|
}
|
|
// 恢复待机状态
|
@Override
|
public boolean restoreStandby(ModbusRtuOverTcp client) {
|
client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3);
|
return true;
|
}
|
}
|