From 0f3f70c991322dd880762f5bd5d1195830025c85 Mon Sep 17 00:00:00 2001 From: "Jasper v. Blanckenburg" Date: Wed, 1 Feb 2023 21:55:24 +0100 Subject: [PATCH] Properly parse current --- load_controller/bms.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/load_controller/bms.py b/load_controller/bms.py index b1a2bad..f8eae3f 100644 --- a/load_controller/bms.py +++ b/load_controller/bms.py @@ -11,6 +11,7 @@ from .temperatures import N_SENSORS from PySide6.QtCore import QObject, Signal, Slot, Qt from pymodbus.client import ModbusSerialClient +from pymodbus.payload import BinaryPayloadDecoder, Endian MODBUS_BAUDRATE = 115200 VOLTAGE_ADDRESS = 0x00 @@ -19,7 +20,7 @@ SLAVE_UNIT_ID = 0x02 NUM_CELLS = 3 VOLTAGE_QUANT = 1 / 10000.0 -CURRENT_QUANT = 1 / (500 * 72e-6) +CURRENT_QUANT = 1 / (10000 * 500 * 72e-6) THRESH_UV = 2.5 THRESH_OV = 4.2 @@ -155,15 +156,11 @@ class BMSEvalBoard(BMS): print(f"ERROR READING CURRENT: {result}", file=sys.stderr) continue assert len(result.registers) == 6 - self._data.current = ( - (result.registers[0] << 16) | result.registers[1] - ) * CURRENT_QUANT + dec = BinaryPayloadDecoder.fromRegisters(result.registers, Endian.Big) + self._data.current = dec.decode_32bit_int() * CURRENT_QUANT self._data.current_integrated = ( - (result.registers[2] << 48) - | (result.registers[3] << 32) - | (result.registers[4] << 16) - | result.registers[5] - ) * CURRENT_QUANT + dec.decode_64bit_int() * CURRENT_QUANT * 0.05 / 3600 + ) self.dataUpdated.emit(self._data) @Slot(list)