From 5a10e832b6b63a10ff7479789577a4100a440d5b Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 28 四月 2026 15:31:17 +0800
Subject: [PATCH] 充电逻辑

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java                 |   16 -
 zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java              |    2 
 zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java                            |   24 +-
 zy-acs-manager/pom.xml                                                                          |   10 
 pom.xml                                                                                         |    6 
 zy-acs-charge/pom.xml                                                                           |    5 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java      |   38 ++--
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java    |    1 
 zy-acs-manager/src/main/resources/application.yml                                               |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java           |   33 ++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/charge/ChargeTestController.java |   46 +++++
 zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java                |  269 +++++++++++++++++++++++++-------
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java        |    8 
 13 files changed, 331 insertions(+), 129 deletions(-)

diff --git a/pom.xml b/pom.xml
index 902628c..19477dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,7 @@
         <jedis.version>2.9.0</jedis.version>
         <snakeyaml.version>1.33</snakeyaml.version>
         <druid.version>1.2.27</druid.version>
+        <j2mod.version>3.2.2</j2mod.version>
     </properties>
 
     <dependencies>
@@ -76,6 +77,11 @@
                 <artifactId>snakeyaml</artifactId>
                 <version>${snakeyaml.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.ghgande</groupId>
+                <artifactId>j2mod</artifactId>
+                <version>${j2mod.version}</version> <!-- 鍙湪 Maven 涓ぎ浠撳簱鏌ユ壘鏈�鏂扮増鏈� -->
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
diff --git a/zy-acs-charge/pom.xml b/zy-acs-charge/pom.xml
index 10783dd..f447155 100644
--- a/zy-acs-charge/pom.xml
+++ b/zy-acs-charge/pom.xml
@@ -28,9 +28,8 @@
             <version>1.0.0</version>
         </dependency>
         <dependency>
-            <groupId>com.github.xingshuangs</groupId>
-            <artifactId>iot-communication</artifactId>
-            <version>1.5.6</version>
+            <groupId>com.ghgande</groupId>
+            <artifactId>j2mod</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java b/zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java
index 46528b2..71474a7 100644
--- a/zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java
+++ b/zy-acs-charge/src/main/java/com/zy/acs/charge/ChargeCoreService.java
@@ -1,6 +1,6 @@
 package com.zy.acs.charge;
 
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
 import com.zy.acs.charge.model.ChargerStatus;
 
 /**
@@ -14,7 +14,7 @@
      * @param client
      * @return
      */
-    boolean startCharging(ModbusRtuOverTcp client);
+    boolean startCharging(ModbusTCPMaster client);
 
     /**
      * 璋冨害鍋滄鍏呯數
@@ -22,7 +22,7 @@
      * @param client
      * @return
      */
-    boolean stopCharging(ModbusRtuOverTcp client);
+    boolean stopCharging(ModbusTCPMaster client);
 
     /**
      * 鍦ㄧ嚎姝g户鐢靛櫒鐘舵��(鍓嶈繘鍒颁綅)
@@ -30,7 +30,7 @@
      * @param client
      * @return
      */
-    boolean checkForwardRelayOnline(ModbusRtuOverTcp client);
+    boolean checkForwardRelayOnline(ModbusTCPMaster client);
 
 
     /**
@@ -39,7 +39,7 @@
      * @param client
      * @return
      */
-    boolean checkBackwardRelayOffline(ModbusRtuOverTcp client);
+    boolean checkBackwardRelayOffline(ModbusTCPMaster client);
 
     /**
      * 鑾峰彇鍏呯數鏈哄厖鐢电數鍘�
@@ -47,7 +47,7 @@
      * @param client
      * @return
      */
-    double getVoltage(ModbusRtuOverTcp client);
+    double getVoltage(ModbusTCPMaster client);
 
     /**
      * 鑾峰彇鍏呯數鏈哄厖鐢电數娴�
@@ -55,27 +55,27 @@
      * @param client
      * @return
      */
-    double getCurrent(ModbusRtuOverTcp client);
+    double getCurrent(ModbusTCPMaster client);
 
     /**
      * 鑾峰彇鍏呯數鏈哄厖鐢垫ā寮�
      * @param client
      * @return
      */
-    Short getChargeMode(ModbusRtuOverTcp client);
+    int getChargeMode(ModbusTCPMaster client);
 
     /**
      * 鑾峰彇鍏呯數鏈虹姸鎬�
      * @param client
      * @return
      */
-    ChargerStatus getStatus(ModbusRtuOverTcp client);
+    ChargerStatus getStatus(ModbusTCPMaster client);
 
 
-    boolean clearFault(ModbusRtuOverTcp client);
+    boolean clearFault(ModbusTCPMaster client);
 
-    boolean finishRetract(ModbusRtuOverTcp client);
+    boolean finishRetract(ModbusTCPMaster client);
 
-    boolean restoreStandby(ModbusRtuOverTcp client);
+    boolean restoreStandby(ModbusTCPMaster client);
 
 }
