|
20 | 20 | import org.slf4j.Logger; |
21 | 21 | import org.slf4j.LoggerFactory; |
22 | 22 |
|
| 23 | +import com.airepublic.bmstoinverter.core.AlarmLevel; |
23 | 24 | import com.airepublic.bmstoinverter.core.BMS; |
24 | 25 | import com.airepublic.bmstoinverter.core.NoDataAvailableException; |
25 | 26 | import com.airepublic.bmstoinverter.core.Port; |
26 | 27 | import com.airepublic.bmstoinverter.core.TooManyInvalidFramesException; |
| 28 | +import com.airepublic.bmstoinverter.core.bms.data.Alarm; |
27 | 29 | import com.airepublic.bmstoinverter.core.bms.data.BatteryPack; |
28 | 30 | import com.airepublic.bmstoinverter.core.util.BitUtil; |
29 | 31 | import com.airepublic.bmstoinverter.core.util.HexUtil; |
@@ -270,16 +272,52 @@ private void readStatus(final BatteryPack pack, final ByteBuffer data) { |
270 | 272 | private void readCellVoltages(final BatteryPack pack, final ByteBuffer data) { |
271 | 273 | pack.numberOfCells = data.capacity() / 2; |
272 | 274 |
|
| 275 | + int cellMinVoltage = Integer.MAX_VALUE; |
| 276 | + int cellMaxVoltage = Integer.MIN_VALUE; |
| 277 | + int cellNoMinVoltage = -1; |
| 278 | + int cellNoMaxVoltage = -1; |
| 279 | + |
273 | 280 | for (int cellNo = 0; cellNo < pack.numberOfCells; cellNo++) { |
274 | 281 | pack.cellVmV[cellNo] = data.getShort(); |
275 | 282 | 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 | + } |
276 | 292 | } |
277 | | - } |
278 | 293 |
|
| 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 | + } |
279 | 304 |
|
280 | | - private void readAlarms(final BatteryPack pack, final short short1) { |
281 | | - // TODO Auto-generated method stub |
282 | 305 |
|
| 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); |
283 | 321 | } |
284 | 322 |
|
285 | 323 |
|
|
0 commit comments