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 |  410 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 339 insertions(+), 71 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 7c6c445..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,125 +1,393 @@
 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 boolean startCharging(ModbusRtuOverTcp client) {
+    public ChargerType supportedType() {
+        return ChargerType.Modbus;
+    }
+
+    /**
+     * 寮�濮嬪厖鐢�
+     *
+     * @param client
+     * @return
+     */
+    @Override
+    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 ChargerStatus getStatus(ModbusRtuOverTcp client) {
+    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(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;
     }
 
 
-    // 娓呴櫎鏁呴殰
+    /**
+     * 娓呴櫎鏁呴殰
+     *
+     * @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