package com.zy.acs.charge.impl;
|
|
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.charge.protocol.ModbusAdapter;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Primary;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* 爱普拉AGV锂电智能充电机调度
|
*/
|
@Service
|
@Primary
|
@Slf4j
|
public class AiPowerChargeServiceImpl implements ChargeCoreService {
|
|
@Autowired
|
private ModbusAdapter modbusAdapter;
|
|
@Override
|
public boolean connect() throws Exception {
|
modbusAdapter.connect();
|
return true;
|
}
|
|
@Override
|
public void disconnect() {
|
modbusAdapter.disconnect();
|
}
|
|
@Override
|
public boolean isConnected() {
|
// 可以通过尝试读取一个寄存器来判断,但为了简单,这里直接返回连接状态(需改造 ModbusAdapter 暴露状态)
|
// 可在 ModbusAdapter 中添加 isConnected() 方法
|
return false; // 待实现
|
}
|
|
@Override
|
public boolean startCharging() throws Exception {
|
// AGV车报告到位 -> true
|
modbusAdapter.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
|
return true;
|
}
|
|
@Override
|
public boolean stopCharging() throws Exception {
|
modbusAdapter.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
|
return true;
|
}
|
|
@Override
|
public ChargerStatus getStatus() throws Exception {
|
ChargerStatus status = new ChargerStatus();
|
|
// ---------- 批量读取线圈(地址100~115共16个) ----------
|
boolean[] coils = modbusAdapter.readCoils(100, 16);
|
status.setWorking(coils[0]); // 地址100
|
status.setOverheat(coils[1]); // 101
|
status.setFault(coils[2]); // 102
|
status.setCvMode(coils[3]); // 103
|
status.setBatteryConnected(coils[4]); // 104
|
status.setFanAbnormal(coils[5]); // 105
|
status.setPlateOverheat(coils[6]); // 106
|
status.setBrushPressed(coils[7]); // 107
|
status.setAgvReportedInPosition(coils[8]); // 108
|
status.setChargerConfirmedAgvReady(coils[9]); // 109
|
status.setForwardRelayOnline(coils[10]); // 110
|
status.setBackwardRelayOffline(coils[11]); // 111
|
status.setBmsChargeEnable(coils[12]); // 112
|
status.setCommRs485Success(!coils[13]); // 113(注意:0=成功,1=超时)
|
status.setCommCanSuccess(!coils[14]); // 114
|
status.setCommBmsSuccess(!coils[15]); // 115
|
|
// ---------- 批量读取保持寄存器(地址100~116共17个) ----------
|
int[] regs = modbusAdapter.readHoldingRegisters(100, 17);
|
status.setVoltage(regs[0] * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw());
|
status.setCurrent(regs[1] * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw());
|
status.setChargingTime(regs[2]);
|
status.setCapacity(regs[3] * AiPowerChargerRegisterEnum.CHARGE_CAPACITY.getRaw());
|
status.setEnergy(regs[4] * AiPowerChargerRegisterEnum.CHARGE_ENERGY.getRaw());
|
status.setCellMaxVoltage(regs[5]);
|
status.setCellMinVoltage(regs[6]);
|
status.setPackVoltage(regs[7] * AiPowerChargerRegisterEnum.BMS_PACK_VOLTAGE.getRaw());
|
status.setVoltageDemand(regs[8] * AiPowerChargerRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw());
|
status.setCurrentDemand(regs[9] * AiPowerChargerRegisterEnum.BMS_CURRENT_DEMAND.getRaw());
|
status.setTemperature(regs[10]);
|
status.setSoc(regs[11] * AiPowerChargerRegisterEnum.BMS_SOC.getRaw());
|
status.setEndFlag(regs[12]);
|
status.setChargerId(regs[13]);
|
status.setFaultCode(regs[14]);
|
status.setChargeMode(regs[15]);
|
status.setScheduleFlag(regs[16]);
|
|
return status;
|
}
|
|
@Override
|
public boolean setVoltage(int voltageDecivolts) throws Exception {
|
// BMS无时才允许写入,这里假设允许
|
modbusAdapter.writeHoldingRegister(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), voltageDecivolts);
|
return true;
|
}
|
|
@Override
|
public boolean setCurrent(int currentDecamperes) throws Exception {
|
modbusAdapter.writeHoldingRegister(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), currentDecamperes);
|
return true;
|
}
|
|
@Override
|
public boolean clearFault() throws Exception {
|
// 写入调度标识地址为1:清除故障
|
modbusAdapter.writeHoldingRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), 1);
|
return true;
|
}
|
}
|