From 0344b5e1cdb727ed106754c27a5df51f192af226 Mon Sep 17 00:00:00 2001 From: Torsten Oltmanns Date: Sun, 1 Dec 2024 14:39:27 +0800 Subject: [PATCH] changed the datatypes from s_int_16 to u_int_16 as specified in the Solis specification --- .../pylon/hv/can/PylonHVBmsCANProcessor.java | 48 +++++++++--------- .../can/PylonHVInverterCANProcessor.java | 50 +++++++++---------- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/bms-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/bms/pylon/hv/can/PylonHVBmsCANProcessor.java b/bms-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/bms/pylon/hv/can/PylonHVBmsCANProcessor.java index 7651637..f5f6298 100644 --- a/bms-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/bms/pylon/hv/can/PylonHVBmsCANProcessor.java +++ b/bms-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/bms/pylon/hv/can/PylonHVBmsCANProcessor.java @@ -172,11 +172,11 @@ protected ByteBuffer prepareSendFrame(final int frameId, final byte cmd) { private void readBatteryStatus(final BatteryPack pack, final ByteBuffer data) { // frame id is already read, so start at the first data byte // Battery voltage (0.1V) - pack.packVoltage = data.getShort(); + pack.packVoltage = data.getChar(); // Battery current (0.1A) offset -3000A - pack.packCurrent = data.getShort() - 30000; + pack.packCurrent = data.getChar() - 30000; // second level temperature (0.1 Celcius) offset -100C - pack.tempAverage = data.getShort() - 1000; + pack.tempAverage = data.getChar() - 1000; // Battery SOC (1%) pack.packSOC = data.get() * 10; // Battery SOH (1%) @@ -189,15 +189,15 @@ private void readBatteryStatus(final BatteryPack pack, final ByteBuffer data) { // 0x4220 private void readChargeDischargeValues(final BatteryPack pack, final ByteBuffer data) { // Charge cutoff voltage (0.1V) - pack.maxPackVoltageLimit = data.getShort(); + pack.maxPackVoltageLimit = data.getChar(); // Discharge cutoff voltage (0.1V) - pack.minPackVoltageLimit = data.getShort(); + pack.minPackVoltageLimit = data.getChar(); // TODO check if these should be swapped as described in Growatt_Battery_BMS.pdf // Max charge current (0.1A) offset -3000A - pack.maxPackChargeCurrent = data.getShort() - 30000; + pack.maxPackChargeCurrent = data.getChar() - 30000; // Max discharge current (0.1A) offset -3000A - pack.maxPackDischargeCurrent = data.getShort() - 30000; + pack.maxPackDischargeCurrent = data.getChar() - 30000; LOG.debug("\nMaxLimit V\tMinLimit V\tMaxCharge A\tMaxDischarge\n{}V\t\t{}V\t\t{}A\t\t\t{}A", pack.maxPackVoltageLimit / 10f, pack.minPackVoltageLimit / 10f, pack.maxPackChargeCurrent / 10f, pack.maxPackDischargeCurrent / 10); } @@ -207,13 +207,13 @@ private void readChargeDischargeValues(final BatteryPack pack, final ByteBuffer private void readCellVoltage(final BatteryPack pack, final ByteBuffer data) { // frame id is already read, so start at the first data byte // Maximum cell voltage (1mV) - pack.maxCellmV = data.getShort(); + pack.maxCellmV = data.getChar(); // Minimum cell voltage (1mV) - pack.minCellmV = data.getShort(); + pack.minCellmV = data.getChar(); // Maximum cell voltage cell number - pack.maxCellVNum = data.getShort(); + pack.maxCellVNum = data.getChar(); // Minimum cell voltage cell number - pack.minCellVNum = data.getShort(); + pack.minCellVNum = data.getChar(); LOG.debug("\nMaxCell V\tMinCell V\n{} (#{})\t{} (#{})", pack.maxCellmV / 1000f, pack.maxCellVNum, pack.minCellmV / 1000f, pack.minCellVNum); } @@ -223,13 +223,13 @@ private void readCellVoltage(final BatteryPack pack, final ByteBuffer data) { private void readCellTemperature(final BatteryPack pack, final ByteBuffer data) { // frame id is already read, so start at the first data byte // Maximum cell temperature (0.1C) offset -100C - pack.tempMax = data.getShort() - 1000; + pack.tempMax = data.getChar() - 1000; // Minimum cell temperature (0.1C) offset -100C - pack.tempMin = data.getShort() - 1000; + pack.tempMin = data.getChar() - 1000; // Maximum cell temperature cell number - pack.tempMaxCellNum = data.getShort(); + pack.tempMaxCellNum = data.getChar(); // Minimum cell temperature cell number - pack.tempMinCellNum = data.getShort(); + pack.tempMinCellNum = data.getChar(); LOG.debug("\nMaxCell C\tMinCell C\n{}C (#{})\t{}C (#{})", pack.tempMax / 10f, pack.tempMaxCellNum, pack.tempMin / 10f, pack.tempMinCellNum); } @@ -304,9 +304,9 @@ private void readModuleVoltage(final BatteryPack pack, final ByteBuffer data) { // minimum module voltage (0.001V) pack.minModulemV = data.getChar(); // pack number with maximum module voltage - pack.maxModulemVNum = data.getShort(); + pack.maxModulemVNum = data.getChar(); // pack number with minimum module voltage - pack.minModulemVNum = data.getShort(); + pack.minModulemVNum = data.getChar(); LOG.debug("\nMaxModule V\tMinModule V\n{}V (#{})\t{}V (#{})", pack.maxModulemV / 1000f, pack.maxModulemVNum, pack.minModulemV / 1000f, pack.minModulemVNum); } @@ -315,13 +315,13 @@ private void readModuleVoltage(final BatteryPack pack, final ByteBuffer data) { // 0x4270 private void readModuleTemperature(final BatteryPack pack, final ByteBuffer data) { // maximum module temperature (0.1C) offset -100C - pack.maxModuleTemp = data.getShort() - 1000; + pack.maxModuleTemp = data.getChar() - 1000; // minimum module temperature (0.1C) offset -100C - pack.minModuleTemp = data.getShort() - 1000; + pack.minModuleTemp = data.getChar() - 1000; // pack number with maximum module temperature - pack.maxModuleTempNum = data.getShort(); + pack.maxModuleTempNum = data.getChar(); // pack number with minimum module temperature - pack.minModuleTempNum = data.getShort(); + pack.minModuleTempNum = data.getChar(); LOG.debug("\nMaxModule C\tMinModule C\n{}C (#{})\t{}C (#{})", pack.maxModuleTemp / 10f, pack.maxModuleTempNum, pack.minModuleTemp / 10f, pack.minModuleTempNum); } @@ -380,15 +380,15 @@ private void readHardwareSoftwareVersion(final BatteryPack pack, final ByteBuffe // 0x7320 private void readBatterModuleInfo(final BatteryPack pack, final ByteBuffer data) { // battery module quantity - pack.numberOfCells = data.getShort(); + pack.numberOfCells = data.getChar(); // battery modules in series pack.modulesInSeries = data.get(); // cell quantity in battery module pack.moduleNumberOfCells = data.get(); // battery cabinet voltage level (1V) - pack.moduleVoltage = data.getShort(); + pack.moduleVoltage = data.getChar(); // battery cabinet AH (1AH) - pack.moduleRatedCapacityAh = data.getShort(); + pack.moduleRatedCapacityAh = data.getChar(); LOG.debug("\nNo of cells\tModules in Series\tModule No of Cells\tModule V\tModule Capacity Ah\n{}\t\t\t\t{}\t\t\t\t{}\t\t\t\t{}\t\t{}", pack.numberOfCells, pack.modulesInSeries, pack.moduleNumberOfCells, pack.moduleVoltage, pack.moduleRatedCapacityAh); } diff --git a/inverter-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/inverter/pylonhv/can/PylonHVInverterCANProcessor.java b/inverter-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/inverter/pylonhv/can/PylonHVInverterCANProcessor.java index b1ce470..6c22459 100644 --- a/inverter-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/inverter/pylonhv/can/PylonHVInverterCANProcessor.java +++ b/inverter-pylon-hv-can/src/main/java/com/airepublic/bmstoinverter/inverter/pylonhv/can/PylonHVInverterCANProcessor.java @@ -134,11 +134,11 @@ private ByteBuffer sendBatteryStatus(final BatteryPack pack) throws IOException final ByteBuffer frame = prepareSendFrame(0x00004210); // Battery voltage (0.1V) - frame.putShort((short) pack.packVoltage); + frame.putChar((char) pack.packVoltage); // Battery current (0.1A) offset -3000A - frame.putShort((short) (pack.packCurrent + 30000)); + frame.putChar((char) (pack.packCurrent + 30000)); // second level temperature (0.1 Celcius) offset -100C - frame.putShort((short) (pack.tempAverage + 1000)); + frame.putChar((char) (pack.tempAverage + 1000)); // Battery SOC (1%) frame.put((byte) (pack.packSOC / 10)); // Battery SOH (1%) @@ -154,15 +154,15 @@ private ByteBuffer sendChargeDischargeLimits(final BatteryPack pack) throws IOEx final ByteBuffer frame = prepareSendFrame(0x00004220); // Charge cutoff voltage (0.1V) - frame.putShort((short) pack.maxPackVoltageLimit); + frame.putChar((char) pack.maxPackVoltageLimit); // Discharge cutoff voltage (0.1V) - frame.putShort((short) pack.minPackVoltageLimit); + frame.putChar((char) pack.minPackVoltageLimit); // TODO check if these should be swapped as described in Growatt_Battery_BMS.pdf // Max charge current (0.1A) offset -3000A - frame.putShort((short) (pack.maxPackChargeCurrent + 30000)); + frame.putChar((char) (pack.maxPackChargeCurrent + 30000)); // Max discharge current (0.1A) offset -3000A - frame.putShort((short) (pack.maxPackDischargeCurrent + 30000)); + frame.putChar((char) (pack.maxPackDischargeCurrent + 30000)); LOG.debug("Sending max/min voltage, current, charge and discharge limits: {}", Port.printBuffer(frame)); return frame; @@ -174,13 +174,13 @@ private ByteBuffer sendMaxMinCellVoltages(final BatteryPack pack) throws IOExcep final ByteBuffer frame = prepareSendFrame(0x00004230); // Maximum cell voltage (0.001V) - frame.putShort((short) pack.maxCellmV); + frame.putChar((char) pack.maxCellmV); // Minimum cell voltage (0.001V) - frame.putShort((short) pack.minCellmV); + frame.putChar((char) pack.minCellmV); // Cell no with maximum voltage - frame.putShort((short) pack.maxCellVNum); + frame.putChar((char) pack.maxCellVNum); // Cell no with minimum voltage - frame.putShort((short) pack.minCellVNum); + frame.putChar((char) pack.minCellVNum); LOG.debug("Sending max/min cell voltages: {}", Port.printBuffer(frame)); return frame; @@ -192,13 +192,13 @@ private ByteBuffer sendMaxMinCellTemperatures(final BatteryPack pack) throws IOE final ByteBuffer frame = prepareSendFrame(0x00004240); // Maximum cell temperature (0.1C) offset -100C - frame.putShort((short) (pack.tempMax + 1000)); + frame.putChar((char) (pack.tempMax + 1000)); // Minimum cell temperature (0.1C) offset -100C - frame.putShort((short) (pack.tempMin + 1000)); + frame.putChar((char) (pack.tempMin + 1000)); // Maximum cell temperature cell number - frame.putShort((short) pack.tempMaxCellNum); + frame.putChar((char) pack.tempMaxCellNum); // Minimum cell temperature cell number - frame.putShort((short) pack.tempMinCellNum); + frame.putChar((char) pack.tempMinCellNum); LOG.debug("Sending max/min cell temparatures: {}", Port.printBuffer(frame)); return frame; @@ -301,9 +301,9 @@ private ByteBuffer sendMaxMinModuleVoltages(final BatteryPack pack) throws IOExc // minimum module voltage (0.001V) frame.putChar((char) pack.minModulemV); // pack number with maximum module voltage - frame.putShort((short) pack.maxModulemVNum); + frame.putChar((char) pack.maxModulemVNum); // pack number with minimum module voltage - frame.putShort((short) pack.minModulemVNum); + frame.putChar((char) pack.minModulemVNum); LOG.debug("Sending max/min module V: {}", Port.printBuffer(frame)); return frame; @@ -315,13 +315,13 @@ private ByteBuffer sendMaxMinModuleTemperatures(final BatteryPack pack) throws I final ByteBuffer frame = prepareSendFrame(0x00004270); // maximum module temperature (0.1C) offset -100C - frame.putShort((short) (pack.maxModuleTemp + 1000)); + frame.putChar((char) (pack.maxModuleTemp + 1000)); // minimum module temperature (0.1C) offset -100C - frame.putShort((short) (pack.minModuleTemp + 1000)); + frame.putChar((char) (pack.minModuleTemp + 1000)); // pack number with maximum module temperature - frame.putShort((short) pack.maxModuleTempNum); + frame.putChar((char) pack.maxModuleTempNum); // pack number with minimum module temperature - frame.putShort((short) pack.minModuleTempNum); + frame.putChar((char) pack.minModuleTempNum); LOG.debug("Sending max/min module C: {}", Port.printBuffer(frame)); return frame; @@ -347,7 +347,7 @@ private ByteBuffer sendBatteyVoltageSOCSOH(final BatteryPack pack) throws IOExce final ByteBuffer frame = prepareSendFrame(0x00004210); // Battery voltage (0.1V) - frame.putShort((short) pack.packVoltage); + frame.putChar((char) pack.packVoltage); // fill 4 0x00 bytes frame.put((byte) 0).put((byte) 0).put((byte) 0).put((byte) 0); @@ -423,15 +423,15 @@ private ByteBuffer sendBatterModuleInfo(final BatteryPack pack) throws IOExcepti final ByteBuffer frame = prepareSendFrame(0x00007320); // battery module quantity - frame.putShort((short) pack.numberOfCells); + frame.putChar((char) pack.numberOfCells); // battery modules in series frame.put((byte) pack.modulesInSeries); // cell quantity in battery module frame.put(pack.moduleNumberOfCells); // battery cabinet voltage level (1V) - frame.putShort((short) pack.moduleVoltage); + frame.putChar((char) pack.moduleVoltage); // battery cabinet AH (1AH) - frame.putShort((short) pack.moduleRatedCapacityAh); + frame.putChar((char) pack.moduleRatedCapacityAh); LOG.debug("Sending battery module info: {}", Port.printBuffer(frame)); return frame;