From 98670de02fde18c0aedaf349c0e165c59f57685b Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 05 五月 2026 10:42:43 +0800
Subject: [PATCH] 部分代码移到单独的类
---
zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java | 351 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 282 insertions(+), 69 deletions(-)
diff --git a/zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java b/zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
index 21de744..e256e01 100644
--- a/zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
+++ b/zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
@@ -1,144 +1,340 @@
package com.zy.acs.charge.impl;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
+import com.ghgande.j2mod.modbus.ModbusException;
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
+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 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;
/**
* 鐖辨櫘鎷堿GV閿傜數鏅鸿兘鍏呯數鏈鸿皟搴�
*/
-@Service
-@Primary
+@Service("aiPowerChargeService")
@Slf4j
-public class AiPowerChargeServiceImpl implements ChargeCoreService {
+public class AiPowerChargeServiceImpl implements ChargeCoreService {
+
+ @Override
+ public ChargerType supportedType() {
+ return ChargerType.Modbus;
+ }
/**
* 寮�濮嬪厖鐢�
+ *
* @param client
* @return
*/
@Override
- public boolean startCharging(ModbusRtuOverTcp client) {
+ public boolean startCharging(ModbusTCPMaster client) {
// AGV杞︽姤鍛婂埌浣� -> true
- client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
- return true;
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.writeCoil(AiPowerChargeCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
+ } catch (Exception e) {
+ log.info("鍐欏叆寮�濮嬪厖鐢垫寚浠ゆ姤閿�:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return false;
}
/**
* 鍋滄鍏呯數
+ *
* @param client
* @return
*/
@Override
- public boolean stopCharging(ModbusRtuOverTcp client) {
- client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
- return true;
+ public boolean stopCharging(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.writeCoil(AiPowerChargeCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
+ } catch (Exception e) {
+ log.info("鍐欏叆鍋滄鍏呯數鎸囦护鎶ラ敊:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return false;
}
/**
* 鍦ㄧ嚎姝g户鐢靛櫒鐘舵��(鍓嶈繘鍒颁綅)
+ *
* @param client
* @return
*/
@Override
- public boolean checkForwardRelayOnline(ModbusRtuOverTcp client) {
- return client.readBoolean(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1);
+ public boolean checkForwardRelayOnline(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readCoils(AiPowerChargeCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1).getBit(0);
+ } catch (Exception e) {
+ log.info("璇诲彇鍦ㄧ嚎姝g户鐢靛櫒鐘舵�佹姤閿�:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return false;
}
/**
* 绂荤嚎姝g户鐢靛櫒鐘舵��(鍚庨��鍒颁綅)
+ *
* @param client
* @return
*/
@Override
- public boolean checkBackwardRelayOffline(ModbusRtuOverTcp client) {
- return client.readBoolean(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1);
+ public boolean checkBackwardRelayOffline(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readCoils(AiPowerChargeCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1).getBit(0);
+ } catch (Exception e) {
+ log.info("璇诲彇绂荤嚎姝g户鐢靛櫒鐘舵�佹姤閿�:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return false;
}
/**
* 鑾峰彇鍏呯數鏈哄厖鐢电數鍘�
+ *
* @param client
* @return
*/
@Override
- public double getVoltage(ModbusRtuOverTcp client) {
- return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
+ public double getVoltage(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1)[0].getValue() * AiPowerChargeRegisterEnum.CHARGE_CURRENT.getRaw();
+ } catch (Exception e) {
+ log.info("璇诲彇鍏呯數鐢靛帇鎶ラ敊:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return 0;
}
+
/**
* 鑾峰彇鍏呯數鏈哄厖鐢电數娴�
+ *
* @param client
* @return
*/
@Override
- public double getCurrent(ModbusRtuOverTcp client) {
- return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
+ public double getCurrent(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_CURRENT.getAddr(), 1)[0].getValue() * AiPowerChargeRegisterEnum.CHARGE_CURRENT.getRaw();
+ } catch (Exception e) {
+ log.info("璇诲彇鍏呯數鐢垫祦鎶ラ敊:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return 0;
}
/**
* 鑾峰彇鍏呯數鏈哄厖鐢垫ā寮�
+ *
* @param client
* @return
*/
@Override
- public Short getChargeMode(ModbusRtuOverTcp client) {
- return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1);
+ public int getChargeMode(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGE_MODE.getAddr(), 1)[0].getValue();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.info("璇诲彇鍏呯數妯″紡鎶ラ敊:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return -1;
+ }
+
+ /**
+ * 鑾峰彇鍏呯數鏈虹紪鍙�
+ *
+ * @param client
+ * @return
+ */
+ @Override
+ public int getChargeId(ModbusTCPMaster client) {
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ return client.readMultipleRegisters(AiPowerChargeRegisterEnum.CHARGER_ID.getAddr(), 1)[0].getValue();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.info("璇诲彇鍏呯數鏈虹紪鍙锋姤閿�:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
+ return -1;
}
/**
* 鑾峰彇鍏呯數鏈虹姸鎬�
+ *
* @param client
* @return
*/
@Override
- public ChargerStatus getStatus(ModbusRtuOverTcp client) {
+ public ChargerStatus getStatus(ModbusTCPMaster 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
+ BitVector coils = null;
+ try {
+ if (!client.isConnected()) {
+ client.connect();
+ }
+ coils = client.readCoils(AiPowerChargeCoilEnum.WORK_STATUS.getAddr(), AiPowerChargeCoilEnum.values().length);
+ for (int i = 0; i < coils.size(); i++) {
+ switch (i) {
+ case 0:
+ status.setWorking(coils.getBit(i));
+ break;
+ case 1:
+ status.setOverheat(coils.getBit(i));
+ break;
+ case 2:
+ status.setFault(coils.getBit(i));
+ break;
+ case 3:
+ status.setCvMode(coils.getBit(i));
+ break;
+ case 4:
+ status.setBatteryConnected(coils.getBit(i));
+ break;
+ case 5:
+ status.setFanAbnormal(coils.getBit(i));
+ break;
+ case 6:
+ status.setPlateOverheat(coils.getBit(i));
+ break;
+ case 7:
+ status.setBrushPressed(coils.getBit(i));
+ break;
+ case 8:
+ status.setAgvReportedInPosition(coils.getBit(i));
+ break;
+ case 9:
+ status.setChargerConfirmedAgvReady(coils.getBit(i));
+ break;
+ case 10:
+ status.setForwardRelayOnline(coils.getBit(i));
+ break;
+ case 11:
+ status.setBackwardRelayOffline(coils.getBit(i));
+ break;
+ case 12:
+ status.setBmsChargeEnable(coils.getBit(i));
+ break;
+ case 13:
+ status.setCommRs485Success(!coils.getBit(i));
+ break;
+ case 14:
+ status.setCommCanSuccess(!coils.getBit(i));
+ break;
+ case 15:
+ status.setCommBmsSuccess(!coils.getBit(i));
+ break;
+ default:
+ break;
+ }
+ }
- // ---------- 鎵归噺璇诲彇淇濇寔瀵勫瓨鍣紙鍦板潃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));
+ // ---------- 鎵归噺璇诲彇淇濇寔瀵勫瓨鍣紙鍦板潃100~116鍏�17涓級 ----------
+
+ 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() * AiPowerChargeRegisterEnum.CHARGE_VOLTAGE.getRaw());
+ break;
+ case 1:
+ 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() * AiPowerChargeRegisterEnum.CHARGE_CAPACITY.getRaw());
+ break;
+ case 4:
+ status.setEnergy(registers[i].getValue() * AiPowerChargeRegisterEnum.CHARGE_ENERGY.getRaw());
+ break;
+ case 5:
+ status.setCellMaxVoltage(registers[i].getValue());
+ break;
+ case 6:
+ status.setCellMinVoltage(registers[i].getValue());
+ break;
+ case 7:
+ status.setPackVoltage(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_PACK_VOLTAGE.getRaw());
+ break;
+ case 8:
+ status.setVoltageDemand(registers[i].getValue() * AiPowerChargeRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw());
+ break;
+ case 9:
+ 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() * AiPowerChargeRegisterEnum.BMS_SOC.getRaw());
+ break;
+ case 12:
+ status.setEndFlag(registers[i].getValue());
+ break;
+ case 13:
+ status.setChargerId(registers[i].getValue());
+ break;
+ case 14:
+ status.setFaultCode(registers[i].getValue());
+ break;
+ case 15:
+ status.setChargeMode(registers[i].getValue());
+ break;
+ case 16:
+ status.setScheduleFlag(registers[i].getValue());
+ break;
+ default:
+ break;
+ }
+ }
+ } catch (Exception e) {
+ log.info("鎵归噺璇诲彇绾垮湀鎶ラ敊:{} ", e.getMessage());
+ log.info("鎵归噺璇诲彇淇濇寔瀵勫瓨鍣ㄦ姤閿�:{} ", e.getMessage());
+ }finally {
+ //client.disconnect();
+ }
return status;
}
@@ -146,35 +342,52 @@
/**
* 娓呴櫎鏁呴殰
+ *
* @param client
* @return
*/
@Override
- public boolean clearFault(ModbusRtuOverTcp client) {
- client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1);
+ public boolean clearFault(ModbusTCPMaster client) {
+ try {
+ client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(1));
+ } catch (ModbusException e) {
+ log.error("鍏呯數鍣ㄦ竻闄ゆ晠闅滃け璐�......");
+ }
return true;
}
/**
* 瀹屾垚閫�鍥�
+ *
* @param client
* @return
*/
@Override
- public boolean finishRetract(ModbusRtuOverTcp client) {
- client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2);
+ public boolean finishRetract(ModbusTCPMaster client) {
+ try {
+ client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(2));
+ } catch (ModbusException e) {
+ log.error("鍏呯數鍣ㄥ畬鎴愰��鍥炲け璐�......");
+ }
return true;
}
/**
* 鎭㈠寰呮満
+ *
* @param client
* @return
*/
@Override
- public boolean restoreStandby(ModbusRtuOverTcp client) {
- client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3);
+ public boolean restoreStandby(ModbusTCPMaster client) {
+ try {
+ client.writeSingleRegister(AiPowerChargeRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(3));
+ } catch (ModbusException e) {
+ log.error("鍏呯數鍣ㄦ仮澶嶅緟鏈哄け璐�......");
+ }
return true;
}
+
+
}
--
Gitblit v1.9.1