diff --git a/zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java b/zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java
index a69937b..326a508 100644
--- a/zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java
+++ b/zy-acs-charge/src/main/java/com/zy/acs/charge/constant/AiPowerChargerCoilEnum.java
@@ -52,4 +52,6 @@
     public String getDes() {
         return des;
     }
+
+
 }
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..678af15 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,16 +1,17 @@
 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.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閿傜數鏅鸿兘鍏呯數鏈鸿皟搴�
@@ -22,123 +23,252 @@
 
     /**
      * 寮�濮嬪厖鐢�
+     *
      * @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 {
+            return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
+        } catch (ModbusException e) {
+            log.info("鍐欏叆寮�濮嬪厖鐢垫寚浠ゆ姤閿�:{} ", e.getMessage());
+        }
+        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 {
+            return client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
+        } catch (ModbusException e) {
+            log.info("鍐欏叆鍋滄鍏呯數鎸囦护鎶ラ敊:{} ", e.getMessage());
+        }
+        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 {
+            return client.readCoils(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1).getBit(0);
+        } catch (ModbusException e) {
+            log.info("璇诲彇鍦ㄧ嚎姝g户鐢靛櫒鐘舵�佹姤閿�:{} ", e.getMessage());
+        }
+        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 {
+            return client.readCoils(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1).getBit(0);
+        } catch (ModbusException e) {
+            log.info("璇诲彇绂荤嚎姝g户鐢靛櫒鐘舵�佹姤閿�:{} ", e.getMessage());
+        }
+        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 {
+            return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
+        } catch (ModbusException e) {
+            log.info("璇诲彇鍏呯數鐢靛帇鎶ラ敊:{} ", e.getMessage());
+        }
+        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 {
+            return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1)[0].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
+        } catch (ModbusException e) {
+            log.info("璇诲彇鍏呯數鐢垫祦鎶ラ敊:{} ", e.getMessage());
+        }
+        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 {
+            return client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_MODE.getAddr(), 1)[0].getValue();
+        } catch (ModbusException e) {
+            log.info("璇诲彇鍏呯數妯″紡鎶ラ敊:{} ", e.getMessage());
+        }
+        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 {
+            coils = client.readCoils(AiPowerChargerCoilEnum.WORK_STATUS.getAddr(), AiPowerChargerCoilEnum.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;
+                }
+            }
+        } catch (ModbusException e) {
+            log.info("鎵归噺璇诲彇绾垮湀鎶ラ敊:{} ", e.getMessage());
+        }
 
         // ---------- 鎵归噺璇诲彇淇濇寔瀵勫瓨鍣紙鍦板潃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));
+        try {
+            Register[] registers = client.readMultipleRegisters(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), AiPowerChargerRegisterEnum.values().length);
+            for (int i = 0; i < registers.length; i++) {
+                switch (i) {
+                    case 0:
+                        status.setVoltage(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw());
+                        break;
+                    case 1:
+                        status.setCurrent(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw());
+                        break;
+                    case 2:
+                        status.setChargingTime(registers[i].getValue());
+                        break;
+                    case 3:
+                        status.setCapacity(registers[i].getValue() * AiPowerChargerRegisterEnum.CHARGE_CAPACITY.getRaw());
+                        break;
+                    case 4:
+                        status.setEnergy(registers[i].getValue() * AiPowerChargerRegisterEnum.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() * AiPowerChargerRegisterEnum.BMS_PACK_VOLTAGE.getRaw());
+                        break;
+                    case 8:
+                        status.setVoltageDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_VOLTAGE_DEMAND.getRaw());
+                        break;
+                    case 9:
+                        status.setCurrentDemand(registers[i].getValue() * AiPowerChargerRegisterEnum.BMS_CURRENT_DEMAND.getRaw());
+                        break;
+                    case 10:
+                        status.setTemperature(registers[i].getValue());
+                        break;
+                    case 11:
+                        status.setSoc(registers[i].getValue() * AiPowerChargerRegisterEnum.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 (ModbusException e) {
+           log.info("鎵归噺璇诲彇淇濇寔瀵勫瓨鍣ㄦ姤閿�:{} ", e.getMessage());
+        }
 
         return status;
     }
@@ -146,34 +276,49 @@
 
     /**
      * 娓呴櫎鏁呴殰
+     *
      * @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(AiPowerChargerRegisterEnum.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(AiPowerChargerRegisterEnum.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(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), new SimpleRegister(3));
+        } catch (ModbusException e) {
+            log.error("鍏呯數鍣ㄦ仮澶嶅緟鏈哄け璐�......");
+        }
         return true;
     }
 }
diff --git a/zy-acs-manager/pom.xml b/zy-acs-manager/pom.xml
index 0c57d09..216ab01 100644
--- a/zy-acs-manager/pom.xml
+++ b/zy-acs-manager/pom.xml
@@ -167,15 +167,13 @@
         </dependency>
 
         <dependency>
-            <groupId>com.github.xingshuangs</groupId>
-            <artifactId>iot-communication</artifactId>
-            <version>1.5.6</version>
-        </dependency>
-        <dependency>
             <groupId>com.zy</groupId>
             <artifactId>acs-charge</artifactId>
             <version>1.0.0</version>
-            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ghgande</groupId>
+            <artifactId>j2mod</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/charge/ChargeTestController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/charge/ChargeTestController.java
new file mode 100644
index 0000000..3953dc3
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/charge/ChargeTestController.java
@@ -0,0 +1,46 @@
+package com.zy.acs.manager.core.integrate.charge;
+
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
+import com.zy.acs.charge.ChargeCoreService;
+import com.zy.acs.charge.model.ChargerStatus;
+import com.zy.acs.common.constant.RedisConstant;
+import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.framework.common.R;
+import com.zy.acs.manager.common.annotation.IntegrationAuth;
+import com.zy.acs.manager.core.domain.type.NamespaceType;
+import com.zy.acs.manager.core.service.ChargeService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "Open Api")
+@RestController
+@RequestMapping("/api/open")
+public class ChargeTestController {
+
+    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
+
+
+
+    @Autowired
+    private ChargeService chargeService;
+
+    @Autowired
+    private ChargeCoreService chargeCoreService;
+
+    @IntegrationAuth(name = NamespaceType.RCS_STA_QUERY)
+    @GetMapping("/charge/{type}")
+    public R test(@PathVariable("type") Integer type){
+        ModbusTCPMaster modbusTCPMaster = chargeService.get("10");
+        ChargerStatus status = chargeCoreService.getStatus(modbusTCPMaster);
+        return R.ok(status);
+    }
+
+    @IntegrationAuth(name = NamespaceType.RCS_STA_QUERY)
+    @GetMapping("/write/{agvId}/{type}")
+    public R test2(@PathVariable("agvId") Integer agvId,@PathVariable("type") Integer type){
+        redis.setMap(RedisConstant.AGV_CHARGE_FLAG, agvId+"", type);
+        return R.ok();
+    }
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
index d727e99..c6da001 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
@@ -1,7 +1,7 @@
 package com.zy.acs.manager.core.scheduler;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
 import com.zy.acs.charge.ChargeCoreService;
 import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.enums.AgvStatusType;
@@ -250,6 +250,8 @@
 
     /**
      * 璋冨害瀵规帴鍏呯數妗�
+     * 鐘舵��1锛氬紑濮嬪厖鐢�
+     * 鐘舵��2锛氬厖鐢典腑
      */
     @Scheduled(cron = "0/5 * * * * ? ")
     private synchronized void startCharge() {
@@ -260,23 +262,32 @@
                 continue;
             }
             AgvDetail agvDetail = agvDetailService.selectByAgvNo(key);
