| | |
| | | |
| | | import com.ghgande.j2mod.modbus.ModbusException; |
| | | import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; |
| | | import com.ghgande.j2mod.modbus.io.AbstractModbusTransport; |
| | | import com.ghgande.j2mod.modbus.procimg.Register; |
| | | import com.ghgande.j2mod.modbus.procimg.SimpleRegister; |
| | | import com.ghgande.j2mod.modbus.util.BitVector; |
| | | 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.constant.AiPowerChargeCoilEnum; |
| | | import com.zy.acs.charge.constant.AiPowerChargeRegisterEnum; |
| | | import com.zy.acs.charge.constant.ChargerType; |
| | | import com.zy.acs.charge.model.ChargerStatus; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.context.annotation.Primary; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * 爱普拉AGV锂电智能充电机调度 |
| | | */ |
| | | @Service |
| | | @Primary |
| | | @Service("aiPowerChargeService") |
| | | @Slf4j |
| | | public class AiPowerChargeServiceImpl implements ChargeCoreService { |
| | | |
| | | @Override |
| | | public ChargerType supportedType() { |
| | | return ChargerType.Modbus; |
| | | } |
| | | |
| | | /** |
| | | * 开始充电 |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); |
| | | return client.writeCoil(AiPowerChargeCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true); |
| | | } catch (Exception e) { |
| | | log.info("写入开始充电指令报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); |
| | | return client.writeCoil(AiPowerChargeCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false); |
| | | } catch (Exception e) { |
| | | log.info("写入停止充电指令报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readCoils(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1).getBit(0); |
| | | return client.readCoils(AiPowerChargeCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1).getBit(0); |
| | | } catch (Exception e) { |
| | | log.info("读取在线正继电器状态报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readCoils(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1).getBit(0); |
| | | return client.readCoils(AiPowerChargeCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1).getBit(0); |
| | | } catch (Exception e) { |
| | | log.info("读取离线正继电器状态报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1)[0].getValue() * AiPowerChargeRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | } catch (Exception e) { |
| | | log.info("读取充电电压报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_CURRENT.getAddr(), 1)[0].getValue() * AiPowerChargeRegisterEnum.CHARGE_CURRENT.getRaw(); |
| | | } catch (Exception e) { |
| | | log.info("读取充电电流报错:{} ", e.getMessage()); |
| | | }finally { |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1)[0].getValue(); |
| | | return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_MODE.getAddr(), 1)[0].getValue(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.info("读取充电模式报错:{} ", e.getMessage()); |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGER_ID.getAddr(), 1)[0].getValue(); |
| | | return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGER_ID.getAddr(), 1)[0].getValue(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.info("读取充电机编号报错:{} ", e.getMessage()); |
| | |
| | | if (!client.isConnected()) { |
| | | client.connect(); |
| | | } |
| | | coils = client.readCoils(AiPowerChargerCoilEnum.WORK_STATUS.getAddr(), AiPowerChargerCoilEnum.values().length); |
| | | coils = client.readCoils(AiPowerChargeCoilEnum.WORK_STATUS.getAddr(), AiPowerChargeCoilEnum.values().length); |
| | | for (int i = 0; i < coils.size(); i++) { |
| | | switch (i) { |
| | | case 0: |
| | |
| | | |
| | | // ---------- 批量读取保持寄存器(地址100~116共17个) ---------- |
| | | |
| | | Register[] registers = client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), AiPowerChargerRegisterEnum.values().length); |
| | | Register[] registers = client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_VOLTAGE.getAddr(), AiPowerChargeRegisterEnum.values().length); |
| | | for (int i = 0; i < registers.length; i++) { |
| | | switch (i) { |
| | | case 0: |
| | | status.setVoltage(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw()); |
| | | status.setVoltage(registers[i].getValue() * AiPowerChargeRegisterEnum.CHARGE_VOLTAGE.getRaw()); |
| | | break; |
| | | case 1: |
| | | status.setCurrent(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw()); |
| | | status.setCurrent(registers[i].getValue() * AiPowerChargeRegisterEnum.CHARGE_CURRENT.getRaw()); |
| | | break; |
| | | case 2: |
| | | status.setChargingTime(registers[i].getValue()); |
| | | break; |
| | | case 3: |
| | | status.setCapacity(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CAPACITY.getRaw()); |
| | | status.setCapacity(registers[i].getValue() * AiPowerChargeRegisterEnum.CHARGE_CAPACITY.getRaw()); |
| | | break; |
| | | case 4: |
| | | status.setEnergy(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_ENERGY.getRaw()); |
| | | status.setEnergy(registers[i].getValue() * AiPowerChargeRegisterEnum.CHARGE_ENERGY.getRaw()); |
| | | break; |
| | | case 5: |
| | | status.setCellMaxVoltage(registers[i].getValue()); |
| | |
| | | status.setCellMinVoltage(registers[i].getValue()); |
| | | break; |
| | | case 7: |
| | | status.setPackVoltage(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_PACK_VOLTAGE.getRaw()); |
| | | status.setPackVoltage(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_PACK_VOLTAGE.getRaw()); |
| | | break; |
| | | case 8: |
| | | status.setVoltageDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw()); |
| | | status.setVoltageDemand(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw()); |
| | | break; |
| | | case 9: |
| | | status.setCurrentDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_CURRENT_DEMAND.getRaw()); |
| | | status.setCurrentDemand(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_CURRENT_DEMAND.getRaw()); |
| | | break; |
| | | case 10: |
| | | status.setTemperature(registers[i].getValue()); |
| | | break; |
| | | case 11: |
| | | status.setSoc(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_SOC.getRaw()); |
| | | status.setSoc(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_SOC.getRaw()); |
| | | break; |
| | | case 12: |
| | | status.setEndFlag(registers[i].getValue()); |
| | |
| | | @Override |
| | | public boolean clearFault(ModbusTCPMaster client) { |
| | | try { |
| | | client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(1)); |
| | | client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(1)); |
| | | } catch (ModbusException e) { |
| | | log.error("充电器清除故障失败......"); |
| | | } |
| | |
| | | @Override |
| | | public boolean finishRetract(ModbusTCPMaster client) { |
| | | try { |
| | | client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(2)); |
| | | client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(2)); |
| | | } catch (ModbusException e) { |
| | | log.error("充电器完成退回失败......"); |
| | | } |
| | |
| | | @Override |
| | | public boolean restoreStandby(ModbusTCPMaster client) { |
| | | try { |
| | | client.writeSingleRegister(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(3)); |
| | | client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(3)); |
| | | } catch (ModbusException e) { |
| | | log.error("充电器恢复待机失败......"); |
| | | } |