Skip to content

Commit 5d11463

Browse files
committed
added alarms decoding to JDB_RS485 BMS binding
1 parent 69c7f85 commit 5d11463

1 file changed

Lines changed: 41 additions & 3 deletions

File tree

bms-jbd-rs485/src/main/java/com/airepublic/bmstoinverter/bms/jbd/rs485/JBDBmsRS485Processor.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
import org.slf4j.Logger;
2121
import org.slf4j.LoggerFactory;
2222

23+
import com.airepublic.bmstoinverter.core.AlarmLevel;
2324
import com.airepublic.bmstoinverter.core.BMS;
2425
import com.airepublic.bmstoinverter.core.NoDataAvailableException;
2526
import com.airepublic.bmstoinverter.core.Port;
2627
import com.airepublic.bmstoinverter.core.TooManyInvalidFramesException;
28+
import com.airepublic.bmstoinverter.core.bms.data.Alarm;
2729
import com.airepublic.bmstoinverter.core.bms.data.BatteryPack;
2830
import com.airepublic.bmstoinverter.core.util.BitUtil;
2931
import com.airepublic.bmstoinverter.core.util.HexUtil;
@@ -270,16 +272,52 @@ private void readStatus(final BatteryPack pack, final ByteBuffer data) {
270272
private void readCellVoltages(final BatteryPack pack, final ByteBuffer data) {
271273
pack.numberOfCells = data.capacity() / 2;
272274

275+
int cellMinVoltage = Integer.MAX_VALUE;
276+
int cellMaxVoltage = Integer.MIN_VALUE;
277+
int cellNoMinVoltage = -1;
278+
int cellNoMaxVoltage = -1;
279+
273280
for (int cellNo = 0; cellNo < pack.numberOfCells; cellNo++) {
274281
pack.cellVmV[cellNo] = data.getShort();
275282
LOG.debug("Cell {} voltage: {} V", cellNo + 1, pack.cellVmV[cellNo] / 1000.0);
283+
284+
if (pack.cellVmV[cellNo] < cellMinVoltage) {
285+
cellMinVoltage = pack.cellVmV[cellNo];
286+
cellNoMinVoltage = cellNo + 1;
287+
}
288+
if (pack.cellVmV[cellNo] > cellMaxVoltage) {
289+
cellMaxVoltage = pack.cellVmV[cellNo];
290+
cellNoMaxVoltage = cellNo + 1;
291+
}
276292
}
277-
}
278293

294+
pack.minCellmV = cellMinVoltage;
295+
pack.maxCellmV = cellMaxVoltage;
296+
pack.minCellVNum = cellNoMinVoltage;
297+
pack.maxCellVNum = cellNoMaxVoltage;
298+
pack.cellDiffmV = pack.maxCellmV - pack.minCellmV;
299+
300+
LOG.debug("Min cell voltage: {} V (Cell {})", pack.minCellmV / 1000.0, pack.minCellVNum);
301+
LOG.debug("Max cell voltage: {} V (Cell {})", pack.maxCellmV / 1000.0, pack.maxCellVNum);
302+
LOG.debug("Cell voltage difference: {} V", pack.cellDiffmV / 1000.0);
303+
}
279304

280-
private void readAlarms(final BatteryPack pack, final short short1) {
281-
// TODO Auto-generated method stub
282305

306+
private void readAlarms(final BatteryPack pack, final short alarms) {
307+
pack.alarms.clear();
308+
pack.setAlarm(Alarm.CELL_VOLTAGE_HIGH, BitUtil.bit(alarms, 0) ? AlarmLevel.ALARM : AlarmLevel.NONE);
309+
pack.setAlarm(Alarm.CELL_VOLTAGE_LOW, BitUtil.bit(alarms, 1) ? AlarmLevel.ALARM : AlarmLevel.NONE);
310+
pack.setAlarm(Alarm.PACK_VOLTAGE_HIGH, BitUtil.bit(alarms, 2) ? AlarmLevel.ALARM : AlarmLevel.NONE);
311+
pack.setAlarm(Alarm.PACK_VOLTAGE_LOW, BitUtil.bit(alarms, 3) ? AlarmLevel.ALARM : AlarmLevel.NONE);
312+
pack.setAlarm(Alarm.CHARGE_TEMPERATURE_HIGH, BitUtil.bit(alarms, 4) ? AlarmLevel.ALARM : AlarmLevel.NONE);
313+
pack.setAlarm(Alarm.CHARGE_TEMPERATURE_LOW, BitUtil.bit(alarms, 5) ? AlarmLevel.ALARM : AlarmLevel.NONE);
314+
pack.setAlarm(Alarm.DISCHARGE_TEMPERATURE_HIGH, BitUtil.bit(alarms, 6) ? AlarmLevel.ALARM : AlarmLevel.NONE);
315+
pack.setAlarm(Alarm.DISCHARGE_TEMPERATURE_LOW, BitUtil.bit(alarms, 7) ? AlarmLevel.ALARM : AlarmLevel.NONE);
316+
pack.setAlarm(Alarm.CHARGE_CURRENT_HIGH, BitUtil.bit(alarms, 8) ? AlarmLevel.ALARM : AlarmLevel.NONE);
317+
pack.setAlarm(Alarm.DISCHARGE_CURRENT_HIGH, BitUtil.bit(alarms, 9) ? AlarmLevel.ALARM : AlarmLevel.NONE);
318+
pack.setAlarm(Alarm.FAILURE_SHORT_CIRCUIT_PROTECTION, BitUtil.bit(alarms, 10) ? AlarmLevel.ALARM : AlarmLevel.NONE);
319+
pack.setAlarm(Alarm.FAILURE_COMMUNICATION_INTERNAL, BitUtil.bit(alarms, 11) ? AlarmLevel.ALARM : AlarmLevel.NONE);
320+
pack.setAlarm(Alarm.FAILURE_CHARGE_BREAKER, BitUtil.bit(alarms, 12) ? AlarmLevel.ALARM : AlarmLevel.NONE);
283321
}
284322

285323

0 commit comments

Comments
 (0)