+            if (agvDetail == null){
+                log.error("{} 鍙峰緟鍏呯數灏忚溅涓嶅瓨鍦�", key);
+                continue;
+            }
             if (agvDetail.getCode() == null) {
+                log.error("{} 鍙峰緟鍏呯數灏忚溅鏃犲湴鍧�鐮�", key);
                 continue;
             }
             FuncSta funcSta = funcStaService.getByCodeAndType(agvDetail.getCode(), FuncStaType.CHARGE.toString());
-            ModbusRtuOverTcp modbusTcp = chargeService.get(funcSta.getUuid());
-            if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus() || funcSta == null || null == modbusTcp) {
+            ModbusTCPMaster modbusTCPMaster = chargeService.get(funcSta.getUuid());
+            if (null == agvDetail || null == agvDetail.getSoc() || null == agvDetail.getAgvStatus() || funcSta == null || null == modbusTCPMaster) {
                 continue;
+            }
+            if (chargeCoreService.getChargeMode(modbusTCPMaster) != 0) {
+                log.info("{} 璇ュ厖鐢垫満涓嶆槸鑷姩鍏呯數妯″紡", funcSta.getName());
+               continue;
             }
             switch (status) {
                 case 1:
                     // 鍚庨��淇″彿娑堝け锛岃鏄庨┈杈炬鍦ㄥ墠杩�
-                    if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) {
-                        chargeCoreService.startCharging(modbusTcp);
+                    if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) {
+                        chargeCoreService.startCharging(modbusTCPMaster);
                     }
-                    if (chargeCoreService.checkForwardRelayOnline(modbusTcp)) {
-                        double current = chargeCoreService.getCurrent(modbusTcp);
-                        double voltage = chargeCoreService.getVoltage(modbusTcp);
+                    if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) {
+                        double current = chargeCoreService.getCurrent(modbusTCPMaster);
+                        double voltage = chargeCoreService.getVoltage(modbusTCPMaster);
                         if (current > 0 && voltage > 0) {
                             redis.setMap(RedisConstant.AGV_CHARGE_FLAG, key, 2);
                             log.info("charge complete");
@@ -290,10 +301,10 @@
                     AgvModel agvModel = agvModelService.getByAgvId(agvDetail.getAgvId());
                     if (agvDetail.getSoc() >= agvModel.getQuaBattery()) {
                         // 鍓嶈繘淇″彿瀛樺湪锛岃鏄庢満姊拌噦鏈几鍥�
-                        if (chargeCoreService.checkForwardRelayOnline(modbusTcp)) {
-                            chargeCoreService.stopCharging(modbusTcp);
+                        if (chargeCoreService.checkForwardRelayOnline(modbusTCPMaster)) {
+                            chargeCoreService.stopCharging(modbusTCPMaster);
                         }
-                        if (chargeCoreService.checkBackwardRelayOffline(modbusTcp)) {
+                        if (chargeCoreService.checkBackwardRelayOffline(modbusTCPMaster)) {
                             redis.deleteMap(RedisConstant.AGV_CHARGE_FLAG, key);
                             log.info("charge over");
                         }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
index 2a24f93..23ecd1d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
@@ -1,9 +1,7 @@
 package com.zy.acs.manager.core.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
-import com.github.xingshuangs.iot.utils.HexUtil;
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.manager.entity.FuncSta;
 import com.zy.acs.manager.manager.enums.FuncStaType;
@@ -26,7 +24,7 @@
     @Autowired
     private FuncStaService funcStaService;
 
-    private final Map<String, ModbusRtuOverTcp> CHARGE_CACHE = new ConcurrentHashMap<>();
+    private final Map<String, ModbusTCPMaster> CHARGE_CACHE = new ConcurrentHashMap<>();
 
 
     @PostConstruct
@@ -43,8 +41,7 @@
 
 
     public void add(FuncSta funcSta) {
-        ModbusRtuOverTcp modbusTcp = new ModbusRtuOverTcp(funcSta.getIp(), funcSta.getPort());
-        modbusTcp.setComCallback((tag, bytes) -> log.info("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
+        ModbusTCPMaster modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(), true);
         CHARGE_CACHE.put(funcSta.getUuid(), modbusTcp);
     }
 
@@ -52,14 +49,13 @@
         CHARGE_CACHE.remove(chargePointId);
     }
 
-    public ModbusRtuOverTcp get(String chargePointId) {
-        ModbusRtuOverTcp modbusTcp = CHARGE_CACHE.get(chargePointId);
+    public ModbusTCPMaster get(String chargePointId) {
+        ModbusTCPMaster modbusTcp = CHARGE_CACHE.get(chargePointId);
         if (modbusTcp != null) {
             return modbusTcp;
         }
         FuncSta funcSta = funcStaService.getOne(new LambdaQueryWrapper<FuncSta>().eq(FuncSta::getUuid, chargePointId));
-        modbusTcp = new ModbusRtuOverTcp(funcSta.getIp(), funcSta.getPort());
-        modbusTcp.setComCallback((tag, bytes) -> log.info("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
+        modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(),true);
         CHARGE_CACHE.put(chargePointId, modbusTcp);
         return modbusTcp;
     }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
index c0bf873..21ab74d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
@@ -383,25 +383,25 @@
             }
             return;
         }
-        for (Route route : routeList) {
-            Code startCode = codeService.getCacheById(route.getStartCode());
-            int[] startCodeIdx = getCodeMatrixIdx(lev, startCode.getData());
-            Code endCode = codeService.getCacheById(route.getEndCode());
-            int[] codeMatrixIdx = getCodeMatrixIdx(lev, endCode.getData());
-
-            String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData());
-            if (Cools.isEmpty(routeKey)) {
-                continue;
-            }
-            redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE);
-
-            String routeCdaKey = RouteGenerator.generateRouteCdaKey(startCodeIdx, codeMatrixIdx);
-            if (Cools.isEmpty(routeCdaKey)) {
-                continue;
-            }
-            redis.setMap(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG, routeCdaKey, Boolean.TRUE);
-            this.routeCdaMap.put(routeCdaKey, Boolean.TRUE);
-        }
+//        for (Route route : routeList) {
+//            Code startCode = codeService.getCacheById(route.getStartCode());
+//            int[] startCodeIdx = getCodeMatrixIdx(lev, startCode.getData());
+//            Code endCode = codeService.getCacheById(route.getEndCode());
+//            int[] codeMatrixIdx = getCodeMatrixIdx(lev, endCode.getData());
+//
+//            String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData());
+//            if (Cools.isEmpty(routeKey)) {
+//                continue;
+//            }
+//            redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE);
+//
+//            String routeCdaKey = RouteGenerator.generateRouteCdaKey(startCodeIdx, codeMatrixIdx);
+//            if (Cools.isEmpty(routeCdaKey)) {
+//                continue;
+//            }
+//            redis.setMap(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG, routeCdaKey, Boolean.TRUE);
+//            this.routeCdaMap.put(routeCdaKey, Boolean.TRUE);
+//        }
     }
 
     public synchronized String[][] initCodeMatrix(Integer lev) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
index 64ede33..bf630fe 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -2,7 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
+import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster;
 import com.zy.acs.charge.ChargeCoreService;
 import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.enums.AgvStatusType;
@@ -348,10 +348,10 @@
         // 鎵嬪姩鍏呯數妯″紡锛岃烦杩�
         if (agvModel.getNeedUndocking() != null && agvModel.getNeedUndockingBool()) {
             FuncSta funcSta = funcStaService.getByCodeAndType(agvDetail.getCode(), FuncStaType.CHARGE.toString());
-            ModbusRtuOverTcp modbusTcp = chargeService.get(funcSta.getUuid());
+            ModbusTCPMaster modbusTCPMaster = chargeService.get(funcSta.getUuid());
             // 鎵嬪姩鍏呯數妯″紡,璺宠繃
-            if (chargeCoreService.getChargeMode(modbusTcp) != 1) {
-                return  false;
+            if (chargeCoreService.getChargeMode(modbusTCPMaster) != 1) {
+                return false;
             }
         }
         return true;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
index 485040c..8994e72 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/FuncStaServiceImpl.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
 import com.zy.acs.common.enums.AgvStatusType;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.common.utils.CommonUtil;
diff --git a/zy-acs-manager/src/main/resources/application.yml b/zy-acs-manager/src/main/resources/application.yml
index ab42697..1ba1a5d 100644
--- a/zy-acs-manager/src/main/resources/application.yml
+++ b/zy-acs-manager/src/main/resources/application.yml
@@ -7,7 +7,7 @@
     static-path-pattern: /**
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
     username: root
     password: xltys1995
     type: com.alibaba.druid.pool.DruidDataSource

--
Gitblit v1.9.1