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